Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OOP_Ekzamen.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2.04 Mб
Скачать

4. Механізм пізнього зв'язування

Коли різні класи в ієрархії перевизначають деякий метод, дуже корисна можливість посилатися на загальний об'єкт цих класів (завдяки сумісності підкласів) і викликати цей метод, результатом чого буде виклик методу належного класу. Для цього компілятор повинен підтримувати пізніше зв'язування, тобто не генерувати виклик специфічну функцію, а чекати, поки під час виконання не визначаться фактичний тип об'єкта і функція, яку потрібно викликати.

C + +: У C + + пізніше зв'язування є тільки для віртуальних методів (виклик яких стає трохи повільніше). Метод, оголошений в базовому класі як віртуальний (virtual), підтримує це властивість (але тільки якщо опису методів збігаються). Звичайні, не віртуальні методи не дозволяють пізніше зв'язування, як і OP.

OP: У Object Pascal пізніше зв'язування вводиться за допомогою ключових слів virtual і dynamic (різниця між ними тільки в оптимізації). У похідних класах перевизначення методи повинні бути відзначені словом override (це змушує компілятор перевіряти опис методу). Раціональне пояснення цій особливості OP полягає в тому, що дозволяється більше змін в базовому класі і надає деякий додатковий контроль під час компіляції.

Java: У Java всі методи використовують пізніше зв'язування, якщо ви не відзначите їх явно як final. Фінальні методи не можуть бути перевизначено і викликаються швидше. У Java написання методів з потрібною сигнатурою життєво важливо для забезпечення поліморфізму. Той факт, що в Java за замовчуванням використовується пізніше зв'язування, тоді як в C + + стандартом є раннє зв'язування, - явна ознака різного підходу цих двох мов: C + + часом жертвує ГО моделлю на користь ефективності, тоді як Java - навпаки

Примітка: Пізніше зв'язування для конструкторів та деструкторів. Object Pascal, на відміну від інших двох мов, дозволяє визначати віртуальні конструктори. Всі три мови підтримують віртуальні деструктори.

5.Абстрактні класи

Абстрактный класс в объектно-ориентированном программировании — базовый класс, который не предполагает создания экземпляров. Абстрактные классы реализуют на практике один из принципов ООП - полиморфизм. Абстрактный класс может содержать (и не содержать[1]) абстрактные методы и свойства. Абстрактный метод не реализуется для класса, в котором описан, однако должен быть реализован для его неабстрактных потомков. Абстрактные классы представляют собой наиболее общиеабстракции, то есть имеющие наибольший объем и наименьшее содержание.

В одних языках создавать экземпляры абстрактных классов запрещено, в других это допускается (например, Delphi), но обращение к абстрактному методу объекта этого класса в процессе выполнения программы приведёт к ошибке. Во многих языках допустимо объявить любой класс абстрактным, даже если в нём нет абстрактных методов (например, Java), именно для запрещения создания экземпляров. Абстрактный класс можно рассматривать в качестве интерфейса к семейству классов, порождённому им, но, в отличие от классического интерфейса, абстрактный класс может иметь определённые методы, а также свойства.

Абстрактные методы часто являются и виртуальными, в связи с чем понятия «абстрактный» и «виртуальный» иногда путают.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]