Composizione e aggregazione
Le classi e gli oggetti possono essere correlati tra loro. L'ereditarietà descrive una relazione "IS A". UN LEONE È UN ANIMALE. Questa relazione è facilmente espressa usando l'ereditarietà, dove
Animal
sarebbe la classe genitore e
Lion
sarebbe il figlio. Ma non tutte le relazioni nel mondo sono descritte correttamente in questo modo. Ad esempio, una tastiera ha sicuramente qualche relazione con un computer, ma
non è un computer . Le mani hanno qualche relazione con una persona, ma non sono una persona. Questi casi rappresentano un diverso tipo di relazione, non "IS A", ma "HAS A". Le mani non sono una persona, ma una persona HA le mani. Una tastiera non è un computer, ma un computer HA UNA tastiera. "HA UN"
. La differenza tra questi concetti sta nella "rigorosità" delle relazioni. Facciamo un semplice esempio: abbiamo un file
Car
. Ogni macchina ha un motore. Inoltre, ogni auto può trasportare passeggeri. Qual è la differenza fondamentale tra i campi
Engine engine
e
Passenger[] passengers
? Se il passeggero
A
è seduto all'interno di un'auto, ciò non significa che i passeggeri
B
e
C
non possano essere anche nell'auto. Un'auto può ospitare più passeggeri. Inoltre, tutti i passeggeri possono scendere dall'auto, ma continuerà a funzionare senza intoppi. La relazione tra la
Car
classe e l'
Passenger[] passengers
array è meno rigida. Si chiama
aggregazione . Ecco un buon articolo su questo argomento:
Relazioni tra classi (oggetti). Fornisce un altro buon esempio di aggregazione. Supponiamo di avere una
Student
classe che rappresenta uno studente e una
StudentGroup
che rappresenta un gruppo di studenti. Uno studente può essere membro di un club di fisica, di un fan club studentesco di Star Wars o di un comedy club.
La composizione è un tipo di relazione più stretto. Quando si utilizza la composizione, un oggetto ha un altro oggetto, ma non può appartenere a un altro oggetto dello stesso tipo. L'esempio più semplice è il motore di un'auto. Se un'auto ha un motore, quel motore non può appartenere a un'altra auto. Come puoi vedere, quella relazione è molto più stretta di quella di
Car
e
Passengers
.
GO TO FULL VERSION