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.