Классы, подобно объектам, не существуют в изоляции. Напротив, с отдельной проблемной областью связывают ключевые абстракции, отношения между которыми формируют структуру из классов системы.
Всего существует четыре основных вида отношений между классами:
ассоциация(фиксирует структурные отношения — связи между экземплярами классов);
зависимость (отображает влияние одного класса на другой класс);
обобщение-специализация («is а»-отношение);
целое-часть («part of»-отношение).
Для покрытия основных отношений большинство объектно-ориентированных языков программирования поддерживает следующие отношения:
1) ассоциация;
2) наследование;
3) агрегация;
4) зависимость;
5) конкретизация;
6) метакласс;
7) реализация.
Ассоциации обеспечивают взаимодействия объектов, принадлежащих разным классам. Они являются клеем, соединяющим воедино все элементы программной системы. Благодаря ассоциациям мы получаем работающую систему. Без ассоциаций система превращается в набор изолированных классов-одиночек.
Наследование — наиболее популярная разновидность отношения обобщение-специализация. Альтернативой наследованию считается делегирование. При делегировании объекты делегируют свое поведение родственным объектам. При этом классы становятся не нужны.
Агрегация обеспечивает отношения целое-часть, объявляемые для экземпляров классов.
Зависимость часто представляется в виде частной формы — использования, которое фиксирует отношение между клиентом, запрашивающим услугу, и сервером, предоставляющим эту услугу.
Конкретизация выражает другую разновидность отношения обобщение-специализация. Применяется в таких языках, как Ada 95, C++, Эйфель.
Отношения метаклассов поддерживаются в языках SmallTalk и CLOS. Метакласс — это класс классов, понятие, позволяющее обращаться с классами как с объектами.
Реализация определяет отношение, при котором класс-приемник обеспечивает свою собственную реализацию интерфейса другого класса-источника. Иными словами, здесь идет речь о наследовании интерфейса. Семантически реализация — это «скрещивание» отношений зависимости и обобщения-специализации.
Ход работы:
Задание 1. Наберите и проанализируйте программу. Определите в данной программе принципы работы созданных классов. Объясните результаты выполнения программы.
В программе объявляется класс "Person", которому поставлены в соответствие два поля — "Name" и "Forname" — и методы — "Einlesen" и "Ausgaben". Как видно из текста программы, методы только объявляются в декларации класса, а полностью специфицируются (описываются) несколько позже. В таких спецификациях имя метода (процедуры или функции) предваряется префиксом —именем класса, к которому относится данный метод. Это необходимо, т.к. в разных классах могут использоваться методы, разные по содержанию, но одинаковые по именам. Без префикса привязка методов к своим классам была бы невозможной. В программе объявлен объект "Pers", принадлежащий классу "Person". В главной программе методы "Einlesen" и "Ausgeben" применены к этому объекту "Pers".
Класс "Person" в определенном смысле может рассматриваться как класс верхнего уровня. Персоны могут обладать различными качествами, что позволяет выделять их из класса "Person". Так, совокупность персон (составляющих класс "Person") может быть поделена на два подкласса — "Kraftfahrer" (водитель) и "Nichkraftfahrer" (неводитель). Объекты обоих подклассов имеют те же поля, что и объекты класса "Person": поле "Name" (фамилия) и " Vorname" (имя). Кроме того, для подклассов можно вывести дополнительные поля, отсутствующие в классе верхнего уровня. Так, для класса "Person" можно объявить, что подкласс водителей имеет дополнительные поля идентификатора водительских прав и марки автомобиля.