Sobes.tech
Junior

O que significam as relações "sou" e "tenho" na programação orientada a objetos?

sobes.tech IA

Resposta da IA

A relação "é-uma" (is-a) é herança. A classe derivada "é" uma classe-mãe e herda as suas propriedades e comportamentos.

// Classe-mãe
class Animal {
    void eat() {
        System.out.println("Animal come");
    }
}

// Classe derivada
class Dog extends Animal {
    void bark() {
        System.out.println("Cão late");
    }
}

Neste exemplo, Dog "é" Animal.

A relação "tenho" (has-a) é composição ou agregação. Um objeto "tem" uma referência a outro objeto como parte do seu estado.

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

class Car {
    private Engine engine; // Carro "tem" um motor

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

    void drive() {
        engine.start();
        System.out.println("Carro a conduzir");
    }
}

Aqui, Car "tem" Engine. A composição implica uma relação forte (o ciclo de vida do objeto contido depende do que o contém), a agregação é mais fraca (os objetos podem existir independentemente). O exemplo mostra composição.

Diferenças principais:

  • "É-uma" (is-a) — herança, define uma hierarquia de tipos.
  • "Tenho" (has-a) — composição/agregação, define a estrutura do objeto através da inclusão de outros objetos.