Skip to content
IRC-CodingIRC-Coding
UMLдиаграмма классовдиаграмма последовательностидиаграмма активностиOCLкардинальности

Основы UML: диаграммы, связи, кардинальности и OCL

UML для начинающих: структурные и поведенческие диаграммы, агрегация, композиция, OCL, кардинальности.

S

schutzgeist

8 min read
Основы UML: диаграммы, связи, кардинальности и OCL

UML (Unified Modeling Language)

Этот материал представляет определение понятия UML, включая экзаменационные вопросы, ключевые компоненты и теги.

Вкратце

UML представляет собой стандартизированный визуальный язык для моделирования программного обеспечения и систем. Он помогает последовательно документировать требования, проектирование и обмен информацией.

Краткое техническое описание

UML разделяет структуру и поведение:

  • Диаграммы структуры (например, диаграмма классов, диаграмма пакетов, диаграмма компонентов)
  • Диаграммы поведения (например, диаграмма активности, диаграмма последовательности, диаграмма состояний)

Связи:

  • Ассоциация
  • Агрегация
  • Композиция
  • Обобщение

Кардинальности (мультипликативности) описывают связи (например, 1, 0..1, 0..*). С помощью OCL можно формально выражать дополнительные ограничения (инварианты, предусловия и постусловия), из которых затем могут быть выведены тесты.

Экзаменационно значимые моменты

  • Диаграммы структуры и поведения: UML разделяет диаграммы на две основные категории. Диаграммы структуры показывают статическую организацию (например, диаграмма классов), диаграммы поведения демонстрируют динамический процесс (например, диаграмма последовательности).
  • Правильное различение связей: Ассоциация, агрегация, композиция и обобщение обозначаются по-разному и имеют различную семантику. Особенно часто на экзаменах путают агрегацию и композицию.
  • Кардинальности как типичный экзаменационный материал: Мультипликативности вроде 1, 0..1, 1..* или * описывают, сколько объектов участвуют в связи. Неправильно установленные кардинальности искажают модель.
  • OCL для точных условий: Object Constraint Language формирует формальные дополнительные ограничения, предусловия и постусловия. Из OCL-выражений можно целенаправленно выводить тестовые случаи.
  • Моделирование состояний с гардами: Гарды в диаграммах состояний представляют условия, которые должны быть выполнены для перехода между состояниями. Они уточняют поведение системы.
  • Версионирование, проверка и утверждение моделей: UML-модели представляют собой живые документы. Они должны версионироваться, регулярно проверяться и сравниваться с требованиями, чтобы сохранить свою ценность.

Ключевые компоненты

  1. Класс/Атрибут/Операция + видимость – Класс моделирует тип объектов. Атрибуты описывают данные, операции определяют поведение. Модификаторы видимости вроде +, -, # и ~ управляют доступом (public, private, protected, package).
  2. Связи (ассоциация, агрегация, композиция) – Ассоциация означает слабую связь, агрегация представляет отношение “принадлежит к” со слабой зависимостью жизненного цикла, композиция образует сильную зависимость жизненного цикла. При композиции части существуют только вместе с целым.
  3. Мультипликативности и роли – Мультипликативности указывают, сколько объектов одного класса могут быть связаны с объектами другого класса. Роли называют функцию класса в связи, например “клиент” и “заказ”.
  4. Пакеты/пространства имён – Пакеты группируют связанные элементы модели и снижают сложность крупных моделей. Они помогают чётко структурировать пространства имён и зоны ответственности.
  5. Компоненты/интерфейсы – Диаграммы компонентов показывают программные блоки и их интерфейсы. Они особенно важны для архитектурного моделирования и представления зависимостей.
  6. Активность (решение, параллелизм) – Диаграммы активности моделируют бизнес-процессы и рабочие потоки. Ветвления, решения и параллелизация с Fork/Join представлены здесь.
  7. Последовательность (lifeline, сообщение) – Диаграммы последовательности показывают взаимодействие между объектами во времени. Lifelines представляют объекты, сообщения обозначают синхронную или асинхронную коммуникацию.
  8. Автомат состояния (гард, entry/exit) – Диаграммы состояний описывают поведение объекта через состояния и переходы. Entry- и exit-действия, а также гарды определяют, когда состояния входят, выходят или переключаются.
  9. Стереотипы/профили – Стереотипы расширяют элементы UML предметно-специфичными значениями. Профили собирают стереотипы и правила для определённых областей применения, например для систем реального времени.
  10. OCL и вывод тестов – OCL позволяет делать точные, формальные утверждения о моделях. Инварианты, предусловия и постусловия можно непосредственно использовать как основу для автоматизированных тестов.

Практический пример (библиотека)

Диаграмма классов:
Читатель 1..* Выдача
Издание 1..* Выдача
Выдача: дата_начала, дата_конца

OCL инвариант:
дата_конца > дата_начала

Преимущества и недостатки

Преимущества

  • Единый язык для бизнеса и техники
  • Более раннее обнаружение ошибок
  • Лучший вывод тестов
  • Чёткая документация

Недостатки

  • Время на обучение
  • Риск создания чрезмерно сложных моделей
  • Теряет ценность без поддержки

Типичные экзаменационные вопросы (с краткими ответами)

  1. Основные категории UML-диаграмм? Диаграммы структуры и диаграммы поведения.
  2. Агрегация или композиция? Агрегация слаба; композиция связывает жизненные циклы.
  3. Для чего используется OCL? Формальные дополнительные ограничения, выведение тестов.

Свободный ответ

Для экзамена верно следующее: предпочтите несколько диаграмм, но выполненных правильно и согласованно. Кардинальности и связи должны соответствовать бизнес-правилам. Модели должны версионироваться и связываться с требованиями и тестовыми случаями.

Стратегия обучения

  1. Введение в понимание: Сравните конкретную диаграмму классов с диаграммой последовательности для одного и того же сценария использования.
  2. Метод углубления: Смоделируйте небольшой проект в несколько типах диаграмм и проверьте их согласованность.
  3. Фокусировка на экзамене: Практикуйте различение агрегации и композиции, а также типичные кардинальности.
  4. Избежание ошибок: Держите наименования, мультипликативности и связи согласованными во всех диаграммах.

Практический пример 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 требует времени и обучения, но предотвращает дорогостоящие ошибки благодаря более качественному общению и планированию.

Ключевые источники

  1. https://www.omg.org/spec/UML
  2. https://martinfowler.com/books/uml.html

FAQ: основы UML, типы диаграмм и нотация

1. Что такое UML?

UML расшифровывается как Unified Modeling Language. Это стандартизованный графический язык моделирования для описания, планирования и документирования программных систем и бизнес-процессов.

2. Какие основные категории диаграмм UML существуют?

Диаграммы UML разделяются на структурные и поведенческие. Структурные диаграммы показывают статическое устройство системы, поведенческие описывают её динамику.

3. Что такое диаграмма классов?

Диаграмма классов это структурная диаграмма, которая показывает классы, их атрибуты, операции и взаимосвязи. Она образует статическую основу системы.

4. Что такое диаграмма последовательности?

Диаграмма последовательности это поведенческая диаграмма, которая отображает последовательность сообщений между объектами во времени. Линии жизни представляют объекты, стрелки представляют сообщения.

5. Что такое диаграмма деятельности?

Диаграмма деятельности моделирует процессы, операции и принятие решений. Она показывает деятельность, ветвления, параллельные потоки и переходы между ними.

6. Что такое диаграмма состояний?

Диаграмма состояний показывает состояния, которые объект может принимать на протяжении своего жизненного цикла, а также события и условия, которые вызывают переходы между состояниями.

7. Что такое ассоциация?

Ассоциация это слабая связь между двумя классами. Она показывает, что объекты этих классов взаимодействуют, но их жизненные циклы не зависят друг от друга.

8. Что такое агрегация?

Агрегация это отношение “принадлежит”, в котором части могут существовать независимо от целого. Она обозначается пустым ромбом на стороне целого.

9. Что такое композиция?

Композиция это сильное отношение “принадлежит”, в котором части не могут существовать без целого. Она обозначается заполненным ромбом на стороне целого.

10. Что такое генерализация?

Генерализация описывает отношение наследования. Специализированный класс наследует атрибуты и операции от более общего класса и может их расширять или переопределять.

11. Что означают кардинальности?

Кардинальности указывают, сколько объектов одного класса может быть связано с объектами другого класса. Типичные обозначения: 1, 0..1, 1..* и *.

12. Что такое OCL?

OCL расшифровывается как Object Constraint Language. Это формальный язык для точного описания ограничений, инвариантов, а также предусловий и постусловий в UML-моделях.

13. Для чего используются OCL-инварианты?

OCL-инварианты формулируют условия, которые должны быть истинны в каждый момент времени. Из них можно вывести тестовые случаи для проверки корректности системы.

14. Что такое диаграмма пакетов?

Диаграмма пакетов группирует элементы модели в пакеты и показывает их зависимости. Она помогает организовать большие системы и определить пространства имён.

15. Что такое диаграмма компонентов?

Диаграмма компонентов показывает программные компоненты, их интерфейсы и зависимости. Её часто используют для моделирования архитектуры и планирования больших систем.

16. Что такое диаграмма вариантов использования?

Диаграмма вариантов использования показывает функциональность системы с точки зрения действующих лиц. Она моделирует, какие роли взаимодействуют с системой и какие сценарии они инициируют.

17. Что такое линия жизни?

Линия жизни это пунктирная линия в диаграмме последовательности, которая представляет жизнь объекта или роли во время взаимодействия. Она служит основой для обмена сообщениями.

18. Что такое guard?

Guard это условие в квадратных скобках у переходов состояния. Переход выполняется только если условие истинно, например [betrag > 0].

19. Что такое стереотип?

Стереотип расширяет элемент UML специальным смыслом. Он записывается в двойных угловых скобках, например <<interface>> или <<abstract>>.

20. В чём разница между синхронным и асинхронным сообщением?

Синхронное сообщение блокирует отправителя, пока получатель не завершит обработку. Асинхронное сообщение позволяет отправителю продолжить работу, тогда как получатель обрабатывает сообщение позже.

21. Что такое структурная диаграмма?

Структурная диаграмма показывает статическое строение системы: классы, объекты, компоненты, пакеты и их взаимосвязи. Примеры: диаграмма классов, диаграмма компонентов и диаграмма пакетов.

22. Что такое поведенческая диаграмма?

Поведенческая диаграмма описывает динамику системы. К ней относятся диаграммы деятельности, последовательности, состояний и варианты использования.

23. Что означает видимость в UML?

Видимость регулирует доступ к атрибутам и операциям. + означает public, - означает private, # означает protected, ~ означает package. Это влияет на инкапсуляцию и переиспользуемость.

24. Почему UML-модели нужно версионировать?

UML-модели изменяются в ходе проекта. Версионирование позволяет отследить более ранние состояния, провести review изменений и обеспечить согласованность с требованиями и тестами.

25. Как выводить тесты из UML-моделей?

Из OCL-инвариантов, предусловий и постусловий, а также из определённых связей и кардинальностей можно систематически разрабатывать тестовые случаи. Например, тест проверяет, действительно ли композиция удаляет части при удалении целого.

Продолжение пути обучения UML

Следующая статья в пути обучения UML посвящена Диаграмма классов: классы, атрибуты, методы, наследование, ассоциация, агрегация, композиция — подробному разбору диаграмм классов и отношений между ними.

Назад к блогу
Share:

Похожие статьи