Sobes.tech
Junior

Mit jelentenek az "vagyok" és "van" kapcsolatok az objektumorientált programozásban?

sobes.tech MI

Válasz az MI-től

Az "-a" (is-a) kapcsolat öröklés. Az alosztály "egy" szülőosztály, és örökli annak tulajdonságait és viselkedését.

// Szülőosztály
class Animal {
    void eat() {
        System.out.println("Állat eszik");
    }
}

// Alosztály
class Dog extends Animal {
    void bark() {
        System.out.println("Kutya ugat");
    }
}

Ebben a példában, a Dog "egy" Animal.

A "birtoklás" (has-a) kapcsolat kompozíció vagy aggregáció. Egy objektum "birtokol" egy másik objektumra való hivatkozást, mint állapotának részét.

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

class Car {
    private Engine engine; // Az autó "birtokol" egy motort

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

    void drive() {
        engine.start();
        System.out.println("Az autó halad");
    }
}

Itt, a Car "birtokol" egy Engine-t. A kompozíció erős kapcsolatot jelent (a tartalmazott objektum életciklusa függ a tartalmazótól), az aggregáció gyengébb (az objektumok függetlenül is létezhetnek). A példa a kompozíciót mutatja.

Fő különbségek:

  • "Egy" (is-a) — öröklés, típushierarchiát határoz meg.
  • "Birtokol" (has-a) — kompozíció/aggregáció, az objektum szerkezetét más objektumok bevonásával határozza meg.