
- •4. Объектно-ориентированное проектирование, основы uml
- •4.1 Значение моделирования
- •4.2 Принципы моделирования
- •4.3 Объектное моделирование
- •4.4 Принципы моделирования с использованием uml
- •4.5 Основные диаграммы языка uml
- •4.6 Сущности uml
- •4.7 Отношения uml
- •5. Диаграмма классов и моделирование предметной области
- •5.1 Общие сведения
- •5.2 Класс
- •5.3 Имя класса
- •5.4 Атрибуты класса
- •5.5 Операции класса
- •5.6 Отношения между классами
- •5.7 Отношение зависимости
- •5.8 Зависимость между пакетами
- •5.9 Отношение ассоциации
- •5.10 Отношение агрегации
- •5.11 Отношение композиции
- •5.12 Отношение обобщения
- •5.13 Рекомендации по построению диаграммы классов
- •6. Диаграмма состояний
- •6.1 Общие сведения
- •6.2 Автоматы
- •6.3 Состояние
- •6.4 Начальное и конечное состояния
- •6.5 Переход
- •6.6. Составное состояние и подсостояние
- •6.7. Параллельные подсостояния
- •6.8 Рекомендации
- •7 Диаграмма деятельности
- •7.1 Общие сведения
- •7.2 Состояние действия и состояние деятельности
- •7.3 Переход
- •7.4 Ветвление
- •7.5. Разделение и слияние
- •7.6 Дорожки
- •7.7. Объекты
- •7.8. Рекомендации по построению диаграмм деятельности
- •8. Моделирование взаимодействия объектов. Диаграммы последовательности и кооперации (коммуникации)
- •8.1 Диаграмма последовательности, общие сведения
- •8.2 Объекты
- •8.3 Линия жизни объекта
- •8.4 Фокус управления
- •8.5 Сообщения
- •8.6 Ветвление потока управления
- •8.7 Стереотипы сообщений
- •8.8 Временные ограничения
- •8.9 Пример построения диаграммы последовательности
- •8.10. Рекомендации по построению диаграмм последовательности
- •8.11 Общие сведения о диаграмме кооперации (коммуникации)
- •8.12 Кооперация
- •8.13 Объекты
- •8.14 Мультиобъекты
- •8.15. Активные объекты
5.6 Отношения между классами
Кроме внутреннего устройства или структуры классов на диаграмме указываются различные отношения. При этом совокупность типов таких отношений фиксирована в языке UML и предопределена семантикой этих типов отношений. Базовыми отношениями в языке UML являются:
Отношение зависимости (dependencyrelationship)
Отношение ассоциации (associationrelationship)
Отношение обобщения (generalizationrelationship)
Отношение реализации (realizationrelationship)
Каждое из этих отношений имеет собственное графическое представление на диаграмме, которое отражает взаимосвязи между объектами соответствующих классов.
5.7 Отношение зависимости
Отношение зависимости в общем случае указывает некоторое семантическое отношение между двумя элементами модели или двумя множествами таких элементов, которое не является отношением ассоциации, обобщения или реализации. Отношение зависимости используется в такой ситуации, когда некоторое изменение одного элемента модели может потребовать изменения другого зависимого от него элемента модели.
Отношение зависимости графически изображается пунктирной линией между соответствующими элементами со стрелкой на одном из ее концов. На диаграмме классов данное отношение связывает отдельные классы между собой, при этом стрелка направлена от класса-клиента зависимости к независимому классу или классу-источнику, как показано на рис. 5.3. На данном рисунке изображены два класса: Класс_А и Класс_Б, при этом Класс_Б является источником некоторой зависимости, а Класс_А — клиентом этой зависимости.
Рисунок 5.3. Графическое изображение отношения зависимости на диаграмме классов
В качестве класса-клиента и класса-источника зависимости могут выступать целые множества элементов модели. В этом случае одна линия со стрелкой, выходящая от источника зависимости, расщепляется в некоторой точке на несколько линий, каждая из которых имеет отдельную стрелку для класса-клиента. Например, если функционирование Класса_С зависит от особенностей реализации Класса_А и Класса_B, то данная зависимость может быть изображена, как показано на рис. 5.4.
Рисунок 5.4. Графическое представление зависимости между несколькими классами
Стрелка может помечаться необязательным ключевым словом и необязательным индивидуальным именем. Для отношения зависимости предопределены ключевые слова, которые обозначают некоторые специальные виды зависимостей. Эти ключевые слова (стереотипы) записываются в кавычках рядом со стрелкой, которая соответствует данной зависимости. Примеры стереотипов для отношения зависимости представлены ниже:
"access" — служит для обозначения доступности открытых атрибутов и операций класса-источника для классов-клиентов;
"bind" — класс-клиент может использовать некоторый шаблон для своей последующей параметризации;
"derive" — атрибуты класса-клиента могут быть вычислены по атрибутам класса-источника;
"import" — открытые атрибуты и операции класса-источника становятся частью класса-клиента, как если бы они были объявлены непосредственно в нем;
"refine" — указывает, что класс-клиент служит уточнением класса-источника в силу причин исторического характера, когда появляется дополнительная информация в ходе работы над проектом.
В качестве примера предположим, что между классами Жилец и Дом существует отношение зависимости, как показано на рис. 5.5.
Рисунок 5.5. Пример отношения зависимости.
Делается предположение, что существуют некоторые способы извещения Жильца о существовании Дома. Направление стрелки показывает, что класс Жилец зависит от класса Дом. Иначе говоря, существует диаграмма последовательности или кооперации, на которой Жилец посылает Дому сообщение (эти диаграммы будут рассмотрены позже). Если бы между ними была обыкновенная ассоциация, Дом был бы атрибутом класса Жилец, и для передачи сообщения Дому класс Жилец должен был бы только обратиться к своему собственному атрибуту. Для отношения зависимости, однако, такой механизм не реализуется.
Класс Жилец должен узнавать о Доме одним из трех способов. Во-первых, класс Дом можно сделать глобальным, и тогда Жилец будет знать о его существовании. Во-вторых, Дом можно инстанцировать как локальную переменную внутри операции класса Жилец. Наконец, Дом можно передавать операциям класса Жилец в качестве параметра. При наличии на диаграмме отношения зависимости необходимо следовать одному из трех указанных подходов.
Отличие отношения зависимости от отношения ассоциации состоит в том, что ассоциации могут быть двунаправленными, но зависимости всегда однонаправленные. Кроме того, зависимости часто используются для описания отношений между пакетами.