Sobes.tech
Junior

Čo znamenajú vzťahy "som" a "mám" v objektovo orientovanom programovaní?

sobes.tech AI

Odpoveď od AI

Vztah "je-" (is-a) je dedičstvo. Odvodená trieda "je" rodičovskou triedou a dedí jej vlastnosti a správanie.

// Rodičovská trieda
class Animal {
    void eat() {
        System.out.println("Zvieratá jedia");
    }
}

// Odvodená trieda
class Dog extends Animal {
    void bark() {
        System.out.println("Pes šteka");
    }
}

V tomto príklade, Dog "je" Animal.

Vztah "mám" (has-a) je kompozícia alebo agregácia. Jeden objekt "má" odkaz na iný objekt ako časť svojho stavu.

class Engine {
    void start() {
        System.out.println("Motor spustený");
    }
}

class Car {
    private Engine engine; // Auto "má" motor

    public Car() {
        this.engine = new Engine();
    }

    void drive() {
        engine.start();
        System.out.println("Auto jazdí");
    }
}

Tu, Car "má" Engine. Kompozícia implikuje silnú väzbu (životný cyklus vloženého objektu závisí od toho, kto ho obsahuje), agregácia je slabšia (objekty môžu existovať nezávisle). Príklad ukazuje kompozíciu.

Kľúčové rozdiely:

  • "Je-" (is-a) — dedičstvo, definuje hierarchiu typov.
  • "Mám" (has-a) — kompozícia/agregácia, definuje štruktúru objektu prostredníctvom začlenenia iných objektov.