|
Отношения
"быть частью" и "являться"
Теперь у нас появились две различные
иерархии классов. Одну иерархию образует наследование классов, другую — вложенность
классов.
Определив, какие классы будут написаны
в вашей программе, и сколько их будет, подумайте, как спроектировать взаимодействие
классов? Вырастить пышное генеалогическое дерево классов-наследников или расписать
матрешку вложенных классов?
Теория ООП советует прежде всего
выяснить, в каком отношении находятся ваши классы р и Q — в отношении "класс
Q является экземпляром класса р" ("a class Q is a class р") или
в отношении "класс Q — часть класса р" ("a class Q has a class
P").
Например: "Собака является
животным" или "Собака — часть животного"? Ясно, что верно первое
отношение "is-a", поэтому мы и определили класс Dog как расширение
класса Pet.
Отношение "is-a" — это
отношение "обобщение-детализация", отношение большей или меньшей абстракции,
и ему соответствует наследование классов.
Отношение "has-a" — это
отношение "целое-часть", ему соответствует вложение.
|