Диаграмма классов модели бизнес анализа

В основе любой объектно-ориентированной системы лежит этап проектирования структуры классов – поэтому говорят, что диаграммы классов являются наиболее популярными из типов UML-диаграммы.

В этом простом учебном пособии по построению диаграмм классов мы рассмотрели ключевые области, которые необходимо знать, чтобы без труда нарисовать диаграммы классов. Прокрутите вниз, чтобы узнать.

  • Классовая диаграмма Определение
  • Нотации диаграммы класса с примерами
  • Как нарисовать диаграмму классов
  • Классовая диаграмма Лучшие практики
  • Примеры/шаблоны схем классов

Определение Классовой Диаграммы | Что такое Классовая Диаграмма?

Диаграмма классов – это UML-диаграмма, которая описывает систему, визуализируя различные типы объектов внутри системы и виды статических связей, которые существуют между ними. Он также иллюстрирует операции и атрибуты классов.

Обычно они используются для изучения концепций области, понимания требований к программному обеспечению и описания подробных проектов.

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

Нотации диаграммы класса с примерами

Существует несколько обозначений диаграмм классов, которые используются при рисовании диаграмм классов UML. Мы перечислили ниже наиболее распространенные нотации диаграммы классов.

Класс

Нотация класса - учебное пособие по диаграмме классов UML

Классы представляют собой центральные объекты в системе. Он представлен прямоугольником с 3 отсеками.

Первый показывает имя класса, а средний – атрибуты класса, которые являются характеристиками объектов. В нижнем списке перечислены операции класса, которые представляют собой поведение класса.

Последние два отсека являются необязательными. Нотация класса без последних двух отделений называется простым классом и содержит только имя класса.

Интерфейс

Нотация интерфейса - учебное пособие

Символ интерфейса на диаграммах классов обозначает набор операций, которые детализируют ответственность класса.

Пакет

Пакет

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

Отношения в диаграмме классов

Отношения диаграммы классов

Для получения подробной информации о типах разъемов диаграммы классов и различных отношениях между классами обратитесь к нашему удобному руководству по отношениям диаграммы классов.

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

Полный список нотаций/символов диаграммы классов см. в данной заметке.

Как нарисовать диаграмму классов

Классовые диаграммы идут рука об руку с объектно-ориентированным дизайном. Поэтому знание его основ – ключевая часть умения рисовать хорошие классовые диаграммы.

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

Шаг 1: Определите имена классов

Первым шагом является идентификация первичных объектов системы.

Шаг 2: Различные отношения

Следующий шаг – определить, как каждый из классов или объектов связан друг с другом. Обратите внимание на общие черты и абстракции среди них; это поможет вам сгруппировать их при рисовании диаграммы классов.

Шаг 3: Создать структуру

Сначала добавьте имена классов и свяжите их с соответствующими коннекторами. Добавить атрибуты и функции/методы/операции можно позже.

Классовая диаграмма Лучшие практики

  • Классовые диаграммы могут иметь тенденцию к бессвязности по мере их расширения и роста. Лучше всего избегать создания больших диаграмм и разбивать их на более мелкие, которые позже можно будет связать друг с другом. Ты можешь очень легко сделать это с Крейли. Это поможет вам улучшить читабельность ваших диаграмм.
  • Используя простую нотацию класса, вы можете быстро создать высокоуровневый обзор вашей системы. Подробная диаграмма может быть создана отдельно по мере необходимости, и даже связана с первой диаграммой для удобства пользования.
  • Чем больше линий перекрываются на диаграммах классов, тем более загроможденными они становятся. Читатель только запутается, пытаясь найти путь. Убедитесь, что две линии не пересекаются.
  • Используйте цвета для группировки общих модулей. Различные цвета на разных классах помогают читателю различать различные группы.

Примеры диаграмм классов / Шаблоны

Диаграмма класса Пример 1

Пример диаграммы классов

Щелкните по шаблону, чтобы отредактировать его в режиме онлайн

Диаграмма класса Пример 2

Пример диаграммы классов

Щелкните по шаблону, чтобы отредактировать его в режиме онлайн

Диаграмма класса Пример 3

Классовая диаграмма для банковской системы банкоматов

Диаграмма классов для системы банкоматов банка (Нажмите на шаблон, чтобы отредактировать в режиме онлайн)

Другие ресурсы диаграммы классов

  • Руководство по работе с диаграммами классов UML – Часть 1
  • Руководство по работе с диаграммами классов UML – часть 2
  • Инструменты, шаблоны и ресурсы для построения диаграмм классов

Поделитесь своими мыслями об учебном пособии “Классная диаграмма”

В этом учебном пособии мы рассмотрели, что такое диаграмма классов, нотации диаграммы классов, как нарисовать диаграмму классов и лучшие практики, которым вы можете следовать при создании диаграмм классов. Кроме того, мы добавили несколько примеров схем классов, которые можно мгновенно редактировать в режиме онлайн.

Хотите узнать о других типах диаграмм UML?

Источник: creately.com

Как построить диаграмму классов UML.

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

Что показывает диаграмма классов

Диаграмма классов представляет описание структуры классов в системе и их взаимосвязи. Она отображает как статические аспекты системы, включая классы, атрибуты и методы, а также динамические аспекты, такие как связи между объектами и выполнение методов во время выполнения программы.

Классы на диаграмме представляются в виде прямоугольников, которые могут содержать информацию об атрибутах и методах класса. Атрибуты — это переменные, которые хранят данные внутри объектов, созданных на основе класса. Методы — это функции, которые описывают поведение класса и могут изменять его состояние.

Связи между классами на диаграмме классов могут представлять отношения, такие как ассоциация, наследование и реализацию. Ассоциация показывает отношения между классами, которые могут быть однонаправленными или двунаправленными. Наследование показывает, как класс наследует свойства другого класса, который является его родительским классом. Реализация показывает, как класс реализует интерфейс или абстрактный класс.

Использование диаграммы классов помогает лучше понимать структуру системы и ее компоненты.

Основные принципы

Диаграмма классов соответствует принципам объектно-ориентированного программирования (ООП) и является одним из базовых инструментов проектирования ООП-систем.

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

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

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

Классы

Класс — это основной элемент моделирования, который представляет собой абстракцию реального объекта или сущности в системе. Он определяет свойства (атрибуты) и поведение (методы) объектов, которые являются экземплярами данного класса. На диаграмме классов обычно представляется в виде прямоугольника, разделенного на три части:

Пример класса на диаграмме классов

  • Название класса располагается в верхней части прямоугольника.
  • Атрибуты класса указываются в средней части прямоугольника.
  • Методы класса располагаются в нижней части прямоугольника.

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

Читайте также:  Банк онлайн открытие расчетного счета открыть расчетный счет для бизнеса

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

Классы могут быть связаны друг с другом на диаграмме классов различными типами отношений, такими как наследование, ассоциация, композиция и агрегация. Такие отношения позволяют определить связи и взаимодействия между классами в системе.

Виды классов

В диаграмме классов UML можно выделить следующие виды классов:

Обычный класс — это класс, который представляет собой абстракцию реального объекта или сущности в системе. Он имеет свои атрибуты и методы, которые описывают характеристики и поведение объектов данного класса.

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

Интерфейс — это специальный вид класса, который определяет набор методов без их реализации. Интерфейсы используются для определения общих методов, которые должны быть реализованы в классах, которые их имплементируют. Один класс может имплементировать несколько интерфейсов.

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

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

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

Видимость

Видимость (visibility) в языке моделирования UML определяет уровень доступности элементов модели. Она определяет, какие части программы могут обращаться к конкретному элементу модели.

В языке UML используется четыре уровня видимости:

  1. Public (публичный) — элементы с такой видимостью доступны из любой точки модели и внешних модулей. Они могут быть использованы как внутри класса, так и снаружи.
  2. Protected (защищенный) — элементы с такой видимостью не могут быть использованы вне класса, кроме классов-наследников.
  3. Private (приватный) — элементы с такой видимостью доступны только внутри класса, в котором они объявлены. Они не доступны из других классов и объектов.
  4. Package (пакетный) — элементы с такой видимостью доступны всем классам находящимся внутри одного пакета.

Указание видимости осуществляется при объявлении элемента модели с помощью знаков +, #, — и ~, соответственно, для публичного, защищенного, приватного и пакетного типа. Например, при объявлении атрибута с публичной видимостью, он будет помечен знаком «+».

Отношения (Взаимосвязи)

Классы могут быть связаны друг с другом на диаграмме классов различными типами отношений, такими как наследование, ассоциация, композиция и агрегация. Такие отношения позволяют определить связи и взаимодействия между классами в системе.

Зависимость (Dependency)

Зависимость — это отношение между двумя классами, где изменения в одном классе могут повлиять на другой класс. Она обозначается стрелкой, которая указывает на зависимый класс. Например, если класс A зависит от класса B, то на диаграмме классов стрелка будет указывать от класса A к классу B.

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

Пример отношения

Зависимость также может возникать в результате передачи объектов как параметров методов других классов или при использовании переменных других классов внутри методов. Она является наименее сильным типом отношений между классами и обычно не включается в диаграммы классов в большом количестве.

Ассоциация (Association)

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

Роль — это название, которое описывает, как именно объекты класса связаны между собой в рамках ассоциации. Роль может быть определена для каждого конца ассоциации и описывать, как объекты каждого класса используются в контексте связи между этими классами.

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

НазваниеОбозначениеОписание
Точное число1Только один объект связан с другим объектом.
Диапазон значений1..9От одного до девяти объектов класса могут быть связаны с другим классом.
Множество0..* или *Ноль или более объектов могут быть связаны с другим объектом

Множественность указывается на диаграмме классов с использованием чисел или символов, разделенных двоеточием, и располагается рядом с концами связи между классами.

Пример отношения ассоциация на диаграмме классов

Например, рассмотрим два класса: «Студент» и «Курс». Между ними существует ассоциация, которая показывает, что студент может записаться на несколько курсов или не записаться ни на какой, а курс может как иметь несколько студентов, которые на него записались, так и не иметь записанных на него студентов. На диаграмме классов это отображается в виде линии, соединяющей классы «Студент» и «Курс», с указанием на концах ассоциации их ролей (например, «записывается на» и «имеет студентов»), а также множественности (например, «многие-ко-многим»).

Агрегация (Aggregation)

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

В диаграмме классов агрегация обозначается отношением «больше-чем» с пустым ромбом на стороне контейнера. Например, если у нас есть класс «Компания» и класс «Сотрудник», то мы можем использовать агрегацию, чтобы показать, что каждая компания содержит несколько сотрудников. В этом случае, класс «Компания» будет контейнером, а класс «Сотрудник» — содержимым.

Пример отношения

В этом примере мы показываем, что каждая компания может содержать несколько сотрудников, используя отношение агрегации «contains». Обратите внимание на пустой ромб на стороне компании, он обозначает что данный класс является контейнером.

Композиция (Composition)

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

Композиция обозначается на диаграмме классов uml с помощью пустого ромба на стороне класса-контейнера, соединенной линией с классом-частью. Также можно указать имя роли, которую выполняет класс-часть в отношении с классом-контейнером.

Пример отношения

В данном примере класс Order содержит список экземпляров класса OrderItem , при этом экземпляры класса OrderItem принадлежат только одному экземпляру класса Order . Обозначение отношения композиции между классами Order и OrderItem указано с помощью пустого ромба со стороны класса Order и надписи composition .

Читайте также:  Как открыть бизнес по продаже сувениров

Обобщение (Generalization)

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

Пример отношения

На диаграмме классов обобщение отображается в виде стрелки, которая указывает от дочернего класса к родительскому. В конце стрелки иногда указывают слово «extends» или «inherits» (в зависимости от используемого синтаксиса). Родительский класс обычно находится вверху диаграммы, а дочерние классы располагаются под ним.

Примером обобщения может быть класс «Фигура», который является родительским классом для классов «Круг», «Прямоугольник», «Треугольник». У класса «Фигура» могут быть общие атрибуты и методы, которые будут наследоваться всеми дочерними классами.

Реализация (implementation)

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

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

Пример отношения

В этом примере классы Circle и Square реализуют интерфейс IShape и должны предоставить реализацию метода draw() . Связь реализации обозначена линиями с треугольными стрелками, которые указывают на интерфейс IShape .

Построение диаграммы классов

Построение диаграммы классов включает несколько шагов. Ниже приведены основные этапы процесса и пример на выбранной предметной области (Университет).

Шаг 1. Идентификация классов

Определите основные классы, которые будут присутствовать в вашей системе или программе. В нашем примере на предметную область «Университет» могут входить классы «Студент», «Преподаватель», «Курс» и «Группа».

Пример определения классов на class diagram

Шаг 2. Определение атрибутов классов

Для каждого класса определите его атрибуты, то есть переменные, которые описывают его состояние. Например, класс «Студент» может иметь атрибуты «имя», «возраст» и «номер студенческого билета». Запишите атрибуты рядом с соответствующими классами на диаграмме.

Пример определения атрибутов класса предметной области

Шаг 3. Определение методов классов

Для каждого класса определите его методы, то есть функции или операции, которые класс может выполнять. Например, класс «Студент» может иметь методы «записаться на курс», «получить средний балл» и «изменить информацию о себе». Запишите методы под соответствующими классами на диаграмме.

Пример определения методов класса предметной области

Шаг 4. Определение отношений между классами

Пример определения отношений классов предметной области

Установите связи между классами, чтобы показать их отношения. Например, класс «Студент» может иметь ассоциацию с классом «Курс», чтобы показать, что студенты записываются на курсы. Используйте стрелки и мощность отношений для указания типа и количество связей между классами.

Источник: itonboard.ru

UML-диаграммы классов

UML – унифицированный язык моделирования (Unified Modeling Language) – это система обозначений, которую можно применять для объектно-ориентированного анализа и проектирования.
Его можно использовать для визуализации, спецификации, конструирования и документирования программных систем.
Словарь UML включает три вида строительных блоков:

Сущности – это абстракции, которые являются основными элементами модели, связи соединяют их между собой, а диаграммы группируют представляющие интерес наборы сущностей.

Диаграмма – это графическое представление набора элементов, чаще всего изображенного в виде связного графа вершин (сущностей) и путей (связей). Язык UML включает 13 видов диаграмм, среди которых на первом месте в списке — диаграмма классов, о которой и пойдет речь.
Диаграммы классов показывают набор классов, интерфейсов, а также их связи. Диаграммы этого вида чаще всего используются для моделирования объектно-ориентированных систем. Они предназначены для статического представления системы.
Большинство элементов UML имеют уникальную и прямую графическую нотацию, которая дает визуальное представление наиболее важных аспектов элемента.

Сущности

Диаграммы классов оперируют тремя видами сущностей UML:

  • Структурные.
  • Поведенческие.
  • Аннотирующие.

Структурные сущности – это «имена существительные» в модели UML. В основном, статические части модели, представляющие либо концептуальные, либо физические элементы. Основным видом структурной сущности в диаграммах классов является класс .

Поведенческие сущности – динамические части моделей UML. Это «глаголы» моделей, представляющие поведение модели во времени и пространстве. Основной из них является взаимодействие – поведение, которое заключается в обмене сообщениями между наборами объектов или ролей в определенном контексте для достижения некоторой цели. Сообщение изображается в виде линии со стрелкой, почти всегда сопровождаемой именем операции.

Поведенческие сущности

Аннотирующие сущности – это поясняющие части UML-моделей, иными словами, комментарии, которые можно применить для описания, выделения и пояснения любого элемента модели. Главная из аннотирующих сущностей – примечание . Это символ, служащий для описания ограничений и комментариев, относящихся к элементу либо набору элементов. Графически представлен прямоугольником с загнутым углом; внутри помещается текстовый или графический комментарий.

Аннотирующие сущности

Структурные сущности — классы

Класс – это описание набора объектов с одинаковыми атрибутами, операциями, связями и семантикой.

Графически класс изображается в виде прямоугольника, разделенного на 3 блока горизонтальными линиями:

  • имя класса
  • атрибуты (свойства) класса
  • операции (методы) класса.

Для атрибутов и операций может быть указан один из трех типов видимости:

Видимость для полей и методов указывается в виде левого символа в строке с именем соответствующего элемента.

Обозначение класса

Каждый класс должен обладать именем, отличающим его от других классов. Имя – это текстовая строка. Имя класса может состоять из любого числа букв, цифр и знаков препинания (за исключением двоеточия и точки) и может записываться в несколько строк.
На практике обычно используются краткие имена классов, взятые из словаря моделируемой системы. Каждое слово в имени класса традиционно пишут с заглавной буквы (верблюжья конвенция), например Sensor (Датчик) или TemperatureSensor (ДатчикТемпературы).

Для абстрактного класса имя класса записывается курсивом.

Атрибут (свойство) – это именованное свойство класса, описывающее диапазон значений, которые может принимать экземпляр атрибута. Класс может иметь любое число атрибутов или не иметь ни одного. В последнем случае блок атрибутов оставляют пустым.
Атрибут представляет некоторое свойство моделируемой сущности, которым обладают все объекты данного класса. Имя атрибута, как и имя класса, может представлять собой текст. На практике для именования атрибута используются одно или несколько коротких существительных, выражающих некое свойство класса, к которому относится атрибут.

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

Статические атрибуты класса обозначаются подчеркиванием.

Операция (метод) – это реализация метода класса. Класс может иметь любое число операций либо не иметь ни одной. Часто вызов операции объекта изменяет его атрибуты.
Графически операции представлены в нижнем блоке описания класса.
Допускается указание только имен операций. Имя операции, как и имя класса, должно представлять собой текст. На практике для именования операции используются короткие глагольные конструкции, описывающие некое поведение класса, которому принадлежит операция. Обычно каждое слово в имени операции пишется с заглавной буквы, за исключением первого, например move (переместить) или isEmpty (проверка на пустоту).
Можно специфицировать операцию, устанавливая ее сигнатуру, включающую имя, тип и значение по умолчанию всех параметров, а применительно к функциям – тип возвращаемого значения.

Абстрактные методы класса обозначаются курсивным шрифтом.
Статические методы класса обозначаются подчеркиванием.

Стереотип

Изображая класс, не обязательно показывать сразу все его атрибуты и операции. Для конкретного представления, как правило, существенна только часть атрибутов и операций класса. В силу этих причин допускается упрощенное представление класса, то есть для графического представления выбираются только некоторые из его атрибутов. Если помимо указанных существуют другие атрибуты и операции, вы даете это понять, завершая каждый список многоточием.
Чтобы легче воспринимать длинные списки атрибутов и операций, желательно снабдить префиксом (именем стереотипа) каждую категорию в них. В данном случае стереотип – это слово, заключенное в угловые кавычки, которое указывает то, что за ним следует.

Читайте также:  В каком бизнесе можно быть посредником

Отношения между классами

Существует четыре типа связей в UML:

  • Зависимость
  • Ассоциация
  • Обобщение
  • Реализация

Эти связи представляют собой базовые строительные блоки для описания отношений в UML, используемые для разработки хорошо согласованных моделей.

Первая из них – зависимость – семантически представляет собой связь между двумя элементами модели, в которой изменение одного элемента (независимого) может привести к изменению семантики другого элемента (зависимого). Графически представлена пунктирной линией, иногда со стрелкой, направленной к той сущности, от которой зависит еще одна; может быть снабжена меткой.

Зависимость

Зависимость – это связь использования , указывающая, что изменение спецификаций одной сущности может повлиять на другие сущности, которые используют ее.

Ассоциация

Ассоциация – это структурная связь между элементами модели, которая описывает набор связей, существующих между объектами.
Ассоциация показывает, что объекты одной сущности (класса) связаны с объектами другой сущности таким образом, что можно перемещаться от объектов одного класса к другому.
Например, класс Человек и класс Школа имеют ассоциацию, так как человек может учиться в школе. Ассоциации можно присвоить имя «учится в». В представлении однонаправленной ассоциации добавляется стрелка, указывающая на направление ассоциации.

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

Множественность ассоциации представляет собой диапазон целых чисел, указывающий возможное количество связанных объектов. Он записывается в виде выражения с минимальным и максимальным значением; для их разделения используются две точки. Устанавливая множественность дальнего конца ассоциации, вы указываете, сколько объектов может существовать на дальнем конце ассоциации для каждого объекта класса, находящегося на ближнем ее конце. Количество объектов должно находиться в пределах заданного диапазона. Множественность может быть определена как единица 1 , ноль или один 0..1 , любое значение 0..* или * , один или несколько 1..* . Можно также задавать диапазон целых значений, например 2..5 , или устанавливать точное число, например 3 .
Множественность ассоциации
Агрегация – особая разновидность ассоциации, представляющая структурную связь целого с его частями. Как тип ассоциации, агрегация может быть именованной. Одно отношение агрегации не может включать более двух классов (контейнер и содержимое).
Агрегация встречается, когда один класс является коллекцией или контейнером других. Причём, по умолчанию агрегацией называют агрегацию по ссылке, то есть когда время существования содержащихся классов не зависит от времени существования содержащего их класса. Если контейнер будет уничтожен, то его содержимое — нет.
Графически агрегация представляется пустым ромбом на блоке класса «целое», и линией, идущей от этого ромба к классу «часть».
Агрегация
Композиция — более строгий вариант агрегации. Известна также как агрегация по значению.
Композиция – это форма агрегации с четко выраженными отношениями владения и совпадением времени жизни частей и целого. Композиция имеет жёсткую зависимость времени существования экземпляров класса контейнера и экземпляров содержащихся классов. Если контейнер будет уничтожен, то всё его содержимое будет также уничтожено.
Графически представляется как и агрегация, но с закрашенным ромбиком.
Композиция

Третья связь – обобщение – выражает специализацию или наследование , в котором специализированный элемент (потомок) строится по спецификациям обобщенного элемента (родителя). Потомок разделяет структуру и поведение родителя. Графически обобщение представлено в виде сплошной линии с пустой стрелкой, указывающей на родителя.
Обобщение
Четвертая – реализация – это семантическая связь между классами, когда один из них (поставщик) определяет соглашение, которого второй (клиент) обязан придерживаться. Это связи между интерфейсами и классами, которые реализуют эти интерфейсы. Это, своего рода, отношение «целое-часть». Поставщик, как правило, представлен абстрактным классом. В графическом исполнении связь реализации – это гибрид связей обобщения и зависимости: треугольник указывает на поставщика, а второй конец пунктирной линии – на клиента.
Реализация

Пример кода и диаграммы классов для него

Программа получает данные с датчика температуры (вводятся с консоли) — по 5 измерений для каждого из двух объектов класса TemperatureMeasure и усредняет их. Также предусмотрен класс ShowMeasure для вывода измеренных значений.

#include
using namespace std;
class Sensor int value;
public :
Sensor() < value = 0; >
void setValue( int value) < this ->value += value; >
int getValue() < return value; >
>;
class MeasureCount
int number;
static int total;
public :
MeasureCount() < number = 0; >
void increment() < number++; total++; >
int getNumber() < return number; >
static int getTotal() < return total; >
>;
int MeasureCount::total = 0;
class ITemperatureMeasure
public :
virtual void setValue() = 0;
virtual double getValue() = 0;
>;
class TemperatureMeasure : public virtual ITemperatureMeasure
private :
Sensor *h; // агрегация
MeasureCount *measure; // композиция
public :
TemperatureMeasure(Sensor *h);
int getNumber() < return measure->getNumber(); >
double getValue() < return ( double )h->getValue() / measure->getNumber(); >
void setValue()
int value;
measure->increment();
cout getNumber() cin >> value;
h->setValue(value);
>
static int getTotal() < return MeasureCount::getTotal(); >
>;
TemperatureMeasure::TemperatureMeasure(Sensor *h)
measure = new MeasureCount();
this ->h = h;
>
class ShowTemperature // зависимость
public :
static void Show(TemperatureMeasure t)
cout cout >
>;

int main()
Sensor *h1 = new Sensor();
TemperatureMeasure tc1(h1);
for ( int i=0; i tc1.setValue();
ShowTemperature::Show(tc1);
cout Sensor *h2 = new Sensor();
TemperatureMeasure tc2(h2);
for ( int i = 0; i tc2.setValue();
ShowTemperature::Show(tc2);
cout cout << «Total: » << TemperatureMeasure::getTotal() cin.get(); cin.get();
return 0;
>

Результат выполнения
Тестирование отношений классов
UML-диаграмма классов для приведенного выше кода будет выглядеть следующим образом:
UML-диаграмма классов
На диаграмме классов основным классом является класс TemperatureMeasure , который и является измерителем температуры. В качестве измеренного значения формируется среднее арифметическое всех измерений — сумма всех измерений, деленная на их количество.
Для получения измерений и их суммирования используется класс Sensor (в качестве датчика температуры). В консольной задаче сами измерения передаются в этот класс для суммирования. Класс состоит в отношении агрегации с основным классом TemperatureMeasure : мы сначала создаем объект класса Sensor , а потом передаем его в качестве параметра конструктора классу TemperatureMeasure , чтобы использовать его в качестве части класса.
Количество измерений формируется классом MeasureCount , который содержит статическое свойство total для подсчета общего измерений, а также свойство count для подсчета количества измерителей конкретного объекта TemperatureMeasure . Класс MeasureCount находится в отношении композиции с классом TemperatureMeasure : объект MeasureCount создается непосредственно при создании объекта TemperatureMeasure (в его конструкторе).
Класс ITemperatureMeasure представляет собой интерфейс класса TemperatureMeasure и является своего рода поставщиком в отношении реализации.
Наконец, класс ShowTemperature находится в отношении зависимости с классом TemperatureMeasure , поскольку реализация единственного метода Show класса ShowTemperature зависит от структуры класса TemperatureMeasure .

Комментариев к записи: 11

Источник: prog-cpp.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
Бизнес для женщин