Delphi (Object Pascal)

procedure VirtualProcedure; virtual; abstract;

// Перекриття віртуальної процедури

procedure VirtualProcedure; override;

Абсолютно всі класи Delphi є нащадками класу TObject. Якщо клас-предок не вказано, мається на увазі, що новий клас є прямим нащадком класу TObject.

Множинне успадкування в Delphi частково підтримується рахунок використання класів-помічників (Сlass Helpers).

Які є модифікатори рівня доступу?

Public – відкритий. Всі методи та властивості, оголошені після цього модифікатора доступні з будь-якої частини програми. Private – закритий. Методи та властивості рівня доступу private дозволено використовувати тільки всередині класу, заборонено використання у похідних класах. Protected – захищений. Еквівалентний модифікатору private з єдиним винятком: дозволено використання методів та властивостей у похідних класах.

Поліморфізм(від грец. πολὺ- - багато, і μορφή - форма) - можливість класу-нащадка змінювати реалізацію класу-батька зберігаючи при цьому його інтерфейс.

Це важливий інструмент ООП поряд з інкапсуляцією, успадкуванням і абстракцією даних.

Коротко зміст поліморфізму можна виразити фразою: «Один інтерфейс, безліч реалізацій».

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

У програмуванні поліморфізм використовується для того, щоб зробити програми більш модульними та розширюваними. Замість безладних умовних речень, що описують різні напрями дії, ви створюєте взаємозамінні об'єкти, які підбираєте відповідно до своїх потреб. Цеосновне завдання поліморфізму

Наведу приклад. Усі садові дерева плодоносять, незалежно від сорту дерева. Звідси випливає, що єдиним інтерфейсом є об'єкт дерево з методом дозрівання плодів. А ось як і яким способом дозріває плід, є індивідуальною реалізацією кожного сорту окремо. Перенесемо вище сказане на програмну мову.

Створимо клас GardenTree, в якому реалізуємо лише один метод «maturation»:

public class GardenTree

public void maturation()

System.out.println("Parent class: maturation.");

Далі створимо два класи успадкованих класу GardenTree, і перевизначальних методмaturation батьківського класу:

public class Apple extends GardenTree

public void maturation()

public class Cherry extends GardenTree

public void maturation()

Ну і власне створюємо клас, у якому реалізується ідеологія поліморфізму:

public class App

public static void ripening_fruit(GardenTree i)

public static void main( String[] args )

GardenTree apple = новий Apple();

GardenTree cherry = новий Cherry();

Виклик методу maturation класів Apple і Cherry через єдиний метод і є поліморфізмом.

Ми можемо без проблем додати клас Pear, де буде своя реалізація методу maturation.

Public class Pear extends GardenTree

public void maturation()

І викликати його метод maturation через єдиний інтерфейс ripening_fruit.

GardenTree pear = новий Pear();

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

Якщо уважно придивитися до нашого коду, можна побачити, що мивикористовуємо висхідне перетворення.

GardenTree apple = новий Apple();

GardenTree cherry = новий Cherry();

GardenTree pear = новий Pear();

Конструктори та деструкторивідповідають існування об'єкта у пам'яті, тобто. виділяють пам'ять для екземпляра класу, потім звільняють її.

Конструктор- це спеціальний вид підпрограми, приєднаний до класу. Його призначення - створювати представників (екземпляри) класу. Він поводиться як функція, яка повертає посилання знову створений екземпляр класу, тобто. на об'єкт. Одночасно виділяється пам'ять зберігання значень полів екземпляра класу.

Деструктор– це спеціальний різновид підпрограми, приєднаної до класу. Його призначення полягає у знищенні екземпляра класу, тобто. об'єкта та звільнення пам'яті, виділеної під екземпляр.

Type = Сlass [)]. . . Constructor Ім'я конструктора[( )]; [Override;] Destructor [( )>; [Override;] End;