Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Уст.лекции_ООП.doc
Скачиваний:
16
Добавлен:
22.09.2019
Размер:
359 Кб
Скачать
☆

4 Вопрос

Механизм наследования. Правила наследования. Привести пример программного описания родительского и дочернего класса.

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

Если непосредственный родитель единственный, то наследование называется простым, а если таких классов несколько - то множественным.

При этом класс родитель (или классы родители) и класс потомок образуют иерархию.

При множественном наследовании наследуются поля и методы всех родителей. В том случае, если среди родителей есть классы, принадлежащие одной иерархии, происходит дублирование полей и методов, наследуемых от общих родителей.

Рисунок 3 – Иерархия классов при различных видах наследования

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

4.1 Правила наследования

Наследования дочерними типами информационных полей и методов их родительских типов выполняются согласно следующим правилам

  1. Информационные поля и методы родительского типа наследуются всеми его дочерними типами независимо от числа промежуточных уровней иерархии

  2. Доступ к полям и методам родительских типов в рамках описания любых дочерних типов выполняются так, как будто они описаны в самом дочернем типе.

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

  4. Дочерние типы могут доопределить произвольное число собственных методов и информационных полей.

  5. Любое изменение текста в родительском методе автоматически оказывает влияние на все методы порожденных дочерних типов, которые его вызывают.

  6. В противоположность информационным полям (см. правило 3) идентификатор методов в дочерних типах может совпадать с именами методов в родительских типах. В этом случае говорят, что дочерние методы подавляет одноименный ему родительский, и в рамках дочернего типа, при указании имени такого метода, будет вызываться именно дочерний метод, а не родительский.

Структура описания класса-потомка:

Туре <имя класса-потомка>=Object(<имя класса-родителя>)

<новые поля класса-потомка>

<новые методы класса-потомка>

End;

Туре <имя класса-потомка>=Class(<имя класса-родителя>)

<новые поля класса-потомка>

<новые методы класса-потомка>

End;

tуре

 // базовый класс

TAnimal = class

name: string[30]; // имя животного

Procedure Feed; // метод прием пищи

End;

//Производный класс

TMammal = class (TAnimal)

pregnancy: real; // срок вынашивания детеныша

Procedure FeedMilk; // метод приема молока

End;

TTiger = class (TMammal)

koldet: integer;

Procedure Hunt;

End;