Конспект лекции «Сущности и отношения на диаграмме классов»
Классификатор — это дескриптор множества однотипных объектов
→ может иметь экземпляры
действующее лицо (actor), вариант использования (use case), артефакт (artifact), тип данных (data type), ассоциация (association), класс ассоциации (association class), интерфейс (interface), класс (class), кооперация (collaboration), компонент (component), узел (node) и др., (сигнал (signal), … ) применяющиеся в процессе моделирования поведения.
Свойства классификаторов
1. Имя
2. Экземпляры
3. Абстрактный
не может иметь прямых экземпляров
имя выделяется курсивом
4. Видимость
может ли составляющая одного классификатора использоваться в другом
открытый + public — виден везде
защищенный # protected — виден в контейнере
закрытый — private — виден в своем элементе
пакетный ∼package — виден в своем пакете
5. Область действия
определяет, как проявляет себя составляющая классификатора в экземплярах: используется общее значение или у каждого экземпляра свое
экземпляр (instance) — по умолчанию
классификатор (classifier) — подчеркивается
6. Кратность
Все допустимые значения мощности Нижняя граница … ВЕРХНЯЯ ГРАНИЦА
кратность 0 нет экземпляров служба (utility)
кратность 1 ровно один одиночка (singleton)
кратность 8 фиксированное число (e. g. концентратор)
кратность * произвольное число по умолчанию
7. Могут участвовать в отношении обобщения
Сущности на диаграмме классов
Классы
• стереотипы
• интерфейсы
• типы данных
• активные классы
Пакеты
Примечания
Класс — один из самых богатых элементов моделирования UML.
Секции:
Секция имени
• «стереотип» ИМЯ {свойства} кратность
Секция атрибутов
• список описаний атрибутов
Секция операций
• список описаний
операций
+ доп. секции = примечания
Атрибут — именованное место, в котором может храниться какое-то значение.
видимость ИМЯ [кратность] : тип = начальное значение {свойства}
Видимость: + — # ∼
ИМЯ: атрибут экземпляра, ИМЯ: атрибут класса
Кратность: определяет атрибут как массив
Тип: примитивный / определенный пользователем
Начальное значение: при создании экземпляра атрибут получает указанное значение
Свойства: ограничения и именованные значения, e.g. изменяемость (changeability)
Примеры описания атрибутов
Операции и методы
Операция — спецификация действия с объектом.
Метод — выполняемый алгоритм.
Видимость: + — # ∼
ИМЯ: операция экземпляра, ИМЯ: операция класса, ИМЯ: абстрактная операция
Параметры:
направление ПАРАМЕТР : тип = значение
Свойства операций
1. Параллелизм — когда имеется несколько потоков управления
2. Побочные эффекты
True — не меняет состояния системы
False (по умолчанию) — операция меняет состояние системы:
присваивает новые значения атрибутам, создает или уничтожает объекты и т. п.
Примеры описания операций
Параметры
Терминология:
• параметры — формальные
• аргументы — фактические
Направления передачи параметров в UML:
Интерфейсы и типы данных
Интерфейс — это именованный набор абстрактных составляющих.
Тип данных — это:
множество значений (потенциально бесконечное)
конечное множество операций
значения не обладают индивидуальностью
Примеры типов данных
Тип данных (в UML) — это классификатор, экземпляры которого не обладают индивидуальностью.
Идентификация классов
1. Словарь предметной области: существительные в ТЗ
2. Реализация вариантов использования
Если при реализации вариантов использования применяются диаграммы взаимодействия, то в этом процессе в качестве побочного эффекта выделяются некоторые классы непосредственно, поскольку на диаграммах коммуникации и последовательности основными сущностями являются объекты, которые по необходимости нужно отнести к определенным классам. Использование диаграмм деятельности также может подсказать, какие классы нужно определить в системе, особенно если на диаграмме деятельности наряду с потоком управления присутствует поток данных. Однако, если сценарии вариантов использования описываются на естественном языке или псевдокоде, то выделить классы значительно труднее. Фактически, если варианты использования реализуются на псевдокоде или диаграммами деятельности без всякой связи с объектами, то выявление объектной структуры системы просто откладывается «на потом».
На диаграмме коммуникации выявляется полезный класс Exceptions Handler, однако, вряд ли мог появиться из словаря: описывая предметную область, люди склонны закрывать глаза на возможные ошибки, исключительные ситуации и прочие неприятности.
3. Образцы проектирования
Отношения на диаграмме классов
Отношения зависимости
Стандартные стереотипы зависимости между классами и объектами
Отношение реализации
Классификатор использует интерфейс — зависимость со стереотипом «call» (требуемый интерфейс).
Классификатор реализует интерфейс — реализация (обеспеченный интерфейс).
Пример реализации и использования интерфейсов
Отношение обобщения
Применение обобщений:
Множественное наследование
• Класс является подклассом нескольких суперклассов
Несколько иерархий обобщения
• Не требуется, чтобы у базовых классов был общий
суперкласс
Ограничение: частичная упорядоченность
• Отсутствие циклов в цепочках обобщений
Пример:
Абстрактная операция (1). Операция с методом (2). Различие в том, что у абстрактной операции метод должен быть определен в подклассе.
Отношение ассоциации
Ассоциация в UML — это классификатор, экземпляры которого называются связями (link)
Минимум:
Объекты ассоциированных классов могут взаимодействовать во время выполнения
Имя ассоциации
Между классами должно быть отношение ассоциации (1) и может быть имя (2), поясняющее ее назначение. Дополнительно можно указать направление чтения имени ассоциации (3).
Кратность полюса ассоциации
Кратность полюса ассоциации указывает сколько объектов данного класса участвует в связи. Кратность может быть задана как конкретное число, и тогда в каждой связи со стороны данного полюса участвуют ровно столько объектов, сколько указано. Более распространён случай, когда кратность указывается как диапазон возможных значений, и тогда число объектов участвующих в связи должно находиться в пределах указанного диапазона.
* — неопределенное число
Агрегация и композиция
Агрегация — это ассоциация между классом А (часть) и классом В (целое)
Не изменяет направления навигации и не накладывает ограничений на время жизни
Композиция — более сильные ограничения:
Часть А может входить только в одно целое В
Время жизни частей совпадает с временем жизни целого
Примеры агрегации и композиции
Структура элементов системы
Производная ассоциация (1) — это элемент, который можно вычислить или определить по другим элементам. Он вводится в модель для ясности и наглядности.
Роль полюса ассоциации — это интерфейс, который представляет классификатор в данной ассоциации. Это способ указать как именно участвует классификатор в самой ассоциации.
Ассоциация класса Position самим с собой (1). На полюсах ассоциации указаны роли (2). Значок, показывающий направление чтения (3) позволяет прочесть данную ассоциацию как “Chief subordinates Subordinate”. Эта ассоциация призвана отразить наличие иерархии подчиненности должностей в организации.
Уточнение предыдущей схемы:
Направление навигации
Для отображения факта возможности или не возможности навигации для данного полюса ассоциации применяется следующая нотация: если навигация для некоторого полюса возможна, то этот полюс отмечают стрелкой на конце линии ассоциации (1), если же навигация не возможна, то на конце линии ассоциации рисуют косой крестик (2).
Многополюсные ассоциации
Класс ассоциации
В случае использования класса ассоциации Job (предыдущая схема), который по определению является множеством пар должность – сотрудник, не может быть двух одинаковых пар. То есть не может быть так, чтобы некоторый сотрудник занимал полставки разработчика в одном проекте и еще (отдельно) четверть той же ставки в этом же проекте. В случае же промежуточного класса Job (вторая схема) это вполне возможно, что не совсем естественно.
Ограничения на полюсах ассоциации
Упорядоченность объектов (ordering) / уникальность (uniqueness) — наличие / отсутствие одинаковых объектов
Упорядоченность и изменяемость
Квалификатор полюса ассоциаций ‒ это атрибут (или несколько атрибутов) полюса ассоциации, значение которого (которых) позволяет выделить один (или несколько) объектов класса, присоединенного к другому полюсу ассоциации.
Основное назначение квалификатора ‒ снизить кратность противоположного полюса ассоциации, поэтому в основном он используется в ассоциациях с кратностями полюсов «один ко многим» или «многие ко многим» и стоит у полюса противоположному полюсу с кратностью «много».
Основная диаграмма классов