Втб программа государственного софинансирования пенсии www.npfo.ru.
|
Основы объектно-ориентированного представления программных систем - Виды отношений между классами |
Страница 9 из 39
Виды отношений между классами
Классы, подобно объектам, не существуют в изоляции. Напротив, с отдельной проблемной областью связывают ключевые абстракции, отношения между которыми формируют структуру из классов системы. Всего существует четыре основных вида отношений между классами: q ассоциация (фиксирует структурные отношения — связи между экземплярами классов); q зависимость (отображает влияние одного класса на другой класс); q обобщение-специализация («is а»-отношение); q целое-часть («part of»-отношение). Для покрытия основных отношений большинство объектно-ориентированных языков программирования поддерживает следующие отношения: 1) ассоциация; 2) наследование; 3) агрегация; 4) зависимость; 5) конкретизация; 6) метакласс; 7) реализация. Ассоциации обеспечивают взаимодействия объектов, принадлежащих разным классам. Они являются клеем, соединяющим воедино все элементы программной системы. Благодаря ассоциациям мы получаем работающую систему. Без ассоциаций система превращается в набор изолированных классов-одиночек. Наследование — наиболее популярная разновидность отношения обобщение-специализация. Альтернативой наследованию считается делегирование. При делегировании объекты делегируют свое поведение родственным объектам. При этом классы становятся не нужны. Агрегация обеспечивает отношения целое-часть, объявляемые для экземпляров классов. Зависимость часто представляется в виде частной формы — использования, которое фиксирует отношение между клиентом, запрашивающим услугу, и сервером, предоставляющим эту услугу. Конкретизация выражает другую разновидность отношения обобщение-специализация. Применяется в таких языках, как Ada 95, C++, Эйфель. Отношения метаклассов поддерживаются в языках SmallTalk и CLOS. Метакласс — это класс классов, понятие, позволяющее обращаться с классами как с объектами. Реализация определяет отношение, при котором класс-приемник обеспечивает свою собственную реализацию интерфейса другого класса-источника. Иными словами, здесь идет речь о наследовании интерфейса. Семантически реализация — это «скрещивание» отношений зависимости и обобщения-специализации.
Ассоциации классов
Ассоциация обозначает семантическое соединение классов. Пример: в системе обслуживания читателей имеются две ключевые абстракции — Книга и Библиотека. Класс Книга играет роль элемента, хранимого в библиотеке. Класс Библиотека играет роль хранилища для книг.
Рис. 9.10. Ассоциация
Отношение ассоциации между классами изображено на рис. 9.10. Очевидно, что ассоциация предполагает двухсторонние отношения: q для данного экземпляра Книги выделяется экземпляр Библиотеки, обеспечивающий ее хранение; q для данного экземпляра Библиотеки выделяются все хранимые Книги. Здесь показана ассоциация один-ко-многим. Каждый экземпляр Книги имеет указатель на экземпляр Библиотеки. Каждый экземпляр Библиотеки имеет набор указателей на несколько экземпляров Книги. Ассоциация обозначает только семантическую связь. Она не указывает направление и точную реализацию отношения. Ассоциация пригодна для анализа проблемы, когда нам требуется лишь идентифицировать связи. С помощью создания ассоциаций мы приводим к пониманию участников семантических связей, их ролей, мощности (количества элементов). Ассоциация один-ко-многим, введенная в примере, означает, что для каждого экземпляра класса Библиотека есть 0 или более экземпляров класса Книга, а для каждого экземпляра класса Книга есть один экземпляр Библиотеки. Эту множественность обозначает мощность ассоциации. Мощность ассоциации бывает одного из трех типов: q один-к-одному; q один-ко-многим; q многие-ко-многим. Примеры ассоциаций с различными типами мощности приведены на рис. 9.11, они имеют следующий смысл: q у европейской жены один муж, а у европейского мужа одна жена; q у восточной жены один муж, а у восточного мужа сколько угодно жен; q у заказа один клиент, а у клиента сколько угодно заказов; q человек может посещать сколько угодно зданий, а в здании может находиться сколько угодно людей.
|