Junior
Care sunt diferențele dintre moștenire și compoziție în programarea orientată pe obiecte?
sobes.tech AI
Răspuns de la AI
Moștenire:
- Relația "este un" (is-a).
- Clasa derivată moștenește câmpurile și metodele clasei părinte.
- Folosit pentru a crea versiuni specializate ale claselor existente.
- Poate duce la ierarhii rigide și probleme cu moștenirea multiplă.
Compoziție:
- Relația "are" (has-a).
- Clasa conține instanțe ale altor clase ca și câmpuri.
- Delegă executarea sarcinilor către obiectele conținute.
- Oferă flexibilitate și posibilitatea de a înlocui componente.
Exemplu în Java:
// Moștenire
class Vehicle { // Clasă de bază
void start() { /* ... */ }
}
class Car extends Vehicle { // Moștenește din Vehicle
// Metode specifice pentru Car
}
// Compoziție
class Engine { // Component
void start() { /* ... */ }
}
class AnotherCar { // Clasă care utilizează compoziția
private Engine engine; // Conține o instanță de Engine
AnotherCar(Engine engine) {
this.engine = engine;
}
void start() {
engine.start(); // Delegare
}
}
Diferențele pot fi prezentate sub formă de tabel:
| Criteriu | Moștenire | Compoziție |
|---|---|---|
| Relație | "este un" (is-a) | "are" (has-a) |
| Rigiditate | Mai rigid | Mai flexibil |
| Reutilizare | Prin ierarhii de clase | Prin instanțe de obiecte |
| Schimbare comportament | Suprascrierea metodelor | Înlocuirea obiectelor conținute |
| Aplicație | Specializare, extindere funcționalitate | Agregare, construcție din părți |
Compoziția este în general preferată față de moștenire în majoritatea cazurilor pentru a obține o flexibilitate mai mare și o dependență mai mică între clase.