Виды отношений между объектами В поле зрения разработчика ПО находятся не объекты-одиночки, а взаимодействующие объекты, ведь именно взаимодействие объектов реализует поведение системы. У Г. Буча есть отличная цитата из Галла: «Самолет — это набор элементов, каждый из которых по своей природе стремится упасть на землю, но ценой совместных непрерывных усилий преодолевает эту тенденцию». Отношения между парой объектов основываются на взаимной информации о разрешенных операциях и ожидаемом поведении. Особо интересны два вида отношений между объектами: связи и агрегация.
Связи
Связь — это физическое или понятийное соединение между объектами. Объект сотрудничает с другими объектами через соединяющие их связи. Связь обозначает соединение, с помощью которого:
• объект-клиент вызывает операции объекта-поставщика;
• один объект перемещает данные к другому объекту.
Можно сказать, что связи являются рельсами между станциями-объектами, по которым ездят «трамвайчики сообщений». Связи между объектами показаны на рис.5 с помощью соединительных линий. Связи представляют возможные пути для передачи сообщений. Сами сообщения показаны стрелками, отмечающими их направления, и помечены именами вызываемых операций.
Как участник связи объект может играть одну из трех ролей:
• актер — объект, который может воздействовать на другие объекты, но никогда не подвержен воздействию других объектов;
• сервер — объект, который никогда не воздействует на другие объекты, он толь ко используется другими объектами;
• агент — объект, который может как воздействовать на другие объекты, так и использоваться ими. Агент создается для выполнения работы от имени актера или другого агента.
На рис. 5 Том — это актер, Мери, Колонки — серверы, Музыкальный центр — агент.
Актер
|
| Сервер
| | Том
| танцевать()
| Мери
| |
|
| |
|
|
|
|
|
|
|
|
Сервер
| | Муз. центр
| звучать()
| Колонки
| | Агент
|
| |
|
|
|
| | | | | | | Рис.5. Связи между объектами
2.Агрегация
Связи обозначают равноправные (клиент-серверные) отношения между объектами Агрегация обозначает отношения объектов в иерархии «целое/часть». Агрегация обеспечивает возможность перемещения от целого (агрегата) к его частям (свойствам).
Агрегация может обозначать, а может и не обозначать физическое включение части в целое. На рис.6 приведен пример физического включения (композиции) частей (Двигателя, Сидений, Колес) в агрегат Автомобиль. В этом случае говорят, что части включены в агрегат по величине.
На рис.7 приведен пример нефизического включения частей (Студента, Преподавателя) в агрегат Колледж. Очевидно, что Студент и Преподаватель являются элементами Вуза, но они не входят в него физически. В этом случае говорят, что части включены в агрегат по ссылке.
Целое
часть часть часть
Рис.6. Физическое включение частей в агрегат
Рис.7. Нефизическое включение частей в агрегат
Итак, между объектами существуют два вида отношений — связи и агрегация. Какое из них выбрать? При выборе вида отношения должны учитываться следующие факторы:
• связи обеспечивают низкое сцепление между объектами;
• агрегация инкапсулирует части как секреты целого.
Классы
Понятие, характеристика
Понятия объекта и класса тесно связаны. Тем не менее, существует важное различие между этими понятиями. Класс — это абстракция существенных характеристик объекта. Класс — описание множества объектов, которые разделяют одинаковые свойства, операции, отношения и семантику (смысл). Любой объект — просто экземпляр класса. Как показано на рис. 8, различают
• внутреннее представление класса (реализацию)
• внешнее представление класса (интерфейс).
Интерфейс объявляет возможности (услуги) класса, но скрывает его структуру и поведение. Иными словами, интерфейс демонстрирует внешнему миру абстракцию класса, его внешний облик. Интерфейс в основном состоит из объявлений всех операций, применимых к экземплярам класса. Он может также включать объявления типов, переменных, констант и исключений, необходимых для полноты данной абстракции. КЛАСС
| интерфейсные
| Части
| Публичная
|
| Защищенная
|
| Приватная
| Реализация
|
Рис. 8. Структура представления класса
Интерфейс может быть разделен на 3 части:
- публичную (public), объявления которой доступны всем клиентам;
- защищенную (protected), объявления которой доступны только самому классу,его подклассам и друзьям;
- приватную (private), объявления которой доступны только самому классу и его
друзьям. Другом класса называют класс, который имеет доступ ко всем частям этого класса (публичной, защищенной и приватной). Иными словами, от друга у класса нет секретов. Другом класса может быть и свободная подпрограмма.
Реализация класса описывает секреты поведения класса. Она включает реализации всех операций, определенных в интерфейсе класса.
|