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.
Übung 4 Halstead
-
- BASIC-Programmierer
- Beiträge: 131
- Registriert: 18. Okt 2005 16:14
- Wohnort: (d)armstadt
- Kontaktdaten:
Re: Übung 4 Halstead
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
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

- saller
- Endlosschleifenbastler
- Beiträge: 161
- Registriert: 12. Okt 2007 15:14
- Wohnort: Darmstadt
- Kontaktdaten:
Re: Übung 4 Halstead
Damit hat Mulder vollkommen rechtIch 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.
Hier schlägt das Problem aller Metriken wieder zu: Die Einheitliche Verwendung.(Das wären dann also insgesamt bis zu drei Operatoren: Die Zuweisung, der new Operator und der Konstruktor)
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.
Deine Vermutung ist Korrekt: (methode1, methode2) sind Operatoren und (obj und obj2) sind Operanden3. 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.
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
- infinity_dev
- Mausschubser
- Beiträge: 44
- Registriert: 16. Okt 2006 01:32
Re: Übung 4 Halstead
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?

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?
Re: Übung 4 Halstead
Ich nehme man nicht an, dass wir n*log(n) im Kopf rechnen müssen...Sollten wir die Formeln der Halstead-Metriken (also die mit den Logarithmen) auswendig kennen oder werden die ggf. in der Klausur angegeben?
Re: Übung 4 Halstead
Für n = 8 wäre das ziemlich machbar 

- saller
- Endlosschleifenbastler
- Beiträge: 161
- Registriert: 12. Okt 2007 15:14
- Wohnort: Darmstadt
- Kontaktdaten:
Re: Übung 4 Halstead
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.Sollten wir die Formeln der Halstead-Metriken (also die mit den Logarithmen) auswendig kennen oder werden die ggf. in der Klausur angegeben?