Sobes.tech
Junior

Ce înseamnă relațiile "sunt" și "am" în programarea orientată pe obiecte?

sobes.tech AI

Răspuns de la AI

Relația "este-un" (is-a) este moștenire. Clasa derivată "este" o clasă părinte și moștenește proprietățile și comportamentul acesteia.

// Clasa părinte
class Animal {
    void eat() {
        System.out.println("Animalul mănâncă");
    }
}

// Clasa derivată
class Dog extends Animal {
    void bark() {
        System.out.println("Câinele latră");
    }
}

În acest exemplu, Dog "este" Animal.

Relația "am" (has-a) este compoziție sau agregare. Un obiect "are" o referință la alt obiect ca parte a stării sale.

class Engine {
    void start() {
        System.out.println("Motorul pornește");
    }
}

class Car {
    private Engine engine; // Mașina "are" un motor

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

    void drive() {
        engine.start();
        System.out.println("Mașina merge");
    }
}

Aici, Car "are" Engine. Compoziția implică o relație puternică (ciclul de viață al obiectului conținut depinde de cel care îl conține), agregarea este mai slabă (obiectele pot exista independent). Exemplul arată compoziție.

Diferențe cheie:

  • "Este-un" (is-a) — moștenire, definește o ierarhie de tipuri.
  • "Are" (has-a) — compoziție/agregare, definește structura obiectului prin includerea altor obiecte.