На этом шаге рассмотрим отношения между классами.
Рассмотрим сходства и различия между следующими классами: цветы, ромашки, красные розы, желтые розы, лепестки и божьи коровки. Мы можем заметить следующее:
Из этого простого примера следует, что классы, как и объекты, не существуют изолированно. В конкретной проблемной области, как правило, ключевые абстракции взаимодействуют друг с другом, образуя структуру класса [LaLonde, W. April 1989. Designing Families of Data Types Using Exemplars. ACM Transactions on Programming Languages and Systems, vol. 11(2), p. 214.].
Отношения между классами устанавливаются по двум причинам. Во-первых, классы могут обладать общими свойствами. Например, ромашки и розы — это разновидности цветов, т.е. они имеют ярко окрашенные лепестки, благоухают и т.д. Во-вторых, между классами может существовать семантическая связь. Например, красные розы больше похожи на желтые розы, чем на ромашки, но в то же время у роз и ромашек больше общего, чем у цветов и лепестков. Кроме того, между цветами и божьими коровками существует симбиотическая связь: божьи коровки защищают цветы от некоторых вредителей, а сами растения служат источником пищи для божьих коровок.
Существует три основных типа отношений между классами [Rumbaugh, J. April 1988. Relational Database Design Using an Object-Oriented Methodology. Communications of the ACM vol. 31(4), p. 417.]. Первый тип — "обобщение/специализация" (generalization/specialization), или "is а". Например, розы — это цветы, т.е. розы являются специализированным подклассом более общего класса "цветы". Второй тип — "целое/часть" (whole/part), или "part of". Так, лепестки являются частью цветов. Третий тип — ассоциация, т.е. семантическая зависимость между классами, которые больше никак не связаны друг с другом, например, между божьими коровками и цветами. Другой пример ассоциации представляет собой отношение между розами и свечами, которые можно одновременно использовать для украшения стола.
На следующем шаге рассмотрим один из типов отношений между классами - ассоциацию.