Sobes.tech
Junior
147

Cosa significano le relazioni "sono" e "ho" nella programmazione orientata agli oggetti?

Risposta dell'AI

sobes.tech AI

La relazione "è-una" (is-a) è ereditarietà. La classe derivata "è" una classe genitore e eredita le sue proprietà e comportamenti.

// Classe genitore
class Animal {
    void eat() {
        System.out.println("L'animale mangia");
    }
}

// Classe derivata
class Dog extends Animal {
    void bark() {
        System.out.println("Il cane abbaia");
    }
}

In questo esempio, Dog "è" Animal.

La relazione "ho" (has-a) è composizione o aggregazione. Un oggetto "ha" un riferimento a un altro oggetto come parte del suo stato.

class Engine {
    void start() {
        System.out.println("Motore avviato");
    }
}

class Car {
    private Engine engine; // La macchina "ha" un motore

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

    void drive() {
        engine.start();
        System.out.println("L'auto sta guidando");
    }
}

Qui, Car "ha" Engine. La composizione implica una relazione forte (il ciclo di vita dell'oggetto contenuto dipende da quello che lo contiene), l'aggregazione è più debole (gli oggetti possono esistere indipendentemente). L'esempio mostra composizione.

Differenze chiave:

  • "È-una" (is-a) — ereditarietà, definisce una gerarchia di tipi.
  • "Ha" (has-a) — composizione/aggregazione, definisce la struttura dell'oggetto attraverso l'inclusione di altri oggetti.