
- •Лабораторная работа по uml n2 «Работа со связями»
- •1. Ассоциации
- •2. Ограничения ассоциаций
- •В этом примере ограничение ассоциации Обслуживает указывает на то, что БанковскийСлужащий обслуживает клиентов в порядке очереди
- •3. Классы ассоциаций
- •4. Связи
- •5. Кратность
- •6. Квалификатор ассоциации
- •7. Рефлексивные ассоциации
- •8. Наследование и обобщение
- •9. Изучение наследования
- •10. Абстрактные классы
- •11. Зависимости
- •12. Объекты-агрегаты
- •17. Ограничения агрегаций
- •18. Композитные объекты
- •19. Контексты
- •20. Интерфейсы и реализации
- •Класс связан с интерфейсом отношением реализации, которое обозначается пунктирной линией с незакрашенным треугольником, примыкающим к интерфейсу и указывающим на него
- •21. Области видимости
- •Общедоступные и защищенные операции для автомобиля
- •22. Статические и динамические классы
- •Вопросы и ответы
- •Задание
6. Квалификатор ассоциации
Если кратность ассоциации описывается отношением "один ко многим", возникает проблема поиска. Если объект одного класса для выполнения отведенной ему роли в ассоциации должен выбрать конкретный объект другого класса, то он может сделать это на основе некоторого заданного атрибута. Этот атрибут обычно представляет собой идентификатор, а точнее числовой идентификатор. Когда вы резервируете место в гостинице, вам присваивается номер заказа. Если нужно узнать о наличии зарезервированного места, необходимо сообщить номер заказа.
В UML идентифицирующая информация называется квалификатором. Он обозначается небольшим прямоугольником, который прилегает к обозначению класса, выполняющего поиск (рис. 11). Такое изображение позволяет эффективно свести кратность "один ко многим" к случаю "один к одному".
Рис. 11. Квалификатор ассоциации решает проблема/поиска
7. Рефлексивные ассоциации
Иногда класс находится в ассоциации с самим собой. Этот вариант отношения, названный рефлексивной ассоциацией, может возникнуть в том случае, если объекты класса выполняют несколько ролей. Человек в машине может быть пассажиром или водителем. В роли водителя он везет одного или нескольких пассажиров (или не везет никого). На диаграмме этот случай отображается с помощью линии ассоциации, ведущей от прямоугольника класса к этому же прямоугольнику. На линии ассоциации, как и ранее, обозначаются роли, имя ассоциации, ее направление и кратность. Пример такой ассоциации представлен на рис. 12.
Рис. 12. Для случая рефлексивной ассоциации линия проводится от класса к этому же классу. Здесь же можно указать выполняемые роли, имя ассоциации, ее направление и кратность
8. Наследование и обобщение
Одним из признаков объектно-ориентированного подхода является выполнение одного из общеизвестных аспектов повседневной жизни: если вы знаете что-либо о некоторой категории, то автоматически можете перенести эти знания на другие категории. Если известно, что объект относится к бытовой технике, то уже известно, что он имеет выключатель, имя производителя и номер изделия. Если известно, что объект является животным, то заранее ясно, что оно ест, спит, рождается, перемешается в пространстве. При более детальном анализе можно составить список других атрибутов и операций.
В рамках объектно-ориентированного подхода такое положение вещей называется наследованием. В UML для наследования используется термин обобщение. Один класс (дочерний или подкласс) может наследовать атрибуты и операции другого (родительского класса или суперкласса). Родительский класс является более общим по отношению к дочернему.
В отношении обобщения можно сказать, что ребенок способен заменить родителя. Другими словами, везде, где появляется родитель, может появиться и ребенок, а обратное утверждение неверно.
Иерархия наследования не ограничивается двумя уровнями: дочерний класс может выступать в роли родительского класса для другого дочернего класса. Класс Млекопитающее является дочерним классом для класса Животное и родительским для класса Лошадь.
В UML наследование отображается с помощью линии, которая соединяет родительский класс с дочерним. Конец линии, связанный с родительским классом, помечается незакрашенным треугольником, указывающим на родительский класс. Такая связь соответствует отношению является видом. Млекопитающее является видом животного, лошадь является видом млекопитающего. На рис. 13 представлена описанная иерархия наследования и дополнительные классы. Обратите внимание на графическое представление ситуации, когда родительский класс имеет несколько дочерних. Такая конструкция позволяет разгрузить диаграмму. Нужно отметить, что UML не запрещает изображать все без исключения линии и треугольники и не требует указывать наследуемые атрибуты и операции в прямоугольниках подклассов, т.к. они уже представлены в обозначении суперкласса.
Рис. 13. Иерархия наследования в животном мире
При моделировании наследования нужно убедиться, что дочерний класс удовлетворяет требованию "является видом" по отношению к родительскому классу. Если связь классов описывается по-другому, нужно использовать другую ассоциацию.
Дочерний класс часто отличается наличием дополнительных атрибутов и операций. Например, млекопитающее имеет шерсть и дает молоко, а такого атрибута и операции нет в классе Животное.
Класс может не иметь родителя. В этом случае он называется базовым или корневым классом. Класс также может не иметь дочернего класса, и тогда он называется листовым классом. Если класс имеет только одного родителя, то говорят об одиночном наследовании, а если несколько — о множественном.