UML – унифицированный язык моделирования (Unified Modeling Language) – это система обозначений, которую можно применять для объектно-ориентированного анализа и проектирования.
Его можно использовать для визуализации, спецификации, конструирования и документирования программных систем.
Словарь UML включает три вида строительных блоков:
Сущности – это абстракции, которые являются основными элементами модели, связи соединяют их между собой, а диаграммы группируют представляющие интерес наборы сущностей.
Диаграмма – это графическое представление набора элементов, чаще всего изображенного в виде связного графа вершин (сущностей) и путей (связей). Язык UML включает 13 видов диаграмм, среди которых на первом месте в списке — диаграмма классов, о которой и пойдет речь.
Диаграммы классов показывают набор классов, интерфейсов, а также их связи. Диаграммы этого вида чаще всего используются для моделирования объектно-ориентированных систем. Они предназначены для статического представления системы.
Большинство элементов UML имеют уникальную и прямую графическую нотацию, которая дает визуальное представление наиболее важных аспектов элемента.
Сущности
Диаграммы классов оперируют тремя видами сущностей UML:
Структурные сущности – это «имена существительные» в модели UML. В основном, статические части модели, представляющие либо концептуальные, либо физические элементы. Основным видом структурной сущности в диаграммах классов является класс .
Поведенческие сущности – динамические части моделей UML. Это «глаголы» моделей, представляющие поведение модели во времени и пространстве. Основной из них является взаимодействие – поведение, которое заключается в обмене сообщениями между наборами объектов или ролей в определенном контексте для достижения некоторой цели. Сообщение изображается в виде линии со стрелкой, почти всегда сопровождаемой именем операции.
Аннотирующие сущности – это поясняющие части UML-моделей, иными словами, комментарии, которые можно применить для описания, выделения и пояснения любого элемента модели. Главная из аннотирующих сущностей – примечание . Это символ, служащий для описания ограничений и комментариев, относящихся к элементу либо набору элементов. Графически представлен прямоугольником с загнутым углом; внутри помещается текстовый или графический комментарий.
Структурные сущности — классы
Класс – это описание набора объектов с одинаковыми атрибутами, операциями, связями и семантикой.
Графически класс изображается в виде прямоугольника, разделенного на 3 блока горизонтальными линиями:
- имя класса
- атрибуты (свойства) класса
- операции (методы) класса.
Для атрибутов и операций может быть указан один из трех типов видимости:
- — — private (частный)
- # — protected (защищенный)
- + — public (общий)
Видимость для полей и методов указывается в виде левого символа в строке с именем соответствующего элемента.
Каждый класс должен обладать именем, отличающим его от других классов. Имя – это текстовая строка. Имя класса может состоять из любого числа букв, цифр и знаков препинания (за исключением двоеточия и точки) и может записываться в несколько строк.
На практике обычно используются краткие имена классов, взятые из словаря моделируемой системы. Каждое слово в имени класса традиционно пишут с заглавной буквы (верблюжья конвенция), например Sensor (Датчик) или TemperatureSensor (ДатчикТемпературы).
Для абстрактного класса имя класса записывается курсивом.
Атрибут (свойство) – это именованное свойство класса, описывающее диапазон значений, которые может принимать экземпляр атрибута. Класс может иметь любое число атрибутов или не иметь ни одного. В последнем случае блок атрибутов оставляют пустым.
Атрибут представляет некоторое свойство моделируемой сущности, которым обладают все объекты данного класса. Имя атрибута, как и имя класса, может представлять собой текст. На практике для именования атрибута используются одно или несколько коротких существительных, выражающих некое свойство класса, к которому относится атрибут.
Можно уточнить спецификацию атрибута, указав его тип, кратность (если атрибут представляет собой массив некоторых значений) и начальное значение по умолчанию.
Читать еще: Бетховен. Один против судьбы
Статические атрибуты класса обозначаются подчеркиванием.
Операция (метод) – это реализация метода класса. Класс может иметь любое число операций либо не иметь ни одной. Часто вызов операции объекта изменяет его атрибуты.
Графически операции представлены в нижнем блоке описания класса.
Допускается указание только имен операций. Имя операции, как и имя класса, должно представлять собой текст. На практике для именования операции используются короткие глагольные конструкции, описывающие некое поведение класса, которому принадлежит операция. Обычно каждое слово в имени операции пишется с заглавной буквы, за исключением первого, например move (переместить) или isEmpty (проверка на пустоту).
Можно специфицировать операцию, устанавливая ее сигнатуру, включающую имя, тип и значение по умолчанию всех параметров, а применительно к функциям – тип возвращаемого значения.
Абстрактные методы класса обозначаются курсивным шрифтом.
Статические методы класса обозначаются подчеркиванием.
Изображая класс, не обязательно показывать сразу все его атрибуты и операции. Для конкретного представления, как правило, существенна только часть атрибутов и операций класса. В силу этих причин допускается упрощенное представление класса, то есть для графического представления выбираются только некоторые из его атрибутов. Если помимо указанных существуют другие атрибуты и операции, вы даете это понять, завершая каждый список многоточием.
Чтобы легче воспринимать длинные списки атрибутов и операций, желательно снабдить префиксом (именем стереотипа) каждую категорию в них. В данном случае стереотип – это слово, заключенное в угловые кавычки, которое указывает то, что за ним следует.
Отношения между классами
Существует четыре типа связей в UML:
- Зависимость
- Ассоциация
- Обобщение
- Реализация
Эти связи представляют собой базовые строительные блоки для описания отношений в UML, используемые для разработки хорошо согласованных моделей.
Первая из них – зависимость – семантически представляет собой связь между двумя элементами модели, в которой изменение одного элемента (независимого) может привести к изменению семантики другого элемента (зависимого). Графически представлена пунктирной линией, иногда со стрелкой, направленной к той сущности, от которой зависит еще одна; может быть снабжена меткой.
Зависимость – это связь использования , указывающая, что изменение спецификаций одной сущности может повлиять на другие сущности, которые используют ее.
Ассоциация – это структурная связь между элементами модели, которая описывает набор связей, существующих между объектами.
Ассоциация показывает, что объекты одной сущности (класса) связаны с объектами другой сущности таким образом, что можно перемещаться от объектов одного класса к другому.
Например, класс Человек и класс Школа имеют ассоциацию, так как человек может учиться в школе. Ассоциации можно присвоить имя «учится в». В представлении однонаправленной ассоциации добавляется стрелка, указывающая на направление ассоциации.
Двойные ассоциации представляются линией без стрелок на концах, соединяющей два классовых блока.
Ассоциация может быть именованной, и тогда на концах представляющей её линии будут подписаны роли, принадлежности, индикаторы, мультипликаторы, видимости или другие свойства.
Множественность ассоциации представляет собой диапазон целых чисел, указывающий возможное количество связанных объектов. Он записывается в виде выражения с минимальным и максимальным значением; для их разделения используются две точки. Устанавливая множественность дальнего конца ассоциации, вы указываете, сколько объектов может существовать на дальнем конце ассоциации для каждого объекта класса, находящегося на ближнем ее конце. Количество объектов должно находиться в пределах заданного диапазона. Множественность может быть определена как единица 1 , ноль или один 0..1 , любое значение 0..* или * , один или несколько 1..* . Можно также задавать диапазон целых значений, например 2..5 , или устанавливать точное число, например 3 .
Агрегация – особая разновидность ассоциации, представляющая структурную связь целого с его частями. Как тип ассоциации, агрегация может быть именованной. Одно отношение агрегации не может включать более двух классов (контейнер и содержимое).
Агрегация встречается, когда один класс является коллекцией или контейнером других. Причём, по умолчанию агрегацией называют агрегацию по ссылке, то есть когда время существования содержащихся классов не зависит от времени существования содержащего их класса. Если контейнер будет уничтожен, то его содержимое — нет.
Графически агрегация представляется пустым ромбом на блоке класса «целое», и линией, идущей от этого ромба к классу «часть».
Композиция — более строгий вариант агрегации. Известна также как агрегация по значению.
Композиция – это форма агрегации с четко выраженными отношениями владения и совпадением времени жизни частей и целого. Композиция имеет жёсткую зависимость времени существования экземпляров класса контейнера и экземпляров содержащихся классов. Если контейнер будет уничтожен, то всё его содержимое будет также уничтожено.
Графически представляется как и агрегация, но с закрашенным ромбиком.
Читать еще: Алексей саврасов. Саврасов алексей кондратьевич
Третья связь – обобщение – выражает специализацию или наследование , в котором специализированный элемент (потомок) строится по спецификациям обобщенного элемента (родителя). Потомок разделяет структуру и поведение родителя. Графически обобщение представлено в виде сплошной линии с пустой стрелкой, указывающей на родителя.
Четвертая – реализация – это семантическая связь между классами, когда один из них (поставщик) определяет соглашение, которого второй (клиент) обязан придерживаться. Это связи между интерфейсами и классами, которые реализуют эти интерфейсы. Это, своего рода, отношение «целое-часть». Поставщик, как правило, представлен абстрактным классом. В графическом исполнении связь реализации – это гибрид связей обобщения и зависимости: треугольник указывает на поставщика, а второй конец пунктирной линии – на клиента.
Пример кода и диаграммы классов для него
Программа получает данные с датчика температуры (вводятся с консоли) — по 5 измерений для каждого из двух объектов класса TemperatureMeasure и усредняет их. Также предусмотрен класс ShowMeasure для вывода измеренных значений.
Поиск по сайту
UML (Unified Modeling Language — унифицированный язык моделирования) — язык графического описания для объектного моделирования в области разработки программного обеспечения. UML является языком широкого профиля, это открытый стандарт, использующий графические обозначения для создания абстрактной модели системы, называемой UML моделью. UML был создан для определения, визуализации, проектирования и документирования в основном программных систем. UML не является языком программирования, но в средствах выполнения UML-моделей как интерпретируемого кода возможна кодогенерация.
Коммерческие продукты
Microsoft Visio
Тип: коммерческое ПО
Популярный программный продукт от компании Microsoft, который позволяет рисовать богатые диаграммы, в том числе UML:
Начиная с 2010 версии появилась возможность публиковать диаграммы в вебе (SharePoint + Visio Services):
Visio Viewer — бесплатная программа, которая позволяет просматривать созданные ранее Visio диаграммы. Загрузить можно по ссылке.
Microsoft Visual Studio 2010
Тип: коммерческое ПО (есть бесплатная Express версия).
В последней версии Microsoft Visual Studio 2010 появился новый тип проекта — Modelling, который позволяет рисовать различные UML диаграмма и проверять написанные решения на соответствие с необходимо архитектурой.
Позволяет генерировать Sequence Diagram на основании кода, визуализировать связи в проекте между компонентами, сборками и ссылками и т.д.
Пример Use case диаграммы, нарисованной в Visual Studio 2010:
Кроме того, доступен Visualization and Modeling Feature Pack (для подписчиков MSDN), который позволяет:
- генерировать код на базе UML диаграмм классов
- создавать UML диаграммы из кода
- импортировать UML диаграммы классов, диаграммы последовательностей, диаграммы вариантов использования с XMI 2.1
- создавать диаграммы зависимостей для ASP.NET, C и C++ проектов
- создавать и проверять layer diagrams для C и C++ проектов
- писать собственные проверки для layer diagrams
IBM Rational Rose
- Use case diagram (диаграммы прецедентов);
- Deployment diagram (диаграммы топологии);
- Statechart diagram (диаграммы состояний);
- Activity diagram (диаграммы активности);
- Interaction diagram (диаграммы взаимодействия);
- Sequence diagram (диаграммы последовательностей действий);
- Collaboration diagram (диаграммы сотрудничества);
- Class diagram (диаграммы классов);
- Component diagram (диаграммы компонент).
Open source программы
StarUML
Тип: open source
- поддержка UML 2.0
- MDA (Model Driven Architecture)
- Plug-in Architecture (писать можно на COM совместимых языках: C++, Delphi, C#, VB, . )
StarUML написана, в основном, на Delphi, но дописывать компоненты можно и на других языках, например C/C++, Java, Visual Basic, Delphi, JScript, VBScript, C#, VB.NET. Ниже показано несколько скриншотов.
Use case диаграмма:
ArgoUML
- Class
- State
- Use case
- Activity
- Collaboration
- Deployment
- Sequence
- Поддержка девяти UML 1.4 диаграмм
- Платформонезависимая (Java 5+)
- Стандартная метамодель UML 1.4
- Поддержка XMI
- Экспорт в GIF, PNG, PS, EPS, PGML и SVG
- Языки: EN, EN-GB, DE, ES, IT, RU, FR, NB, PT, ZH
- Поддержка OCL
- Forward, Reverse Engineering
Violet UML Editor
Тип: open source
Написана на Java, скриншоты:
Astah Community 6.1
Тип: open source
- UML 2.1 (Class, UseCase, Sequence, Activity, Communication, Statemachine, Component, Deployment, Composite Structure, Object and Package Diagrams)
- Suggest Feature
- Alignment, Size adjustment
- Экспорт в PNG, JPEG
- astah API (Models of Class, UseCase, Activity, Sequence и Statemachine Diagrams)
- Локализация GUI
BOUML
Тип: open source
- поддержка UML 2.0
- генерация кода на С++, Java, Idl, Php, Python
- работает под управлением Unix/Linux/Solaris/Mac OS X/Windows
- plug-in архитектура (можно писать на С++, Java)
UMLet 10.4
Тип: open source
- экспорт диаграмм в eps, pdf, jpg, svg и буфер обмена clipboard
- управление доступом через Eclipse
- возможность создания новых UML элементов
- работает под управлением Windows, Mac OS, Linux
Читать еще: Кто вернется в холостяк 5 сезон.
UMLGraph
Тип: open source
- позволяет рисовать диаграммы классов и диаграммы последовательностей
- поддержка PNG, PNM, (pseudo)GIF, SVG, AI, Postscript, CGM, FIG, PCL, HPGL, Regis, TEK
В результате написания следующего кода:
мы получим такую диаграмму:
Тип: open source
Dia — GTK+ программа для GNU/Linux, Unix и Windows под лицензией GPL.
Выбор UML диаграммы.
Одно из рабочих окон Dia
Редактирование свойств классов
Окно для редактирования коллекций объектов
Плагины к IDE
Visual Paradigm SDE for Visual Studio
Тип: бесплатное ПО (Community Edition)
- Use Case modeling
System analysis and design
Plug-in architecture
tangible T4 Editor plus UML modeling Tools for Visual Studio (2008/2010)
Тип: бесплатное ПО
tangible T4 Editor поставляется вместе с инструментами UMLи позволяет генерировать диаграммы, схемы базы данных на базе xml, word, excel и других источников данных.
NetBeans IDE UML
UML плагин к NetBeans IDE:
- импорт NetBeans UML проектов
- возможность командной работы
- кодогенерация для Java, C++, PHP
Eclipse UML2 Tools
- Structure diagrams
- Class
- Profile definition
- Composite structures
- Component
- Deployment
- Behavior diagrams
- Activity
- State machine
- Use Case
- Interaction diagrams
- Sequence
- Timing
Онлайновские UML инструменты
WebSequenceDiagrams
Создание простых диаграмм:
Cоздание простых UML диаграмм для блогов, вики, форумов, баг-трекинг систем и электронной почты.
zOOml
В статье использовались материалы DevCurry.
Спасибо за внимание!
Upd. Инструменты, которые были добавлены в комментариях:
Диаграмма классов
Вслед за этим наступает время создания диаграммы классов. Диаграмма классов используется для описания структуры классов, атрибутов, методов и зависимостей между ними. При этом следует помнить, что класс в UML — это шаблон, по которому создается множество объектов, а не набор уже существующих объектов. Иными словами, класс первичен в том смысле, что объекты создаются на его основе, а не класс формируется на основе существующих объектов.
Как и в случае с любым объектно-ориентированным подходом, классы являются основными строительными блоками модели. Именно за счет диаграммы классов происходит формирование предметной области модели. Диаграмма классов представляет собой набор статических элементов модели.
Рис. 5.18. Изображение класса в UML
Из рис. 5.18 видно, что класс изображается в UiML в виде прямоугольника, состоящего из трех разделов. Верхний раздел содержит название класса, средний — атрибуты класса, а нижний — варианты поведения класса.
Классы могут быть отображены по-разному (рис. 5.19): не обязательно отображать блок «Поведение класса», если таковой отсутствует. Также существуют классы без атрибутов. Для упрощения в ряде случаев допускается отображать только название класса.
Рис. 5.19. Варианты отображения классов в диаграмме классов
Важно помнить, что класс может содержать и атрибуты, и поведение, даже если они не визуализируются в каком-либо конкретном случае.
Атрибуты и варианты поведения. Атрибуты используются, чтобы описать свойства для каждого объекта из данного класса. В каком-то смысле атрибут — это именованное свойство класса, которое задает множество допустимых значений этого свойства. Формат описания атрибута таков:
[ Visibility][/Name [.Type] [Multiplicity] [=DefaultValue],
- • Visibility — видимость класса, которая отражает доступность атрибута одного класса для другого класса;
- • Name — имя атрибута;
- • Туре — тип атрибута (например, String, Integer и т.п.);
- • Multiplicity — множественность;
- • DefaultName — текущее значение атрибута в конкретный момент времени.
В свою очередь, поведение класса — это услуга, которую класс может выполнить. Формат описания атрибутов выглядит следующим образом:
- • MethodName — имя поведения класса;
- • ReturnType — тип возвращаемой переменной.
UML использует четыре варианта видимости для атрибутов и поведения классов (рис. 5.20):
- • + — открытый (Public), атрибут «виден» любому другому классу;
- • # — защищенный (Protected), атрибут «виден» только потомкам класса;
- • —закрытый (Private), атрибут «не виден» ни одному внешнему
• —пакетный (Package), атрибут «виден» любому классу из данного
Рис. 520. Пример обозначения видимости на диаграмме классов
Данные варианты видимости используются и в других диаграммах UML. Их применение не ограничивается классами. Видимыми или невидимыми могут быть и другие элементы диаграмм.
Теперь, рассмотрев атрибуты и варианты поведения классов, можно перейти к типам связей в диаграмме классов.
Типы отношений элементов диаграммы классов приведены в табл. 5.8.
Источники:
http://prog-cpp.ru/uml-classes/
http://msugvnua000.web710.discountasp.net/Posts/Details/3787
http://studme.org/184170/informatika/diagramma_klassov