ex11

Toobee
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 225
Registriert: 7. Apr 2011 12:58

ex11

Beitrag von Toobee » 6. Jul 2011 19:11

Hi,

bei Aufgabe 1.1

Der Begriff "Basis Applikation" wurde so gar nicht in der Vorlesung benutzt, ich find weder in den Folien etwas noch über google?
P.S.: Die Anmerkung scheint nicht neu zu sein: http://www.fachschaft.informatik.tu-dar ... 08&t=11267
:roll:

bei Aufgabe 1.2.2

"in der jede Company Klasse"

damit ist jede Klasse in dem package gemeint, oder? Also das ICompanyObservable von Employee, Company, Department, Database implementiert wird?
Oder bezieht sich das nur auf die Klasse Company? Das "jede Company Klasse" irritiert mich grade etwas.


Aufgabe 1.2.3
Was würde passieren, wenn ein neuer Typ im Company-Modell hinzugefügt werden würde? Wie wirkt
sich das auf die Schnittstelle ICompanyObserver aus?

Baut im Grunde auf vorheriger Aussage auf. Der neue Typ soll dann auch beobachten können oder wieso ist die Aufgabe in zwei Teilfragen aufgeteilt? Die erste Frage bezieht sich auf die zweite, oder?


Aufgabe 2.3
Reicht es, wenn die Methode im aspect behandelt wird, die beide parameter setzt oder sollen wir die einzelaufrufe von setFirstName()/setLastName() auch noch zusätzlich abfangen?

Aufgabe 2.4
Darf man für die Aufgabe ein neues Interface definieren oder muss man den Customer nur durch verändern des Pointcut da rein bringen?

kde
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 123
Registriert: 19. Dez 2006 10:29
Kontaktdaten:

Re: ex11

Beitrag von kde » 7. Jul 2011 10:57

bei Aufgabe 1.1

Der Begriff "Basis Applikation" wurde so gar nicht in der Vorlesung benutzt, ich find weder in den Folien etwas noch über google?
P.S.: Die Anmerkung scheint nicht neu zu sein: http://www.fachschaft.informatik.tu-dar ... 08&t=11267
:roll:
Überleg dir einfach was eine Basis-Applikation sein könnte. Viele Möglichkeiten gibt es nicht.
bei Aufgabe 1.2.2

"in der jede Company Klasse"

damit ist jede Klasse in dem package gemeint, oder? Also das ICompanyObservable von Employee, Company, Department, Database implementiert wird?
Oder bezieht sich das nur auf die Klasse Company? Das "jede Company Klasse" irritiert mich grade etwas.
Jede Model-Klasse im company-Package.
Aufgabe 1.2.3
Was würde passieren, wenn ein neuer Typ im Company-Modell hinzugefügt werden würde? Wie wirkt
sich das auf die Schnittstelle ICompanyObserver aus?

Baut im Grunde auf vorheriger Aussage auf. Der neue Typ soll dann auch beobachten können oder wieso ist die Aufgabe in zwei Teilfragen aufgeteilt? Die erste Frage bezieht sich auf die zweite, oder?
Ja, du kannst mit der Begründung für 1.2.3 auch schon in 1.2.2 argumentieren.
Aufgabe 2.3
Reicht es, wenn die Methode im aspect behandelt wird, die beide parameter setzt oder sollen wir die einzelaufrufe von setFirstName()/setLastName() auch noch zusätzlich abfangen?
"Design a pointcut that selects renaming join points (the logging should happen only once)"
Also alle Aufrufe, aber insgesamt nur einmal loggen.
Aufgabe 2.4
Darf man für die Aufgabe ein neues Interface definieren oder muss man den Customer nur durch verändern des Pointcut da rein bringen?
Grundsätzlich ist alles erlaubt, so lange nur der Aspekt geändert wird.
Tutor in SE: Design (& Construction) SS 2011

tgp
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 268
Registriert: 15. Nov 2006 21:41

Re: ex11

Beitrag von tgp » 7. Jul 2011 12:21

Was hat eigentlich die Zeile 30 in adapter.collapsed.CompanyCollapsedNode zu bedeuten?
//collapseChildren(); /** @todo Uncommend for Ex05, Task 2.3 */
Können wir die ignorieren, oder soll da doch wirksamer Code stehen?

EDIT: ebenso Zeile 16 in hierarchydisplay.collapsed.ICollapsedCompositeNode:
/** @todo 2)b) Implement these methods to propagate collapses/expands to children. */

tgp
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 268
Registriert: 15. Nov 2006 21:41

Re: ex11

Beitrag von tgp » 7. Jul 2011 14:02

Nochwas komisches: Was soll das
/** TODO remove this line. */
in Zeile 43 von gui.RandomCompanyCollapse? Es geht in der Zeile obendrüber um den refresh des HierarchyDisplay, ok. Dieser wird aber nicht durch Observer o.ä. ausgelöst, hat also eigentlich nichts mit der Aufgabenstellung zu tun, wie sie in den Folien oder dem Aufgaben-PDF gestellt ist. Trotzdem können wir das nicht ohne weiteres ignorieren, da es ja dort heißt
Hinweis: Der Belang der Aktualisierung wurde vollständig ersetzt, wenn Sie alle Programmteile die mit
„/** TODO Remove…*/“ markiert sind entfernt haben.
Ist das einfach ein Relikt aus einer älteren, erweiterten Aufgabe, können wir das ToDo also einfach ignorieren?


EDIT, damit nicht noch ein dritter Mängel-Beitrag von mir hintereinander erscheint:

Im gegebenen Projekt werden vom Interface companyobserver.ICompanyObserver nur die Methoden employeeNameChanged(Employee) und departmentWorkersChanged(Department) benutzt (und das Interface companyobserver.ICompanyObservable gar nicht). Auf Basis der Implementierungen in company.Employee kann ich nun zwei Pointcut-Advice-Paare erstellen, bei den anderen Methoden gibt es keine Implementierung, gegen die gematcht werden könnte – was sollen wir da machen? Raten?

PS: Auch wenn es die letzte Übung ist und die Evaluation rum ist ;), sollten Aufgabenstellungen lösbar sein...

Benutzeravatar
Tim86
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 120
Registriert: 29. Sep 2006 00:01
Wohnort: Modautal

Re: ex11

Beitrag von Tim86 » 7. Jul 2011 14:34

tgp hat geschrieben: Im gegebenen Projekt werden vom Interface companyobserver.ICompanyObserver nur die Methoden employeeNameChanged(Employee) und departmentWorkersChanged(Department) benutzt (und das Interface companyobserver.ICompanyObservable gar nicht). Auf Basis der Implementierungen in company.Employee kann ich nun zwei Pointcut-Advice-Paare erstellen, bei den anderen Methoden gibt es keine Implementierung, gegen die gematcht werden könnte – was sollen wir da machen? Raten?
Da haben wir uns in den company.* Klassen die Methoden rausgesucht und die Pointcut-Advice-Paare dagegen geschrieben - also die "fehlende" Funktionalität hinzugefügt.

Aber eigentlich ist's ja auch nur geraten und ohne Kenntnis ob wir wirklich alle Methoden erwischt haben...

Napfton
Windoof-User
Windoof-User
Beiträge: 24
Registriert: 5. Apr 2011 10:21

Re: ex11

Beitrag von Napfton » 8. Jul 2011 10:18

kde hat geschrieben:
Aufgabe 2.3
Reicht es, wenn die Methode im aspect behandelt wird, die beide parameter setzt oder sollen wir die einzelaufrufe von setFirstName()/setLastName() auch noch zusätzlich abfangen?
"Design a pointcut that selects renaming join points (the logging should happen only once)"
Also alle Aufrufe, aber insgesamt nur einmal loggen.
Hm das gibt die Aufgabenstellung nicht her, dort soll die Umbennung von Mitarbeitern erfasst werden. Sprich Vorname und Nachname zugleich, warum sollte man dann nochmal die Einzelaufrufe erfassen? Das macht das ganze doch nur unnötig kompliziert...

Noch ne andere Frage: Ich habe eben nur einen Aspekt hinzugefügt und jetzt freezt die Anwendung nachdem das Main Window gezeichnet wurde. Ich bekomme das Ding jetzt nichtmehr ans laufen gibts da irgendwelche Hints was passiert sein könnte?

Benutzeravatar
MisterD123
Geek
Geek
Beiträge: 811
Registriert: 31. Okt 2006 20:04
Wohnort: Weiterstadt

Re: ex11

Beitrag von MisterD123 » 8. Jul 2011 13:22

Vorname umstellen soll geloggt werden, nachname umstellen soll geloggt werden, beides gleichzeitig umbenennen soll geloggt werden. Aber bei beides gleichzeitig soll nicht "x y umbenannt in a b, x y vorname umbenannt in a, x y nachname umbenannt in b" im output stehen (und das soll nicht gelöst werden indem man setName umschreibt sodass setFirstName und setLastName nicht mehr benutzt werden ;P )

starts mal im debug-modus und drück dann im debug-view auf allen laufenden threads einmal auf "pause", dann kannst du sehen wo welcher thread grade hängt. Wenn dein programm 100% cpu zieht hast du vermutlich irgendwo ne endlos-while-schleife gebaut, dann solltest du da sehen dass der code grade in der while-schleife drin hängt (ggf musst du ein bisschen von hand steppen)

Toobee
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 225
Registriert: 7. Apr 2011 12:58

Re: ex11

Beitrag von Toobee » 9. Jul 2011 00:23

Hi,

wenn ich auf den Vor- und Nachnamen einzeln reagieren soll, muss ich aber von der Formatvorgabe: "Ms. Mary M. renamed to Jessica H." abweichen, da ich Vor- und Nachnamen nicht einzeln ermitteln kann.

Wenn nur der Vorname geändert wird könnte ich sowas ausgeben wie "Ms. Mary M. changed the first nam to .....". ist das ok, oder gibt es einen Weg die erstgenannte Ausgabe über Aspekte zu erreichen ohne die eigentliche Klasse zu ändern? (ich würde sagen nein...)

Benutzeravatar
MisterD123
Geek
Geek
Beiträge: 811
Registriert: 31. Okt 2006 20:04
Wohnort: Weiterstadt

Re: ex11

Beitrag von MisterD123 » 9. Jul 2011 00:54

das genaue ausgabeformat ist denke ich nicht das wichtige. Du kannst denk ich auch hinschreiben "X Y changed her first name and is now called Z Y", das wichtige hier ist dass ihr seht was aspectj kann ;)

CallForSanity
Windoof-User
Windoof-User
Beiträge: 27
Registriert: 17. Okt 2007 20:45

Re: ex11

Beitrag von CallForSanity » 9. Jul 2011 19:34

Die Unternehmenssoftware wurde übrigens schon in einigen Unternehmen sehr gelobt.

So ist es auch möglich männliche Mitarbeiter zu weiblichen zu machen und umgekehrt,
probiert es aus.
Mr. Paul P. renamed to Mr. Jessica C.
Ms. Emily B. renamed to Ms. Paul J.

Das ist erstens eine gute Möglichkeit die Frauenquote zu erhöhen,
zweitens konnten damit sexuelle Belästigungen deutlich reduziert werden.

Da die Umbenennung auf Zufallsbasis geschieht,
wurde auch die Mobbing-Bilanz deutlich reduziert.
Namen wie "Hans Klohocker" oder "Michael Michael" werden
vom System nach einer gewissen Zeit automatisch angepasst.

Einziger Nachteil:
Angeblich sollen einige Mitarbeiter in tiefe Identitätskrisen gefallen sein,
dass ist aber nur ein Gerücht.

marcel_b
Nerd
Nerd
Beiträge: 600
Registriert: 31. Okt 2006 17:04
Kontaktdaten:

Re: ex11

Beitrag von marcel_b » 10. Jul 2011 15:47

LOL

k_planz
Erstie
Erstie
Beiträge: 14
Registriert: 7. Okt 2009 12:46

Re: ex11

Beitrag von k_planz » 11. Jul 2011 16:10

Eine Frage hab ich auch noch zur 3.2

Wir haben diese Aufgabe zuerst versucht mit pertarget zu lösen, also einen Aspekt pro Observer zu erstellen. Erstellt wird auch pro Observer ein Aspekt, in dem auch der Observer als Variable gespeichert wird. Allerdings wird er so wie es aussieht direkt danach wieder verworfen, da die advices in dem Aspekten danach nicht reagieren, wenn ihre Pointcuts (die anderweitig schon getestet wurden) ausgelöst werden.

Hat jemand das vielleicht so ähnlich versucht und eine Lösung dafür gefunden?

kde
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 123
Registriert: 19. Dez 2006 10:29
Kontaktdaten:

Re: ex11

Beitrag von kde » 11. Jul 2011 17:43

Wenn ich nicht ganz falsch liege, dürfte folgendes gelten:
Wenn ihr einen Aspekt mit pertarget oder perthis bindet, könnt ihr innerhalb des Aspektes nur auf Join-Points des gebundenen Objektes zugreifen.
Wenn ihr also den Aspekt an ICompanyObserver bindet, könnt ihr z. B. nicht auf Join-Points von Employee zugreifen.
Tutor in SE: Design (& Construction) SS 2011

PaddyG
Mausschubser
Mausschubser
Beiträge: 50
Registriert: 9. Okt 2009 10:29

Re: ex11

Beitrag von PaddyG » 12. Jul 2011 13:56

EDIT: <LegacyStyledElement>

Hallo,

wir hängen auch an der dritten Aufgabe:

1. In der Observerlist befindet sich bei der Ausführung konsequent nur ein Observer, nämlich CompanyCollapsedHierarchyDisplay, CompanyHierarchyDisplay wird als Observer gar nicht benutzt. Das hd.refresh() in der (namentlich passenden) Klasse RandomCompanyCollapse wird aber in der Vorlage gar nicht mittels Observer realisiert. (Das wurde schon weiter oben angesprochen, aber nicht beantwortet)

2. Wenn wir die ObserverList entfernen, wie genau soll sich denn die Funktionalität in den Aspekt verschieben (siehe TODO in der Klasse)? Woher kann der Aspekt wissen, wieviele Observer es im System gibt, ohne die Basis-Applikation zu verändern? (Möglicherweise hab ich da nen Brett vorm Kopf :roll: ).

3. "Für die Lösung genügt es, dass der Aspekt nur das Display zeichnen lässt,...", das würde wiederrum bedeuten, dass wir den Aufruf gar nicht an den / die Observer weiter melden (siehe 3 Zeilen darüber), sondern direkt das Display über HierarchyDisplay.refresh() updaten, allerdings verstehe ich ums verrecken nicht, wie ich vom Aspekt aus darauf zugreifen soll, refresh() ist zwar public, das _hd aus RandomCompanyChange aber nicht. (Die Klasse beeinhaltet die actionPerformed(e) Methode bzw. deren Einzelfälle (sehr OCP btw :wink: ), weshalb sie für mich für die Pointcuts in Frage kam. Die Klassen im company Package haben ja gar keine Referenz auf die Oberfläche.)

4. Bei 3.2 stellt sich mir die Frage, warum wir eigentlich für jede Methode einen Pointcut bzw. Advice erstellen sollen, wenn jeder Advice (zumindest anhand der Implementierung von ICompanyObserver in CompanyHierarchyDisplay und CompanyCollapsedHierarchyDisplay) eigtl. das gleiche macht und nach 3.1 ("...wenn eine Option aus dem „Change“ Menü aufgerufen wird") eine Unterscheidung eh überflüssig ist. (Davon mal abgesehen, dass wir bzgl. der fehlenden Funktionen wie oben erwähnt einfach nur raten können, aber über fehlenden Code kann man ja hinwegsehen ;))

Achso, es wär total cool, Design zuerst zu erklären (Aufgabe 3), bevor man es kritisieren soll (Aufgabe 1.2).
Aber als aufmerksamer Student liest man sich natürlich zuerst die gesamte Übung durch, bevor man anfängt zu arbeiten ;)

Irgendwie wars ja schon geschickt, so ne Übung nach der Evaluation rauszuhauen :mrgreen:
Vielleicht hab ich aber auch irgendwas total übersehen, dann entschuldige ich mich schonmal im vorhinein für die obigen Zeilen, aber im Moment bin ich am fluchen, und scheinbar nicht der Einzige :|

EDIT: </LegayStyledElement>
Zuletzt geändert von PaddyG am 12. Jul 2011 16:00, insgesamt 1-mal geändert.

Michael Z
Erstie
Erstie
Beiträge: 12
Registriert: 18. Apr 2011 13:53

Re: ex11

Beitrag von Michael Z » 12. Jul 2011 15:39

Hallo,

die dritte Aufgabe ist irgendwie sehr unklar gestellt.

Das unpraktische Observer-Interface soll anscheinend beibehalten werden, das vorher schon nicht verwendete Observable Interface soll rausfliegen. Aber wir werden bei der Lösung wahrscheinlich per AspectJ die 'company.*' Klassen ein interface implementieren lassen müssen? Das dann wieder genauso heißt, aber ein paar sinnfreie Methoden weniger hat als das eben entfernte?

Und das hd.refresh() aus 'RandomCompanyCollapse' soll rausfliegen, aber es gibt kein sinnvolles Observer Interface, das man verwenden könnte?

Dann die Initialisierung der Observer, da sollen die zwei Zeilen mit ObserverableList rausfliegen, aber es soll immernoch so seltsam statisch und nicht pro Objekt konfiguriert werden? Der gleiche Code nur anders? Oder die doch die Company Klassen ein Interface Implementieren lassen und über das registrieren dann die statische Liste füllen (sehr ungewöhnliche Semantik)? Oder soll es überhaupt keine Observer geben, wie "Für die Lösung genügt es, dass der Aspekt nur das Display zeichnen lässt" suggerieren würde, aber "Beachten Sie, dass es mehrere Observer geben kann." das genaue Gegenteil aussagt?

Ein paar Erläuterungen was eigtl. gewünscht wird wäre praktisch.

Antworten

Zurück zu „Archiv“