Junior
Aké sú rozdiely medzi dedičstvom a kompozíciou v objektovo orientovanom programovaní?
sobes.tech AI
Odpoveď od AI
Dedičstvo:
- Vzťah "je" (is-a).
- Podtrieda dedí polia a metódy triedy rodiča.
- Používa sa na vytváranie špecializovaných verzií existujúcich tried.
- Môže viesť k rigidným hierarchiám a problémom s viacerým dedičstvom.
Kompozícia:
- Vzťah "má" (has-a).
- Trieda obsahuje inštancie iných tried ako svoje polia.
- Deleguje vykonávanie úloh na obsahové objekty.
- Poskytuje flexibilitu a možnosť výmeny komponentov.
Príklad v Jave:
// Dedičstvo
class Vehicle { // Základná trieda
void start() { /* ... */ }
}
class Car extends Vehicle { // Dedí od Vehicle
// Špecifické metódy Car
}
// Kompozícia
class Engine { // Komponent
void start() { /* ... */ }
}
class AnotherCar { // Trieda využívajúca kompozíciu
private Engine engine; // Obsahuje inštanciu Engine
AnotherCar(Engine engine) {
this.engine = engine;
}
void start() {
engine.start(); // Delegácia
}
}
Rozdiely možno predstaviť vo forme tabuľky:
| Kritérium | Dedičstvo | Kompozícia |
|---|---|---|
| Vzťah | "je" (is-a) | "má" (has-a) |
| Pevnosť | Viac pevné | Viac flexibilné |
| Opätovné použitie | Prostredníctvom hierarchií tried | Prostredníctvom inštancií objektov |
| Zmena správania | Prepísanie metód | Nahradenie obsahových objektov |
| Aplikácia | Špecializácia, rozšírenie funkcie | Agrégácia, konštrukcia z častí |
Väčšina prípadov preferuje kompozíciu pred dedičstvom, pretože umožňuje väčšiu flexibilitu a menšiu závislosť medzi triedami.