C++ Academy · Les

Overerving versus compositie: afwegingen

Vergelijk overerving en compositie en kies het juiste hulpmiddel voor het ontwerp

Les 4 van 414 stappen

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.

Gratis beginnen

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

  1. Enkelvoudige en meervoudige overerving
  2. Virtuele functies en de vtable
  3. Abstracte classes en pure virtuele methoden
  4. Overerving versus compositie: afwegingen
← Terug naar C++ Academy