Основы офисного программирования и язык VBA


Встраивание вместо наследования - часть 2


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

Class Mother { 'Раздел атрибутов Chromosome XX; 'Другие объявления свойств и методов .... } Class Father { 'Раздел атрибутов Chromosome XY; 'Другие объявления свойств и методов .... }

В классы Mother и Father встроены объекты XX и XY ранее определенного класса Chromosome. Используя множественное наследование, можно создать новый класс, наследующий свойства и поведение его родителей:

Class Child : Parents Mother, Father { 'Наследует свойства XX, XY и другие свойства и методы своих родителей 'Раздел атрибутов String NewProperty; 'Другие новые свойства и методы }

Рассмотрим теперь создание класса, основанное на встраивании объектов:

Class MyChild { 'Раздел атрибутов Father F; Mother M; String NewProperty; 'Другие новые свойства и методы }

Вот объявление объектов этих классов:

Child Son; MyChild Daughter;

Объекты Son и Daughter обладают одинаковыми свойствами и поведением. И в этом случае мы будем говорить, что классы Child и MyChild подобны. Есть некоторая синтаксическая разница - у объекта Son свойства XX и XY доступны непосредственно, а у объекта Daughter они доступны через вложенные объекты F и M, так что в первом случае мы пишем Son.XX и Son.XY, а во втором - Daughter.F.XY и Daughter.M.XX.

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

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


Начало  Назад  Вперед



Книжный магазин