Sobes.tech
Junior

Šta znače odnosi "ja sam" i "imam" u objektno-orijentisanom programiranju?

sobes.tech АИ

Одговор од АИ

Odnos "javljujem se" (is-a) je nasledjivanje. Klasa-derivat "je" roditeljska klasa i nasleđuje njena svojstva i ponašanje.

// Roditeljska klasa
class Animal {
    void eat() {
        System.out.println("Životinja jede");
    }
}

// Klasa-derivat
class Dog extends Animal {
    void bark() {
        System.out.println("Pas laje");
    }
}

U ovom primeru, Dog "je" Animal.

Odnos "imam" (has-a) je kompozicija ili agregacija. Jedan objekat "ima" referencu na drugi objekat kao deo svog stanja.

class Engine {
    void start() {
        System.out.println("Motor je pokrenut");
    }
}

class Car {
    private Engine engine; // Automobil "ima" motor

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

    void drive() {
        engine.start();
        System.out.println("Automobil vozi");
    }
}

Ovde, Car "ima" Engine. Kompozicija podrazumeva jaku vezu (životni ciklus sadržanog objekta zavisi od onoga koji ga sadrži), agregacija je slabija (objekti mogu postojati nezavisno). Primer prikazuje kompoziciju.

Ključne razlike:

  • "Javljam se" (is-a) — nasledjivanje, definiše hijerarhiju tipova.
  • "Imam" (has-a) — kompozicija/agregacija, definiše strukturu objekta uključivanjem drugih objekata.