Procedure ShowName;

Procedure ShowDate;

Procedure ShowRate;

END;

 

TStudent1=OBJECT(TStudent)

Bal:Real;

Procedure Init(Nm,Dt:String; Rt,Bl:Real);

Function GetBal:Real;

Function GetSum:Real;

Procedure ShowBal;

Procedure ShowAll;

END;

 

Дочірній тип успадковує від батьківського процедуру Init. Але, оскільки цей дочірній тип має додаткове поле даних Bal, яке батьківською процедурою Init не визначається, то цю процедуру необхідно перевизначити. Зробимо це так:

PROCEDURE TStudent1.Init(Nm,Dt:string;rt,bl:real);

Begin

TStudent.Init(Nm,Dt,Rt);

Bal:=bl;

End;

Зверніть увагу, що ми використовуємо метод ініціалізації об’єкту TStudent. Синтаксис виклику успадкованого методу такий:

Предок.Метод;

де Предок – ідентифікатор батьківського типу, а Метод – ідентифікатор методу цього типу.

Відзначимо також, що перевизначати можна тільки методи, але в жодному випадку не поля даних.

 

Підсумок

Виходячи з уже створеного об’єктного типу, можна створювати новий тип, який успадкує поля даних і методи від батьківського типу. Такий механізм називається успадковуванням, а новий об’єкт по відношенні до раніше створеного – дочірнім. На основі цього дочірнього типу теж можна створювати новий об’єкт, для всіх них перший об’єкт буде прабатьківський.

По відношенню до екземплярів об’єктів можна виконувати операцію присвоєння. Згідно із загальним правилом, змінна зліва має належати до батьківського типу, справа – до дочірнього, або ж обидві змінні повинні належати до того самого об’єктного типу.

Об’єднання в об’єкті коду та даних називається інкапсуляцією. При створенні об’єктів слід намагатися визначити їх так, щоб доступ до полів даних виконувався власними типами цих об’єктів.

При потребі, у дочірньому типі можна перевизначити метод оатьківського об’єкта. Поля даних перевизначати не можна.


 

Питання по темі

1. Вибрати правильний запис, який би реалізував механізм успадковування

а) TStudent1=OBJECT:TStudent

Bal:Real;

END;

б) TStudent1=OBJECT(TStudent)

Bal:Real;

END;

в) TStudent1=OBJECT()

TStudent+Bal:Real;

END;

2. Нехай змінні a і b - об’єктного типу, причому a – дочірнього, b – батьківського. Який із записів правильний:

а) a:=b;

б) b:=a;

в) Обидві операції коректні

3. Яка директива вказує, що поля і методи, записані після неї, можуть використовуватися тільки в межах модуля?

а)PRIVATE

б)PUBLIC

в)CONSTRUCTOR

4. Як називається об’єднання в об’єкті коду та даних

5. Якщо метод дочірного об’єкту має ту ж назву, що й метод батьківського об’єкту, але інше тіло чи параметри, то цей метод називається

 


Лекція 5

Тема 2 Об’єктно-орієнтоване програмування в Pascal

 

Статичні методи

Проблема успадковування

Віртуалізація методів

Раннє і пізнє зв’язування

Підсумок

Питання по темі

 

 

Статичні методи

Попередньо описані методи об’єктів TStudent і TStudent1 називаються статичними. Така назва методів зв’язана з тим, що розміщення посилань на них здійснюється ще на етапі компіляції.

Обробка компілятором статичних методів схожа на обробку статичних змінних. Дії компілятора при обробці методів, що складають певну ієрархію, такі:

1. При виклику методу компілятор встановлює тип об’єкту, який викликав цей метод.

2. Встановивши тип, компілятор шукає метод у межах типу об’єкту. Знайшовши його, компілятор призначає виклик цього об’єкта.

3. Якщо вказаний метод не знайдений, то компілятор починає розглядати тип безпосереднього прабатька і шукає метод, ім’я якого викликано в межах цього прабатьківського типу. Якщо метод з таким іменем знайдений, виклик змінюється на виклик методу прабатька.

4. Якщо шуканий метод відсутній в типі найближчого прабатька, то компілятор переходить до типу наступного прабатька («діда») нашого типу, де й здійснюється подальший пошук. Процес продовжується до того часу, доки викликаний метод не буде знайдений, інакше компілятор, дійшовши до найостаннішого типу («родоначальника») і не знайшовши методу, ім’я якого викликається, видасть повідомлення про помилку компіляції номер 44 Field identifer expected (“Очікується ідентифікатор поля”). Це означає, що метод з таким іменем не визначений.

 

Звідси випливає одна важлива особливість. Якщо метод прабатька викликає інші методи, то останні також будуть методами прабатька, навіть якщо потомки мають свої власні методи. Це викликає так звану проблему успадковування, яку вдається розв’язати за рахунок віртуалізації методів.

 








Дата добавления: 2015-08-26; просмотров: 560;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.005 сек.