Seite 1 von 2

Ex 11 - Task3

Verfasst: 25. Jan 2008 13:57
von dinkelaker
Hallo,

In Ex11 Task 3 steht bei einem der TODO Kommentare ein falscher Hinweis.
In Klasse RandomCompanyCollapse.actionPerformed() Zeile 43 soll nicht die ganze Klasse, sondern nur Zeile 43 entfernt werden.

Gruß, Tom

Re: Ex 11 - Task3

Verfasst: 25. Jan 2008 14:10
von ChNeumann
In der Aufgabenstellung steht was von "CompanyHierarchyBinding". Was soll das sein?

Re: Ex 11 - Task3

Verfasst: 26. Jan 2008 09:07
von dinkelaker
ChNeumann hat geschrieben:In der Aufgabenstellung steht was von "CompanyHierarchyBinding". Was soll das sein?
Da sollte CompanyHierarchyView stehen. Ich habe den Fehler im Aufgabenblatt behoben.

Re: Ex 11 - Task3

Verfasst: 26. Jan 2008 18:38
von karsten
Laut Aufgabenstellung sollen wir die Methoden in ICompanyObserver beachten. Collapse und Expand ist davon aber völlig unabhängig. Wieso soll also diese Zeile entfernt werden?


CompanyHierarchyView gibts auch nicht.

Re: Ex 11 - Task3

Verfasst: 27. Jan 2008 14:38
von tarnschaf
eben, außerdem soll laut Aufgabenstellung nur die Funktionen des Change Menüs betrachtet werden.

also ist das TODO in l. 43 irreführend und kann gelöscht werden?

Re: Ex 11 - Task3

Verfasst: 27. Jan 2008 21:01
von karsten
der vorgegebene Code aktualisiert die Anzeige im Übrigen nicht nach einem Collapse...

Re: Ex 11 - Task3

Verfasst: 28. Jan 2008 08:37
von dinkelaker
karsten hat geschrieben:Laut Aufgabenstellung sollen wir die Methoden in ICompanyObserver beachten. Collapse und Expand ist davon aber völlig unabhängig. Wieso soll also diese Zeile entfernt werden?
CompanyHierarchyView gibts auch nicht.
Du hast Recht - ich meine natürlich CompanyHierarchyDisplay! und die Subklasse CompanyCollapsedHierarchyDisplay (das sind auch die einzigen Klassen die ICompanyObserver implementieren.)
Sorry hatte den Quelltext nicht zuhause...

Die Zeile soll entfernt werden, da es sich um den Belang "Aktualisierung" handelt.
Die Aktualisierung ist nicht unabhängig von der Funktionalität "Collapse und Expand", denn es soll immer dann aktualisert werden, wenn sich was ändert.
karsten hat geschrieben:der vorgegebene Code aktualisiert die Anzeige im Übrigen nicht nach einem Collapse...
Auch nach einem Collapse sollte eigentlich aktualisiert werden.
tarnschaf hat geschrieben:also ist das TODO in l. 43 irreführend und kann gelöscht werden?
Das Todo bezieht in Zeile 43 bezieht sich nur darauf, dass die Zeile (nicht die Klasse) entfernt werden soll.
Die Zeile soll gelöscht werden, die Funktionalität der Aktualisierung des Displays wird aber vom Aspekt übernommen.
Warum vermutest Du, dass es gut ist wenn _hd.refresh() weiter in Zeile 43 stehen bleibt?

Gruß, Tom

Re: Ex 11 - Task3

Verfasst: 28. Jan 2008 13:04
von karsten
Edit: Denkfehler ;)

Re: Ex 11 - Task3

Verfasst: 28. Jan 2008 21:49
von wep
Muss man für aufgabe 3.2 wirklich für jede Sache ein neuen Advice machen? ich komm mit einem, der alle pointcuts beinhaltet dicke aus ;) Genauso die nächste Aufgabe 3.3.. ist doch fast immer der gleiche Pointcut... ist das wirklich so monoton oder hab ich da etwas falsch verstanden?

Re: Ex 11 - Task3

Verfasst: 29. Jan 2008 10:40
von Trigger
Ich habe ganz dreist nur einen Advice genommen. Es wird ja so und so der gleiche Code ausgeführt.

Re: Ex 11 - Task3

Verfasst: 29. Jan 2008 21:49
von ujs
Also ich muss ganz ehrlich sagen dass die Aufgabenstellung meiner Meinung nach schlampig gemacht wurde und mir nicht klar ist was wir eigentlich genau machen sollen. Von Rechtschreibfehlern und falschen Namen mal abgesehen:

Sollen wir das Observer-Pattern beibehalten, jedoch nun Aspekt-orientiert implementieren, oder geht es darum den Aspekt der Aktualisierung der Anzeige zu implementieren?

Das Aktualisieren der Anzeige hat erstmal nichts mit den in ICompanyObserver definierten Methoden zu tun. Alle Methoden dort beziehen sich auf Veränderung der Company-Klassen und können auch für andere Zwecke als die Aktualisierung des Displays verwendet werden.

Wie soll nun die Aktualisierung nach einem Collapse/Expand gemacht werden? Eine weitere Methode zu ICompanyObserver hinzuzufügen ist sicherlich keine gute Idee, da sich ein Objekt ändert das nichts mit dem Company-Modell zu tun hat.

In der Aufgabenstellung steht dass wir die Observer-Funktionalität (mehrere Observer) durch den Aspekt ersetzen sollen.

Heisst das nun dass das Interface ICompanyObserver nicht mehr benötigt wird und wir einfach nur das Display aktualisieren sollen?

Wenn ja, dann macht der Name CompanyObserverAspect keinen Sinn.
Und falls wir das doch so machen sollen, dann verwundert es nicht wenn einige einfach nur einen Pointcut gemacht haben, wo der zugehörige Advice ein einfaches Display-Update macht. Damit macht dann Aufgabe 3.3 auch keinen Sinn.

Das hat dann allerdings rein gar nichts mehr mit dem Observer-Pattern zu tun, da man einfach nur alle Methoden benannt hat die eine Display-Aktualisierung verlangen, die eigentlichen "Observer" bekommen von der konkreten Änderung aber gar nichts mit.


Und es ist wirklich ein "Bug" im Quellcode, so dass bei einem Collapse kein Update gemacht wird:

Code: Alles auswählen

public void actionPerformed(ActionEvent e) {

	String actionCmd = e.getActionCommand();
	if (actionCmd.equals("Collapse Employee")) {
		collapseRandom();
	}
	else if (actionCmd.equals("Expand Employee")) {
		expandRandom();
		_hd.refresh(); /** TODO remove this class. */
	}
}
Uwe

Re: Ex 11 - Task3

Verfasst: 30. Jan 2008 10:54
von ChNeumann
Wir haben jetzt fuer collapse/expand das Interface nicht erweitert, sondern den Bug im Code behoben und somit auch den TODO-Kommentar ignoriert. Anders wussten wir uns nicht zu helfen.

Das bloede ist, dass wir heute keine Zeit mehr haben, daran weiterzumachen, und daher auf die Gnade von Tom angewiesen sind.

Re: Ex 11 - Task3

Verfasst: 30. Jan 2008 13:10
von Trigger
Wo genau ist das Problem?
Im Aspekt lässt sich das doch gut abfangen:

Code: Alles auswählen

... (call(void ICollapsedCompositeNode.collapse()) || call(void ICollapsedCompositeNode.expand()))

Re: Ex 11 - Task3

Verfasst: 30. Jan 2008 14:33
von ChNeumann
Das Problem kommt genau danach.
Worauf fuehrst du refresh() aus, wenn das Observer-Interface die Methode nicht enthaelt und du damit refresh() nicht auf den Observern aufrufen kannst?

Re: Ex 11 - Task3

Verfasst: 30. Jan 2008 15:44
von Evgeni
ChNeumann hat geschrieben:Das Problem kommt genau danach.
Worauf fuehrst du refresh() aus, wenn das Observer-Interface die Methode nicht enthaelt und du damit refresh() nicht auf den Observern aufrufen kannst?
Wir casten es zu Node und dann in unserem aspect, dass wir als "priveleged aspect" deklarieren, greifen wir auf node.hierarchieDisplay zu und dann node.hierarchieDisplay.refresh() aufrufen, wobei node ein Objekt vom Type Node ist.
"priveleged aspect" erlaubt Zugriff auf ALLE private und protected Variablen.