Новая версия UML 2.0, разработанная ассоциацией OMG в 2005 г., отличается от UML 1.0 большей степенью формализации в связи с необходимостью автоматизации перевода описания на UML в машинный код.
Все расширения языка основаны на получении новых модулей путем вложения базовых модулей более низкого уровня в создаваемые модули более высоких уровней.
В UML 2.0 введено 13 типов диаграмм, разделенных на два подмножества — структурных и поведенческих диаграмм.
Структурные модели, известные также как статические модели, описывают структуру сущностей или компонентов некоторой системы, включая их классы, интерфейсы, атрибуты и отношения. К структурным относятся следующие диаграммы:
Диаграммы пакетов используются для разделения модели на пакеты и для описания их взаимодействия. Цель разделения — упрощение структуры и организации работы с моделью системы. Пакет — основной способ организации элементов модели в языке UML. Каждый пакет владеет всеми своими элементами, т. е. теми элементами, которые включены в него. В свою очередь, одни пакеты могут быть вложены в другие пакеты. В графическом изображении пакета указываются имя пакета и дополнительно имена компонентов, входящих в пакет (рис. 1). Про такие элементы говорят, что они принадлежат пакету или входят в него. При этом каждый элемент может принадлежать только одному пакету. Целесообразно классы, разделяющие одно и то же пространство имен или связанные отношениями наследования, помещать в один пакет, пакеты будут соответствовать папкам в памяти компьютера.
Рис. 1.  Изображение пакета
В диаграммах классов, как и в UML 1.0, отображаются классы и их связи. Каждый класс представлен прямоугольным блоком (рис. 2), в котором записываются имена класса, его атрибутов и операций (методов). Возможно подключение к прямоугольнику снизу еще одной секции, включаюшей примечания.
Различают конкретные и абстрактные классы. Абстрактный класс — класс, который не имеет объектов (экземпляров). Абстрактные классы описываются курсивом. Для указания принадлежности класса пакету используется запись вида <Имя пакета>::<Имя класса>.
Атрибуты характеризуют свойства класса .Строка атрибута имеет вид:
<квантор видимости> <имя атрибута> [кратность] : <тип атрибута> = <исходное значение> {строка-свойство}.
Варианты кванторов видимости:
Символ "+" или public обозначает атрибут, доступный или видимый из любого другого класса пакета, в котором определена диаграмма.
Символ "#" или protected обозначает атрибут, недоступный или невидимый для всех классов, за исключением подклассов данного класса.
Символ "-" или private обозначает атрибут, недоступный или невидимый для всех классов без исключения.
Символ "~" или package обозначает атрибут, недоступный или невидимый для всех классов за пределами пакета, в котором определен класс-владелец данного атрибута.
В общем случае кратность записывается в форме строки текста из цифр в квадратных скобках после имени соответствующего атрибута, при этом цифры разделяются двумя точками: [нижняя граница .. верхняя граница]. Символ * качестве верхней границы означает произвольное положительное целое число.
Операция – это абстракция того, что можно делать с объектом. Класс может содержать любое число операций (в частности, не содержать ни одной операции). Набор операций класса является общим для всех объектов данного класса.
Рис. 2.  Изображение класса
Формат операции:
<квантор видимости> <имя операции>(список параметров): <выражение типа возвращаемого значения> {строка-свойство}.
Список параметров является перечнем разделенных запятой формальных параметров, каждый параметр имеет вид:
<направление параметра> <имя параметра>: <выражение типа> = <значение параметра по умолчанию>,
где направление параметра — есть одно из ключевых слов in, out или inout со значением in по умолчанию.
На рис. 3 показаны средства изображения интерфесов (связей) классов. Различают связи, называемые простой связью (зависимостью — dependency), обобщением (наследованием — generalization) и ассоциацией (association). Частным случаем ассоциации является агрегирование (агрегация) — отношение типа "часть-целое".
Рис. 3.  Интерфейсы в диаграммах классов
Отношение ассоциации соответствует наличию произвольного отношения или взаимосвязи между классами. Симметричная ассоциация изображается сплошной линией без стрелок. Ромб используется для обозначения n-арной ассоциации. Кратность ассоциации обозначается аналогично кратности атрибутов, но без прямых скобок.
Простая связь отражает зависимость по использованию, когда изменение в спецификации одного класса может повлиять на поведение другого, использующего первый класса. Чаще всего зависимости применяются в диаграммах классов, чтобы отразить в сигнатуре операции одного класса тот факт, что параметром этой операции могут быть объекты другого класса. Понятно, что если интерфейс этого второго класса изменяется, то это влияет на поведение объектов первого класса. Используется, если параметром операции одного класса могут быть объекты другого класса.
При наследовании (отношение род/вид) класс-потомок наследует все атрибуты и операции класса-предка. Объекты класса-потомка могут использоваться везде, где могут использоваться объекты класса-предка. Это свойство называют полиморфизмом по включению, имея в виду, что объекты потомка можно считать включаемыми в класс-предок. В UML допускается множественное наследование, когда один подкласс определяется на основе нескольких суперклассов. При графическом изображении стрелка должна быть направлена к суперклассу.
Рис. 4.  Отношение обобщения
Ассоциацией называется структурная связь, показывающая, что объекты одного класса некоторым образом связаны с объектами другого или того же самого класса. Допускается создание ассоциаций, связывающих сразу n классов (они называются n-арными ассоциациями). Графически ассоциация изображается в виде линии, соединяющей класс сам с собой или с другими классами. В случае агрегации линия связи заканчивается ромбом, рисуемым со стороны класса "целое". Сильная агрегация (композиция) имеет место, если класс "часть" не может существовать без класса "целое".
Кратность ассоциации говорит о том, сколько экземпляров одного класса соответствуют одному экземпляру другого класса. Запись “1” около линии связи означает, что в каждом экземпляре ассоциации может участвовать ровно один объект класса с данной ролью; в случае “0..1” имеется в виду один или ни одного объекта; в случае “1..*” — не менее одного объекта; в случе “0..*” — любое число объектов.
Конкретизация связи двух классов возможна с помощью ролевого класса, как показано на рис. 4. Например, связь классов "Работа" и "Исполнитель" может характеризоваться такими атрибутами, как "Время занятости", "Выполняемая роль", которые не являются атрибутами ни одного из связываемых классов. Для их описания и вводится ролевой класс.
Рис. 5.  Изображение связей при наличии ролевого класса
Классам могут быть присущи ограничения. Ограничения неформально задаются на естественном языке или же формулируются на языке OCL (Object Constraints Language), который является частью общей спецификации UML, но в отличие от других частей языка имеет не графическую, а линейную нотацию.
В UML используются предопределенные типы данных Boolean, Integer, Real и String. Расширение списка типов данных возможно с помощью OCL (но опять же не в графической форме).
Диаграммы объектов служат для более детального представления классов и их экземпляров (объектов). На рис. 5 приведен пример объекта "ЦСКА" класса "команда". Отметим, что внутри прямоугольника нужна запись "объект : класс" с подчеркиванием. Возможно указание значений атрибутов объекта. Пример диаграммы объектов, соответствуюшей диаграмме классов с классами "команда" и "игроки", приведен на рис. 6.
Рис. 6.  Изображение объекта
Рис. 7.  Пример диаграммы объектов (а) для диаграммы классов (б).
Композитные диаграммы служат для показа внутренней структуры классов и, по возможности, взаимодействия элементов (частей) внутренней структуры класса.
Диаграммы компонентов иллюстрируют структуру системы в виде множества составляющих ее частей, таких как программные компоненты (обычно представляющие собой некоторые совокупности классов), встроенные контроллеры и т.п. Диаграммы компонентов выполняют роль, близкую к роли диаграмм пакетов.
Компоненты изображаются в виде прямоугольников, как показано на рис. 7. Связи используются для отображения интерфейсов между компонентами — предоставление и потребление того или иного сервиса.
Рис. 8.  Фрагмент диаграммы компонентов
Диаграммы развертывания используются для показа распределения компонентов между физическими устройствами. Устройства изображаются в виде фигур рис. 8, внутри записывается тип устройства, например, сетевой экран, сервер, клиент, память, дисковод, сеть и т.п., при этом в правом верхнем углу фигуры помещается иконка с условным изображением типа устройства.
Рис. 9.  Изображение устройства
Пример диаграммы развертывания дан на рис. 9.
Рис. 10.  Пример диаграммы развертывания