UML (Unified Modeling Language)
Этот материал представляет определение понятия UML, включая экзаменационные вопросы, ключевые компоненты и теги.
Вкратце
UML представляет собой стандартизированный визуальный язык для моделирования программного обеспечения и систем. Он помогает последовательно документировать требования, проектирование и обмен информацией.
Краткое техническое описание
UML разделяет структуру и поведение:
- Диаграммы структуры (например, диаграмма классов, диаграмма пакетов, диаграмма компонентов)
- Диаграммы поведения (например, диаграмма активности, диаграмма последовательности, диаграмма состояний)
Связи:
- Ассоциация
- Агрегация
- Композиция
- Обобщение
Кардинальности (мультипликативности) описывают связи (например, 1, 0..1, 0..*). С помощью OCL можно формально выражать дополнительные ограничения (инварианты, предусловия и постусловия), из которых затем могут быть выведены тесты.
Экзаменационно значимые моменты
- Диаграммы структуры и поведения: UML разделяет диаграммы на две основные категории. Диаграммы структуры показывают статическую организацию (например, диаграмма классов), диаграммы поведения демонстрируют динамический процесс (например, диаграмма последовательности).
- Правильное различение связей: Ассоциация, агрегация, композиция и обобщение обозначаются по-разному и имеют различную семантику. Особенно часто на экзаменах путают агрегацию и композицию.
- Кардинальности как типичный экзаменационный материал: Мультипликативности вроде
1,0..1,1..*или*описывают, сколько объектов участвуют в связи. Неправильно установленные кардинальности искажают модель. - OCL для точных условий: Object Constraint Language формирует формальные дополнительные ограничения, предусловия и постусловия. Из OCL-выражений можно целенаправленно выводить тестовые случаи.
- Моделирование состояний с гардами: Гарды в диаграммах состояний представляют условия, которые должны быть выполнены для перехода между состояниями. Они уточняют поведение системы.
- Версионирование, проверка и утверждение моделей: UML-модели представляют собой живые документы. Они должны версионироваться, регулярно проверяться и сравниваться с требованиями, чтобы сохранить свою ценность.
Ключевые компоненты
- Класс/Атрибут/Операция + видимость – Класс моделирует тип объектов. Атрибуты описывают данные, операции определяют поведение. Модификаторы видимости вроде
+,-,#и~управляют доступом (public, private, protected, package). - Связи (ассоциация, агрегация, композиция) – Ассоциация означает слабую связь, агрегация представляет отношение “принадлежит к” со слабой зависимостью жизненного цикла, композиция образует сильную зависимость жизненного цикла. При композиции части существуют только вместе с целым.
- Мультипликативности и роли – Мультипликативности указывают, сколько объектов одного класса могут быть связаны с объектами другого класса. Роли называют функцию класса в связи, например “клиент” и “заказ”.
- Пакеты/пространства имён – Пакеты группируют связанные элементы модели и снижают сложность крупных моделей. Они помогают чётко структурировать пространства имён и зоны ответственности.
- Компоненты/интерфейсы – Диаграммы компонентов показывают программные блоки и их интерфейсы. Они особенно важны для архитектурного моделирования и представления зависимостей.
- Активность (решение, параллелизм) – Диаграммы активности моделируют бизнес-процессы и рабочие потоки. Ветвления, решения и параллелизация с Fork/Join представлены здесь.
- Последовательность (lifeline, сообщение) – Диаграммы последовательности показывают взаимодействие между объектами во времени. Lifelines представляют объекты, сообщения обозначают синхронную или асинхронную коммуникацию.
- Автомат состояния (гард, entry/exit) – Диаграммы состояний описывают поведение объекта через состояния и переходы. Entry- и exit-действия, а также гарды определяют, когда состояния входят, выходят или переключаются.
- Стереотипы/профили – Стереотипы расширяют элементы UML предметно-специфичными значениями. Профили собирают стереотипы и правила для определённых областей применения, например для систем реального времени.
- OCL и вывод тестов – OCL позволяет делать точные, формальные утверждения о моделях. Инварианты, предусловия и постусловия можно непосредственно использовать как основу для автоматизированных тестов.
Практический пример (библиотека)
Диаграмма классов:
Читатель 1..* Выдача
Издание 1..* Выдача
Выдача: дата_начала, дата_конца
OCL инвариант:
дата_конца > дата_начала
Преимущества и недостатки
Преимущества
- Единый язык для бизнеса и техники
- Более раннее обнаружение ошибок
- Лучший вывод тестов
- Чёткая документация
Недостатки
- Время на обучение
- Риск создания чрезмерно сложных моделей
- Теряет ценность без поддержки
Типичные экзаменационные вопросы (с краткими ответами)
- Основные категории UML-диаграмм? Диаграммы структуры и диаграммы поведения.
- Агрегация или композиция? Агрегация слаба; композиция связывает жизненные циклы.
- Для чего используется OCL? Формальные дополнительные ограничения, выведение тестов.
Свободный ответ
Для экзамена верно следующее: предпочтите несколько диаграмм, но выполненных правильно и согласованно. Кардинальности и связи должны соответствовать бизнес-правилам. Модели должны версионироваться и связываться с требованиями и тестовыми случаями.
Стратегия обучения
- Введение в понимание: Сравните конкретную диаграмму классов с диаграммой последовательности для одного и того же сценария использования.
- Метод углубления: Смоделируйте небольшой проект в несколько типах диаграмм и проверьте их согласованность.
- Фокусировка на экзамене: Практикуйте различение агрегации и композиции, а также типичные кардинальности.
- Избежание ошибок: Держите наименования, мультипликативности и связи согласованными во всех диаграммах.
Практический пример 1: диаграмма классов для библиотеки
Смоделируйте классы Читатель, Издание и Выдача. Класс Выдача связывает читателя и издание. Мультипликативности составляют 1..* между читателем и выдачей, а также между изданием и выдачей, потому что один читатель может иметь несколько выдач, а одно издание может участвовать в нескольких выдачах.
Практический пример 2: распознавание агрегации и композиции
Университет имеет факультеты (агрегация: факультеты могут существовать независимо). Автомобиль имеет двигатель (композиция: без автомобиля двигатель в этом контексте больше не существует). Агрегация слаба, композиция связывает жизненные циклы.
Практический пример 3: формулирование OCL-инварианта
Банковский перевод имеет инвариант: сумма > 0. В OCL: context Перевод inv: self.сумма > 0. Из этого можно вывести тестовый случай, который отмечает отрицательные суммы как недействительные.
Практическое задание 1: определение типа диаграммы
Какая UML-диаграмма показывает обмен сообщениями между объектами во времени?
Решение: Диаграмма последовательности. Она представляет lifelines и сообщения в хронологическом порядке.
Практическое задание 2: определение связи
Компания состоит из отделов, которые растворяются при закрытии компании. Какая связь здесь присутствует?
Решение: Речь идёт о композиции. Отделы не могут существовать без компании.
Упражнение 3: вывод OCL-теста
Класс Buchung имеет атрибут datum. Сформулируйте OCL-инвариант и соответствующий ему тестовый случай.
Решение: инвариант: context Buchung inv: self.datum <= heute. Тестовый случай: бронирование с будущей датой должно быть отклонено как невалидное.
Анализ темы
- Технический стержень: типы диаграмм, связи и кардинальности. UML предоставляет единую нотацию для структурного и динамического проектирования. Правильные связи и мультипликативности образуют основу корректной модели.
- Трудности реализации: согласованность разных диаграмм. Диаграмма классов должна соответствовать сообщениям в диаграмме последовательности и состояниям в диаграмме состояний. Несоответствия приводят к неправильному пониманию и ошибкам при разработке.
- Последствия безопасности: OCL-инварианты как ранняя валидация. Формальные ограничения помогают выявлять невалидные состояния на ранних этапах и могут быть преобразованы в автоматизированные тесты.
- Документирование: версионирование моделей и связь с требованиями. UML-диаграммы входят в документацию проекта. Они должны быть воспроизводимыми, версионируемыми и связанными с требованиями и тестовыми случаями.
- Экономическая оценка: затраты на моделирование и экономия на ошибках. UML требует времени и обучения, но предотвращает дорогостоящие ошибки благодаря более качественному общению и планированию.
Ключевые источники
FAQ: основы UML, типы диаграмм и нотация
1. Что такое UML?
2. Какие основные категории диаграмм UML существуют?
3. Что такое диаграмма классов?
4. Что такое диаграмма последовательности?
5. Что такое диаграмма деятельности?
6. Что такое диаграмма состояний?
7. Что такое ассоциация?
8. Что такое агрегация?
9. Что такое композиция?
10. Что такое генерализация?
11. Что означают кардинальности?
1, 0..1, 1..* и *.12. Что такое OCL?
13. Для чего используются OCL-инварианты?
14. Что такое диаграмма пакетов?
15. Что такое диаграмма компонентов?
16. Что такое диаграмма вариантов использования?
17. Что такое линия жизни?
18. Что такое guard?
[betrag > 0].19. Что такое стереотип?
<<interface>> или <<abstract>>.20. В чём разница между синхронным и асинхронным сообщением?
21. Что такое структурная диаграмма?
22. Что такое поведенческая диаграмма?
23. Что означает видимость в UML?
+ означает public, - означает private, # означает protected, ~ означает package. Это влияет на инкапсуляцию и переиспользуемость.24. Почему UML-модели нужно версионировать?
25. Как выводить тесты из UML-моделей?
Продолжение пути обучения UML
Следующая статья в пути обучения UML посвящена Диаграмма классов: классы, атрибуты, методы, наследование, ассоциация, агрегация, композиция — подробному разбору диаграмм классов и отношений между ними.



