Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лабы / Лабораторная_работа_по_паттернам_new_—_копия.docx
Скачиваний:
0
Добавлен:
11.02.2026
Размер:
1.18 Mб
Скачать

Отношения между классами. На диаграммах классов языка uml

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

Язык UML является визуальным средством представления моделей программ.

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

Одной из основных диаграмм языка UML является диаграмма классов.

Она описывает классы и отражает отношения, существующие между ними.

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

Кроме того, эти диаграммы используют для описания так называемых шаблонов проектирования (design patterns), которые в сочетании с объектно-ориентированной парадигмой лежат в основе современного подхода к разработке программного обеспечения.

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

Имя класса указывается в верхней части.

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

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

Перед именем поля или метода может указываться спецификатор доступа с помощью одного из трех символов:

+ для publiс, - для private, # для protected.

Для статических элементов класса после спецификатора доступа записывается символ $.

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

Большинство объектно-ориентированных языков поддерживают следующие виды отношений между классами:

  • ассоциация;

  • наследование;

  • агрегация;

  • зависимость.

Ассоциация

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

Ассоциация между этими двумя классами показана соединяющей их линией.

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

Для представления понятия «произвольное количество» в UML используется символ звездочки *.

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

Наследование

Отношение обобщения.

Агрегация

Отношение агрегации между классами имеет место, когда один класс содержит в качестве составной части объекты другого класса. Иными словами, это отношение целое/часть.

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

В зависимости от решаемой задачи такой компонент может появляться и исчезать динамически в течение жизни объекта целое.

Для реализации нестрогой агрегации часть включается в целое по ссылке: на языке C++ это обычно указатель на соответствующий класс. Таким образом, если этот указатель равен нулю, то компонент отсутствует.

Композиция

Строгая агрегация имеет специальное название — композиция. Она означает, что компонент не может исчезнуть, пока объект целое существует.

На диаграмме отношение композиции обозначается линией со стрелкой в виде закрашенного ромба.

Проще всего композицию реализовать включением объектов-компонентов по значению. В то же время возможна реализация и включением по ссылке, если обеспечить следующее требование: время жизни компонентов должно либо совпадать со временем жизни объекта целое, либо перекрывать его.

Зависимость

Отношение зависимости (отношение использования) между двумя классами показывает, что один класс (Client) пользуется некоторыми услугами другого класса (Supplier - провайдер), например:

метод класса Client использует значения некоторых полей класса Supplier;

метод класса Client вызывает некоторый метод класса Supplier;

метод класса Client имеет сигнатуру, в которой упоминается класс Supplier.

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

Структурные шаблоны

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

Порождающие шаблоны

Порождающие шаблоны проектирования, которые абстрагируют процесс инстанцирования.

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

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

Поведенческие шаблоны

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

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

Поэтому ниже кратко рассмотрены лишь некоторые из существующих паттернов.

Если будет необходима дополнительная информация о конкретном шаблоне, то обращайтесь к литературе.

Рассмотрение структурных шаблонов

Адаптер (Adapter)

Адаптер (Adapter) преобразует интерфейс класса в некоторый другой интерфейс, ожидаемый клиентами.

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