Junior
Čo znamenajú vzťahy "som" a "mám" v objektovo orientovanom programovaní?
sobes.tech AI
Odpoveď od AI
Vztah "je-" (is-a) je dedičstvo. Odvodená trieda "je" rodičovskou triedou a dedí jej vlastnosti a správanie.
// Rodičovská trieda
class Animal {
void eat() {
System.out.println("Zvieratá jedia");
}
}
// Odvodená trieda
class Dog extends Animal {
void bark() {
System.out.println("Pes šteka");
}
}
V tomto príklade, Dog "je" Animal.
Vztah "mám" (has-a) je kompozícia alebo agregácia. Jeden objekt "má" odkaz na iný objekt ako časť svojho stavu.
class Engine {
void start() {
System.out.println("Motor spustený");
}
}
class Car {
private Engine engine; // Auto "má" motor
public Car() {
this.engine = new Engine();
}
void drive() {
engine.start();
System.out.println("Auto jazdí");
}
}
Tu, Car "má" Engine. Kompozícia implikuje silnú väzbu (životný cyklus vloženého objektu závisí od toho, kto ho obsahuje), agregácia je slabšia (objekty môžu existovať nezávisle). Príklad ukazuje kompozíciu.
Kľúčové rozdiely:
- "Je-" (
is-a) — dedičstvo, definuje hierarchiu typov. - "Mám" (
has-a) — kompozícia/agregácia, definuje štruktúru objektu prostredníctvom začlenenia iných objektov.