WikiDer > GREIFEN

GRASP

GRIFF ist ein Engländer Akronym das steht für Softwaremuster/Prinzipien für die allgemeine Verantwortungszuweisung. Es besteht aus 9 Direktiven, mit denen Klassen oder Objekten in objektorientierten Systemen Zuständigkeiten zugewiesen werden können. Jede Leitlinie behandelt eine Kombination aus einem gemeinsamen Problem und einer allgemein anwendbaren Lösung für dieses Problem im Zusammenhang mit der Gestaltung von Softwaresystemen.

Für den letzten Brief von Akronym GRASP verwendet sowohl Muster als auch Prinzipien. Die Bezeichnung „Leitlinie“ soll betonen, dass es sich um eine höhere Abstraktionsebene handelt als a Designmuster wie von der "Gang of Four (GOF)" beschrieben. Darüber hinaus weist der Begriff „Leitlinie“ darauf hin, dass es sich um einen Ratschlag handelt. Während des Designprozesses ist es manchmal notwendig, mehrere Richtlinien abzuwägen. Die GOF-Muster sind DesignRegeln. Dies ist keine unverbindliche Wahl. Die Praxis hat gezeigt, dass es so sein sollte, aber natürlich ist der Mechanismus letztendlich wichtiger als der Name.

Die 9 Richtlinien sind:

  1. Schöpfer
  2. Informationsexperte
  3. Niedrige Kopplung
  4. Hoher Zusammenhalt
  5. Regler
  6. Polymorphismus
  7. Reine Fertigung
  8. Richtung
  9. Geschützte Varianten

Schöpfer

Problem: Wer ist für die Erstellung einer Klasse-A-Instanz verantwortlich?
Lösung: Weisen Sie der Klasse B die Verantwortung zum Erstellen einer Instanz der Klasse A zu, die die meisten der folgenden Beschreibungen erfüllt:

  1. B enthält A
  2. B verfolgt den Zustand von A
  3. B verwendet A häufig
  4. B hat die Daten, die zum Initialisieren von A benötigt werden

Informationsexperte

Problem: Welcher Klasse weisen wir eine besondere Verantwortung zu?
Lösung: Weisen Sie die Verantwortung der Klasse zu, die die (meisten) Informationen hat, um die Verantwortung zu tragen.

Niedrige Kopplung

Problem: Wie reduzieren Sie die Auswirkungen von Änderungen?
Lösung: Weisen Sie Verantwortlichkeiten so zu, dass die Klassen möglichst wenig Abhängigkeiten von anderen Klassen haben.

Hoher Zusammenhalt

Problem: Wie halten Sie den Unterricht verständlich und wartbar?
Lösung: Verteilen Sie Verantwortlichkeiten so, dass ein hohes Maß an Ähnlichkeit (dh Kohärenz) zwischen den verschiedenen Verantwortlichkeiten einer Klasse besteht.

Regler

Problem: Welches Objekt unter der User-Interface-Schicht steuert die Handhabung einer Systemoperation?
Lösung: Diese Verantwortung muss einem der beiden folgenden Objekte zugeordnet werden:

  1. EIN Fassadensteuerung. Dies ist ein Repräsentant eines gesamten (Teil-)Systems.
  2. EIN Use-Case-Controller (ebenfalls Sitzungscontroller). Dies ist repräsentativ für ein Anwendungsfallszenario, in dem der Systembetrieb stattfindet.

Polymorphismus

Problem: Wer ist für die Realisierung typabhängigen Verhaltens verantwortlich?
Lösung: Weisen Sie diese Verantwortung den Typen zu, für die alternatives Verhalten auftritt (mithilfe von Polymorphismus).

Reine Herstellung

Problem: Wem sollten Verantwortlichkeiten zugewiesen werden, wenn Information Expert ohne Verletzung der Niedrige Kopplung und Hoher Zusammenhalt Richtlinien?
Lösung: Ordnen Sie die Verantwortlichkeiten einer eigens dafür angelegten Klasse (und anderen, wie zB Wiederverwendung) zu.

Richtung

Problem: Wie können Klassen getrennt werden?
Lösung: Weisen Sie einer Zwischenklasse Verantwortlichkeiten zu, die die Interaktion zwischen den Klassen übernimmt.

Geschützte Varianten

Problem: Wie vermeiden Sie größere Auswirkungen durch sich ändernde Klassen (z. B. durch Ausweitung von Verhaltensvarianten)?
Lösung: Definieren Sie eine Schnittstelle für ein Verhalten, bei dem viele Variationen erwartet werden, damit die Schnittstelle dieselbe bleibt, wenn Variationen des Verhaltens implementiert werden.