Диаграмма связей
- 1 year ago
- 0
- 0
Диаграмма классов ( англ. class diagram ) — структурная диаграмма языка моделирования UML , демонстрирующая общую структуру иерархии классов системы, их коопераций, атрибутов (полей), методов , интерфейсов и взаимосвязей (отношений) между ними. Широко применяется не только для документирования и визуализации, но также для конструирования посредством прямого или обратного проектирования .
Целью создания диаграммы классов является графическое представление статической структуры декларативных элементов системы (классов, типов и т. п.) Она содержит в себе также некоторые элементы поведения (например — операции), однако их динамика должна быть отражена на диаграммах других видов ( диаграммах коммуникации , диаграммах состояний). Для удобства восприятия диаграмму классов можно также дополнить представлением пакетов , включая вложенные .
При представлении сущностей реального мира разработчику требуется отразить их текущее состояние, их поведение и их взаимные отношения. На каждом этапе осуществляется абстрагирование от маловажных деталей и концепций, которые не относятся к реальности (производительность, инкапсуляция , видимость и т. п.). Классы можно рассматривать с позиции различных уровней. Как правило, их выделяют три основных: аналитический уровень, уровень проектирования и уровень реализации :
Класс является ключевым элементом в объектно-ориентированном моделировании. На диаграмме классы представлены в рамках, содержащих три компонента:
Язык UML предоставляет механизмы для представления членов класса, например атрибутов и методов, а также дополнительной информации о них.
Для задания видимости членов класса (то есть — любым атрибутам или методам), эти обозначения должны быть размещены перед именем участника:
+
|
Публичный (Public) |
-
|
Приватный (Private) |
#
|
Защищённый (Protected) |
/
|
Производный (Derived) (может быть совмещён с другими) |
~
|
Пакет (Package) |
UML определяет два типа областей действия для членов: экземпляр и классификатор , последние имеют подчёркнутые имена .
Чтобы показать принадлежность к классификатору, имя подчёркивается , в противном случае область действия полагается областью действия по умолчанию.
Взаимосвязь — это особый тип логических отношений между сущностями, показанных на диаграммах классов и объектов . В UML представлены следующие виды отношений:
обозначает такое отношение между классами, что изменение спецификации класса-поставщика может повлиять на работу зависимого класса, но не наоборот.
Ассоциация показывает, что объекты одной сущности (класса) связаны с объектами другой сущности таким образом, что можно перемещаться от объектов одного класса к другому. Является общим случаем композиции и агрегации.
Например, класс Человек и класс Школа имеют ассоциацию, так как человек может учиться в школе. Ассоциации можно присвоить имя «учится в».
Двойные ассоциации представляются линией без стрелочек на концах, соединяющей два классовых блока. Ассоциации более высокой степени имеют более двух концов и представляются линиями, один конец которых идёт к классовому блоку, а другой к общему ромбику. В представлении однонаправленной ассоциации добавляется стрелка, указывающая на направление ассоциации.
Ассоциация может быть именованной, и на концах представляющей её линии могут быть подписаны роли, принадлежности, индикаторы, мультипликаторы, видимости или другие свойства.
Агрегация — это разновидность ассоциации при отношении между целым и его частями. Как тип ассоциации агрегация может быть именованной. Одно отношение агрегации не может включать более двух классов (контейнер и содержимое).
Агрегация встречается, когда один класс является коллекцией или контейнером других. Причём по умолчанию, агрегацией называют агрегацию по ссылке , то есть когда время существования содержащихся классов не зависит от времени существования содержащего их класса. Если контейнер будет уничтожен, то его содержимое — нет.
Графически агрегация представляется пустым ромбом на блоке класса, и линией, идущей от этого ромба к содержащемуся классу.
Композиция — более строгий вариант агрегации. Известна также как агрегация по значению.
Композиция имеет жёсткую зависимость времени существования экземпляров класса контейнера и экземпляров содержащихся классов. Если контейнер будет уничтожен, то всё его содержимое будет также уничтожено.
Графически представляется, как и агрегация, но с закрашенным ромбиком.
Приведём наглядный пример. Комната является частью квартиры, следовательно здесь подходит композиция, потому что комната без квартиры существовать не может. А, например, мебель не является неотъемлемой частью квартиры, но в то же время, квартира содержит мебель, поэтому следует использовать агрегацию.
Обобщение (Generalization) показывает, что один из двух связанных классов ( подтип ) является частной формой другого ( надтипа ), который называется обобщением первого. На практике это означает, что любой экземпляр подтипа является также экземпляром надтипа. Например: животные — супертип млекопитающих, которые, в свою очередь, — супертип приматов, и так далее. Эта взаимосвязь легче всего описывается фразой «А — это Б» (приматы — это млекопитающие, млекопитающие — это животные).//
Графически обобщение представляется линией с пустым треугольником у супертипа.
Обобщение также известно как наследование или « » взаимосвязь (или отношение «является»).
Реализация — отношение между двумя элементами модели, в котором один элемент ( клиент ) реализует поведение, заданное другим ( поставщиком ). Реализация — отношение целое-часть. Графически реализация представляется так же, как и наследование, но с пунктирной линией.
Поставщик, как правило, является абстрактным классом или классом-интерфейсом.
Зависимость (dependency) — это слабая форма отношения использования, при которой изменение в спецификации одного влечёт за собой изменение другого, причём обратное не обязательно. Возникает, когда объект выступает, например, в форме параметра или локальной переменной.
Графически представляется штриховой стрелкой, идущей от зависимого элемента к тому, от которого он зависит.
Существует несколько именованных вариантов.
Зависимость может быть между экземплярами, классами или экземпляром и классом.
Уточнение имеет отношение к уровню детализации. Один пакет уточняет другой, если в нём содержатся те же самые элементы, но в более подробном представлении. Например, при написании книги вы наверняка начнете с формулировки предложения, в котором кратко будет представлено содержание каждой главы. Предположим, что резюме к каждой главе в качестве отдельного элемента входит в пакет «Предложение». Допустим также, что «Завершённая книга» — это пакет, элементами которого являются законченные главы. В этом контексте пакет «Завершённая книга» является уточнением пакета «Предложение».
Мощность отношения (мультипликатор) означает число связей между каждым экземпляром класса (объектом) в начале линии с экземпляром класса в её конце. Различают следующие типичные случаи:
нотация | объяснение | пример |
0..1 | Ноль или один экземпляр | Кошка имеет хозяина. |
1 | Обязательно один экземпляр | у кошки одна мать |
0..* или * | Ноль или более экземпляров | у кошки могут быть, а может и не быть котят |
1..* | Один или более экземпляров | у кошки есть хотя бы одно место, где она спит |