- •Объектно-ориентированное программирование
- •1 Вопрос
- •1.2 Достоинства и недостатки ооп
- •1.3 Пример описания объектного типа
- •2 Вопрос
- •2.1 Основные понятия ооп
- •2.2 Примеры программного описания
- •2.3 Соотношение основных понятий ооп
- •3 Вопрос
- •4 Вопрос
- •4.1 Правила наследования
- •5 Вопрос
- •5.1 Пример использования директив
- •6 Вопрос
- •6.1 Пример описания виртуального метода
- •7 Вопрос
- •7.1 Пример использования
- •8 Вопрос
- •8.2 Пример объявления
- •9 Вопрос
- •9.1 Глобальная обработка исключений
- •9.2 Локальная обработка исключений
- •9.3 Пример использования операторов
- •10 Вопрос
- •1.4 Закрытие файла
- •1.5 Ввод из файла
- •1.6 Определение конца файла
4 Вопрос
Механизм наследования. Правила наследования. Привести пример программного описания родительского и дочернего класса.
В ООП существует возможность конструирования новых более сложных классов из уже имеющихся посредством добавления полей и определения новых методов (принцип иерархичности). При этом исходный класс, на базе которого выполняется конструирование, часто называется родителем, а производный - потомком. Специальный механизм наследования обеспечивает классу-потомку возможность использования полей и методов одного или нескольких родительских классов.
Если непосредственный родитель единственный, то наследование называется простым, а если таких классов несколько - то множественным.
При этом класс родитель (или классы родители) и класс потомок образуют иерархию.
При множественном наследовании наследуются поля и методы всех родителей. В том случае, если среди родителей есть классы, принадлежащие одной иерархии, происходит дублирование полей и методов, наследуемых от общих родителей.
Рисунок 3 – Иерархия классов при различных видах наследования
Любой класс можно объявить потомком ранее описанного класса. Потомок наследует все данные и методы класса родителя и дополняет их своими данными и методами. В результате использования механизма наследование отпадает необходимость заново описывать существующие в классе-родителе поля и методы. Требуется описать только те поля и методы, которых недостает в классе-родителе.
4.1 Правила наследования
Наследования дочерними типами информационных полей и методов их родительских типов выполняются согласно следующим правилам
Информационные поля и методы родительского типа наследуются всеми его дочерними типами независимо от числа промежуточных уровней иерархии
Доступ к полям и методам родительских типов в рамках описания любых дочерних типов выполняются так, как будто они описаны в самом дочернем типе.
Ни в одном из дочерних типов не могут использоваться идентификаторы полей совпадающих с идентификатором полей каких-либо из родительских типов. Это же относится и к идентификаторам формальных параметров, указанных в заголовке метода.
Дочерние типы могут доопределить произвольное число собственных методов и информационных полей.
Любое изменение текста в родительском методе автоматически оказывает влияние на все методы порожденных дочерних типов, которые его вызывают.
В противоположность информационным полям (см. правило 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;
