Composite (Entwurfsmuster)


Composite (Entwurfsmuster)

Das Kompositum (engl. Composite) ist ein Entwurfsmuster aus dem Bereich der Softwareentwicklung und gehört zu der Kategorie der Strukturmuster (Structural Patterns). Es wird angewendet um Teil-Ganzes-Hierarchien zu repräsentieren, indem Objekte zu Baumstrukturen zusammengefügt werden. Die Grundidee des Kompositionsmusters (Composite-Pattern) ist, in einer abstrakten Klasse sowohl primitive Objekte als auch ihre Behälter zu repräsentieren. Somit können sowohl einzelne Objekte, als auch ihre Kompositionen einheitlich behandelt werden. Das Kompositionsmuster ist ein Entwurfsmuster der so genannten GoF-Muster.

Inhaltsverzeichnis

Verwendung

  • Implementierung von Teil-Ganzes-Hierarchien.
  • Verbergen der Unterschiede zwischen einzelnen und zusammengesetzten Objekten.

Ein klassisches Beispiel für ein Kompositum sind hierarchische Dateisysteme, insbesondere ihre Repräsentation innerhalb von Dateimanagern oder Filebrowsern als Verzeichnisse und Dateien.

Ein modernes Beispiel sind die Klassendefinitionen der grafischen Benutzeroberfläche von Java. Alle Elemente wie Schaltflächen und Textfelder sind Spezialisierungen der Klasse Component. Die Behälter für diese Elemente sind aber ebenfalls Spezialisierungen derselben Klasse. Mit anderen Worten: Alle Standardelemente werden wesentlich durch eine einzige (Kompositum-) Klasse definiert.

UML-Diagramme

Klassendiagramm

Klassendiagramm

Objektdiagramm

Objektdiagramm

Bestandteile

Die Komponente definiert als Basisklasse das gemeinsame Verhalten aller Teilnehmer. Sie ist im Allgemeinen abstrakt und zum Beispiel ein Verzeichniseintrag.

Das Blatt repräsentiert ein Einzelobjekt, es besitzt keine Kindobjekte und ist zum Beispiel in einem Dateiverzeichnis eine Datei.

Das Kompositum enthält Komponenten, also weitere Komposita oder auch Blätter, als Kindobjekte und repräsentiert zum Beispiel ein Verzeichnis.

Vorteile

  • einheitliche Behandlung von Primitiven und Kompositionen
  • leichte Erweiterbarkeit um neue Blatt- oder Container-Klassen

Nachteile

Ein zu allgemeiner Entwurf erschwert es, Kompositionen auf bestimmte Klassen (und damit zumeist Typen) zu beschränken. Das Typsystem der Programmiersprache bietet dann keine Hilfe mehr, so dass Typüberprüfungen zur Laufzeit nötig werden.

Beispiel

Javas AWT-Klassen sind nach dem Kompositum-Muster gebaut. Da alle von Container erben, können sie jeweils selbst wieder Elemente aufnehmen.

Das folgende Beispiel besteht aus einer Graphik-Klasse; eine Graphik kann eine Ellipse oder eine Komposition von vielen Grafiken sein. Jede Grafik implementiert eine Methode zum Ausdrucken.

Es könnten noch weitere Figuren implementiert werden (Rechteck etc.) oder weitere Methoden (etwa „Rotiere“).

C++

class Graphik {
public:
  virtual void print() const = 0;
  virtual ~Graphik() {} // Klassen, von denen geerbt wird, sollten immer einen virtuellen Destruktor haben  
};
 
class GraphikKompositum: public Graphik {
private:
  std::set<Graphik const*> children;
  typedef std::set<Graphik const*>::const_iterator grIter;
public:
  void print() const {
      for (grIter it = children.begin(); it != children.end(); it++) (*it)->print();
  }
 
  void add(Graphik const* component) {
      children.insert(component);
  }
 
  void remove(Graphik const* component) {
      children.erase(component);
  }
};
 
class Ellipse: public Graphik {
public:
  void print() const        {
      std::cout << "Ellipse" << std::endl;
  }
};
 
int main(void) {
   Ellipse ellipse1, ellipse2, ellipse3, ellipse4;
 
   GraphikKompositum graphik1, graphik2, graphikGesamt;
 
   graphik1.add(&ellipse1);
   graphik1.add(&ellipse2);
   graphik1.add(&ellipse3);
   graphik2.add(&ellipse4);
 
   graphikGesamt.add(&graphik1);
   graphikGesamt.add(&graphik2);
 
   graphikGesamt.print();
   return 0;
}

Verwendung in der Analyse

Ein Kompositum ist auch als reines Daten-Muster interessant, ohne dass Operationen in den Klassen definiert werden, da es zur Repräsentation allgemeiner Baumstrukturen verwendet werden kann. Daher ist dieses Muster auch in der Analyse sinnvoll einsetzbar, z.B. zur Darstellung verschachtelter Aufträge oder Auftragnehmer (mit Unteraufträgen/Unterauftragnehmern), verschachtelter Abläufe, hierarchischer Gruppen von Dingen (Benutzergruppen, E-Mail-Listen, Artikelgruppen, organisatorische Verbünde) usw. Es muss aber darauf geachtet werden, ob solche Hierarchien tatsächlich gleichförmig sind, oder ob die inneren Ebenen verschiedene fachliche Bedeutung haben. Letzteres drückt sich z.B. darin aus, dass Begriffe wie "Gruppe" und "Untergruppe" fachlich unterschieden werden.

Verwandte Entwurfsmuster

  • Visitor
  • Decorator
  • Ein Design auf Basis des Kommando-Musters kann oft sinnvollerweise auch zusammengesetzte Kommandos enthalten, die nach dem Kompositum-Muster aufgebaut sind.

Wikimedia Foundation.

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

  • Entwurfsmuster — (engl. design patterns) sind bewährte Lösungsschablonen für wiederkehrende Entwurfsprobleme in Softwarearchitektur und Softwareentwicklung. Sie stellen damit eine wiederverwendbare Vorlage zur Problemlösung dar, die in einem bestimmten… …   Deutsch Wikipedia

  • Entwurfsmuster (Buch) — Entwurfsmuster. Elemente wiederverwendbarer objektorientierter Software, ISBN 3 8273 2199 9 (Originaltitel: Design Patterns. Elements of Reusable Object Oriented Software.) ist ein 1994 von Erich Gamma, Richard Helm, Ralph Johnson und John… …   Deutsch Wikipedia

  • Composite — (englisch Verbund) ist: die englische Bezeichnung für Verbundwerkstoff der Fachbegriff für Kunststoff Füllungen an Zähnen, siehe Komposit (Zahnmedizin) ein Begriff aus der Videotechnik, siehe Composite Video ein Entwurfsmuster in der… …   Deutsch Wikipedia

  • Kompositum (Entwurfsmuster) — Das Kompositum (engl. Composite) ist ein Entwurfsmuster aus dem Bereich der Softwareentwicklung und gehört zu der Kategorie der Strukturmuster (Structural Patterns). Es wird angewendet um Teil Ganzes Hierarchien zu repräsentieren, indem Objekte… …   Deutsch Wikipedia

  • Dekorierer — Der Decorator (auch Dekorierer) ist ein Entwurfsmuster aus dem Bereich der Softwareentwicklung und gehört zur Kategorie der Strukturmuster (Structural Patterns). Das Muster ist eine flexible Alternative zur Unterklassenbildung, um eine Klasse um… …   Deutsch Wikipedia

  • Design Pattern — Entwurfsmuster (engl. design pattern) sind bewährte Lösungs Schablonen für wiederkehrende Entwurfsprobleme der Softwarearchitektur und Softwareentwicklung. Sie stellen damit eine wiederverwendbare Vorlage zur Problemlösung dar, die in einem… …   Deutsch Wikipedia

  • Design Patterns — Entwurfsmuster (engl. design pattern) sind bewährte Lösungs Schablonen für wiederkehrende Entwurfsprobleme der Softwarearchitektur und Softwareentwicklung. Sie stellen damit eine wiederverwendbare Vorlage zur Problemlösung dar, die in einem… …   Deutsch Wikipedia

  • Design pattern — Entwurfsmuster (engl. design pattern) sind bewährte Lösungs Schablonen für wiederkehrende Entwurfsprobleme der Softwarearchitektur und Softwareentwicklung. Sie stellen damit eine wiederverwendbare Vorlage zur Problemlösung dar, die in einem… …   Deutsch Wikipedia

  • Gang of Four (Design Patterns) — Mit der Viererbande (engl. Gang of Four (GoF)) sind Erich Gamma, Richard Helm, Ralph Johnson und John Vlissides gemeint. 1994 veröffentlichten sie das Buch „Design Patterns Elements of Reusable Object Oriented Software“, ein Standardwerk im… …   Deutsch Wikipedia

  • Viererbande (Softwareentwicklung) — Mit der Viererbande (engl. Gang of Four (GoF)) sind Erich Gamma, Richard Helm, Ralph Johnson und John Vlissides gemeint. 1994 veröffentlichten sie das Buch „Design Patterns Elements of Reusable Object Oriented Software“, ein Standardwerk im… …   Deutsch Wikipedia