GRASP

GRASP

GRASP (General Responsibility Assignment Software Patterns) bezeichnet eine Menge von Entwurfsmustern, mit denen die Zuständigkeit bestimmter Klassen objektorientierter Systeme festgelegt wird.

Sie beschreiben also allgemein welche Klassen und Objekte wofür zuständig sein sollten. Alle diese Regeln sind schon lange bekannt, sie wurden von Craig Larman einfach systematisch beschrieben. Dies erleichtert die Kommunikation zwischen Softwareentwicklern und erleichtert Einsteigern das Entwickeln eines Bewusstseins für guten bzw. schlechten Code.

Inhaltsverzeichnis

Information Expert

Gib dem Informations-Experten die Verantwortlichkeit, d. h. der Klasse, welche die notwendigen Informationen besitzt, um die Verantwortung wahrzunehmen. Beispiel: Eine Klasse Kreis, die die Methode berechneFläche() hat, die aus dem privaten Attribut Radius die Fläche berechnet. Negativ-Beispiel: Eine Klasse berechneFläche, die eine Methode hat, die eine geometrische Form entgegennimmt und deren Fläche berechnet. Im Unterschied zur realen Welt, in der ein Kreis gar nichts macht, muss in der objektorientierten Welt das Objekt alle Methoden besitzen, die Aktionen definieren, die mit ihm gemacht werden können. Auch bekannt als „Do it Myself“ Strategie (Peter Coad). Information Expert ist das grundlegende Prinzip von Objektorientiertem Design und kann auch als Kapselung von Daten bezeichnet werden. Die konsequente Verwendung führt zu geringer Kopplung (low coupling) und hoher Kohäsion (high cohesion).

Creator

Das Erzeuger-Prinzip legt fest, wer eine Instanz einer Klasse (Objekt) erzeugen sollte. Neue Objekte der Klasse A sollten von B erzeugt werden, wenn:

  • B eine Aggregation von A ist
  • B A-Objekte enthält
  • B A-Objekte erfasst
  • B A-Objekte mit starker Kopplung verwendet
  • B die Initialisierungsdaten für A hat (d. h. B ist Experte bezüglich Erzeugung von A)

Controller

Der Controller (Steuereinheit) beinhaltet das Domänenwissen und definiert, wer die für eine Nicht-Benutzeroberflächen-Klasse bestimmten Systemereignisse verarbeitet.

Es gibt hier zwei Möglichkeiten. Die Verwendung von Use Case-Controllern oder Fassade-Controllern. Bei Use Case-Controllern werden alle Ereignisse eines Use Cases in einer Klasse behandelt. Mini Use Cases können auch in einem Controller behandelt werden, zum Beispiel das Erzeugen und Löschen eines Users. Wichtig ist nur, dass die Kohäsion des Controllers möglichst groß ist. Der Fassade-Controller wird in Message Handling Systemen verwendet, da hier alle Systemereignisse an einem Ort eintreffen. Hier wird ein einziger Controller (MessageHandler) definiert, der alle Ereignisse abfängt. Hierzu wird mit dem Command Pattern gearbeitet.

Low Coupling

Geringe Kopplung ist eines der Hauptziele von gutem Design. Kopplung bezeichnet hier das Maß für die Abhängigkeit eines Elementes (z. B. einer Klasse) von der Umgebung (z. B. von anderen Klassen). Die Hauptvorteile sind dabei die folgenden:

  • leichte Anpassbarkeit, da Änderungen in einer Klasse keine Änderungen in anderen Klassen nach sich ziehen
  • Verständlichkeit der Klasse, da der Kontext nicht betrachtet werden muss
  • gute Testbarkeit
  • hohe Wiederverwendbarkeit

Formen von Kopplung

Am Beispiel von der Klasse X zur Klasse Y:

  • X ist direkte oder indirekte Unterklasse von Y
  • X implementiert das Interface von Y
  • X hat Attribut bzw. Referenz von Typ Y (Aggregation/Assoziation)
  • X hat Methode, die Y referenziert (Abhängigkeit)

Factory

Das Fabrikmuster wird eingesetzt, wenn beim Erzeugen von Objekten spezielle Logik notwendig ist. Dazu gibt es eine Fabrik-Klasse, die die Objekterzeugung übernimmt und das Objekt zurückliefert.

High Cohesion

Hohe Kohäsion ist vor allem wichtig, um die Komplexität von Gesamtsystemen zu begrenzen, indem man Klassen gut überschaubar organisiert. Die Kohäsion ist ein Maß für den inneren Zusammenhalt einer Klasse. Das heißt sie misst, wie eng die Methoden und Attribute einer Klasse zusammenarbeiten.

Ein Negativ-Beispiel wäre z. B. eine Klasse, die Methoden aus zwei völlig verschiedenen Gebieten anbietet. Solche Klassen sind meistens schnell durch völlig nichtssagende Namen und viele Methoden/Codezeilen zu orten.

Zusammenhang High Cohesion / Low Coupling

Hohe Kohäsion innerhalb der Softwareeinheiten in einem System führt tendenziell zu geringer Kopplung zwischen den beteiligten Softwareeinheiten.

Polymorphismus

Polymorphismus kann verwendet werden um das Verhalten abhängig vom Typ zu ändern. Somit können viele Fallunterscheidungen vermieden werden. Besser bekannt ist das Pattern als Strategy (GoF).

Pure Fabrication

Eine Pure Fabrication (reine Erfindung), stellt eine Klasse dar, die so nicht in der Problem Domain existiert. Sie stellt eine Methode zur Verfügung, für die sie nicht Experte ist. Normalerweise wird eine Pure Fabrication verwendet, um einen Algorithmus zu kapseln, der in keine Domain-Klasse passt. Sie kann zum Beispiel verwendet werden, um Technologiewissen von Domänenwissen zu trennen. Sie implementiert reines Verhalten und hat somit keinen Zustand. Sollte nicht zu häufig verwendet werden, sonst existieren am Schluss nur noch Klassen die einzelne Methoden kapseln.

Indirection

Indirection (Umweg) kann verwendet werden um geringe Kopplung zu erreichen. Sie wird erreicht, indem ein Vermittler zwischen Client und Server eingebaut wird. Sinnvoll wenn sich ein Serverobjekt ständig verändert. Als Nachteil ist die Leistungsfähigkeit vermindert. Beispielhaft für dieses Muster ist die Einführung der Controller-Komponente, die zwischen dem Datenmodell (Model) und dessen Präsentation (View) im Model-View-Controller-Architekturmuster vermittelt.

Literatur

  • Mark Grand: Patterns in Java. 2 Auflage. John Wiley & Sons, 1999, ISBN 0471258415.
  • Craig Larman: Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development. 3 Auflage. Markt und Technik, 2005, ISBN 3827268982.

Wikimedia Foundation.

Игры ⚽ Поможем решить контрольную работу

Schlagen Sie auch in anderen Wörterbüchern nach:

  • grasp — grasp·able; grasp·er; grasp·ing·ly; grasp·ing·ness; grasp·less; re·grasp; grasp; grasp·able·ness; grasp·ably; …   English syllables

  • GRASP — may refer to:* GRASP (multimedia authoring software), a multimedia authoring software * GRASP (SAT solver), a SAT instance solver * GRASP (Object Oriented Design) * Greedy randomized adaptive search procedure * Given, Required, Analysis, Solution …   Wikipedia

  • Grasp — Grasp, n. 1. A gripe or seizure of the hand; a seizure by embrace, or infolding in the arms. The grasps of love. Shak. [1913 Webster] 2. Reach of the arms; hence, the power of seizing and holding; as, it was beyond his grasp. [1913 Webster] 3.… …   The Collaborative International Dictionary of English

  • Grasp — Grasp, v. i. To effect a grasp; to make the motion of grasping; to clutch; to struggle; to strive. [1913 Webster] As one that grasped And tugged for life and was by strength subdued. Shak. [1913 Webster] {To grasp at}, to catch at; to try to… …   The Collaborative International Dictionary of English

  • Grasp — Saltar a navegación, búsqueda En diseño orientado a objetos, GRASP son patrones generales de software para asignación de responsabilidades, es el acrónimo de General Responsibility Assignment Software Patterns . Aunque se considera que más que… …   Wikipedia Español

  • grasp — [n1] hold, grip butt, cinch, clamp, clasp, clench, clinch, clutches, embrace, grapple, lug, possession, purchase, tenure; concepts 191,710 Ant. avoidance, release grasp [n2] understanding awareness, comprehension, ken, knowledge, mastery,… …   New thesaurus

  • Grasp — Grasp, v. t. [imp. & p. p. {Grasper}; p. pr. & vb. n. {Qraspine}.] [OE. graspen; prob. akin to LG. grupsen, or to E. grope. Cf. {Grab}, {Grope}.] 1. To seize and hold by clasping or embracing with the fingers or arms; to catch to take possession… …   The Collaborative International Dictionary of English

  • grasp — (v.) mid 14c., to reach for, feel around, possibly a metathesis of grapsen, from O.E. *græpsan to touch, feel, from P.Gmc. *grap , *grab (Cf. E.Fris. grapsen to grasp, M.Du. grapen to seize, grasp, O.E. grapian to touch, feel, grope ), from PIE… …   Etymology dictionary

  • grasp — [grasp, gräsp] vt. [ME graspen, by metathesis < * grapsen, prob. < MLowG (as in LowG, Fris grapsen), akin to Norw dial. grapsa, to scratch, ON grapa, to snatch: see GRAB] 1. to take hold of firmly with or as with the hand or arms; grip 2.… …   English World dictionary

  • GRASP — (англ. General Responsibility Assignment Software Patterns  общие образцы распределения обязанностей)  паттерны, используемые в объектно ориентированном проектировании для решения общих задач по назначению обязанностей классам и… …   Википедия

  • grasp — vb clutch, grab, seize, *take, snatch Analogous words: *catch, capture: apprehend, *arrest: *apprehend, comprehend grasp n *hold, grip, clutch …   New Dictionary of Synonyms

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”