Опубликован: 13.09.2006 | Уровень: для всех | Доступ: свободно | ВУЗ: Тверской государственный университет
Лекция 6:

Семейство классов и наследование интерфейсов. Динамические классы

< Лекция 5 || Лекция 6: 123456 || Лекция 7 >
Аннотация: Семейство классов и реализация интерфейсов. Наследование. Виртуальные методы и полиморфизм. Абстрактные классы. Наследование и полиморфизм в Office 2000. Наследование интерфейсов. Полиморфизм семейства классов. Проект "Люди и Машины". Создание динамических структур данных. Встроенный динамический класс Collection. Создание собственных динамических классов. Обертывание коллекции VBA.

Программный код большинства примеров данной лекции можно найти в проектах, доступных для просмотра: DocOne5, DocTwo5.

Семейство классов и реализация интерфейсов

В предыдущей лекции мы уже говорили об одной из важных новинок Office 2000, направленной на превращение VBA в полноценный объектно-ориентированный язык. Возможность создания событий для классов, определенных программистом, существенно расширяет их возможности. Теперь такие классы обладают всеми тремя компонентами, присущими "настоящим" классам, - свойствами, методами и событиями, теперь и их объекты могут индивидуально реагировать на происходящие события. Сейчас мы расскажем еще об одном важном нововведении - возможности реализовать в одном классе интерфейс другого класса. Эта новинка направлена на создание полноценного семейства классов, связанного наследованием интерфейсов и реализующего полиморфизм методов семейства классов. Нужно сразу сказать, что сделано только пол шага в нужном направлении, - можно говорить о реализации полиморфизма и частичной реализации наследования в его классическом понимании. Можно ожидать развития этого направления в последующих версиях Office 2000. Но и то, что уже сделано, представляет несомненный интерес. Понимание этого материала требует от читателя знания основ ООП, и, в первую очередь, понимание наследования и полиморфизма. Минимально необходимые сведения мы сейчас приведем.

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

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

Суть наследования в том, что новый класс в момент его создания можно объявить наследником одного или нескольких базовых классов. Пусть уже определен класс A, и при определении новый класс В объявлен наследником класса А. В этом случае класс В наследует все открытые для потомков свойства и поведение класса А, - наследует его интерфейс. Это означает, что в классе В автоматически определены переменные и методы класса А, задающие интерфейс.

Класс А называется базовым (родительским) по отношению к производному (порожденному) классу В. Очень часто, говоря о наследовании, используют терминологию " родительский класс " и " класс-потомок ". Ввиду транзитивности наследования (транзитивность означает, что из утверждений " А родитель В " и " В родитель С " следует " А родитель С ") каждый класс может иметь множество родителей (предков) и множество потомков, среди которых выделяют " непосредственных родителей " и " непосредственных потомков ". Потомок транзитивно наследует свойства и поведение всех своих предков.

В производном классе можно определить новые свойства и новое поведение, задав новые переменные и новые методы. Более того, в производном классе можно переопределить существующий метод базового класса.

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

Отношение наследования обычно представляют в виде графа, узлы которого соответствуют классам, и из узла A в узел B ведет дуга, если класс B является непосредственным наследником класса A. Этот граф изображает структуру совокупности классов с точки зрения наследования. Если наследование не множественное, то соответствующий граф является деревом. В корне дерева находится прародитель - класс, для которого все остальные классы являются его потомками-наследниками.

Вот пример семейства классов, связанных отношением наследования:

Дерево одиночного наследования

Рис. 5.1. Дерево одиночного наследования

Множественное наследование описывается ациклическим графом:

Ациклический граф множественного наследования.

Рис. 5.2. Ациклический граф множественного наследования.

Мы уже говорили, что производный класс наследует состояние и поведение базового класса. Это значит, что все открытые ( Public ) элементы базового класса доступны в производном классе. Но главное, конечно, в том, что потомок может пойти дальше своего родителя. Производный класс расширяет свойства и поведение базового класса. В производном классе можно:

  • объявить новые переменные
  • объявить новые методы
  • переопределить (перегрузить, перекрыть) методы базового класса.

Переопределение метод а класса A в производном классе В, называемое также перегрузкой (overloading) или перекрытием (overriding), - это определение в классе B метода с именем, которое уже является именем некоторого метода класса А.

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

< Лекция 5 || Лекция 6: 123456 || Лекция 7 >
полина есенкова
полина есенкова
Дмитрий Вологжин
Дмитрий Вологжин
Добрый день, прошел тесты с 1 по 9, 10 не сдал, стал читать лекцию и всё пройденные тесты с 1 по 9 сбросились, когда захотел пересдать 10 тест.
Андрей Гуменюк
Андрей Гуменюк
Молдова