У програмуванні широко використовують фундаментальний принцип керування складними системами – devide et impera, згідно з яким при проектуванні складної програмної системи здійснюють алгоритмічну декомпозицію задачі. Метою декомпозиції є подання системи у вигляді сукупності взаємодіючих систем, кожну з яких можна налагоджувати незалежно одна від одної. Ідея розділення програм на самостійні частини, які реалізовують підпрограми, знайшла відображення в структурному підході до створення програмних продуктів. Дальший розвиток стректурного підходу привів до модульного програмування, яке передбачає декомпозицію задачі у вигляді ієрархії взаємодіючих модулів (програм). Розвитком ідеї модульного програмування є моделювання об’єктів предметної області за допомогою класів (об’єктних типів). Ієрархічна класифікація об’єктів і наслідування властивостей стали початковими точками у розвитку концепції об’єктно-орієнтованого програмування. Основним поняттям ООП є клас (відповідає визначеному типовому об’єктові предметної області; це визначена програмна одиниця, яка має 3 важливі властивості: інкапсуляція, наслідування, поліморфізм). Інкапсуляція – це об’єднання і локалізаціяу рамках класу,як єдиного цілого, даних і підпрограм, які опрацьовують дані. Наслідування –властивість класу породжувати своїх нащадків – класи, які успадковують властивості батьківського класу. Поліморфізм – властивість класів родичів по-різному створювати однотипні дії.
2.Зміст і призначення поняття клас. Що таке інкапсуляція?
Клас – це визначена програмна структура, яка має 3 важливі властивості: інкапсуляція, наслідування, поліморфізм.Ці властивості даюсь змогу адекватно відображати структуру предметної області.Інкапсуляція –(«вміст в оболонці») – це об’єднання і локалізація у рамках класу, як єдиного цілого, даних і підпрограм, які опрацьовують ці дані. Клас –це деякий абстрактний тим, який створюється на основі наявних типів. Окремий клас включає такі елементи: поля, методи, властивості, події. Поля класу подібні до полів запису і служать для зберігання інформації про об’єкт. Поле описується як змінна, що може належати до будь-якого типу. Методи –це процедури та функції, призначені для опрацювання полів. Заголовок методі розміщується в опису класу, а сам код – в розділі реалізації модуля. Властивості займають проміжне положення між полями та методами. Кожній властивості відповідає поле, що містить її значення, і 2 методи, що забезпечують доступ до цього поля (читання/запис значень). Подія –спеціальна властивість типу TNotifyEvent. Структура класу:
Published//відкритий доступ і видно в Інспекторі об’єктів
Опубліковані поля, властивості;
End;
Клас TObject є базовим класом для всіх інших класів.
3. Зміст і призначення поняття об’єкт (екземпляр). Яку пам’ять використовує екземпляр?
Оголошення класу ще не задає об’єкта, а тільки визначає тип того об’єкта, який буде створений у програмі пізніше. Визначення об’єктів може виглядати так:
var c1,c2,c2: TCircle;
Тут визначені об’єкти с1, с2, с3 типу TCircle. В Object Pascal усі об’єкти розміщуються в динамічній пам’яті, а тому вони фактично є покажчиками спеціального виду. Під час компілювання програми кожному об’єкту, незалежно від його класу, виділяється фіксована ділянка пам’яті (4 байти) для зберігання адреси розміщення об’єкта в динамічній пам’яті. Перш ніж звертатись до елементів об’єкта, його необхідно створити за допомогою конструктора, і, при потребі, задати в ньому початкові значення полів об’єкта. При створенні нового об’єкта виклик конструктора реалізується через назву класу, наприклад:
c1:=TCircle.create;
Покажчик (об’єкт) с1 отримує адресу розміщення у динамічній пам’яті нового об’єкта класу TCircle.якщо конструктор Create доповнювався у відповідному класі, то під час виконання він має ініціалізувати поля і/або властивості об’єкта за допомогою значень, що передаються як аргументи конструктора:
c2:=TCircle.Create(x2,y1);
Конструктор класу під час створення об’єкта виконує дії задані програмістом, реалізує стандартні дії зі створення об’єкта.
4. Що таке успадкування (наслідування)? З якою метою його використовують?
Властивість наслідуванняозначає, що будь-який клас може бути породжений іншим класом, як от:
TNewClass=Class (TOldClass) …
Клас-нащадок автоматично успадковує всі поля, методи і властивості класу-предка і може доповнюватись новими. Але разом з тим видалити або перевизначити поля класу-предка у класу-нащадка неможливо. Отже, чим далі за ієрархією який-небудь клас знаходиться від батьківського класу, тим більше полів він має.
У Object Pascal усі класи є нащадками класу TObect. Цей клас не має полів і властивостей, але його методи дають зможу створювати, підтримувати діяльність і знищувати об’єкти. Використання принципу наслідування привело до створення у Delphi розгалуженого дерева класів, у верхній частині якого знаходяться абстрактні класи, для яких не можна створити об’єкти. Водночас вони є предками класів, для яких уже створюються реальні об’єкти.
Використання наслідування сприяє зменшенню кількості коду, створеного для опису схожих сутностей, а також сприяє написанню більш ефективного та гнучкого коду.
5. Що таке поліморфізм? Як його реалізують? Як його використовують?
Властивість поліморфізму дає можливість використовувати однакові назви для методів, які входять у різні класи. При звертанні до таких методів буде виконуватись той з них, що відповідає класові об’єкта. Властивість поліморфізму дає можливість використовувати одинакові назви для методів, які входять у різні класи. При звертанні до таких методів буде виконуватись той з них, що відповідає класові об’єкта. Ця властивість забезпечується через перекриття у класові-нащадкові відповідного методу батьківського класу. Використовуючи поліморфізм, ми можемо значно спростити реалізацію подібної функціональності. Метод, оголошений в класі, можна викликати різними способами, що залежать від типу методу, який визначає механізм його перекриття в класах-нащадках. Тип методом визначають за допомогою кодифікатора, який вказують в описі класу після заголовка методу і відділяють від заголовка крапкою з комою. Кодифікатори: virtual –віртуальний метод, dynamic –динамічний метод, override –перевизначений метод, message –опрацювання повідомлення, abstract –абстрактний метод. Всі методи, оголошені в класі, є статичними і викликаються як звичайні підпрограми. Такі методи неможливо перевизначати для реалізації поліморфізму.