General Responsibility Assignment Software Patterns (GRASP)
Entwurfsmuster, mit denene die Zuständigkeit bestimmter Klassen objektorientierter Systeme festgelegt werden.
Information Expert
Ein allgemeines Prinzip des Objektentwurfs und der Zuweisung von Verantwortlichkeiten.
- Eine Klasse sollte nur die Aufgaben ausführen, die ihr Name auch beschreibt.
Creator
Soll eine Instanz einer Klasse erstellt werden, wird ein Creator Pattern verwendet.
Anwenden wenn mindestens etwas zutrifft:
- A eine Aggregation oder ein Kompositum von B ist
- A registriert oder erfasst B-Objekte
- A arbeitet eng mit B-Objekten zusammen oder hat eine enge Kopplung
- A verfügt über Initialisierungsdaten für B
Controller
Ein Controller koordiniert / empfängt als erstes Objekte jenseits der UI-Schicht als Systemoperation.
- Variante 1: Fassaden Controller (repräsentiert das System bzw. übergeordnetes System)
- Variante 2: Use Case Controller (pro Use case eine künstliche Klasse)
Controller macht selber nur wenig und delegiert fast alles
Low Coupling
Kopplung = Mass für die Abhängigkeit von anderen Elementen.
- Hohe Kopplung: Element ist von vielen anderen Elementen abhängig
- Niedrige Kopplung: Element ist nur von wenigen anderen Elementen abhängig
Der Aufruf der Funktionen sollte in einer Linie geschehen.
High Cohesion
Mass für die Verwandtschat und Fokussierung eines Elements.
- Hohe Kohäsion: Element erledigt nur wenige Aufgaben, die eng miteinander verwandt sind.
- Geringe Kohäsion: Element das für viele unzusammenhängende Dinge verantwortlich ist.
Wie bei Low Coupling, sollten die Aufgaben gebündelt werden.
Polymorphism
Polymorphism ist das bündeln von typengleichen oder ähnlichen Verhalten.
Tier
Ein Hund ist auch ein Tier
Pure Fabrication
Künstliche Hilfsklassen erzeugen um dem Domänenmodell gleich zu sein. Wird nur verwendet, um eine bessere Wiederverwendbarkeit zu realisieren.
Indirection
Direkte Kopplung zwischen zwei oder mehreren Objekten vermeiden.
-> Vermittler
Protected Variants
Veränderungen im Objekt sollen keinen Einfluss auf andere Elemente haben.
-> Interfaces einführen
- Spekulationen sind zu vermeiden, da dies zu unnötiger Komplexität führt.