- •Програмування та алгоритмічні мови
- •Візуальне проектування програмних засобів.
- •Середовище візуального програмування. Форма. Інспектор об’єктів. Редактор коду. Палітра компонентів.
- •Поняття і структура програми та проекту.
- •Типи даних та їх представлення у комп’ютері.
- •Оператори вибору.
- •Робота з одновимірними та багатовимірними масивами.
- •Алгоритми обробки масивів. Упорядкування і пошук даних.
- •Символьні рядки. Обробка текстових даних.
- •Робота із записами.
- •Файли. Поняття фізичного і логічного файлу. Методи доступу до файлів.
- •Типи файлів.
- •Процедури і функції для роботи з файлами.
- •Поняття підпрограми. Структура підпрограм.
- •Параметри в підпрограмах. Глобальні та локальні змінні.
- •Структура програми, що містить процедури
- •Рекурсивні підпрограми.
- •Динамічні структури даних. Незв’язані динамічні дані. Динамічні структури даних.
- •Змінні-вказівники.
- •Динамічні структури даних. Зв’язані динамічні дані. Списки, стеки, черги, дерева.
- •Об’єктно-зорієнтоване програмування. Класи і об’єкти. Основні поняття.
- •Опис класів і об’єктів.
- •Наслідування
- •Методи. Конструктори і деструктори.
- •Приклад
- •Властивості об’єктів. Характеристики об'єктів
- •Поняття успадкування. Наслідування
- •Принцип успадкування
- •Поліморфізм. Віртуальні та динамічні методи.
- •Характеристики
- •Структура опису класу.
- •Класи загального призначення.
Характеристики
Поліморфізм — один з трьох найважливіших механізмів об'єктно-орієнтованого програмування. Поліморфізм дозволяє писати більш абстрактні програми і підвищити коефіцієнт повторного використання коду.
Спільні властивості об'єктів об'єднуються в систему, яку можуть називати по різному : інтерфейс, клас. Спільність має зовнішнє і внутрішнє вираження. Зовнішня спільність проявляється як однаковий набір методів з однаковими іменами і сигнатурами (типами аргументів і результатів).
Внутрішня спільність є однакова функціональність методів. Її можна описати інтуїтивно виразити у вигляді строгих законів, правил, яким повинні підкорятись методи. Можливість приписувати різну функціональність одному методу (функції, операції) називається перевантаженням методу (функції, операції).
Статичні методи
Усі методи за замовченням вважаються статичними. Це означає, що їхній виклик буде відбуватися відповідно до принципу поліморфізму.
Віртуальні і динамічні методи
Статичні методи зручні, коли в програмі заздалегідь відомо, які типи об'єктів будуть використовуватися, і приведення типів, як правило, не потрібно. У ряді випадків, особливо у великих проектах, часто доводиться зберігати в змінні об'єкти-нащадки (як у прикладі з TCar і TMAZ), причому конкретний тип цих об'єктів може бути невідомий. Тому в Object Pascal реалізований новий тип методів - віртуальні методи (для їхнього опису існує зарезервоване слово virtual). Описати віртуальний метод можна так.
type TCar = class(TObject) procedure Move; virtual; end;
Такі методи в класах-нащадках можуть бути перекриті методами з однойменними заголовками. Щоб явно вказати компілятору, що визначений метод перекриває віртуальний метод батька, треба використовувати ключове слово override.
type TMAZ = class(TCar) procedure Move; override; end;
Тепер у наведеному прикладі можна не виконувати приведення типів. Під час роботи програми вона самостійно визначить тип збереженого в змінній Car об'єкта і викличе потрібний метод.
Car := TMAZ.Create; Car.Move;
Викличеться метод Move класу TMAZ. Якщо ж цей метод не перекрити (не вказати ключове слово override), то викличеться метод Move класу TCar.
Замість ключового слова virtual можна застосовувати ключове слово dynamic, що виконує ті ж функції й описує метод як динамічний.
type TCar = class(TObject) procedure Move; dynamic; end;
Різниця між віртуальними і динамічними методами полягає тільки в деталях програмної реалізації. Віртуальні методи оптимізовані для максимальної швидкодії, динамічні - для максимальної економії пам'яті (створення компактного коду).
-
Структура опису класу.
Клас являє собою певний тип запису, який вміщає такі елементи, як поля, властивості і методи. Поля класу є аналогічні полям запису і служать для збереження інформації про об’єкт. Методами називаються процедури і функції, призначені для обробки полів. Властивості можна використовувати як поля, наприклад, за допомогою оператора присвоювання, або всередині класу доступ до властивостей виконують методи класу.
Опис класу має наступну структуру:
type <ім’я класу>=class(<ім’я ,батьківського класу>)
private <приватні описи>;
protected <захищені описи>;
public <загальнодоступні описи>;
published <опубліковані описи>;
end;
У приведеній структурі описами є об’явлення властивостей, методів та подій.
Приклад, опису класу:
type TColorCircle=class(TCircle);
FLeft, FTop, FRight, FBottom: Integer;
FColor: TColor;
end;
Тут клас TColorCircle створюється на основі батьківського класу TCircle. В порівнянні з батьківським, новий клас додатково містить чотири поля типу Integer і одне поле типу TColor.
Для різних елементів класу можна встановлювати різні права доступу. Для цього в описі класу використовуються окремі розділи, позначені спеціальними специфікаторами видимості.
Розділи private та protected містять захищені описи, що доступні всередині модуля, в якому вони знаходяться. Описи з розділу protected, крім того, є доступними для породжених класів за межами названого модуля.
Розділ public містить загальнодоступні описи, які видно у будь-якому місці програми, де є доступним даний клас.
Розділ published містить опубліковані описи, які на додаток до загальнодоступних описів породжують динамічну (тобто під час виконання програми) інформацію про тип (Run-Time Type Information, RTTI). За цією інформацією при виконанні програми відбувається перевірка на приналежність елементів об’єкта тому чи іншому класу. Одним з призначень розділу published є забезпечення доступу до властивостей об’єкта при розробці програми. В Інспекторі об’єктів видно ті властивості, які є опублікованими. Специфікатор published встановлюється по замовчуванню.
Об’єкти як екземпляри класу об’являються у програмі в розділі var як звичайні змінні. А для звертання до конкретного елемента об’єкта (до поля, властивості чи методу), як і у випадку запису, вказується ім’я об’єкта та ім’я елемента, розділені крапкою, тобто ім’я елемента є складеним. Наприклад,
var CCircle1: TColorCircle;
begin CCircle1.FLeft:=5;
CCircle1.FTop:=1
end;