GRASP

b00m3r
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 182
Registriert: 10. Okt 2005 11:02

GRASP

Beitrag von b00m3r »

Hallo zusammen,
mal angenommen wir bekommen einen Code von einer Funktion indem wir checken müssen ob Controller, Information Expert oder Creater zur Anwendung kamen. Wie geht ihr da systematisch vor, bzw. wie sollte man systematisch vorgehen.

1. Schritt wäre nun ich checke ob Information Expert vorliegt-> exisitiert Funktionsaufruf einer anderen Klasse, die über die nötigen Infos verfügt. Heißt im Übungsbeispiel war das hinzufügen einer Karteikarte in eine Flashcardseries ja in gleichnamiger Klasse implementiert und wurde in der Flashcardwindow aufgerufen. Das ist somit ein Zeichen das IE vorliegt.

2. Schritt Creator: Da orientiere ich mich an den 3 Punkten aus den Folien. Aggregates, contains, records... Jedoch ist das meiner Meinung nach nicht sehr einfach.
Nach meinem Verständnis ist ein Creator die Klasse, die eine neue Instanz eines Objektes anlegt. Im Übungsbeispiel findet im Code ja eine neue Instanzierung einer Flashcard statt. Mir ist die logische Begründung, warum hier kein Creator vorliegt noch nicht ganz sinnig. Sollte man sich da an einem Use Case orientieren? Heißt wie in den Folien GrandTotal berechnen. Dort stellt Sale den Creator dar, da mit dieser Instanz auf SalesLineItem und Productdescription zugegriffen werden kann?

3. Controller: kontrolliert Systemoperationen oder hat die Verantwortlichkeit für die Bearbeitung

Ich tue mir schwer, da in der Vorlesung von Klassen die Rede war und nun sollen wir schauen ob einzelne Funktionen die Kriterien erfüllen.
Oder sollte man sich im klaren darüber werden welche Klasse, welche Rolle übernimmt um dies auf die Funktion zu übertragen

Vielleicht kann mir da jemand helfen, mir fehlt es an der generellen Strategie :)

Benutzeravatar
hymGo
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 209
Registriert: 4. Okt 2009 23:17

Re: GRASP

Beitrag von hymGo »

Also ich hätte da auch gerne eine bessere Vorgehensweise.
Vor allem Übung 8 Aufgabe 1a) ist mir nicht wirklich klar. Da soll man, wie b00m3r es schon schreibt ,die Funktionen mittels Grasp bewerten (oder sind es doch die Funktionen + deren Klasse?). In dieser Aufgabe sind für mich der Information Expert und Creator besonders schwierig zu bestimmen.

In den Folien steht folgendes zum Information Expert: "Assign a responsibility to an information expert, i.e. to a class that has the information needed to fulfill that resposibility"
Nun trifft der Information Expert bei "Erstellen einer Flashcard" zu und bei "Die nächste Flashcard während dem Lernen auswählen" nicht. Ich frage mich wieso es beim Auswählen der nächsten Flashcard nicht zutrifft. Das Auswählen der nächsten Flashcard geschieht im LeranDialog, dieser holt sich vom FlashcardWindow die Serie und greift dann über den Index (den die Klasse selber mit zählt) auf de nächste Karte zu. Es sind also die Informationen zum Holen der Flashcardserie und zum Erfüllen der Aufgabe vorhanden, und somit müsste Information Expert zutreffen, oder doch nicht?
Irgendwie finde ich das der Information Expert laut der obigen Definition fast immer zutrifft (außer die Informationen werden wirklich nur im Funktionsaufruf mit übergeben), denn wenn eine Klasse bzw. Funktion für etwas verantwortlich ist/etwas erledigen soll bekommt sie ja meistens auch die benötigten Informationen irgendwo her.

Beim Creator kann ich mich nur der vom b00m3r schon beschriebenen Sichtweise anschließen.

f_m
Windoof-User
Windoof-User
Beiträge: 25
Registriert: 21. Okt 2008 17:08

Re: GRASP

Beitrag von f_m »

Das Auswählen der nächsten Flashcard geschieht im LeranDialog, dieser holt sich vom FlashcardWindow die Serie und greift dann über den Index (den die Klasse selber mit zählt) auf de nächste Karte zu.
Hiermit gibst du die Antwort darauf, warum die Klasse kein Information Expert für die Verantwortlichkeit "Die nächste Flashcard während dem Lernen auswählen" ist eigentlich schon selbst. Um überhaupt auf die FlashcardSeries (-> benötigte Information: alle Karten) zugreifen zu können, muss der LearnDialog diese erst vom FlashcardsWindow holen. Der Index, welche die aktuelle Karte kennzeichnet, existiert nur in dieser Klasse, um diese Verantwortlichkeit zu erfüllen - eigentlich hätte diese Klasse auch diese Information nicht.

Benutzeravatar
JanM
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 157
Registriert: 24. Aug 2010 10:58

Re: GRASP

Beitrag von JanM »

Das Problem das ich mit dem Informationexpert habe, ist die folie 65 mit der zusammenfassung. irgendwie wird hier gesagt, dass es eigentlich nur semi-experten gibt, die die verantwortlichkeit zusammen erfüllen. Aber das ist doch meistens der fall, da irgendwelche verantwortlichkeiten meist mehrere Objekte betreffen. Falls dem nicht so ist, ist wahrscheinlich entweder die verantwortlichkeit ziemlich klein, dass sie in nur einer klasse geschieht, die die ganzen informationen hält oder ich komme wieder auf das god-class problem, dass ich eine klasse habe, die alles weiß und das will ich ja auch nicht.
daher versteh ich den punkt nicht so ganz, dass es "lightweight classes" erzeugt, wenn man dieses Prinzip anwendet, da man es ja nur teilweise anwendet, da es nur semi-experten gibt....

Streber
Mausschubser
Mausschubser
Beiträge: 92
Registriert: 4. Mai 2008 13:48

Re: GRASP

Beitrag von Streber »

Hi,

kann mir jemand das Beispiel im Skript erklären. :(
Foliensatz OO Design Folien 75-79

Danke :)

Benutzeravatar
hymGo
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 209
Registriert: 4. Okt 2009 23:17

Re: GRASP

Beitrag von hymGo »

Streber hat geschrieben:Hi,
kann mir jemand das Beispiel im Skript erklären. :(
Foliensatz OO Design Folien 75-79
Hier fragt man sich wer dafür verantwortlich sein soll ein neues Sale Objekt zu erstellen. Vorher wurden drei Punkte(aggregates, contains, records) eingeführt, von welchen schon einer den Ausschlag für einen Creator gibt. Nun werden alle drei Punkte für die Klasse Sale durchgegangen:
Zu Erst aggregates, aber hierfür findet sich keine Klasse. Dann contains, auch hier findet man keine Klasse die Sale "beinhaltet". Nun kommt records und man stellt fest, dass ein Register einen Sale aufzeichnet (records). Somit trifft dieser Punkt zu und Register ist für das Erstellen neuer Sale Objekte verantwortlich.
Auf Folie 79 wird dann noch gezeigt wie das "Einscannen/den Einkauf aufnehmen" abläuft: Register erstellt einen neuen Sale und dieser erstellt halt die jeweiligen SalesLineItems.

Sorry für den schlechten Deutsch-Englisch Mix ...

Streber
Mausschubser
Mausschubser
Beiträge: 92
Registriert: 4. Mai 2008 13:48

Re: GRASP

Beitrag von Streber »

Danke super erklärt...

Ich war verwirrt, wegen dieser Aussage:
From the contract: “... a Sale instance was created”.
Ich ging davon aus, es existiert schon eine Sale Instanz.

Records hier in dem Sinne: ich erstelle eine Instanz und behalte (speichere) es in meiner Klasse.?!

Danke vielmals

Benutzeravatar
Yip-Yip
Erstie
Erstie
Beiträge: 21
Registriert: 15. Mai 2010 14:16

Re: GRASP

Beitrag von Yip-Yip »

Hi,

also mir ist die Lösung zur GRASP Übung 1a) 2. Teil noch nicht ganz klar:

Aufgabe: Erstellen einer neuen Flashcard.

Creator: kam nicht zur Anwendung
--> in Ordnung, da keine Klasse existiert, die die Flashcard sammelt, aufnimmt oder enthält (aggregate, record, contain)

Controller: kam nicht zur Anwendung
--> Ebenfalls in Ordnung, da ja der LearnDialog quasi der Controller ist, aber nun mal eine UI-Klasse (verstehe hier aber trotzdem nicht warum eine UI Klasse kein Controller sein kann)

Information Expert:

(nochmal Definition dazu: "class that has the information needed to fulfill that responsibility")

hier wird jetzt die "FlashcardSeries" genannt.
Sie hat die Verantwortlichkeit (Responsibility), die hinzugefügte Karte zu speichern.
Was ist aber nun die Information, die die Klasse bereitstellt?
Die Liste selbst in die die Flashcard eingefügt wird?
Oder gilt allein schon eine Funktion wie *.add() als Information, die zum Erstellungsprozess der Karte benötigt wird?

________________________________________________________________________________________________________________
Die Tatsache das eben hier Series der InformationExpert ist, steht für mich im Widerspruch zur Lösung der Aufgabe 1b) 2. Teil

Aufgabe: Das automatische Generieren von Flashcards für das kleine Einmaleins, um nicht manuell 100 Flashcards erstellen zu müssen.

Hier wird bei InformationExpert geschrieben:

"Informationen für generierte Inhalte sollten in keine der bestehenden Klassen
Neue Klasse verwaltet Informationen, z.B. Wertebereich des Einmaleins"

Die Fragen und Antworten sind aber doch Daten die einer Flashcard zugewiesen werden. Diese erstellte Flashcard wird dann einer FlashcardSeries zugewiesen.
Warum sind dann Flashcard und FlashcardSeries hier keine Information Experts???

b00m3r
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 182
Registriert: 10. Okt 2005 11:02

Re: GRASP

Beitrag von b00m3r »

Controller: kam nicht zur Anwendung
--> Ebenfalls in Ordnung, da ja der LearnDialog quasi der Controller ist, aber nun mal eine UI-Klasse (verstehe hier aber trotzdem nicht warum eine UI Klasse kein Controller sein kann)
1. low Cohesion -> Du würdest Layout Elemente und Steuerungselemente in einer Klasse haben. Wartbarkeit und Anpassungsfähigkeit der Klasse gestaltet sich eher als suboptimal, d.h. falls du dein layout veränderst muss gewährleistet werden, dass diese Änderung keinen Einfluß auf die Steuerung hat.

Auf diese Problematik wird aber in den Folien hingewiesen.

Benutzeravatar
Yip-Yip
Erstie
Erstie
Beiträge: 21
Registriert: 15. Mai 2010 14:16

Re: GRASP

Beitrag von Yip-Yip »

Ja das ist klar.

Das ein GUI Element ein schlechter Controller ist, ist verständlich.
Erfüllt er jedoch die Aufgaben eines Controllers so ist es ja trotzdem einer.

Ich will hier jetzt aber wirklich nicht darauf herumreiten. Ich sehe es einfach als Definition an, dass GUI Elemente keine Controller sind.

Viel wichtiger wäre mir eben ein Erläuterung wann eine Klasse ein InformationExpert ist und wann nicht...

Firehouse
Mausschubser
Mausschubser
Beiträge: 84
Registriert: 15. Dez 2009 14:56

Re: GRASP

Beitrag von Firehouse »

was mich daran verwirrt ist eben das hier:
Yip-Yip hat geschrieben: Creator: kam nicht zur Anwendung
--> in Ordnung, da keine Klasse existiert, die die Flashcard sammelt, aufnimmt oder enthält (aggregate, record, contain)

[...]

Information Expert:

(nochmal Definition dazu: "class that has the information needed to fulfill that responsibility")

hier wird jetzt die "FlashcardSeries" genannt.
Sie hat die Verantwortlichkeit (Responsibility), die hinzugefügte Karte zu speichern.
Eigentlich sammelt FlashcardSeries doch die Flashcards. Müsste es hier dann nicht eher ein Creator sein?

Benutzeravatar
Yip-Yip
Erstie
Erstie
Beiträge: 21
Registriert: 15. Mai 2010 14:16

Re: GRASP

Beitrag von Yip-Yip »

OK,

das stimmte natürlich, jedoch kann die Series, die ja Flashcards ansammelt, keine Instanzen von Flashcard erstellen.

--> somit keine Creator (denke ich)

Firehouse
Mausschubser
Mausschubser
Beiträge: 84
Registriert: 15. Dez 2009 14:56

Re: GRASP

Beitrag von Firehouse »

und wieso kann sie keine Instanzen von Flashcard erstellen? Blicke gerade nicht so durch..

Benutzeravatar
Yip-Yip
Erstie
Erstie
Beiträge: 21
Registriert: 15. Mai 2010 14:16

Re: GRASP

Beitrag von Yip-Yip »

naja..

Series implementiert halt einfach keine Create-Methode, sondern die Karte wird in der Klasse FlashcardsWindow mit der Methode

Code: Alles auswählen

	
protected void createFlashcard() {
	Flashcard card = new Flashcard();
	if (flashcardEditor.edit(card))
		series.addCard(card);
}
erstellt. Wie man hier sieht gibt es keinen Creator, da die Flashcard quasi vom FlashcardsWindow erstellt wird, dieses aber nicht die Verantwortlichkeiten "contain, aggregate, record" gegenüber Flashcard hat.

Streber
Mausschubser
Mausschubser
Beiträge: 92
Registriert: 4. Mai 2008 13:48

Re: GRASP

Beitrag von Streber »

Yip-Yip hat geschrieben:Wie man hier sieht gibt es keinen Creator, da die Flashcard quasi vom FlashcardsWindow erstellt wird, dieses aber nicht die Verantwortlichkeiten "contain, aggregate, record" gegenüber Flashcard hat.
Aber die Flashcard wird doch in Flashcardseries series gespeichert
Yip-Yip hat geschrieben:series.addCard(card);

und series in Flashcardwindow...
Aus Transitivitätsgründen hätte ich gesagt "records" trifft zu?

Es wäre super, wenn ein Moderator paar genau Sätze zu GRASP schreiben würde, da es im Interesse mehrerer Teilnehmer sind, würde ich sagen :) :oops:

Antworten

Zurück zu „Archiv“