Kursinhalt
C++ OOP
C++ OOP
Segmentierung und Aggregation
Wenn Sie Software erstellen, die wartbar und flexibel ist, gibt es viele Dinge zu berücksichtigen, insbesondere in der objektorientierten Programmierung. Komposition und Aggregation sind grundlegende Konzepte, die die Erstellung komplexer Systeme aus einfacheren Komponenten ermöglichen und Teil des Kapselungsparadigmas sind.
Komposition
Komposition ist eine Entwurfstechnik, bei der eine Klasse Objekte anderer Klassen als Mitgliedsvariablen enthält. Diese Mitglieder sind wesentliche Komponenten der enthaltenden Klasse und haben eine starke Eigentumsbeziehung. Wenn das enthaltende Objekt zerstört wird, werden auch seine zusammengesetzten Teile zerstört. Zum Beispiel:
Car
Engine
#include "Engine.h" class Car { public: void Start() { engine.Start(); // Start the engine std::cout << "Car started" << std::endl; } private: Engine engine; // Engine object composition };
Die Car Klasse setzt sich aus einem Engine Objekt zusammen. Wenn ein Car Objekt erstellt wird, wird automatisch eine Engine Instanz als Teil seiner Komposition erstellt.
Aggregation
Aggregation ist eine andere Form der Objektkomposition, bei der eine Klasse Objekte anderer Klassen enthält, aber die enthaltenen Instanzen eine schwächere Beziehung im Vergleich zur Komposition haben. Bei der Aggregation können die enthaltenen MitgliedsKlassen unabhängig existieren und können unter mehreren Klassen geteilt werden.
Car
Engine
#include "Engine.h" class Car { public: Car(Engine* engine) : engine(engine) {} void Start() { engine->Start(); // Start the engine std::cout << "Car started" << std::endl; } private: Engine* engine; // Engine object aggregation };
In diesem Beispiel aggregiert die Car Klasse ein Engine Objekt mithilfe eines Zeigers. Die Car Klasse besitzt das Engine Objekt nicht; sie hält lediglich eine Referenz darauf. Dies ermöglicht es der Engine-Instanz, unabhängig von dem Car Objekt zu existieren und bei Bedarf unter mehreren Instanzen geteilt zu werden.
Wahl zwischen Komposition und Aggregation
Beim Entwerfen von Softwaresystemen ist es wichtig, sorgfältig zu überlegen, ob Komposition oder Aggregation basierend auf den Beziehungen zwischen Klassen und Objekten verwendet werden soll.
Die enthaltende Klasse muss das Eigentum an den enthaltenen Objekten übernehmen | ||
Enthaltene Objekte sind integrale Bestandteile der enthaltenden Klasse | ||
Die enthaltende Klasse referenziert lediglich die enthaltenen Objekte | ||
Enthaltene Objekte können unabhängig existieren oder unter mehreren Instanzen geteilt werden |
Im Kontext von Car und seinen Engine Klassen wäre die Verwendung von Komposition angemessener. Jedes Auto hat typischerweise seinen eigenen Motor, und der Motor ist ein integraler Bestandteil des Autos selbst. Darüber hinaus verhindert es, dass die Engine über mehrere Objekte hinweg geteilt oder wiederverwendet wird, was ebenfalls sinnvoll ist.
Danke für Ihr Feedback!