Класи

Потрібно зазначити, що в попереднику Object Pascal - мові Turbo Pascal, об'єктами називаються типи, що мають багато спільного з класами в Object Pascal. Однак істотні доповнення, внесенні в об'єктну модель Object Pascal, примусили розробників мови внести для позначення об'єктів спеціальний термін - "клас", запозичений з мови C++. В Object Pascal збережений тип-об'єкт Object, що підтримує об'єктну модель, тобто слово object є синонімом слова class.

Класами в Object Pascal називаються спеціальні типи даних, які мають поля, методи і властивості. Клас слугує лише зразком для створення конкретних екземплярів реалізації, котрі називаються об'єктами. Важливою відмінністю класів від інших типів даних є те, що пам'ять для об'єктів класу завжди виділяється в кучі, тому об'єкт-змінна фактично представляє собою лише вказівник на динамічну область пам'яті. Однак у відмінності від інших вказівників при посиланні на зміст об'єкту забороняється вказувати символ ^ після імені об'єкту.

Основні поняття

Класи — це особливі "винаходи" програмістів, що слугують для спрощення розробки складних програм і покращення їх. В основі класів лежать три фундаментальні принципи - інкапсуляція, наслідування та поліморфізм.

Інкапсуляція.

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

Наслідування.

Кожен клас може бути породженим від іншого класу. Для цього при його оголошенні вказується ім'я батьківського класу:

TChildClass = class(TParentClass).

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

Таким чином, принцип наслідування забезпечує поетапне створення складних класів і розробку власних бібліотек класів. Всі класи Object Pascal породжені від єдиного батька - класу TObject. Цей клас не має полів і властивостей, але включає в себе методи самого загального значення, забезпечуючи весь життєвий цикл будь-яких об'єктів - від їх створення до знищення. Програміст не може створити клас, який би не був дочірнім класом класу TObject. Наступні два оголошення ідентичні:

TClass = class(Object)

та

TClass = class.

Принцип наслідування приводить до створення розгалуженого Дерева класів, яке поступово розростається від класу TObject до його нащадків. Кожний нащадок доповнює можливості свого батька новими і передає їх своїм нащадкам.

Поліморфізм.

Поліморфізм — це властивість батьківських класів вирішувати схожі за суттю проблеми різними способами.

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