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.