Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика 16 18 19.docx
Скачиваний:
6
Добавлен:
19.04.2015
Размер:
48.12 Кб
Скачать

17.7. Виды взаимодействия классов

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

Можно выделить четыре вида взаимодействия классов:

· наследование,

· агрегация (включение),

· использование,

· ассоциация.

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

Рис. 17.2. Обозначение класса на диаграммах:а – подробное, б – упрощенное

Базовый элемент таких диаграмм – класс – изображается в виде прямоугольника, разделенного на три ячейки: в верхнюю помещается название класса, в среднюю – свойства, в нижнюю – методы. На рис. 17.2, а представлено графическое изображение класса Printer. Допускается также упрощенное обозначение класса (рис. 17.2, б) на диаграммах: указывается только название класса без перечисления его свойств и методов.

Связи между классами обозначаются прямыми линиями. Для каждого вида взаимодействия используются определенные типы линий (рис. 17.3).

Рассмотрим виды взаимодействия классов.

Наследование, т. е. создание нового класса на базе существующего, рассмотрено выше. Класс-наследник также может иметь наследников, его наследники, в свою очередь, также могут иметь наследников, и так далее, в результате может быть выстроена иерархическая структура – дерево классов. Основу любой библиотеки классов (объектов), объектной модели программы, например, браузера, составляет иерархия классов. Пример графического представления наследования приведен на рис. 17.4.

Рис. 17.3. Обозначения вызовов взаимодействия классов

Рис. 17.4. Диаграмма наследования

Агрегация – включение объектов одного класса в состав другого класса; cвязь однонаправленная (рис. 17.5).

Код программы, отражающий агрегацию классов, следующий:

class A

{ …

void met_A();

}

class B

{ …

A b1; //В состав класса B включен объект класса A

}

Рис. 17.5. Диаграмма агрегации классов

Включенный объект b1 не существует самостоятельно, он создается внутри объекта класса B. Доступ к включенному во внешний класс объекту осуществляется только через объект внешнего класса:

B objB;

objB.b1.met_A();

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

Если класс A выступает в роли сервера, а класс B – клиента, то объект класса A передается в методы класса B в виде значения или адреса:

class A

{

}

class B

{

<return_type> met_B(A* a) ;

}

Рис. 17.6. Диаграмма использования

(клиент-серверного взаимодействия)

Объект класса B использует ресурсы объекта класса A и может изменить состояние объекта класса A (рис. 17.6)

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

Классы, с которыми устанавливается ассоциативная связь, должны иметь переменные-указатели на объекты ассоциированного класса:

class A

{

B* varA; //Указатель на один объект класса B

}

class B

{

A** varB; //Указатель на массив объектов класса A

}

В этом примере со стороны класса B в связи участвует один объект, а со стороны класса A – несколько объектов (рис. 17.7).

Рис. 17.7. Диаграмма ассоциации классов:

1, N - количество объектов,

участвующих в связи от класса B и A соответственно

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

Ассоциативная связь используется при построении реляционных баз данных.

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

Рис. 17.8. Диаграмма классов рабочего места пользователя

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

К началу главы