Отношения «быть частью» и «являться»

 

Теперь у нас появились две различные иерархии классов. Одну иерархию образует наследование классов, другую — вложенность классов.

Определив, какие классы будут написаны в вашей программе, и сколько их будет, подумайте, как спроектировать взаимодействие классов? Вырастить пышное генеалогическое дерево классов-наследников или расписать матрешку вложенных классов?

Теория ООП советует прежде всего выяснить, в каком отношении находятся ваши классы р и Q — в отношении «класс Q является экземпляром класса р» («a class Q is a class р») или в отношении «класс Q — часть класса р» («a class Q has a class P»).

Например: «Собака является животным» или «Собака — часть животного»? Ясно, что верно первое отношение «is-a», поэтому мы и определили класс Dog как расширение класса Pet.

Отношение «is-a» — это отношение «обобщение-детализация», отношение большей или меньшей абстракции, и ему соответствует наследование классов.

Отношение «has-a» — это отношение «целое-часть», ему соответствует вложение.