Sammansättning och aggregering
Klasser och objekt kan relateras till varandra. Arv beskriver ett "IS A"-förhållande. Ett lejon ÄR ETT djur. Detta förhållande uttrycks lätt med hjälp av arv, där
Animal
skulle vara förälderklassen och
Lion
skulle vara barnet. Men inte alla relationer i världen beskrivs korrekt på detta sätt. Till exempel har ett tangentbord definitivt ett förhållande till en dator, men
det är inte en dator . Händer har någon relation med en person, men de är inte en person. Dessa fall representerar en annan typ av relation — inte "ÄR A", utan "HAR A". Händer är inte en person, men en person HAR händer. Ett tangentbord är inte en dator, men en dator HAR ett tangentbord. "HAR EN"
. Skillnaden mellan dessa begrepp ligger i relationernas "strikthet". Låt oss ta ett enkelt exempel: Vi har en
Car
. Varje bil har en motor. Dessutom kan varje bil bära passagerare. Vad är den grundläggande skillnaden mellan
Engine engine
och
Passenger[] passengers
fälten? Om passagerare
A
sitter inne i en bil, betyder det inte att passagerare
B
och
C
inte också kan vara i bilen. En bil kan ta emot flera passagerare. Dessutom kan alla passagerare komma ur bilen, men den kommer att fortsätta att fungera smidigt. Relationen mellan
Car
klassen och
Passenger[] passengers
arrayen är mindre strikt. Det kallas
aggregering . Här är en bra artikel om detta ämne:
Relationer mellan klasser (objekt). Det ger ett annat bra exempel på aggregering. Låt oss säga att vi har en
Student
klass som representerar en elev och en
StudentGroup
som representerar en grupp elever. En student kan vara medlem i en fysikklubb, en Star Wars-studentfanklubb eller en komediklubb.
Komposition är en striktare typ av relation. När man använder komposition har ett objekt ett annat objekt, men det kan inte tillhöra ett annat objekt av samma typ. Det enklaste exemplet är en bilmotor. Om en bil har en motor kan den motorn inte tillhöra en annan bil. Som du kan se är det förhållandet mycket strängare än det för
Car
och
Passengers
.
GO TO FULL VERSION