Тема: Бібліотека візуальних компонентів VCL і її базові класи. Ієрархія класів. Класи TObject, TPersistent, TControl, TWinControl

 

План:

1. Введення.

2. Ієрархія базових класів

3. Клас TObject

4. Клас TPersistent

5. Клас TComponent

 

Всі класи бібліотеки візуальних компонентів відбулися від групи базових класів, які лежать в основі ієрархії VCL. Найзагальніший предок компонентів — це клас TObject, що інкапсулює простий об'єкт.

Ієрархія базових класів VCL продумана надзвичайно ретельно — адже на їх основі створена вся безліч компонентів, використовуваних в Delphi. Особливе місце серед базових класів, крім TObject, займають TComponent (від нього походять всі компоненти) і TControl (від нього походять всі елементи управління).

Ієрархія базових класів

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

 

 

Мал. 1.Ієрархія базових класів VCL

Завдяки механізму спадкоємства властивостей і методів, нащадки базових класів працюють в середовищі розробки, взаємодіючи з Палітрою компонентів і Інспектором об'єктів; розпізнаються операційною системою як елементи управління і вікна.

Клас TObject

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

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

Окрім цього, клас TObject забезпечує створення і зберігання інформації про екземпляр об'єкту і обслуговування черги повідомлень.

Клас TObject є родоначальником всієї ієрархії що використовуються в Delphi класів VCL. Він реалізує функції, які обов'язково виконуватиме будь-який об'єкт, який може бути створений в середовищі розробки.

1). В першу чергу — це створення екземпляра об'єкту і його знищення. Процес створення об'єкту включає виділення області адресного простору, установку покажчика на екземпляр об'єкту, завдання початкових значень властивостей і виконання настановних дій, пов'язаних з призначенням об'єкту. У загальному випадку дві останні операції можуть не виконуватися.

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

Для знищення екземпляра об'єкту в класі TObject призначені методи Destroy і Free:

destructor Destroy: virtual;

procedure Free;

Як видно з оголошення, справжньою деструкцією є метод Destroy. Він забезпечує звільнення всіх займаних екземпляром об'єкту ресурсів.

При знищенні об'єктів рекомендується замість методу Destroy використовувати метод Free, який просто викликає деструкцію, але перед цим перевіряє, щоб покажчик на екземпляр об'єкту був не порожнім (не був рівний Nil). Це дозволяє уникнути серйозних помилок.

2). Кожен об'єкт повинен містити деяку інформацію про себе, яка використовується кодом і середовищем розробки. Тому клас TObject містить ряд методів, що забезпечують представлення цієї інформації в нащадках.

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

Клас TObject може служити для створення на його основі деяких простих класів для використання в програмах.

Клас TPersistent

Клас TPersistent походить безпосередньо від класу TObject. Він забезпечує своїх нащадків можливістю взаємодіяти з іншими об'єктами і процесами на рівні даних. Його методи дозволяють передавати дані в потоки, а також забезпечують взаємодію об'єкту з Інспектором об'єктів.

"Persistent" в перекладі з англійського означає "стійкий", "постійний". Що ж такого постійного в однойменному класі? Відповідь така: віртуальний метод

procedure Assign(Source: TPersistent);

Цей найважливіший метод здійснює копіювання вмісту одного об'єкту (source) в іншій (self, тобто в об'єкт, що викликав метод Assign). При цьому об'єкт-одержувач залишається самим собою, чого не можна досягти, використовуючи просте привласнення змінних об'єктного типу:

FirstObject := SecondObject;

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

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

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

Клас TComponent

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

Клас TControl

Клас TControl походить від класу TComponent. Його основне призначення — забезпечити функціонування візуальних компонентів. Кожен візуальний компонент, що відбувся від TControl, наділяється основними ознаками елементу управління. Кожен візуальний компонент уміє працювати з GUI (Graphic User Interface — графічний інтерфейс користувача ОС) і відображати себе на екрані.

Клас TControl є базовим для всіх візуальних компонентів і інкапсулює механізми відображення компоненту на екрані. У ньому використовується безліч нових властивостей і методів.

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

Клас TWinControl

Клас TWinControl розширює можливості розробників по створенню елементів управління. Він успадковується від класу TControl і забезпечує створення віконних елементів управління.

Клас TWinControl забезпечує створення і використання віконних елементів управління. Віконними елементами є не тільки форми і діалоги, але і більшість стандартних елементів управління.

Нові механізми, інкапсульовані в класі, забезпечують виконання характерних для віконних елементів функцій: прийом і передачу фокусу, відгук на дії мишею і введення з клавіатури і так далі Розглянемо основні властивості і методи класу.

Для передачі фокусу між елементами управління на одній формі часто використовується клавіша <Таb>.

Клас TCustomControlє загальним предком для цілої групи класів, що забезпечують створення різних нестандартних типів віконних (одержуючих фокус) елементів управління Windows: редакторів, списків і так далі

Для створення невіконних (не одержуючих фокус) елементів управління використовується клас TGraphicControl, що є нащадком класу TControl.

В цілому ієрархія базових класів забезпечує повноцінну роботу розробників в Delphi, дозволяючи проектувати будь-які типи застосувань.

 

Контрольні запитання:

1. Дати визначення бібліотеки візуальних компонентів та ієрархії VCL.**

2. Які класи створюють ієрархію базових класів**

3. Функції, які реалізує клас TОbject.***

4. Що забезпечує клас Tpersistent***

5. Призначення класів Tcomponent та TControl.***

6. Властивості візуального компоненту.****

7. Дати характеристику класам TwinControl,TCustomControl та TgraphicControl.***

 

Література:

 

  1. Архангельский А.Я. Программирование в Delphi 7, М.,: ООО «Бином-Пресс», 2003 г. – 1152 с.
  2. Дарахвелидзе П. Г., Марков Е. П. Программирование в Delphi 7. — СПб.: БХВ-Петербург, 2003. — 784 с: ил.
  3. Колосов С.В. Программирование в среде Delphi., - Мн.: БГУИР, 2005, - 164 с.
  4. Иванова Г.С., Ничушкина Т.Н., Пугачев Е.К. Об'ектно-ориентированное программирование: Учеб. Для вузов / Под ред. Г.С.Ивановой. – М.: Изд-во МГТУ им. Н.Э.Баумана, 2001 – 320с.
  5. Пестриков В.М., Маслобоев А.Н., Delphi на примерах. – СПб.: БХВ – Петербург, 2005. 496 с.