Übung 4 Halstead

Benutzeravatar
s!mon
Computerversteher
Computerversteher
Beiträge: 373
Registriert: 20. Okt 2007 18:24
Wohnort: Höchst i. Odw

Übung 4 Halstead

Beitrag von s!mon » 3. Jun 2011 14:05

Hallihallo,

wir haben ein paar Fragen bezüglich Operatoren und Operanden bei objektorientierter Programmierung (das war ja in dem Beispiel nicht drin):

1. Ist "." ein Operator? Also hat man bei dfs.traverse(obj) zwei Operatoren ("." und den Methodenaufruf traverse)? In dem Falle müsste ja eigentlich traverse sowohl Operator als auch Operand sein. "." würde das Objekt mit der Methode verbinden und mit dem Objekt und der Methode als Operand und dann der eigentliche Methodenaufruf als Operator mit obj als Operand. Oder ist dfs.traverse ein einzelner Operator mit obj als Operanden? Oder hat man nur einen Operator (traverse) und zwei Operanden (dfs und obj).

2. Bei dem Ausdruck "new Klassenname(obj)" ist Klassenname ja ein Methodenaufruf. Hat man hier zwei Operatoren (new und Klassenname)? Hat man hier nur den Operator new und der bekommt als Operand Klassenname und das obj? Oder hat man den Operator new und den Operand obj?

3. Bei dem Ausdruck "obj.methode1(obj2).methode2" - Sind das zwei Operatoren (methode1, methode2) und Operand sind obj und obj2? Die Frage bezieht sich eigentlich auf die obigen Punkte.

Ciao, Simon.

MuldeR
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 131
Registriert: 18. Okt 2005 16:14
Wohnort: (d)armstadt
Kontaktdaten:

Re: Übung 4 Halstead

Beitrag von MuldeR » 3. Jun 2011 16:58

Das hab ich mich bei der Aufgabe auch gefragt!

Ich würde sagen, es gibt keinen "." Operator. Und das Objekt, an dem man die Methode aufruft, ist dann einfach implizit ein Operand des Methoden-Aufrufs.

Also könnte man den Ausdruck "List vertices = dfs.traverse(startat)" wie "List vertices = traverse(dfs, startat)" behandeln.

Bei "new" hab ich mich gefragt, ob das ein Operator ist und, wenn ja, was dann dort genau die Operanden sein sollen.

Also einen Zuweisungs-Operator hat man ja auf jeden Fall bei "Foo x = new Foo()", aber ist dann "new Foo()" der Operand? Oder ist 'new' ein weiterer Operator und die Klasse "Foo" dessen Operand?

Eigentlich sollen Typenbezeichner ja außen vor bleiben, laut Aufgabenstellung. Treten sie bei "new" dann doch als Operanden auf oder ist der Konstruktor selbst nochmal ein Operator ???

(Das wären dann also insgesamt bis zu drei Operatoren: Die Zuweisung, der new Operator und der Konstruktor)

Wäre nett, wenn das noch geklärt werden könnte :-)

Benutzeravatar
saller
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 161
Registriert: 12. Okt 2007 15:14
Wohnort: Darmstadt
Kontaktdaten:

Re: Übung 4 Halstead

Beitrag von saller » 6. Jun 2011 00:18

Ich würde sagen, es gibt keinen "." Operator. Und das Objekt, an dem man die Methode aufruft, ist dann einfach implizit ein Operand des Methoden-Aufrufs.
Damit hat Mulder vollkommen recht
(Das wären dann also insgesamt bis zu drei Operatoren: Die Zuweisung, der new Operator und der Konstruktor)
Hier schlägt das Problem aller Metriken wieder zu: Die Einheitliche Verwendung.
In der Literatur gilt eine Zuweisung '=' im Allgemeinen als Operator, hingegen 'new' nur ab und zu als Operator. Konstruktoren entsprechen Methodenaufrufen und sind somit keine Operanden.
3. Bei dem Ausdruck "obj.methode1(obj2).methode2" - Sind das zwei Operatoren (methode1, methode2) und Operand sind obj und obj2? Die Frage bezieht sich eigentlich auf die obigen Punkte.
Deine Vermutung ist Korrekt: (methode1, methode2) sind Operatoren und (obj und obj2) sind Operanden

Bei dem Übungsblatt 4 gibt es nicht die Musterlösung. Solange ihr euren Lösungsweg klar und nachvollziehbar dokumentiert, bekommt ihr die entsprechenden 'Punkte'. Sprch im Idealfall zeigt ihr in einer Tabelle o.ä. an was bei euch Operator, was Operand ist.

Gruß
Karsten

Benutzeravatar
infinity_dev
Mausschubser
Mausschubser
Beiträge: 44
Registriert: 16. Okt 2006 01:32

Re: Übung 4 Halstead

Beitrag von infinity_dev » 22. Jul 2011 17:26

Im Lösungsvorschlag zur 1a) gibt es 2 Fehler. In der Live Variables Tabelle zur 1a) ist für Zeile 8 die Variable vertices zu viel. Interessanterweise stimmt die Anzahl der Live Variables aber. Allerdings wurde der Wert 5,04 offenbar mit der Anzahl 8 für die Zeile berechnet, denn korrekt wäre exakt 5. Multipler Copy&Paste Fehler? :)

Wie sieht es eigentlich mit Leerzeilen und Zeilen aus, die nur schließende Klammern von if/while/etc Blöcken, also keine Anweisungen enthalten? Muss man die immer mitzählen oder kann man sie auch weglassen, hauptsache man macht es einheitlich?

Bei der b) wurde die Aufgabenstellung nicht berücksicht, nach der nur die Spanne für die ersten 5 Variablen berechnet werden sollte. Das müsste korrekt heißen: [startat(2+17)+visited(20)+visitor(20)+dag(1+6)+dfs(1)]/7 ≈ 9,5715

Bei der c) wurden if und while nicht als Operatoren gewertet, was laut Vorlesungsfolien ja auch Vereinbarungssache ist. In den Folien zur Übung 6 steht aber, dass im Prinzip alle Java-Keywords Operatoren sind. Wenn man also new und return als Operatoren zählt, wie im Lösungsvorschlag, sollte man imho konsequent sein und entweder alle Keywords zählen oder gar keine. Wird das in der Klausur nicht so eng gesehen, oder müssen wir uns an eine der Varianten halten?

Sollten wir die Formeln der Halstead-Metriken (also die mit den Logarithmen) auswendig kennen oder werden die ggf. in der Klausur angegeben?

s_n
Windoof-User
Windoof-User
Beiträge: 37
Registriert: 24. Aug 2009 16:43
Wohnort: Darmstadt
Kontaktdaten:

Re: Übung 4 Halstead

Beitrag von s_n » 22. Jul 2011 18:36

Sollten wir die Formeln der Halstead-Metriken (also die mit den Logarithmen) auswendig kennen oder werden die ggf. in der Klausur angegeben?
Ich nehme man nicht an, dass wir n*log(n) im Kopf rechnen müssen...

banshee
Nerd
Nerd
Beiträge: 684
Registriert: 22. Okt 2006 18:46

Re: Übung 4 Halstead

Beitrag von banshee » 23. Jul 2011 22:39

Für n = 8 wäre das ziemlich machbar ;)

Benutzeravatar
saller
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 161
Registriert: 12. Okt 2007 15:14
Wohnort: Darmstadt
Kontaktdaten:

Re: Übung 4 Halstead

Beitrag von saller » 24. Jul 2011 21:29

Sollten wir die Formeln der Halstead-Metriken (also die mit den Logarithmen) auswendig kennen oder werden die ggf. in der Klausur angegeben?
Formeln würden wir euch nicht vorgeben - aber ggf. eine Tabelle mit Logarithmenwerten. Da Taschenrechner nicht erlaubt sind, würden nur Werte vorkommen, mit denen jeder schnell im Kopf rechnen kann.

Antworten

Zurück zu „Archiv“