Архангельский А.Я. Программирование в Delphi. Учебник по классическим версиям Delphi. 2006 г. - 1152 с.

Принципи ООП

3.1. I принцип ООП до вирішення задач – спосіб завдання дії.

Дія в ООП ініціюється за допомогою передачі повідомлень агенту(об’єкту) відповідальному за дію. Повідомлення містить запит на здійснення дії і супроводжується додатковою інформацією(аргументами), яка необхідна для його виконання. Одержувач – це агент, якому надсилається повідомлення, якщо він приймає повідомлення то на нього автоматично покладається відповідальність за виконання дії. Як реакцію на повідомлення одержувач запустить деякий метод, щоб виконати прийнятий запит.

Приховування інформації – важливий принцип і в традиційних мовах програмування.

Чим пересилання інформації відрізняється від традиційних методів:

- є цілком визначений одержувач – об’єкт, якому надіслане повідомлення. При виклику процедури немає явно визначеного одержувача;

- інтерпретація повідомлення (а саме метод, який викликається) залежить від одержувача і є різним для різних одержувачів.

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

 

 

ІІ принцип ООП.

Всі об’єкти є представниками чи екземплярами класів. Метод що активізується об’єктом, у відповідь на повідомлення визначається класом до якого належить одержувач повідомлення. Всі об’єкти одного класу використовують ті самі методи на однакові повідомлення.

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

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

a)

б)

Рис. 3.1.Приклади ієрархії класів

Для пошуку методу, що підходить для обробки повідомлень використовується таке правило:

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

 

 

Характеристики ООП

1. Усе є об’єктом.

2. Обчислення здійснюється шляхом взаємодії (обміну даними між об’єктами) при якому 1 об’єкт вимагає, щоб інший об’єкт виконав дію. Об’єкти взаємодіють посилаючи та одержуючи повідомлення. Повідомлення – запит на виконання дії, доповнений набором аргументів, які використовуються при виконанні дії.

3. Кожен об’єкт має незалежну пам’ять, що складається з інших об’єктів.

4. Кожен об’єкт є представником класу, що має спільні властивості об’єктів.

5. В класі задається поведінка (функціональність) об’єкта. Тим самим всі об’єкти що є екземплярами одного класу можуть виконувати ті самі дії.

6. Класи організовані в єдину ієрархічну структуру з спільним коренем. Пам’ять і поведінка зв’язані з екземплярами визначеного класу автоматично доступні будь-якому класу розташованому нижче в ієрархічному дереві.

ООП пропонує новий підхід до розробки програмного забезпечення. Фундаментальна концепція ООП парадигми полягає у передачі повідомлення об’єктам. Таким чином ОО мова повинна мати властивості (абстракції), інкапсуляції, спадкування і поліморфізму.

Інкапсуляція – це здатність відрізняти внутрішній стан об’єкта і поведінки від його зовнішнього стану і поведінки.

Абстракція – здатність задавати типи визначені користувачем, щоб доповнити вбудовані типи (Далі ми будемо розглядати тільки три основні властивості ООП, окрім абстракції, вона присутня при визначені власних типів користувачем).

Спадкування– здатність створювати нові типи використовуючи опис існуючих типів.

Поліморфізм - здатність об’єктів бути відповідальними за інтерпретацію виклику функції.

 

 

4. Визначення поняття клас[3]

Мова Object Pascal - Delphi, підтримує концепцію об’єктно-орієнованого програмування, та дає можливість визначати класи.

Клас(Class) – це складна структура, що включає опис не тільки даних, але й процедур і функцій, які можуть бути виконані над представниками класу (об’єктом).

Опис класу має наступну структуру:

  Туре <Ім’я класа> = class (<Ім’я класа-батька>) private <Приватні описи>; protected <Захищений опис>; public <Загальнодоступні описи>; published <Оголошені описи>; end;

 

Нижче в лістингу 4.1 наведений приклад оголошення класу (як і інші елементи програми - константи, змінні, типи, - класи необхідно оголошувати).

 

Лістинг 4.1 Приклад оголошення класу

  Type // Фрагмент коду, що демонструє створення класу. TDictionary = class private fWord: string[30]; // Це властивість класу – слово словника fPartOfSpeech: string[30]; // Це властивість класу-частина мови fLength: byte; // Це властивість класу – довжина слова. public procedure showinfo; // Це метод класу - процедура, // що забезпечує відображення інформації // слова з словника. end;

Дані класу, що описують характеристики об’єкта, називаються полями(Field) або атрибутами(Attribute), а процедури і функції, що описують поведінку об’єкта, - методами(Method).

В наведеному прикладі оголошений клас TDictionary. Ідентифікатор TDictionary - це ім’я класу, fWord і fPartOfSpeech, fLength - імена полів, showinfo – ім’я методу. Опис класу розміщається в програмі в розділі опису типів (type).

 

 

4.1. Визначення поняття - об’єкт[4]

Об’єкт – це сукупність властивостей методів і подій. Сукупність означає, що об’єкт складається з властивостей методів і подій.

Властивості– це прості змінні, які впливають на стан об’єкта. Наприклад ширина, висота - це властивість об’єкта.

Методи – це ті самі процедури і функції, це то що об’єкт вміє роботи. Наприклад, об’єкт може мати процедуру для виводу тексту на екран. Ця процедура і є метод об’єкта.

Подія– це також процедури та функції, які викликаються коли відбувається деяка подія. Наприклад, якщо змінилась будь яка властивість об’єкта, може бути з генерована відповідна подія і викликана процедура для обробки реакції на цю подію.

Рис. 4.1. Графічне представлення об’єкта

Після того як клас оголошений, в програмі можна створювати (оголошувати) об’єкти (Object) - екземпляри класу. Об’єкти як представники класу оголошується в програмі в розділі опису змінних (var):

 

  Var dict: TDictionary; dicts: array [1..100] of TDictionary;

Об’єкт це сукупність властивостей і методів, а також подій, на які він може реагувати (рис. 4.2.). Зовнішнє управління об’єктом здійснюється через обробника подій. Ці обробники звертаються до методів і властивостям об’єкта. Початкове значення даних об’єкта можуть задаватися також в процесі проектування встановленням різноманітних властивостей. В результаті виконання методів об’єкта можуть генеруватися нові події, що сприймаються іншими об’єктами програм або користувачами.

Рис. 4.2. Схема організації об’єкта

В мові Object Pascal(Delphi) об’єкт - це динамічна структура. Така структура містить не самі дані, а вказівник на дані об’єкта. Тому програміст повинен потурбуватися(передбачити) про виділення пам’яті для цих даних.

Виділення пам’яті здійснюється за допомогою спеціального методу класу - конструктора, якому зазвичай дають (присваивают) ім’я Create (Створити). Для того щоб підкреслити особливу роль і поведінку конструктора, в описі класу замість слова procedure використовують слово constructor. Наведений нижче в лістингу 4.2 фрагмент коду оголошує клас з використанням конструктора.

Лістинг 4.2Оголошення класу, в складі якого введено конструктор

  Type // Фрагмент коду, що демонструє створення класу з конструктором. TDictionary = class private fWord: string[30]; // Це властивість класу – слово словника fPartOfSpeech: string[30]; // Це властивість класу-частина мови fLength: byte; // Це властивість класу – довжина слова. public constructor Create; // Конструктор - процедура створення // нового об’єкту (екземпляра класу). procedure showInfo; // Це метод класу - процедура, // яка забезпечує відображення інформації слова з словника // end;

Виділення пам’яті для даних об’єкта відбувається шляхом присвоєння значення результату застосування метода-конструктора до типу (класу) об’єкта.

Наприклад, після виконання інструкції

 

  dict := TDictionary.Create

виділяється необхідна пам’ять для даних об’єкта dict.

Окрім виділеної пам’яті, конструктор, як правило, вирішує задачу присвоєння полям об’єкта початкових значень, тим самим здійснює ініціалізацію об’єкта. Нижче наведений приклад реалізації конструктора для об’єкта TDictionary:

  constructor TDictionary.Create; begin fWord := 'Нове слово'; fPartOfSpeech := ‘Частина мови’; fLength := 0; end ;

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

Якщо в програмі деякий об’єкт не використовується, то можна звільнити пам’ять, що займається полями даного об’єкта. Для виконання цієї дії використовується метод Free. Наприклад, для того щоб звільнити пам’ять, що займається полями об’єкта dict, достатньо записати:

 

  dict.free;

Насправді пам’ять звільняється за допомогою іншого спеціального методу, що називається деструктором. При його описі використовується спеціальне слово destructor. Метод free викликає деструктор.

 

 

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

Бібліотека візуальних компонентів (Visual Component Library, VCL) містить велику кількість класів, призначених для швидкої розробки застосувань. Бібліотека написана на Object Pascal і має безпосередній зв’язок з інтегрованим середовищем розробки застосувань Delphi. В VCL містяться невізуальні і візуальні компоненти, а також інші класи, починаючи з абстрактного класу TObject. При цьому всі компоненти є класами, але не всі класи є компонентами.

Всі класи VCL розміщенні на визначеному рівні ієрархії і утворюють дерево (ієрархію) класів. Знання походження об’єкта робить значну допомогу при його вивчені, так як нащадок успадковує всі елементи об’єкта-батька. Так, якщо властивість caption належить класу TControl, то його властивість буде і у його нащадків, наприклад, у класів TButton і TCheckBox і у компонентів — кнопки Button і незалежного перемикача CneckBox відповідно. Фрагмент ієрархії класів з важливими класами представлений на рис. 4.3.

В основі великої кількості класів і компонентів, що використовується в Delphi, є лише п’ять базових класів (рис. 4.3). Вони забезпечують виконання основних функцій будь якого об’єкта — чи це стандартний компонент VCL (Visual Component Library) або спеціалізований об’єкт, що виконує деякі операції в застосуванні.

 

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

 

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

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

Зазвичай розробники не задумуються про те, як об’єкт буде створений і що необхідно зробити для його коректного видалення. Компоненти VCL створюють і звільняють автоматично ресурси що займають. Іноді розробнику приходиться створювати і видаляти об’єкти самостійно. Але навіть в цьому випадку йому достатньо викликати відповідний конструктор і деструктор:

 

var SomeList: TStrings SomeList := TStrings.Create SomeList.Free

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

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

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

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

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

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

На основі класу TWinControl створюється ще один додатковий клас — TCustomControl. Він забезпечує компоненти які створені на його основі, можливостями з використанням канви — спеціального об’єкта, призначеного для відображення графіки.

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

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

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

Далі ми розглянемо основні властивості і методи базових класів, виділяючи тільки ті, які можуть бути використані в реальній роботі. Частина з них доступна в Інспекторі об’єктів, частина може бути використана в програмному коді.[5]

 


Питання:

1. Визначення поняття - клас.

2. Визначення поняття – об’єкт.

3. Що таке – методи.

4. Що таке – властивості.

5. Що таке –події.

6. Схема організації об’єкта.

7. Ієрархія базових класів в Delphi (VCL).

 

Література:

 

Архангельский А.Я. Программирование в Delphi. Учебник по классическим версиям Delphi. 2006 г. - 1152 с.

2. Архангельский А.Я. Delphi 2006. Справочное пособие: язык Delphi, классы, функции Win32 и .NET, 2006 г. - 1152 с.