
- •Тема 5.2. Теоретические основы объектно-ориентированного программирования
- •5.2.1. Основные определения
- •5.2.2. Объектно-ориентированная декомпозиция и объектно-ориентированные модели
- •5.2.3. Объектная модель и ее составные части
- •5.2.4. Средства uml для моделирования классов и их отношений
- •5.2.4.1. Введение в uml
- •5.2.4.2. Статическое представление системы в диаграммах классов
- •5.2.4.3. Визуализация класса
- •5.2.4.4. Уровни представления
- •5.2.4.5. Идентификация классов
- •5.2.4.6. Отношения
- •5.2.4.7. Наследование и обобщение
- •5.2.4.7. Абстрактные классы
- •5.2.4.8. Агрегация и композиция
- •5.2.4.9. Ассоциации
- •5.2.4.10. Классы ассоциаций
- •5.2.4.11 Кратность
- •5.2.4.13. Интерфейс и реализация
- •5.2.4.14. Области видимости
- •5.2.4.15. Зависимости
- •5.2.5. Визуализация существующего кода.
- •Практическое руководство. Поиск кода с помощью обозревателя архитектуры
- •Открытие обозревателя архитектуры
- •Обозреватель архитектуры: домены, представления, узлы, типы узлов и типы ссылок
- •Поиск исходного кода в решении Visual Studio
- •Представление классов в обозревателе архитектуры
- •Поиск кода в решении
- •Поиск скомпилированного кода
- •5.2.6. Visual Studio 2010 - uml моделирования проектов
5.2.4.10. Классы ассоциаций
Подобно классам, ассоциация может иметь атрибуты и операции. В этом случае можно говорить о классе ассоциации. Для отображения класса ассоциации используются обозначения обычного класса с добавлением пунктирной линии, соединяющей его с линией ассоциации. Класс ассоциации может быть связан с другими классами. На рис. 5.2-29 показан класс ассоциации Играет в между игроком и командой. Так как профессиональный игрок связан с командой контрактом, то возникает класс ассоциации Контракт, который, в свою очередь, связан с классом ГлавныйМенеджер.
Рис. 5.2-29. Класс ассоциации Контракт связан с ней пунктирной линией, и может быть связан с другими классами.
5.2.4.11 Кратность
Ассоциация между объектами Игрок и Команда пока предполагает, что два класса находятся в отношении «один к одному». Здравый смысл подсказывает, что это не единственный вариант взаимосвязи. В баскетбольной команде пять человек, не считая запасных игроков. Ассоциация должна учитывать этот факт. С другой стороны, игрок может играть только в одной команде, что тоже должно быть учтено в ассоциации.
Приведенное отношение является примером разной кратности, которая означает количество объектов одного класса, связанных с одним объектом другого. Чтобы представить это количество на диаграмме, определенное число можно поместить под (над) линией ассоциации возле соответствующего класса. Один класс может быть связан с другим различными способами: «один к одному», «один ко многим», «один к нескольким», «один к ограниченному интервалу» (например, «один к 5.. 10»), «один к заданному количеству п" или «один к набору» (например, «один к 9 или 10»). Для представления понятия «много» в UML используется символ звездочки (*). Логическое ИЛИ передается двумя обозначениями: с помощью двух точек (1. . *), что означает «один или более», или запятой (5,10), что означает «5 или 10». Если класс А находится в отношении «один к 0 или 1» с классом Б, то последний называется необязательным для класса А. На рис. 5.2-30 показаны изображения возможных значений кратности.
Рис. 5.2-30. Возможные значения кратности и их представления в UML
5.2.4.12. Рефлексивные ассоциации
Иногда класс находится в ассоциации с самим собой. Этот вариант отношения, названный рефлексивной ассоциацией, может возникнуть в том случае, если объекты одного класса выполняют несколько ролей. Человек в машине может быть пассажиром или водителем. В роли водителя он везет одного или нескольких пассажиров (или не везет никого). На диаграмме этот случай отображается с помощью линии ассоциации, ведущей от прямоугольника класса к этому же прямоугольнику. На линии ассоциации, как обычно, обозначаются роли, имя ассоциации, ее направление и кратность. Пример такой ассоциации представлен на рис. 5.2-31
Рис. 5.2-31. Пример рефлексивной ассоциации
На аналитическом уровне ассоциации представляют собой логические связи между объектами. На этом уровне можно ограничиться только теми ассоциациями, которые несут информацию о логике системы, и не учитывать их направления или особенности реализации. Избыточные вспомогательные ассоциации здесь излишни, так как не несут логической информации.
На стадии проектирования ассоциации отражают проектные решения, касающиеся структуры данных и разделения ответственности между классами. Для эффективного доступа к объекту и для локализации информации в конкретном классе в модель можно включать избыточные ассоциации. На стадии проектирования допускающая навигацию ассоциация является информацией, доступной классу. Однако эта информация в разных языках программирования будет выражена по-разному – как указатель, класс, встроенный в другой класс, или даже отдельный объект – таблица. Прочие свойства включают в себя также видимость и изменяемость связей.