Cursusinhoud
C++ OOP
C++ OOP
Segmentatie en Aggregatie
Wanneer je software ontwikkelt die onderhoudbaar en flexibel is, zijn er veel zaken om rekening mee te houden in het proces, vooral bij objectgeoriënteerd programmeren. Compositie en aggregatie zijn fundamentele concepten die het creëren van complexe systemen uit eenvoudigere componenten mogelijk maken en behoren tot het encapsulatieparadigma.
Compositie
Compositie is een ontwerpmethode waarbij een class
objects
van andere classes
bevat als lidvariabelen. Deze leden zijn essentiële onderdelen van de omvattende class
en hebben een sterke eigendomsrelatie. Wanneer het omvattende object
wordt vernietigd, worden de samengestelde onderdelen ook vernietigd. Bijvoorbeeld:
Car.h
Engine.h
#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 };
De Car
-klasse bevat een Engine
-object. Wanneer een Car
-object wordt aangemaakt, wordt automatisch een Engine
-instantie gecreëerd als onderdeel van deze compositie.
Aggregatie
Aggregatie is een andere vorm van object
-compositie waarbij een class
een object
van andere classes
bevat, maar de opgenomen instanties hebben een zwakkere relatie in vergelijking met compositie. Bij aggregatie kunnen de opgenomen lid-classes
onafhankelijk bestaan en mogelijk gedeeld worden tussen meerdere classes
.
Car.h
Engine.h
#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 };
De klasse Car
aggregeert een Engine
-object via een pointer. De klasse Car
is niet de eigenaar van het Engine
-object; het houdt slechts een verwijzing ernaar bij. Hierdoor kan de instantie van Engine
onafhankelijk van het Car
-object bestaan en indien nodig gedeeld worden tussen meerdere instanties.
Keuze tussen compositie en aggregatie
Bij het ontwerpen van softwaresystemen is het van essentieel belang zorgvuldig te overwegen of compositie of aggregatie gebruikt moet worden, afhankelijk van de relaties tussen klassen en objecten.
In de context van een Car
- en Engine
-klasse is het gebruik van compositie meer geschikt. Elke auto heeft doorgaans zijn eigen motor en de motor is een integraal onderdeel van de auto zelf. Bovendien voorkomt dit dat de Engine
gedeeld of hergebruikt wordt tussen meerdere objects
-objecten, wat ook logisch is.
Bedankt voor je feedback!