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.