Диаграмма классов

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

Диаграмма классов (англ. Static Structure diagram) — диаграмма, демонстрирующая классы системы, их атрибуты, методы и взаимосвязи между ними. Входит в UML.

Существует два вида:

  • Статический вид диаграммы рассматривает логические взаимосвязи классов между собой;
  • Аналитический вид диаграммы рассматривает общий вид и взаимосвязи классов, входящих в систему.

Существуют разные точки зрения на построение диаграмм классов в зависимости от целей их применения:

  • Концептуальная точка зрения — диаграмма классов описывает модель предметной области, в ней присутствуют только классы прикладных объектов;
  • Точка зрения спецификации — диаграмма классов применяется при проектировании информационных систем;
  • Точка зрения реализации — диаграмма классов содержит классы, используемые непосредственно в программном коде (при использовании объектно-ориентированных языков программирования).

Элементы диаграммы[править | править вики-текст]

Класс с двумя методами и полями.

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

  • В верхней части написано имя класса. Имя класса выравнивается по центру и пишется полужирным шрифтом. Имена классов начинаются с заглавной буквы.
  • Посередине располагаются поля (атрибуты) класса. Они выравнены по левому краю и начинаются с маленькой буквы.
  • Нижняя часть содержит методы класса. Они также выравнены по левому краю и пишутся с маленькой буквы.

Члены[править | править вики-текст]

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

Видимость[править | править вики-текст]

Для задания видимости членов класса (то есть любой атрибут или метод), эти обозначения должны быть размещены перед именем участника:[1]

+ Публичный (Public)
- Приватный (Private)
# Защищённый (Protected)
/ Производный (Derived) (может быть совмещён с другими)
~ Пакет (Package)

Области действия[править | править вики-текст]

UML определяет два типа областей действия для членов: экземпляр и классификатор, последние имеют подчёркнутые имена.[2]

  • Члены классификаторы. Во многих языках называются static. Область действия — сам класс.
    • Значения полей одинаковы для всех экземпляров в данной единице трансляции
    • Вызов метода не меняет состояние объекта
  • Члены экземпляры. Область действия — объект.
    • Значения полей могут отличаться в разных объектах
    • Методы могут изменять поля

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

Взаимосвязи[править | править вики-текст]

Нотация UML для отображения взаимосвязи между классами на диаграммах

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

Взаимосвязи объектов классов[править | править вики-текст]

Зависимость[править | править вики-текст]

Зависимость[en] обозначает такое отношение между классами, что изменение спецификации класса-поставщика может повлиять на работу зависимого класса, но не наоборот.

Ассоциация[править | править вики-текст]

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

Например, класс Человек и класс Школа имеют ассоциацию, так как человек может учиться в школе. Ассоциации можно присвоить имя «учится в».

Двойные ассоциации (с двумя концами) представляются линией, соединяющей два классовых блока. Ассоциации более высокой степени имеют более двух концов и представляются линиями, один конец которых идёт к классовому блоку, а другой к общему ромбику. В представлении однонаправленной ассоциации добавляется стрелка, указывающая на направление ассоциации.

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

Агрегация[править | править вики-текст]

Диаграмма классов, показывающая Агрегацию между двумя классами

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

Агрегация встречается, когда один класс является коллекцией или контейнером других. Причём по умолчанию, агрегацией называют агрегацию по ссылке, то есть когда время существования содержащихся классов не зависит от времени существования содержащего их класса. Если контейнер будет уничтожен, то его содержимое — нет.

Графически агрегация представляется пустым ромбом на блоке класса, и линией, идущей от этого ромба к содержащемуся классу.

Композиция[править | править вики-текст]

Композиция — более строгий вариант агрегации. Известна также как агрегация по значению.

Композиция имеет жёсткую зависимость времени существования экземпляров класса контейнера и экземпляров содержащихся классов. Если контейнер будет уничтожен, то всё его содержимое будет также уничтожено.

Графически представляется как и агрегация, но с закрашенным ромбиком.

Различия между композицией и агрегацией[править | править вики-текст]

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

Взаимосвязи классов[править | править вики-текст]

Обобщение (наследование)[править | править вики-текст]

Диаграмма классов, показывающая наследование двух подклассов от одного суперкласса

Обобщение (Generalization) показывает, что один из двух связанных классов (подтип) является частной формой другого (надтипа), который называется обобщением первого. На практике это означает, что любой экземпляр подтипа является также экземпляром надтипа. Например: животные — супертип млекопитающих, которые, в свою очередь, — супертип приматов, и так далее. Эта взаимосвязь легче всего описывается фразой «А — это Б» (приматы — это млекопитающие, млекопитающие — это животные).

Графически обобщение представляется линией с пустым треугольником у супертипа.

Обобщение также известно как наследование или «is a» взаимосвязь (или отношение «является»).

Реализация[править | править вики-текст]

Реализация — отношение между двумя элементами модели, в котором один элемент (клиент) реализует поведение, заданное другим (поставщиком). Реализация — отношение целое-часть. Графически реализация представляется так же, как и наследование, но с пунктирной линией.

Поставщик, как правило является абстрактным классом или классом-интерфейсом.

Общая взаимосвязь[править | править вики-текст]

Зависимость[править | править вики-текст]

Зависимость (dependency) — это слабая форма отношения использования, при котором изменение в спецификации одного влечёт за собой изменение другого, причём обратное не обязательно. Возникает, когда объект выступает, например, в форме параметра или локальной переменной.

Графически представляется штриховой стрелкой, идущей от зависимого элемента к тому, от которого он зависит.

Существует несколько именованных вариантов.

Зависимость может быть между экземплярами, классами или экземпляром и классом.

Уточнения отношений[править | править вики-текст]

Уточнение имеет отношение к уровню детализации. Один пакет уточняет другой, если в нём содержатся те же самые элементы, но в более подробном представлении. Например, при написании книги вы наверняка начнете с формулировки предложения, в котором кратко будет представлено содержание каждой главы. Предположим, что резюме к каждой главе в качестве отдельного элемента входит в пакет «Предложение». Допустим также, что «Завершённая книга» — это пакет, элементами которого являются законченные главы. В этом контексте пакет «Завершённая книга» является уточнением пакета «Предложение».

Мощность отношений (Кратность)[править | править вики-текст]

Мощность отношения (мультипликатор) означает число связей между каждым экземпляром класса (объектом) в начале линии с экземпляром класса в её конце. Различают следующие типичные случаи:

нотация объяснение пример
0..1 Ноль или один экземпляр кошка имеет или не имеет хозяина
1 Обязательно один экземпляр у кошки одна мать
0..* или * Ноль или более экземпляров у кошки могут быть, а может и не быть котят
1..* Один или более экземпляров у кошки есть хотя бы одно место, где она спит

См. также[править | править вики-текст]

Примечания[править | править вики-текст]

  1. UML Reference Card, Version 2.1.2, Holub Associates, August 2007, <http://www.holub.com/goodies/uml/>. Проверено 12 марта 2011. 
  2. OMG Unified Modeling Language (OMG UML) Superstructure, Version 2.3: May 2010. Retrieved 23 September 2010.

Ссылки[править | править вики-текст]