Читайте также:
|
|
Делегирование - способ заимствования методов у объектов других классов. Оно представляет собой альтернативу переопределению методов, используемому полиморфными объектами. В отличие от переопределения, делегирование позволяет определять различное поведение объектов, принадлежащих одному классу. Причем заимствование методов возможно как в пределах класса или иерархии классов, так и у объектов классов других иерархий.
Метод при этом вызывается косвенно, через указатель на него. Язык, в котором возможна реализация делегирования, должен обеспечивать возможность определения указателей на методы. Назначение или замена метода осуществляются присваиванием соответственного значения специальному указателю (рис.).
Следует различать статическое и динамическое делегирование. При статическом делегировании соответствующий указатель инициализируется в процессе компиляции программы и при выполнении программы не меняется. При динамическом делегировании значение указателю присваивается в процессе выполнения программы и может изменяться в зависимости от ситуации.
Статическое делегирование используется в двух случаях:
1) если требуемое поведение объекта уже описывалось для объектов
другого класса - в этом случае делегирование позволяет избавиться от повторов
в программе;
Примечание. В C++ в аналогичных случаях возможно использование множественного наследования, но оно может оказаться неэффективным, поскольку вместе с желаемым поведением придется унаследовать и все остальные элементы класса.
2) если класс объявлен с не полностью определенным поведением объектов (обычно так описываются некоторые библиотечные классы) и его поведение уточняется для конкретных экземпляров объектов.
Динамическое делегирование используется при создании объектов с изменяемым поведением, когда конкретный вариант поведения определяется некоторыми внешними обстоятельствами.
Пример
Делегирование методов (класс «Фигура»). Рассматривается объектная декомпозиция простейшего текстового редактора, позволяющего рисовать окружности и квадраты с изменяющимися размером, цветом и положением. В результате этой декомпозиции получены три объекта: «Монитор», «Круг» и «Квадрат» (рис.).
Те же действия будет выполнять программа, при разработке которой использован объект с динамическим поведением. Объектная декомпозиция текстового редактора в этом случае будет включать два объекта – «Монитор» и «Фигура» (рис.).
Вариант 1. Класс Фигура описан без указания конкретного варианта выводимой фигуры.
Класс «Фигура 1»:
Дата добавления: 2015-09-06; просмотров: 202 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Наполнение при разработке классов | | | Контейнерные классы |