Основы UML: типы диаграмм, диаграмма классов, диаграмма последовательности и OCL
Этот материал представляет объяснение термина UML, включая экзаменационные вопросы и тэги.
In a Nutshell
UML — это стандартизированный визуальный язык моделирования программного обеспечения и систем, предоставляющий структурные и поведенческие диаграммы для последовательного документирования требований, проектирования и коммуникации.
Краткое описание
UML разделяет структуру и поведение. Структурные диаграммы, такие как диаграмма классов и диаграмма пакетов, описывают статические элементы. Поведенческие диаграммы, включая диаграмму активности, диаграмму последовательности и диаграмму состояний, демонстрируют процессы и реакции. Основные связи включают ассоциацию, агрегацию, композицию и обобщение, дополненные зависимостями и реализацией. Видимость управляет доступом, мультипликативность описывает кардинальность, стереотипы и профили позволяют адаптировать модель к предметной области. Текстовые ограничения формулируются с помощью OCL, например инварианты, предусловия и постусловия.
Важные для экзамена пункты
- Структурные диаграммы: классы, объекты, пакеты, компоненты, развёртывание
- Поведенческие диаграммы: активность, последовательность, коммуникация, состояния, прецеденты
- Понимание связей: ассоциация, агрегация, композиция, обобщение, реализация, зависимость
- Правильное обозначение кардинальности и согласование с бизнес-правилами
- Использование OCL для точных условий, вывод критериев приёмки и тестов
- Моделирование состояний с условиями охраны и действиями, проверка переходов, критичных для безопасности
- Экономическая эффективность благодаря ранней обнаружении ошибок и улучшенной коммуникации
- Версионирование моделей, проверка, утверждение, документирование связи с требованиями и тестовыми случаями
Основные компоненты
- Элементы нотации: класс, атрибут, операция с видимостью
- Связи: ассоциация, агрегация, композиция, обобщение
- Мультипликативность и роли на рёбрах
- Пакеты, пространства имён, импорт и правила видимости
- Компоненты и интерфейсы с реализацией
- Элементы активности: действие, решение, объединение, разветвление, синхронизация
- Элементы взаимодействия: линия жизни, сообщение, активация в модели последовательности
- Автомат состояний с состояниями, переходами, охраной, входом и выходом
- Профили, стереотипы, помеченные значения для адаптации к предметной области
- OCL для инвариантов, предусловий, постусловий и построенных на них тестовых случаев
Практический пример
Домен: Библиотечная выдача
Диаграмма классов:
Классы: Читатель, Издание, Выдача
Связи: Читатель к Выдаче (1 к *), Издание к Выдаче (1 к *)
Выдача имеет атрибуты: дата_начала, дата_окончания, продлена_ли
Операция: продлить() с правилом: дата_окончания = дата_окончания + 14 дней, если издание допускает продление
Последовательность: "Выдача издания"
Участники: Читатель, Система, Каталог, Сервис выдачи
Процесс:
1. Читатель посылает "Выдать издание" в Систему
2. Система запрашивает Каталог о наличии
3. Каталог отвечает "доступно"
4. Система вызывает Сервис выдачи: создать Выдачу с Читателем и Изданием
5. Сервис выдачи создаёт Выдачу и подтверждает, Система сообщает об успехе
Пример OCL:
Context Выдача::inv ДатаВозвратаПравильна: self.дата_окончания > self.дата_начала
Преимущества и недостатки
Преимущества
- Общий язык для бизнеса и техники
- Лучший анализ и качество проектирования
- Более быстрый вывод тестов
- Чёткая документация, лучшая поддерживаемость
Недостатки
- Время на обучение
- Риск излишне сложных моделей
- Отсутствие обязательности без процесса и поддержки
- Возможные недопонимания при неuniform нотации
Типичные экзаменационные вопросы (с краткими ответами)
- Основные категории диаграмм UML? Структурные диаграммы (классы, пакеты, компоненты) и поведенческие диаграммы (активность, последовательность, состояния, прецеденты).
- Различие между агрегацией и композицией? Агрегация — слабая связь целое-часть без привязки к жизненному циклу, композиция — сильная связь с общей продолжительностью жизни.
- Использование OCL в UML? Для точных формальных ограничений, таких как инварианты, предусловия и постусловия, которые хорошо преобразуются в тесты.
- *Кардинальность 1, , 0..1? 1 = ровно один элемент, * = ноль или любое количество, 0..1 = опциональный одиночный элемент.
- Определение границ системы в UML? Через границы системы в диаграмме прецедентов и интерфейсы пакетов/компонентов.
- Вывод тестовых случаев из UML? На основе сценариев в диаграммах последовательности/активности и условий OCL.
- Использование обобщения? Когда общие свойства выносятся в базовый класс, специализации расширяют или переопределяют их.
- Правильная диаграмма классов для ИХК? Классы со значимыми названиями, атрибуты с типами и видимостью, операции, связи с кардинальностью и ролями.
Основные источники
- https://www.omg.org/spec/UML
- https://martinfowler.com/books/uml.html
- https://de.wikipedia.org/wiki/Unified_Modeling_Language



