Twitter und Facebook-Anbindung
X
Tweet Follow @twitterapi
!!! Anbindung an twitter und facebook öffnen !!!

Wenn Ihnen mein Online-Buch gefällt,
dann bedanken Sie sich doch mit einer kleinen Spende...

21.2 Komposition

21.2 Komposition

Die Komposition ist fast das Gleiche wie die Aggregation, nur handelt es sich hier üblicherweise um eine strikte 1 zu 1 Beziehung. Mit strikt meine ich, dass das Containerobjekt nicht ohne das komponierte Objekt auskommt bzw. lebensfähig ist. Während ein Mensch z.B. seine Kleider aggregiert (man hat sie nicht immer an und wenn man sie an hat, dann sind es solche, die erst weit nach der eigenen Geburt produziert und ihm Laden übergeben wurden), ist die Beziehung zu seinem Herzen eine Komposition. Der Mensch kann nur mit Herz existieren. Es entsteht mit seiner Entstehung und es hört genau dann auf zu schlagen, wenn er stirbt. Das zeigt uns, das bei einer Komposition das Containerobjekt selbst die Steuerung und somit die Speicherverwaltung vornimmt. üblicherweise benutzt man hier keine Zeiger. Sie werden im Konstruktor erzeugt und im Destruktor freigegeben. In UML wird diese Beziehung ebenfalls mit einer Linie und einer Raute daran ausgedrückt, nur mit dem Unterschied, dass die Raute ausgemalt ist.

Die meisten Relationen meines Beispieles sind Kompositionen, da ich Zeiger und somit unnötige Indirektionen umgehen möchte. Zudem macht es oft auch wenig Sinn, ein Motorrad ohne Kette oder Lenker zu haben (zu mindestens in einem Computerspiel).

Veranschaulichung einer Komposition

Schauen wir uns nun die Definition in der Header-Datei an.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
					
#include "Fahrzeug.h"



// Basisklasse für alle Motorräder
class CMotorrad : public CFahrzeug {
	private:
		CLenker		m_oLenker;
		CKette		m_oKette;

		// ...

	public:
		// Benutzerdefinierter Konstruktor
		CMotorrad(int iLenkerart);

		// ...
};
					

Und jetzt die Implementierung in der CPP Datei.

 1
 2
 3
 4
 5
 6
 7
 8
 9
					
#include "Motorrad.h"



// Benutzerdefinierter Konstruktor ////////////////////////////////////////////
CMotorrad::CMotorrad(int iLenkerart)
	: m_oLenker(iLenkerart)
	, m_oKette()
{} ////////////////////////////////////////////////////////////////////////////
					

Wie Sie sehen können, benutze ich keine Zeiger und die Objekte werden im Konstruktor erzeugt. Hätte ich mich auch hier für Zeiger auf die komponierten Objekte entschieden, bräuchte ich also noch einen Destruktor, um den Speicher wieder freizugeben.

Zum Seitenanfang
Zum Inhaltsverzeichnis

© Copyright by Thomas Weiß, 2009 - 2012