Състав и агрегация
Класовете и обектите могат да бъдат свързани помежду си. Наследяването описва връзка "Е А". Лъвът Е животно. Тази връзка лесно се изразява с помощта на наследяване, където
Animal
ще бъде родителският клас и
Lion
ще бъде дъщерният. Но не всяка връзка в света е правилно описана по този начин. Например, клавиатурата определено има няHowва връзка с компютъра, но
не е компютър . Ръцете имат няHowва връзка с човек, но не са човек. Тези случаи представляват различен тип връзка — не „Е А“, а „ИМА А“. Ръцете не са човек, но човек ИМА ръце. Клавиатурата не е компютър, но компютърът ИМА клавиатура. "ИМА"
. Разликата между тези понятия е в "строгостта" на отношенията. Нека вземем прост пример: Имаме
Car
. Всяка кола има двигател. Освен това всяка кола може да превозва пътници. Каква е основната разлика между полетата
Engine engine
и
Passenger[] passengers
? Ако пътникът
A
седи вътре в колата, това не означава, че пътниците
B
и
C
също не могат да бъдат в колата. Една кола може да побере няколко пътника. Нещо повече, всички пътници могат да излязат от колата, но тя ще продължи да функционира гладко. Връзката между
Car
класа и
Passenger[] passengers
масива е по-малко строга. Нарича се
агрегация . Ето една добра статия по тази тема:
Връзки между класове (обекти). Той предоставя друг добър пример за агрегиране. Да кажем, че имаме
Student
клас, който представлява студент, и клас
StudentGroup
, който представлява група студенти. Ученикът може да бъде член на клуб по физика, студентски фен клуб на Междузвездни войни or комедиен клуб.
Композицията е по-строг тип отношения. Когато използвате композиция, един обект има друг обект, но не може да принадлежи на друг обект от същия тип. Най-простият пример е автомобилен двигател. Ако една кола има двигател, тогава този двигател не може да принадлежи на друга кола. Както можете да видите, тази връзка е много по-строга от тази на
Car
и
Passengers
.
![Отношения между класове. Наследяване, състав и агрегация - 4]()
GO TO FULL VERSION