русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


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


Дата додавання: 2014-04-22; переглядів: 3774.


Різниця між викликом статичного і динамічного (віртуального) методу полягає в тому, що у першому випадку компілятору зарані відомий зв’язок об’єкта з методом і він встановлює його на етапі компіляції. У другому – компілятор нібито відкладає розв’язок до моменту виконання програми.

Якщо використовувати раніше створений приклад у «статичному» варіанті, то виклик процедури getname міг привести тільки до виконання найближчого в об’єктній ієрархії getsum, тобто TStudent.getname. Якщо припустити, що власний метод дочірнього типу, котрий би перевизначав TStudent.showname, не існує, то будь-який породжений по відношенню до TStudent тип буде працювати саме з тим showname, котрий визначений у батьківському типі і, відповідно, з тим самим getname, котрий визначений у батьківському типі. Рішення про це приймається на етапі компіляції, а таке зв’язування називається раннім зв’язуванням.

Якщо ж ми використовуємо віртуалізацію методів, то все відбувається інакше. Кожен тип об’єктів має власний метод getname, тому від того, який екземпляр викликає метод showname, залежить, який саме getname виконається. Тому рішення про виклик методу getname всередині showname доводиться відкласти, його неможливо прийняти при компіляції коду showname. Інформація про те, об’єкт якого типу викликав showname, недоступна під час компіляції, тому розв’язок відкладається до моменту, поки програма не почне виконуватися і поки не можна буде встановити, об’єкт якого типу викликав цей метод. Таке зв’язування називається пізнім.

Підсумок

За замовчуванням і якщо не зроблено спеціальних уточнень, метод вважається статичним. Розміщення посилань на такі методи здійснюється на етапі компіляції. Самі собою статичні методи теж є потужним інструментом, використовуючи який можна створювати багатофункціональні програми, але вони породжують т.зв. проблему успадкування.

Методом розв’язку проблеми успадкування є віртуалізація методів, яка дає нам змогу по-справжньому використовувати поліморфізм: той сам метод може працювати по-різному в залежності від того, який об’єкт його викликає. Зв’язування об’єкту з методом на етапі компіляції називається раннім, на етапі виконання – пізнім.

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

 


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

1. Якщо метод описаний без жодних спеціальних уточнень, то він є

а) статичним

б) віртуальним

г) це залежить від того, який об’єкт його викликає.

 

2. Вкажіть правильний опис віртуального методу

а) constructor init(nm,dt:string;rt,bl:real);

б) function getname:string;virtual;

в) function getbal:real;

 

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

а) інкапсуляцією

б) успадковуванням

в) поліморфізмом

 

4. Нехай об’єкт B є батьківським по відношенню до D. Один з типів об’єкту В з іменем М є віртуальним, об’єкт D його перевизначає. Виберіть з описів цього методу правильний

а) procedure B.M(a:string); virtual;

procedure D.M(a:string);

 

б) procedure B.M(a:string); virtual;

procedure D.M(a:string;l:integer); virtual

 

в) procedure B.M(a:string); virtual;

procedure D.M(a:string); virtual;

 

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

 



<== попередня лекція | наступна лекція ==>
Віртуалізація методів | Тема 4 Об’єктно-орієнтоване програмування в Pascal. Таблиця віртуальних методів. Переваги і недоліки віртуальних методів.


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн