Objektzusammensetzung
Im Informatik, Objektzusammensetzung und Objektaggregation sind eng verwandte Wege zu kombinieren Objekte oder Datentypen in komplexere. Im Gespräch wird die Unterscheidung zwischen Zusammensetzung und Aggregation oft ignoriert.[1] Gemeinsame Arten von Kompositionen sind Objekte benutzt in Objekt orientierte Programmierung, Markierte Gewerkschaften, Sets, Sequenzenund verschiedene Graph Strukturen. Objektzusammensetzungen beziehen sich auf Datenstrukturen, sind jedoch nicht die gleichen.
Die Objektzusammensetzung bezieht sich auf die logische oder konzeptionelle Struktur der Informationen, nicht auf die Implementierung oder die physische Datenstruktur verwendet, um es darzustellen. Zum Beispiel a Reihenfolge unterscheidet sich von a einstellen Denn (unter anderem) ist die Reihenfolge der komponierten Gegenstände für die ersteren wichtig, aber nicht für das letztere. Datenstrukturen wie z. Arrays, verlinkte Listen, Hash -Tischeund viele andere können verwendet werden, um eine von ihnen zu implementieren. Vielleicht verwirrend, werden einige der gleichen Begriffe sowohl für Datenstrukturen als auch für Verbundwerkstoffe verwendet. Zum Beispiel, "Binärbaum"Kann sich beides beziehen: Als Datenstruktur ist es ein Mittel, um auf eine lineare Abfolge von Elementen zuzugreifen, und die tatsächlichen Positionen der Elemente im Baum sind irrelevant (der Baum kann intern neu angeordnet werden, aber man mag, ohne seine Bedeutung zu ändern). Als Objektzusammensetzung sind die Positionen jedoch relevant, und das Ändern würde die Bedeutung ändern (wie zum Beispiel in Cladogramme).
Programmierungstechnik
Objekt orientierte Programmierung basiert auf Objekte zu Kapiteller Daten und Verhalten. Es verwendet zwei Haupttechniken zum Zusammensetzen und Komponieren von Funktionen in komplexere, Sub-typing und Objektzusammensetzung.[2] Bei der Objektzusammensetzung geht es darum, Objekte innerhalb von zusammengesetzten Objekten zu kombinieren und gleichzeitig die Einkapselung jedes Objekts durch Verwendung ihrer gut definierten Verwendung sicherzustellen Schnittstelle Ohne Sichtbarkeit ihrer Interna. In dieser Hinsicht unterscheidet sich die Objektzusammensetzung von Datenstrukturen, die die Kapselung nicht durchsetzen.
Die Objektzusammensetzung kann sich auch um eine Gruppe mehrerer verwandter Objekte handeln, wie z. B. eine Menge oder eine Abfolge von Objekten. Delegation kann die Zusammensetzung durch Weiterleitung von Anforderungen oder Aufrufen an das umschließende zusammengesetzte Objekt an eine seiner internen Komponenten bereichern.[3]
Im Klasse-baut und tippt Programmiersprachen, Typen können in zusammengesetzte und nicht zusammengesetzte Typen unterteilt werden, und die Zusammensetzung kann als Beziehung zwischen Typen angesehen werden: ein Objekt eines zusammengesetzten Typs (z. Wagen) "hat"Objekte anderer Typen (z. Rad). Wenn ein zusammengesetztes Objekt mehrere Sub-Objekte desselben Typs enthält, können sie einem bestimmten zugewiesen werden Rollen, oft unterschieden durch Namen oder Zahlen. Zum Beispiel a Punkt Das Objekt kann 3 Zahlen enthalten, die jeweils Entfernung entlang einer anderen Achse darstellen, wie z. B. "x", "y" und "z". Das Studium von Teil-Ganz-Beziehungen im Allgemeinen ist Mereologie.
Zusammensetzung muss von unterschieden werden von SubtypingDies ist der Prozess des Hinzufügens von Details zu einem allgemeinen Datentyp, um einen spezifischeren Datentyp zu erstellen. Zum Beispiel können Autos eine bestimmte Art von Fahrzeug sein: Wagen ist ein Fahrzeug. Subtyping beschreibt keine Beziehung zwischen verschiedenen Objekten, sondern besagt stattdessen, dass Objekte eines Typs gleichzeitig Objekte eines anderen Typs sind. Das Studium solcher Beziehungen ist Ontologie.
Im Prototyp-basierte Programmiersprachen wie z. JavaScript, Objekte können das Verhalten im Moment ihrer Instanziierung dynamisch von einem Prototypobjekt erben. Die Zusammensetzung muss vom Prototyping unterschieden werden: Das neu instanziierte Objekt erbt die Zusammensetzung seines Prototyps, kann jedoch selbst selbst komponiert werden.
Zusammengesetzte Objekte können im Speicher dargestellt werden, indem die komponierten Objekte gemeinsam gelobt werden, durch Co-Locing-Referenzen oder auf viele andere Arten. Die Elemente innerhalb eines zusammengesetzten Objekts können als bezeichnet werden Attribute, Felder, Mitglieder, Eigenschaftenoder andere Namen und die resultierende Komposition als zusammengesetzter Typ, Speicherdatensatz, Struktur, Tupel, oder ein Benutzerdefinierter Typ (UDT). Details finden Sie in der Anhäufung Abschnitt unten.
UML -Modellierungstechnik

Im Uml Modellierung, Objekte können konzeptionell komponiert werden, unabhängig von der Implementierung mit einer Programmiersprache. Es gibt vier Möglichkeiten, Objekte in UML zu komponieren: Eigenschaft, Assoziation, Aggregation und Zusammensetzung:[4]
- Eine Eigenschaft stellt ein Attribut der Klasse dar.
- Ein Assoziation repräsentiert a semantische Beziehung Zwischen Fällen der zugehörigen Klassen. Das Mitglied eines Vereins entspricht einer Eigenschaft der zugehörigen Klasse.
- Eine Aggregation ist eine Art Assoziation, die eine Teil/eine ganze Beziehung zwischen einem Aggregat (Ganzes) und einer Gruppe verwandter Komponenten (Teile) modelliert.
- Eine Komposition, auch eine zusammengesetzte Aggregation bezeichnet, ist eine Art von Aggregation, die eine Teil/eine ganze Beziehung zwischen einem zusammengesetzten (Ganzen) und einer Gruppe ausschließlich besessener Teile modelliert.
Die Beziehung zwischen dem Aggregat und seinen Komponenten ist eine schwache "HAS-A" -Beziehung: Die Komponenten können Teil mehrerer Aggregate sein, können über andere Objekte ohne das Aggregat zugegriffen werden und können das Aggregatobjekt überleben.[4] Der Zustand des Komponentenobjekts ist immer noch Teil des Aggregatsobjekts.
Die Beziehung zwischen dem Verbund und seinen Teilen ist eine starke „HAS-A“ -Be Beziehung: Das zusammengesetzte Objekt hat Sohle. "Verantwortung für die Existenz und Speicherung der komponierten Objekte"Das komponierte Objekt kann Teil von höchstens einem zusammengesetzten und" sein, und "Wenn ein zusammengesetztes Objekt gelöscht wird, werden alle seine Teilinstanzen, die Objekte sind, damit gelöscht"In UML hat die Zusammensetzung also eine engere Bedeutung als die übliche Objektzusammensetzung.

Die grafische Notation stellt:
- Die Eigenschaft als ein Typed Element in der Box der beigefügten Klasse,
- die Assoziation als einfache Grenze zwischen den zugehörigen Klassen,
- das Anhäufung Als ungefüllter Diamant an der Seite des Aggregats und als durchgezogene Linie,
- Die Zusammensetzung als gefüllter Diamant an der Seite des Verbundwerkstoffs und als durchgezogene Linie.
Anhäufung
Die Aggregation unterscheidet sich von der gewöhnlichen Zusammensetzung insofern, als sie kein Eigentum impliziert. In der Zusammensetzung, wenn das Eigenobjekt zerstört wird, sind auch die enthaltenen Objekte. In der Aggregation ist dies nicht unbedingt wahr. Zum Beispiel a Universität besitzt verschiedene Abteilungen (z. B., Chemie), und jede Abteilung hat eine Reihe von Professoren. Wenn die Universität schließt, existieren die Abteilungen nicht mehr, aber die Professoren in diesen Abteilungen werden weiterhin existieren. Daher kann eine Universität als Abteilungszusammensetzung angesehen werden, während die Abteilungen eine Aggregation von Professoren haben. Darüber hinaus könnte ein Professor in mehr als einer Abteilung arbeiten, aber eine Abteilung konnte nicht Teil einer Universität sein.
Die Zusammensetzung wird normalerweise so implementiert, dass ein Objekt ein anderes Objekt enthält. Zum Beispiel in C ++:
Klasse Professor; // anderswo definiert Klasse Abteilung { Öffentlichkeit: Abteilung(Const std::Saite& Titel): Titel_(Titel) {} Privatgelände: // Aggregation: | Professoren | kann die | Abteilung überleben |. std::Vektor<std::WACK_PTR<Professor>> Mitglieder; Const std::Saite Titel_; }; Klasse Universität { Öffentlichkeit: Universität() = Ursprünglich; Privatgelände: // Komposition: | Abteilung | S existiert nur, solange die Fakultät existiert. std::Vektor<Abteilung> Fakultät_ = { Abteilung("Chemie"), Abteilung("Physik"), Abteilung("Kunst" "), }; };
In der Aggregation kann das Objekt nur eine Referenz oder einen Zeiger auf das Objekt enthalten (und nicht haben Lebensdauer Verantwortung dafür).
Manchmal wird die Aggregation als Zusammensetzung bezeichnet, wenn die Unterscheidung zwischen normaler Zusammensetzung und Aggregation unwichtig ist.
Der obige Code würde sich in das folgende UML -Klassendiagramm verwandeln:
Aggregation in com

In Microsoft Komponentenobjektmodell, Aggregation bedeutet, dass ein Objekt exporiert, als ob es ihr Besitzer wäre, eins oder mehrere Schnittstellen eines anderen Objekts, das es besitzt. Formal ist dies ähnlicher wie Komposition oder Verkapselung als Aggregation. Anstatt die exportierten Schnittstellen durch Aufrufen der Schnittstellen des Eigenobjekts zu implementieren, werden die Schnittstellen des eigenen Objekts selbst exportiert. Das eigene Objekt ist verantwortlich dafür IUKNNOWN Rufen Sie tatsächlich die entsprechenden Methoden des Eigentümers auf. Dies soll sicherstellen, dass die Referenzzahl des Eigentümers korrekt ist und alle Schnittstellen des Eigentümers über die exportierte Schnittstelle zugänglich sind, während keine anderen (privaten) Schnittstellen des eigenen Objekts zugänglich sind.[5]
Sonderformen
Eindämmung
Zusammensetzung, mit der mehrere Fälle des komponierten Datentyps gespeichert werden, wird als Eindämmung bezeichnet. Beispiele für solche Behälter sind Arrays, assoziative Arrays, Binärbäume, und verlinkte Listen.
Im Uml, Die Eindämmung wird mit einer Multiplizität von 0 oder 1 ..* dargestellt, was darauf hinweist, dass das zusammengesetzte Objekt aus einer unbekannten Anzahl von Instanzen der komponierten Klasse besteht.
Rekursive Komposition
Objekte können rekursiv komponiert werden und ihr Typ wird dann aufgerufen rekursiver Typ. Beispiele umfassen verschiedene Arten von Bäume, Dags, und Grafiken. Jeder Knoten in einem Baum kann ein Zweig oder ein Blatt sein; Mit anderen Worten, jeder Knoten ist gleichzeitig ein Baum, wenn er zu einem anderen Baum gehört.
In UML wird eine rekursive Zusammensetzung mit einer Assoziation, Aggregation oder Zusammensetzung einer Klasse mit sich selbst dargestellt.
Verbundmuster
Das Verbundkonstruktionsmuster ist ein objektorientiertes Design basierend auf zusammengesetzten Typen, das rekursive Zusammensetzung und Eindämmung kombiniert, um komplexe Teil-Ganz-Hierarchien zu implementieren.
Zusammengesetzte Typen in c
Dies ist ein Beispiel für Komposition in C.
Struktur Person { int das Alter; verkohlen Name[20]; Auflauf {Arbeitssuchend, Fachmann, Nicht_Professional, im Ruhestand, Schüler} Beschäftigung; };
In diesem Beispiel die primitiven (nicht komposit) Typen int, enum {Job_seeking, professionell, nicht_professional, pensioniert, Student} und der zusammengesetzte Array -Typ verkohlen[] werden kombiniert, um die Verbundstruktur zu bilden Person. Jeder Person Die Struktur "hat dann" Alter, Name und einen Beschäftigungsart.
Zeitleiste der Komposition in verschiedenen Sprachen
C Ruft einen Datensatz a Struktur oder Struktur; objektorientierter Sprachen wie Java, Smalltalk, und C ++ Halten Sie ihre Aufzeichnungen oft im Inneren versteckt Objekte (Klasse Instanzen); Sprachen in der Ml Familie nennen Sie sie einfach Aufzeichnungen. Cobol war der erste weit verbreitete Programmiersprache Aufzeichnungen direkt zu unterstützen;[6] Algol 68 Habe es von COBOL und Pascal Ich habe es mehr oder weniger indirekt von Algol 68 bekommen. Common Lisp Bietet Strukturen und Klassen (letztere über die Gemeinsames Lisp -Objektsystem).
- 1959 - COBOL
01 Kundenrekord. 03 Kundennummer Bild 9 (8) Comp. 03 Kundenname. 05 Vornamen Bild x (15). 05 initial-2 Bild x. 05 Familien-oder Nachname Bild x (15). 03 Kundenadresse. 05 Straße. 07 Straßenname Bild x (15). 09 Hausnummer Bild 999 Comp. 05 Stadt Bild x (10). 05 Ländercode Bild x (3). 05 Postleitzahl Bild x (8). 03 geschuldeten Betrag Bild 9 (8) Comp.
- 1960 - Algol 60
Arrays waren die einzigen zusammengesetzter Datentyp in Algol 60.
- 1964 - pl/i
DCL 1 Newtypet -basiert (P); 2 (a, b, c) fester Behälter (31), 2 (i, j, k) float, 2 r ptr; Newtypet zuweisen;
- 1968 - Algol 68
int max = 99; modus newtypet = [0..9] [0..max] struct (lang real a, b, c, kurz int i, j, k, real r); Newtypet Newarrayt = (1, 2, 3, 4, 5, 6, Heap Real: = 7)
Beispielsweise kann eine verknüpfte Liste als:
Modus node = Union (real, int, compl, String), list = struct (Knoten val, Ref List Next);
Für Algol 68 erscheint nur der Typname links von der Gleichheit, und vor allem wird die Konstruktion ohne Rücksicht auf die Prioritäten von links nach rechts durchgeführt - und kann gelesen werden.
- 1970 - Pascal
Typ a = Array [1..10] von ganze Zahl; b = Aufzeichnung a, b, c: real; i, j, k: ganze Zahl; Ende;
- 1972 – K & r c
#define max 99 Struktur Newtypet { doppelt a, b, c; schweben r; kurz i, j, k; } Newarrayt[10] [Max + 1];
- 1977 - Forran 77
Fortran 77 hat Arrays, aber keine formellen Aufzeichnungs-/Strukturdefinitionen. Typischerweise wurden zusammengesetzte Strukturen mit Verwendung aufgebaut GLEICHWERTIGKEIT oder GEMEINSAMES Aussagen:
CHARAKTER NAME*32, ADDR*32, TELEFON*16 REAL GESCHULDET GEMEINSAMES /Cust/NAME, ADDR, TELEFON, GESCHULDET
- 1983 - Ada
Typ Cust ist Aufzeichnung Name : Name_type; ADDR : ADDR_TYPE; Telefon : Telefon-Typ; Geschuldet : Ganze Zahl Angebot 1..999999; Endaufzeichnung;
ADA 95 brachte OOP -Konzepte durch Tagged -Typen (das Äquivalent einer C ++ - Klasse), ADA 2012 Support für hinzugefügt Auswechslung Überprüfung durch klassenweite Verträge.
- 1983 - C ++
Const int Max = 99; Klasse { Öffentlichkeit: doppelt a, b, c; schweben &r; kurz i, j, k; }Newtypet[10] [Max + 1];
- 1991 - Python
Max = 99 Klasse Newtypet: def __drin__(selbst): selbst.a = selbst.b = selbst.c = 0 selbst.i = selbst.j = selbst.k = 0,0 # Initialisiert ein Beispielarray dieser Klasse. Newarrayt = [[Newtypet() zum i in Angebot(Max + 1)] zum j in Angebot(10)]
- 1992 - Forran 90
Arrays und Saiten wurden von Forran 77 geerbt, und ein neues reserviertes Wort wurde vorgestellt: Typ
Typ Newtypet Doppelte Genauigkeit a, b, c ganze Zahl*2 i, j, k * Nein Zeigertyp Ref REAL R Endtyp Typ (Newtypet) t(10, 100)
FORTRAN 90 Aktualisiert und enthalten Forran IVDas Konzept namens Namelist.
GANZE ZAHL :: Jan = 1, Feb = 2, beschädigen = 3, Apr = 4 NAMENSLISTE / Woche / Jan, Feb, beschädigen, Apr
- 1994 - Ansi Common Lisp
Common Lisp bietet Strukturen und die ANSI Common LISP Standard -CLOS -Klassen.
(Defklasse eine Klasse () ((f :Typ schweben) (i :Typ ganze Zahl) (a :Typ (Array ganze Zahl (10)))))
Weitere Informationen zur Komposition in C/C ++ finden Sie unter Zusammengesetzter Typ.
Siehe auch
- C ++ Struktur
- Zusammengesetzter Typ
- Zusammensetzung über die Vererbung
- Delegation (Programmierung)
- Funktionszusammensetzung (Informatik)
- Hat ein
- Implementierung Vererbung
- Erbsemantik
- Gesetz des Demeteres
- Virtuelle Vererbung
Verweise
- ^ Yaiser, Michelle. "Objektorientierte Programmierkonzepte: Zusammensetzung und Aggregation". Archiviert von das Original am 8. April 2015.
Es gibt ein eng verwandtes Konzept mit der Zusammensetzung, die als Aggregation bezeichnet wird. Im Gespräch werden die Unterschiede zwischen Zusammensetzung und Aggregation oft ignoriert.
- ^ Entwurfsmuster: Elemente wiederverwendbarer objektorientierter Software. Gamma, Erich., Helm, Richard (Informatiker), Johnson, Ralph E., 1955-, Vlissides, John. Reading, Mass.: Addison-Wesley. 1995. ISBN 0-201-63361-2. OCLC 31171684.
{{}}
: CS1 Wartung: Andere (Link) - ^ Ostermann, Klaus; Mezini, Mira (1. Oktober 2001). "Objektorientierte Komposition entwirrt". ACM Sigplan nennt. 36 (11): 283–299. doi:10.1145/504311.504303. ISSN 0362-1340.
- ^ a b OMG (2017). "Unified Modeling Sprachspezifikation Version 2.5.1". www.omg.org. p. 109-110, 197-201. Abgerufen 4. Oktober, 2020.
- ^ "Anhäufung". Plattform SDK für Windows XP SP2. Microsoft. Abgerufen 4. November, 2007.
- ^ Sebesta, Robert W. Konzepte von Programmiersprachen (Dritter Aufl.). Addison-Wesley Publishing Company, Inc. p.218. ISBN 0-8053-7133-8.
Externe Links
- Assoziation, Aggregation und Zusammensetzung, abgerufen im Februar 2009
- Harald Störrle, UML2, Addison-Wesley, 2005