Sobes.tech
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.