КОМПОЗИЦИЯ

 

Ранее было указано, что в результате объектной декомпозиции второго и более уровней могут быть получены объекты, находящиеся между собой в отношении включения (см. рис. 12). Классы для реализации таких объектов могут строиться двумя способами: 1) с использованием наследования или 2) композиции.

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

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

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

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

 

 

Рис. 22 − Вид окна сообщения

 

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

Класс Сообщение может быть записан так:

Класс Сообщение – родитель: класс Окно_с_текстом:

Поле Кнопка: Окно_с_текстом

Метод Инициализировать (aXl,aYl,aX2,aY2,aColor,

aXt, aYt, aText,

bXl,bYl,bX2,bY2,bColor,

bXt, bYt, bText)

метод Изобразить