Абстрактний клас в об'єктно-орієнтованому програмуванні - базовий клас, який не передбачає створення екземплярів. Абстрактні класи реалізують на практиці один з принципів ООП - поліморфізм. Абстрактний клас може містити (і не містити [1]) абстрактні методи і властивості. Абстрактний метод не реалізується для класу, в якому описаний, однак повинен бути реалізований для його неабстрактних нащадків. Абстрактні класи являють собою найбільш загальні абстракції, тобто мають найбільший обсяг і найменше зміст. В одних мовах створювати екземпляри абстрактних класів заборонено, в інших це допускається (наприклад, Delphi), але звернення до абстрактного методу об'єкта цього класу в процесі виконання програми призведе до помилки. Абстрактний клас можна розглядати в якості інтерфейсу до сімейства класів, породженому ним, але, на відміну від класичного інтерфейсу, абстрактний клас може мати певні методи, а також властивості. Абстрактні методи часто є і віртуальними. У ООП може бути оголошений абстрактний клас з абстрактними методами:
TAbstractClass = class
procedure NonAbstractProcedure;
procedure AbstractProcedure; abstract; end;
Для такого класу може бути створений об'єкт, але звернення до методу AbstractProcedure цього об'єкта під час виконання викличе помилку. В останніх версіях Delphi також може бути оголошений абстрактним сам клас:
TAbstractClass = class abstract
procedure SomeProcedure; end;
Хоча метод SomeProcedure може бути не абстрактним і реалізований в рамках цього класу, створювати об'єкти оголошеного таким чином класу неприпустимо.
34. Призначення та використання таблиці віртуальних методів.
Кожен об'єктний тип, що містить або наслідує віртуальні методи, конструктори або деструктори, має пов'язану з ним таблицю віртуальних методів, в якій запам'ятовується ініціалізуюча частина сегмента даних програми. Для кожного об'єктного типу (але не для кожного екземпляра) є тільки одна таблиця віртуальних методів, проте два різних об'єктних типу ніколи не розділяють одну таблицю віртуальних методів, незалежно від того, наскільки ці типи ідентичні. Перше слово таблиці віртуальних методів містить розмір примірників відповідного об'єктного типу. Ця інформація використовується конструкторами і деструкторами для визначення того, скільки байт виділяється або звільняється при використанні розширеного синтаксису стандартних процедур New і Dispose. Друге слово таблиці віртуальних методів містить негативний розмір примірників відповідного об'єктного типу.
9. Як засобами ООП моделюють відношення has-a? Наведіть приклад.
Під контейнером зазвичай розуміють об'єкт, основним призначенням якого є зберігання та забезпечення доступу до інших об'єктів. Контейнери реалізують відношення "HAS-A" ("МАЄ") між об'єктами. Вбудовані типи, список і словник - яскраві приклади контейнерів. Можна побудувати власні типи контейнерів, які будуть мати свою логіку доступу до збережених об'єктів. У контейнері зберігаються не самі об'єкти, а посилання на них.
У об'єктно-орієнтованому програмуванні й проектуванні баз даних «Has-a» — взаємозв'язок в якому один об'єкт (званий об'єктом, що становить) «належить» (є частиною або членом) іншого об'єкта (званого складеним об'єктом) і підкоряється правилам приналежності.
Контейнером називається об’єкт, призначений для зберігання та опрацювання сукупності інших об’єктів. Приклад. Колекція об’ємних фігур
Type TVect=class
Private mem:array of TVolShape; size,len:integer;
Name:string; …; end;
В даному прикладі клас TVect є контейнером об’ємних фігур TVolShape.
10. Логічна структура об’єктно-орієнтованої програми.Об’єктно-орієнтована програма повинна бути побудована на структурному підході (структура нагадує «дерево»), в подальшому це модульне програмування, яке передбачає декомпозицію задачі у вигляді ієрархії взаємодіючих модулів (програм). Модуль, який містить дані та процедури їхнього опрацювання, є зручним для автономного проектування та налагодження. Розвитком ідеї модульного програмування є моделювання об’єктів предметної області за допомогою класів(об’єктних типів). Об’єкт, який необхідно моделювати, уявляється людині цілісно, хоча він складається з частин та інших об’єктів. Цілісне уявлення об’єкта у вигляді взаємозв’язаної сукупності його властивостей є базовим принципом об’єктного підходу. Клас – це визначена програмна структура, яка має три важливі властивості: інкапсуляції, наслідування та поліморфізму. Ці властивості дають змогу адекватно відображати структуру предметної області. Клас- це деякий абстрактний тип, який створюється на основі наявних типів. Окремий клас включає такі елементи, як поля, методи, властивостіі події.Правильні оголошення , дії та співвідношення між класами та їхніми елементами і складають логічна структура об’єктно-орієнтованої програми.
11. Проектування фізичної структури об’єктно-орієнтованої програми.Як відомо об’єктно-орієнтована програма складається з класів. Клас- це деякий абстрактний тип, який створюється на основі наявних типів. Окремий клас включає такі елементи (або члени), як поля, методи, властивостіі події.Клас – це визначена програмна структура, яка має три важливі властивості: інкапсуляції, наслідування та поліморфізму. Полякласу подібні до полів запису і служать для зберігання інформації про об’єкт. Поле описується як змінна, що може належати до будь-якого типу. Методи- це процедури і функції, призначені для опрацювання полів. Властивостізаймають проміжне положення між полями і методами. Клас має таку структуру (…). Усі об’єктирозміщуються в динамічній пам’яті, тому для їхнього створення і знищення потрібно мати конструктор і деструктор. Об’єкт зберігається у вигляді даних всіх його полів і посилань на таблицю віртуальних методів. У процесі проектування об’єктно-орієнтованої програми потрібно пам’ятати про коректність оголошення класу та його елементів, визначити взаємозв’язки між надкласами та підкласами (якщо такі є) та його правильне знищення.