Overerving versus compositie: afwegingen
Vergelijk overerving en compositie en kies het juiste hulpmiddel voor het ontwerp
Overerving versus compositie: afwegingen is een gratis C++ Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject C++ Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus C++ Academy bevat in totaal 4 lessen.
Twee manieren om code te hergebruiken
Je kunt code hergebruiken door van een andere klasse te overerven of door de code als lid te componeren. Beide hebben hun plaats.
Overerving: ‘is-een’
Gebruik overerving wanneer de afgeleide klasse daadwerkelijk een speciaal soort van de basisklasse is.
class Vehicle {};
class Car : public Vehicle {}; // a Car IS a Vehicle
class SportsCar : public Car {};Compositie: ‘heeft-een’
Gebruik compositie wanneer de relatie ‘heeft-een’ of ‘gebruikt-een’ is.
class Engine {};
class Car {
Engine engine_; // a Car HAS an Engine
};Afweging van koppeling
Overerving zorgt voor een sterke koppeling — afgeleide klassen zijn afhankelijk van de interne werking van de basisklasse. Compositie houdt modules onafhankelijk en gemakkelijker aanpasbaar.
Flexibiliteit
Met compositie kun je gedrag tijdens runtime veranderen — vervang het gecomponeerde object. Overerving legt gedrag vast tijdens het compileren.
class Logger {
std::unique_ptr<LogSink> sink_; // can swap implementations
public:
void setSink(std::unique_ptr<LogSink> s) { sink_ = std::move(s); }
};Testen
Gecomposeerde objecten kunnen voor testen worden vervangen door nepobjecten. Overgeërfde basisklassen zijn moeilijker te vervangen door nepobjecten zonder virtuele functies of sjablonen.
Het probleem van de kwetsbare basisklasse
Wijzigingen in een basisklasse kunnen veel afgeleide klassen breken. Compositie beperkt de wijziging tot de klasse die de andere klasse bevat.
Kies overerving wanneer
Overerving past wanneer:
- Er een duidelijke relatie van het type ‘is-een’ bestaat
- Polymorfisme via een basiskoppelvlak nodig is
- De basisklasse uitdrukkelijk voor overerving is ontworpen
Kies compositie wanneer
Compositie past wanneer:
- Je de flexibiliteit wilt hebben om implementaties te vervangen
- De relatie ‘heeft-een’ of ‘gebruikt-een’ is
- Je een losse koppeling en eenvoudiger testen wilt
Het strategiepatroon
Combineer compositie met polymorfisme: bewaar een pointer naar een basisklasse als strategieobject dat de hostklasse bevat.
class Sorter {
std::unique_ptr<SortStrategy> strategy_;
public:
void sort(std::vector<int>& v) { strategy_->execute(v); }
};Mix-ins en beleidsklassen
Gebruik voor aanpassing tijdens het compileren beleidsklassen met sjablonen — compositie op typeniveau. Krachtig en zonder runtime-overhead.
Koppelvlak + compositie
Een veelgebruikt modern patroon: definieer een koppelvlak, een abstracte basisklasse, en composeer concrete klassen die dit implementeren. Gebruik overerving voor het koppelvlak en compositie voor de implementatie.
Korte controle
Welke aanpak biedt over het algemeen meer flexibiliteit en een lossere koppeling?
Samenvatting
Overerving modelleert ‘is-een’; compositie modelleert ‘heeft-een’. Compositie is flexibeler en zorgt voor een lossere koppeling — geef er de voorkeur aan voor codehergebruik. Gebruik overerving voor polymorfisme via een koppelvlak, vaak gecombineerd met gecomposeerde implementaties.
Leer C++ met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 51
- Lessen
- 203
Veelgestelde vragen
Is de les “Overerving versus compositie: afwegingen” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad C++ Academy, waaronder “Overerving versus compositie: afwegingen”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus C++ Academy bevat in totaal 4 lessen.
Wat leer ik in “Overerving versus compositie: afwegingen”?
Vergelijk overerving en compositie en kies het juiste hulpmiddel voor het ontwerp Je oefent met C++ Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met C++ Academy te beginnen?
Ervaring vooraf is niet nodig. C++ Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.
Hoe lang duurt de les “Overerving versus compositie: afwegingen”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over C++ Academy?
Ja. Elke les over C++ Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Enkelvoudige en meervoudige overerving
- Virtuele functies en de vtable
- Abstracte classes en pure virtuele methoden
- Overerving versus compositie: afwegingen