В данном контексте специфицирование означает построение точных, недвусмысленных и полных моделей. UML позволяет специфицировать все существенные решения, касающиеся анализа, проектирования и реализации, которые должны приниматься в процессе разработки и развертывания системы программного обеспечения.не является языком визуального программирования, но модели, созданные с его помощью, могут быть непосредственно переведены на различные языки программирования. Иными словами, UML-модель можно отобразить на такие языки, как Java, C++, Visual Basic, и даже на таблицы реляционной базы данных или устойчивые объекты объектно-ориентированной базы данных. Те понятия, которые предпочтительно передавать графически, так и представляются в UML; те же, которые лучше описывать в текстовом виде, выражаются с помощью языка программирования. [4]
Такое отображение модели на язык программирования позволяет осуществлять прямое проектирование: генерацию кода из модели UML в какой-то конкретный язык. Можно решить и обратную задачу: реконструировать модель по имеющейся реализации. Обратное проектирование не представляет собой ничего необычного. Если вы не закодировали информацию в реализации, то эта информация теряется при прямом переходе от моделей к коду. Поэтому для обратного проектирования необходимы как инструментальные средства, так и вмешательство человека. Сочетание прямой генерации кода и обратного проектирования позволяет работать как в графическом, так и в текстовом представлении, если инструментальные программы обеспечивают согласованность между обоими представлениями.
Помимо прямого отображения в языки программирования UML в силу своей выразительности и однозначности позволяет непосредственно исполнять модели, имитировать поведение систем и контролировать действующие системы.
Язык UML предназначен, прежде всего, для разработки программных систем. Его использование особенно эффективно в следующих областях:
- информационные системы масштаба предприятия;
- банковские и финансовые услуги;
- телекоммуникации;
- транспорт;
- оборонная промышленность, авиация и космонавтика;
- розничная торговля;
- медицинская электроника;
- наука;
- распределенные Web-системы.
Сфера применения UML не ограничивается моделированием
программного обеспечения. Его выразительность позволяет моделировать
документооборот в юридических системах, структуру и функционирование системы
обслуживания пациентов в больницах, осуществлять проектирование аппаратных
средств.
Для понимания UML необходимо усвоить его концептуальную модель, которая включает в себя три составные части: основные строительные блоки языка, правила их сочетания и некоторые общие для всего языка механизмы.
Словарь языка UML включает три вида строительных блоков:
- сущности;
- отношения;
- диаграммы.
Сущности - это абстракции, являющиеся основными элементами модели. Отношения связывают различные сущности; диаграммы группируют представляющие интерес совокупности сущностей.
В UML имеется четыре типа сущностей:
- структурные;
- поведенческие;
- группирующие;
- аннотационные.
Сущности являются основными объектно-ориентированными блоками языка. С их помощью можно создавать корректные модели.
Структурные сущности - это имена существительные в моделях на языке UML. Как правило, они представляют собой статические части модели, соответствующие концептуальным или физическим элементам системы. Существует семь разновидностей структурных сущностей:
1. Класс (Class).
2. Интерфейс (Interface).
3. Кооперация (Collaboration).
4. Прецедент (Use case).
5. Активным классом (Active class).
6. Компонент (Component).
7. Узел (Node).
Класс (Class) - это описание совокупности объектов с общими
атрибутами, операциями, отношениями и семантикой. Класс реализует один или
несколько интерфейсов. Графически класс изображается в виде прямоугольника, в
котором обычно записаны его имя, атрибуты и операции, как показано на рисунке
1.
Рисунок 1 – Классы
Интерфейс (Interface) - это совокупность операций, которые определяют
сервис (набор услуг), предоставляемый классом или компонентом. Таким образом,
интерфейс описывает видимое извне поведение элемента. Интерфейс может
представлять поведение класса или компонента полностью или частично; он
определяет только спецификации операций (сигнатуры), но никогда - их
реализации. Графически интерфейс изображается в виде круга, под которым пишется
его имя, как показано на рисунке 2. Интерфейс редко существует сам по себе -
обычно он присоединяется к реализующему его классу или компоненту.
Рисунок 2 – Интерфейсы
Кооперация (Collaboration) определяет взаимодействие. Она представляет
собой совокупность ролей и других элементов, которые, работая совместно,
производят некоторый кооперативный эффект, не сводящийся к простой сумме
слагаемых. Кооперация, следовательно, имеет как структурный, так и
поведенческий аспект. Один и тот же класс может принимать участие в нескольких
кооперациях; таким образом, они являются реализацией образцов поведения,
формирующих систему. Графически кооперация изображается в виде эллипса,
ограниченного пунктирной линией, в который обычно заключено только имя, как
показано на рисунке 3.
Рисунок 3 – Кооперации
Прецедент (Use case) - это описание последовательности выполняемых
системой действий, которая производит наблюдаемый результат, значимый для
какого-то определенного актера (Actor). Прецедент применяется для структурирования
поведенческих сущностей модели. Прецеденты реализуются посредством кооперации.
Графически прецедент изображается в виде ограниченного непрерывной линией эллипса,
обычно содержащего только его имя как показано на рисунке 4.
Рисунок 4 – Прецеденты
Активным классом (Active class) называется класс,
объекты которого вовлечены в один или несколько процессов, или нитей (Threads), и поэтому могут
инициировать управляющее воздействие. Активный класс во всем подобен обычному
классу, за исключением того, что его объекты представляют собой элементы,
деятельность которых осуществляется одновременно с деятельностью других
элементов. Графически активный класс изображается так же, как простой класс, но
ограничивающий прямоугольник рисуется жирной линией и обычно включает имя,
атрибуты и операции, как показано на рисунке 5.
Рисунок 5 – Активные классы
Два оставшихся элемента - компоненты и узлы - также имеют свои особенности. Они соответствуют физическим сущностям системы, в то время как пять предыдущих - концептуальным и логическим сущностям.
Компонент (Component) - это физическая заменяемая часть системы,
которая соответствует некоторому набору интерфейсов и обеспечивает его
реализацию. В системе можно встретить различные виды устанавливаемых
компонентов, такие как СОМ+ или Java Beans, а также компоненты, являющиеся артефактами
процесса разработки, например файлы исходного кода. Компонент, как правило,
представляет собой физическую упаковку логических элементов, таких как классы,
интерфейсы и кооперации. Графически компонент изображается в виде
прямоугольника с вкладками, содержащего обычно только имя, как показано на
рисунке 6.
Рисунок 6 – Компоненты
Узел (Node) - это элемент реальной (физической) системы,
который существует во время функционирования программного комплекса и
представляет собой вычислительный ресурс, обычно обладающий как минимум
некоторым объемом памяти, а часто еще и способностью обработки. Совокупность
компонентов может размещаться в узле, а также мигрировать с одного узла на
другой. Графически узел изображается в виде куба, обычно содержащего только
имя, как показано на рисунке 7.
Рисунок 7 – Узлы
Эти семь базовых элементов - классы, интерфейсы, кооперации, прецеденты, активные классы, компоненты и узлы - являются основными структурными сущностями, которые могут быть включены в модель UML. Существуют также разновидности этих сущностей:
- актеры,
- сигналы,
- утилиты (виды классов),
- процессы и нити (виды активных классов),
- приложения,
- документы,
- файлы,
- библиотеки,
- страницы и таблицы (виды компонентов).
Поведенческие сущности (Behavioral things) являются динамическими составляющими модели UML. Это глаголы языка: они описывают поведение модели во времени и пространстве. Существует всего два основных типа поведенческих сущностей:
- взаимодействие (Interaction);
- автомат (State machine).
Взаимодействие (Interaction) - это поведение, суть которого
заключается в обмене сообщениями (Messages) между объектами в рамках конкретного
контекста для достижения определенной цели. С помощью взаимодействия можно
описать как отдельную операцию, так и поведение совокупности объектов.
Взаимодействие предполагает ряд других элементов, таких как сообщения, последовательности
действий (поведение, инициированное сообщением) и связи (между объектами).
Графически сообщения изображаются в виде стрелки, над которой почти всегда
пишется имя соответствующей операции, как показано на рисунке 8.
Рисунок 8 – Сообщения
Автомат (State machine) - это алгоритм поведения, определяющий последовательность состояний, через которые объект или взаимодействие проходят на протяжении своего жизненного цикла в ответ на различные события, а также реакции на эти события. С помощью автомата можно описать поведение сдельного класса или кооперации классов. С автоматом связан ряд других элементов: состояния, переходы (из одного состояния в другое), события (сущности, инициирующие переходы) и виды действий (реакция на переход). Графически состояние изображается в виде прямоугольника с закругленными углами, содержащего имя и, возможно, под состояния (рисунок 9).
Эти два элемента - взаимодействия и автоматы - являются
основными поведенческими сущностями, входящими в модель UML. Семантически они
часто бывают связаны с различными структурными элементами, в первую очередь -
классами, кооперациями и объектами.
Рисунок 9 – Состояния
Группирующие сущности являются организующими частями модели UML. Это блоки, на которые можно разложить модель. Есть только одна первичная группирующая сущность, а именно пакет.
Пакеты (Packages) представляют собой универсальный механизм организации элементов в группы. В пакет можно поместить структурные, поведенческие и даже другие группирующие сущности. В отличие от компонентов, существующих во время работы программы, пакеты носят чисто концептуальный характер, то есть существуют только во время разработки.
Изображается пакет в виде папки с закладкой, содержащей, как
правило, только имя и иногда - содержимое (рисунок 10).
Рисунок 10 – Пакеты
Пакеты - это основные группирующие сущности, с помощью которых можно организовать модель UML. Существуют также вариации пакетов, например каркасы (Frameworks), модели и подсистемы.
Аннотационные сущности - пояснительные части модели UML. Это
комментарии для дополнительного описания, разъяснения или замечания к любому
элементу модели. Имеется только один базовый тип аннотационных элементов -
примечание (Note). Примечание - это просто символ для изображения комментариев или
ограничений, присоединенных к элементу или группе элементов. Графически
примечание изображается в виде прямоугольника с загнутым краем, содержащим
текстовый или графический комментарий, как показано на рисунке 11.
Рисунок 11 – Примечания
Этот элемент является основной аннотационной сущностью, которую можно включать в модель UML. Чаще всего примечания используются, чтобы снабдить диаграммы комментариями или ограничениями, которые можно выразить в виде неформального или формального текста. Существуют вариации этого элемента, например требования, где описывают некое желательное поведение с точки зрения внешней по отношению к модели.
В языке UML определены четыре типа отношений:
- зависимость;
- ассоциация;
- обобщение;
- реализация.
Эти отношения являются основными связующими строительными блоками в UML и применяются для создания корректных моделей.
Зависимость (Dependency) - это семантическое отношение между двумя
сущностями, при котором изменение одной из них, независимой, может повлиять на
семантику другой, зависимой. Графически зависимость изображается в виде прямой
пунктирной линии, часто со стрелкой, которая может содержать метку (см. рисунок
12).
Рисунок 12 – Зависимости
Ассоциация (Association) - структурное отношение, описывающее
совокупность связей. Связь - это соединение между объектами. Разновидностью
ассоциации является агрегирование (Aggregation) - так называют структурное отношение
между целым и его частями. Графически ассоциация изображается в виде прямой
линии (иногда завершающейся стрелкой или содержащей метку), рядом с которой
могут присутствовать дополнительные обозначения, на пример кратность и имена
ролей. На рисунке 13 показан пример отношений этого типа.
Рисунок 13 – Ассоциации
Обобщение (Generalization) - это отношение «специализация / обобщение», при котором объект специализированного элемента (потомок) может быть подставлен вместо объекта обобщенного элемента (родителя или предка).
Таким образом, потомок (Child) наследует структуру и
поведение своего родителя (Parent). Графически отношение обобщения изображается в
виде линии с не закрашенной стрелкой, указывающей на родителя, как показано на
рисунке 14.
Рисунок 14 – Обобщения
Наконец, реализация (Realization) - это семантическое
отношение между классификаторами, при котором один классификатор определяет
«контракт», а другой гарантирует его выполнение. Отношения реализации
встречаются в двух случаях: во-первых, между интерфейсами и реализующими их
классами или компонентами, а во-вторых, между прецедентами и реализующими их
кооперациями. Отношение реализации изображается в виде пунктирной линии с не
закрашенной стрелкой, как нечто среднее между отношениями обобщения и
зависимости (см. рисунок 15).
Рисунок 15 – Реализации
Четыре описанных элемента являются основными типами отношений,
которые можно включать в модели UML. Существуют также их вариации, например
уточнение (Refinement), трассировка (Trace), включение и расширение (для зависимостей).
Строительные блоки UML нельзя произвольно объединять друг с другом. Как и любой другой язык, UML характеризуется набором правил, определяющих, как должна выглядеть хорошо оформленная модель, то есть семантически самосогласованная и находящаяся в гармонии со всеми моделями, которые с нею связаны.
В языке UML имеются семантические правила, позволяющие корректно и однозначно определять.
1. Имена, которые можно давать сущностям, отношениям и диаграммам.
2. Область действия (контекст, в котором имя имеет некоторое значение).
. Видимость (когда имена видимы и могут использоваться другими элементами).