Kursinnehåll
C++ OOP
C++ OOP
Segmentering och Aggregering
När du skapar programvara som är underhållbar och flexibel finns det mycket att ta hänsyn till i processen, särskilt inom objektorienterad programmering. Komposition och aggregation är grundläggande begrepp som möjliggör skapandet av komplexa system från enklare komponenter och är delar av inkapslingsparadigmet.
Komposition
Komposition är en designteknik där en class
innehåller objects
av andra classes
som medlemsvariabler. Dessa medlemmar är viktiga komponenter i den innehållande class
och har en stark ägarrelation. När det innehållande object
förstörs, förstörs även dess komponerade delar. Till exempel:
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 };
Klassen Car
komponerar ett Engine
-objekt. När ett Car
-objekt skapas, skapas automatiskt en instans av Engine
som en del av dess komposition.
Aggregation
Aggregation är en annan form av object
-komposition där en class
innehåller object
från andra classes
, men de innehållna instanserna har en svagare relation jämfört med komposition. Vid aggregation kan de innehållna medlems-classes
existera oberoende och kan delas mellan flera 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 };
Klassen Car
aggregerar ett Engine
-objekt med hjälp av en pekare. Klassen Car
äger inte Engine
-objektet; den håller endast en referens till det. Detta möjliggör att Engine
-instansen kan existera oberoende av Car
-objektet och delas mellan flera instanser om det behövs.
Val mellan komposition och aggregering
Vid utformning av mjukvarusystem är det viktigt att noggrant överväga om komposition eller aggregering ska användas, baserat på relationerna mellan klasser och objekt.
I sammanhanget av klasserna Car
och Engine
är det mer lämpligt att använda komposition. Varje bil har vanligtvis sin egen motor, och motorn är en integrerad del av själva bilen. Dessutom förhindrar det att Engine
delas eller återanvänds mellan flera objects
-objekt, vilket också är logiskt.
Tack för dina kommentarer!