Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Статичний контроль типів і динамічне зв'язування

Розглянемо сімейство класів A1, A2,... An, пов'язаних зв’язком успадкування. Клас Ak +1 є прямим нащадком класу Ak. Нехай створено послідовність об'єктів x1, x2,... xn, де xk - об'єкт класу Ak. Нехай у класі A1 створено метод M з модифікатором virtual, перевизначений усіма нащадками, так що в рамках сімейства класів метод M існує в n формах, кожна з яких задає реалізацію методу, обрану відповідним нащадком. Розглянемо основну операцію, ініціація об'єктного обчислення - виклик об'єктом методу класу:

x1.M (arg1, arg2,... argN)

Контролем типів називається перевірка кожного виклику, що засвідчує, що:

1. В класі A1 об'єкта x1 дійсно мається метод M;

2. У методі М дійсно N формальних аргументів;

3. Список фактичних аргументів на точці виклику відповідає за кількістю і типами списку формальних аргументів методу M, заданого в класі A1.

Контроль типів, що виконується на етапі компіляції, називається статичним контролем типів.

Перейдемо до розгляду динамічного зв'язування. І знову розглянемо основну операцію - виклик

x1.M (arg1, arg2,... argN);

Припустимо, що статичний контроль типів для цього виклику успішно виконано. Розглянемо ще один аспект, пов'язаний з цим викликом. Згадаймо, що x1 - це посилання, яке пов'язане з об'єктом, розташованим у динамічній пам'яті. Чи завжди збігається тип об'єкту і тип посилання? Іншими словами, чи завжди об'єкт, створений у динамічній пам'яті, належить класу A1? Відповідь: ні, не завжди.

Метод M є поліморфним, якщо маючи одне і те ж ім'я і сигнатуру, він існує в різних формах - для кожного класу задана власна реалізація методу. Виникає природне запитання, який же метод M слід викликати - метод класу A1 (метод посилання) або метод того класу, якому належить реальний об'єкт у динамічній пам'яті (метод об'єкта). Можливі два рішення цього питання, і обидва варіанти використовуються на практиці.

Визначення. Статичним зв'язуванням називається зв'язування мети виклику і викликаного методу на етапі компіляції, коли з сутністю зв'язується метод класу, заданого при оголошенні сутності - метод посилання.

Визначення. Динамічним зв'язуванням називається зв'язування мети виклику і викликаного методу на етапі виконання, коли з сутністю зв'язується метод класу об'єкта, пов'язаного із класом в момент виконання - метод об'єкта.

При статичному зв'язуванні метод вибирається з класу сутності, при динамічному - з класу об'єкта, пов'язаного із сутністю. Зрозуміло, що на етапі компіляції можливо тільки статичне зв'язування, оскільки тільки в період виконання можна визначити, з об'єктом якого класу пов'язана дана сутність. Це може бути клас будь-якого з нащадків класу сутності. Для того, щоб виконувалося динамічне зв'язування, батьківський клас, що вперше створює метод, повинен забезпечити метод модифікатором virtual або abstract, в класах нащадках такий віртуальний метод буде мати модифікатор override.

 


Дата добавления: 2015-08-18; просмотров: 100 | Нарушение авторских прав


Читайте в этой же книге: Диагностика школьной зрелости. | Опишіть послідовність етапів і процедур дослідження цін. | Опишіть послідовність етапів і процедур дослідження ринку упаковки. | На основі даних про результати маркетингових досліджень охарактеризуйте вибірку: визначте одиницю вибірки, обсяг вибірки і структуру вибірки. | Лабораторна робота 1. Повторення принципів ООП. Зв’язки між класами. | Створення батьківського класу Found | Добавление и скрытие полей потомком | Класи. Ролі класу | Механізми зміни доступу до полів. Методи-властивості | Доступ до методів |
<== предыдущая страница | следующая страница ==>
Деструктори.| Внешние и внутренние силы.

mybiblioteka.su - 2015-2024 год. (0.007 сек.)