Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
все ответы.docx
Скачиваний:
8
Добавлен:
26.09.2019
Размер:
2.71 Mб
Скачать

21. Принцип наследования.

Способы многократного использования кода в приложении. Определение наследования. Наследование данных и методов. Иерархическая схема наследования. Обобщение и специализация. Отношение “is-a”.

Простое и множественное наследование. Проблемы множественного наследования.

Применение наследования 1) для многократного использования реализации; 2) для отличия - добавления новых поведений и свойств и переопределения старых; 3) для замены типов (объект-потомок может использоваться вместо объекта-предка). Примеры.

Существует два способа многократного использования кода класса – собственно использование и наследование. К использованию можно отнести:

  1. Объект другого класса (используемого) присутствует как поле данного класса;

  2. Объект используемого класса присылается методу данного класса в качестве параметра или доступен глобально;

  3. Объект используемого класса создается в рамках работы методов данного класса.

Использование – более свободная форма, чем наследование, однако наследование во многих случаях более эффективно, а так же позволяет реализовать так называемое полиморфное поведение.

В Delphi класс может иметь только одного предка. Наследуются все элементы родительского класса. Однако некоторые из них, что были объявлены в секции private родительского класса, перестают быть видимыми (если только оба класса объявлены не в одном модуле). Однако физически они присутствуют и унаследованные видимые методы и свойства, ссылающиеся на невидимые элементы, будут работать. В отношении дальнейшего наследования атрибуты сохраняют свою область видимости, если ее специально не изменить, еще раз описав их с другим атрибутом видимости. Для полей и методов фактически это будет означать добавление нового поля или метода (соответственно) и сокрытие старого. В отношении свойств есть два механизма – перекрытие (override) и переопределение (redeclaration). Первый позволяет изменить видимость и/или спецификаторы свойства. Оно может не включать спецификаторов вообще. Второй – полностью изменить свойство, вплоть до типа (фактически создать новое). В первом случае не указывается тип свойства, во втором – указывается, и т.к. это фактически новое свойство, оно должно удовлетворять всем требованиям к описанию нового свойства. Для методов описанных с помощью особых директив virtual и dynamic тоже есть возможность перекрытия (т.е. новый метод именно заменяет старый, а не прячет его.

про is-a (иногда пишется ISA).

Если есть два объекта: A и B, то можно сказать, что B is-a A, если в программе везде, где используется A, можно использовать B. Несмотря на мудреное определение, все просто.

    1. Типы наследования

      1. Простое наследование

Класс, от которого произошло наследование, называется базовым или родительским (англ. base class). Классы, которые произошли от базового, называются потомками,наследниками или производными классами (англ. derived class).

      1. Множественное наследование

При множественном наследовании у класса может быть более одного предка. В этом случае класс наследует методы всех предков. Достоинства такого подхода в большей гибкости.

Множественное наследование — потенциальный источник ошибок, которые могут возникнуть из-за наличия одинаковых имен методов в предках