Sobes.tech
Junior

Wat zijn de verschillen tussen erfelijkheid en samenstelling in objectgeoriënteerd programmeren?

sobes.tech AI

Antwoord van AI

Overerving:

  • Relatie "is-a".
  • De afgeleide klasse erft velden en methoden van de ouderklasse.
  • Gebruikt om gespecialiseerde versies van bestaande klassen te maken.
  • Kan leiden tot starre hiërarchieën en problemen met meervoudige overerving.

Samenstelling:

  • Relatie "heeft" (has-a).
  • De klasse bevat instanties van andere klassen als haar velden.
  • Delegeert het uitvoeren van taken aan de ingesloten objecten.
  • Biedt flexibiliteit en de mogelijkheid om componenten te vervangen.

Voorbeeld in Java:

// Overerving
class Vehicle { // Basisklasse
    void start() { /* ... */ }
}

class Car extends Vehicle { // Erft van Vehicle
    // Specifieke methoden van Car
}

// Samenstelling
class Engine { // Component
    void start() { /* ... */ }
}

class AnotherCar { // Klasse die samenstelling gebruikt
    private Engine engine; // Bevat een Engine instantie

    AnotherCar(Engine engine) {
        this.engine = engine;
    }

    void start() {
        engine.start(); // Delegatie
    }
}

De verschillen kunnen worden weergegeven in tabelvorm:

Criteria Overerving Samenstelling
Relatie "is a" (is-a) "heeft" (has-a)
Rigide Meer rigide Meer flexibel
Hergebruik Via klassenhiërarchieën Via objectinstanties
Gedragsverandering Methode overschrijven Vervangen van ingesloten objecten
Toepassing Specialisatie, uitbreiding van functionaliteit Samenvoeging, bouwen uit delen

Samenstelling wordt in de meeste gevallen aanbevolen boven overerving om grotere flexibiliteit en minder afhankelijkheid tussen klassen te bereiken.