Object relations
Objektum-kapcsolatok Java-ban
1. Öröklés (Inheritance) — is-a
Az alosztály egy fajtája az ősosztálynak. Viselkedést és állapotot örököl, de specializálhatja azt.
Használd, ha az alosztály valóban
is-aviszonyban áll az őssel — nem csak kényelemből.
class Animal {
void breathe() { System.out.println("breathing"); }
}
class Dog extends Animal {
void bark() { System.out.println("woof"); }
}
// Dog IS-A Animal
Hátrány: szoros csatolás, törékeny bázisosztály probléma.
2. Kompozíció (Composition) — part-of / has-a (erős)
Az objektum részét képezi egy másik objektumnak, és nem létezhet önállóan — az életciklusuk össze van kötve. Ha az egész megszűnik, a rész is megszűnik.
Preferált az örökléssel szemben, ha a cél viselkedés-újrafelhasználás.
class Heart {
void beat() { System.out.println("lub-dub"); }
}
class Human {
private final Heart heart = new Heart(); // szív nem létezik ember nélkül
void live() { heart.beat(); }
}
// Heart IS PART-OF Human
3. Aggregáció (Aggregation) — has-a (gyenge)
Az objektum tartalmaz / irányít más objektumokat, de azok önállóan is létezhetnek — az életciklusuk független. Jellemzően egy 1..* jellegű, gyenge tulajdonlási viszony.
class Player { String name; }
class Team {
private List<Player> players; // Team tudja ki van benne
// Player nem tud a Team-ről
}
// Team HAS-A Players, de a Player-ek nem szűnnek meg a Team-mal
4. Asszociáció (Association) — „ismeri egymást"
Két objektum kapcsolatban áll egymással, de sem életciklus-függőség, sem tulajdonlás nincs köztük. Tipikusan many-to-many, laza, egyenrangú viszony — egyik fél sem „tartalmazza" a másikat.
class Doctor {
private List<Patient> patients; // ismeri a pácienseket
}
class Patient {
private Doctor doctor; // ismeri az orvosát
}
// Kétirányú asszociáció — egyik sem tulajdonosa a másiknak
// Egy orvosnak több páciens, egy páciensnek több orvos is lehet
Összefoglalás
| Kapcsolat | Viszony | Életciklus-függőség | Tipikus multiplicitás |
|---|---|---|---|
| Öröklés | is-a | Szoros | — |
| Kompozíció | part-of / has-a | Erős (össze van kötve) | whole → part |
| Aggregáció | has-a | Gyenge (független) | 1 → 0..* |
| Asszociáció | „ismeri egymást" | Nincs | * ↔ * |