
- •Розділ 1. Об’єктно-орієнтоване програмування
- •Тема 1.1. Візуальне програмування.
- •Тема 1.2. Приклади та застосування інкапсуляції, успадкування, поліморфізму.
- •Тема 1.3. Бібліотека візуальних компонентів vcl та її базові класи.
- •1. Клас tWinControl.
- •2. Клас tСustomControl.
- •3. Клас tGraphicControl.
- •Тема 1.4. Обробка виняткових ситуацій.
- •1. Використовування виняткових ситуацій.
- •2. Протоколювання виняткових ситуацій.
- •3. Коди помилок у виняткових ситуаціях.
- •4. Виняткова ситуація eAbort. Функція Assert.
- •Розділ 2. Мова програмування Object Pascal.
- •Тема 2.1. Середовище Delphi.
- •Тема 2.2. Елементи мови Object Pascal.
- •1. Коментарі.
- •2. Логічні вирази.
- •Тема 2.3. Типи даних, процедури та функції.
- •1. Вказівники та динамічна пам'ять. Динамічна пам'ять
- •Вказівники
- •Виділення і звільнення динамічної пам'яті
- •Процедури і функції для роботи з динамічною пам'яттю
- •Тема 2.4. Управляючі структури Object Pascal.
- •Розділ 3. Програмування в середовищі Delphi.
- •Тема 3.1. Застосування списків. Способи запису/читання зі списків.
- •Є списком CheckBox елементів.
- •Тема 3.2. Масиви.
- •1. Пошук мінімального (максимального) елементу масиву.
- •2. Пошук в масиві заданого елементу.
- •Тема 3.3. Робота з файлами.
- •Тема 3.4. Типи даних визначені програмістом.
- •1. Показники.
- •2. Динамічні змінні.
- •Тема 3.5. Графічні програми.
- •1. Бітові образи.
- •2. Мультиплікація.
- •Властивості компоненту Timer
- •Тема 3.6. Приклади застосування анімацій у Delphi.
- •Тема 3.7. Рекурсія.
- •1. Крива Гільберта.
- •2. Пошук шляху.|колії|
- •Значення властивостей компоненту stringGrid1
- •3. Пошук найкоротшого шляху.|колії|
- •Тема 3.8. Компоненти для інтернету. Компонента tSocketConnection
- •Розділ 4. Бази даних.
- •Тема 4.1. Види баз даних. Структура та зв’язки між таблицями. Бази даних
- •Класифікація баз даних
- •Структура бази даних
- •Модель бази даних в Delphi
- •Тема 4.2. Модифікація структури таблиці в bde.
- •1. Зміна структури таблиці.
- •2. Встановлення перевірок правильності даних.
- •3. Завдання вторинних індексів.
- •Тема 4.3. Об’єкти відображення даних бази даних Delphi.
- •1. Класифікація компонентів відображення даних.
- •2. Елемент керування тdbGrid.
- •3. Компонент tdbEdit.
- •4. Компонент tdNavigator.
- •Тема 4.4. Обчислювальні поля і поля підстановки в Delphi.
- •1. Створення поля підстановки (поля синхронного перегляду).
- •2. Обчислювальні поля.
- •Тема 4.5. Компонента tdbEdit.
- •Тема 4.6. Переміщення по записам таблиці. Набір методів і властивостей tDataSet. Огляд
- •Клас tDataSet
- •Відкриття і закриття DataSet
- •Тема 4.7. Налаштування фільтрів.|
- •Тема 4.8. Приклади застосування пошуку.
- •Тема 4.9. Поєднання різних видів пошуку.
- •Тема 4.10. Типи даних та пошук в діапазоні.
- •Список літератури
Тема 1.2. Приклади та застосування інкапсуляції, успадкування, поліморфізму.
Всі
мови ООП, засновані на трьох основоположних
концепціях, званих інкапсуляцією,
поліморфізмом і спадкоємством. Розглянемо
ці концепції.
Інкапсуляція
Інкапсуляція (encapsulation) – це механізм, який об'єднує дані і код, які маніпулюють цими даними, а також захищає і те, і інше від зовнішнього втручання або неправильного використання. У об'єктно-орієнтованому програмуванні код і дані можуть бути об'єднані разом; в цьому випадку говорять, що створюється так званий "чорний ящик". Коли коди і дані об'єднуються у такий спосіб, створюється об'єкт (object). Іншими словами, об'єкт - це те, що підтримує інкапсуляцію.
Усередині об'єкту коди і дані можуть бути закритими (private). Закриті коди або дані доступні тільки для інших частин цього об'єкту. Таким чином, закриті коди і дані недоступні для тих частин програми, які існують поза об'єктом. Якщо коди і дані є відкритими, то, не дивлячись на те, що вони задані усередині об'єкту, вони доступні і для інших частин програми. Характерною є ситуація, коли відкрита частина об'єкту використовується для того, щоб забезпечити контрольований інтерфейс закритих елементів об'єкту.
Насправді об'єкт є змінним визначеного користувачем типу. Може показатися дивним, що об'єкт, який об'єднує коди і дані, можна розглядати як змінну. Проте стосовно об'єктно-орієнтованого програмування це саме так. Кожен елемент даних такого типу є складеній змінній.
Поліморфізм
Поліморфізм (polymorphism) (від грецького polymorphos) – це властивість, яка дозволяє одне і те ж ім'я використовувати для вирішення два або більш схожих, але технічно різних завдань. Метою поліморфізму, стосовно об'єктно-орієнтованого програмування, є використання одного імені для завдання загальних для класу дій. Виконання кожної конкретної дії визначатиметься типом даних. Наприклад для мови Сі, в якому поліморфізм підтримується недостатньо, знаходження абсолютної величини числа вимагає трьох різних функцій: abs(), labs() і fabs(). Ці функції підраховують і повертають абсолютну величину цілих, довгих цілих і чисел з плаваючою крапкою відповідно. У С++ кожна з цих функцій може бути названа abs(). Тип даних, який використовується при виклику функції, визначає, яка конкретна версія функції дійсно виконується. У С++ можна використовувати одне ім'я функції для безлічі різних дій. Це називається перевантаженням функцій (function overloading).
У більш загальному сенсі, концепцією поліморфізму є ідея "один інтерфейс, безліч методів". Це означає, що можна створити загальний інтерфейс для групи близьких по сенсу дій. Перевагою поліморфізму є те, що він допомагає множити складність програм, вирішуючи використання того ж інтерфейсу для завдання єдиного класу дій. Вибір же конкретної дії, залежно від ситуації, покладається на компілятор. Вам, як програмістові, не потрібно робити цей вибір самому. Потрібно тільки пам'ятати і використовувати загальний інтерфейс. Приклад з попереднього абзацу показує, як, маючи три імена для функції визначення абсолютної величини числа замість одного, звичайне завдання стає складнішим, ніж це дійсно необхідно.
Поліморфізм може застосовуватися також і до операторів. Фактично у всіх мовах програмування обмежено застосовується поліморфізм, наприклад, в арифметичних операторах. Так, в Сі, символ + використовується для складання цілих, довгих цілих, символьних змінних і чисел з плаваючою крапкою. В цьому випадку компілятор автоматично визначає, який тип арифметики потрібний. У С++ ви можете застосувати цю концепцію і до інших, заданим вами, типам даних. Такий тип поліморфізму називається перевантаженням операторів (operator overloading).
Ключовим в розумінні поліморфізму є те, що він дозволяє вам маніпулювати об'єктами різного ступеня складності шляхом створення загального для них стандартного інтерфейсу для реалізації схожих дій.
Наслідування
Спадкоємство (inheritance) – це процес, за допомогою якого один об'єкт може набувати властивостей іншого. Точніше, об'єкт може успадковувати основні властивості іншого об'єкту і додавати до них риси, характерні тільки для нього. Спадкоємство є важливим, оскільки воно дозволяє підтримувати концепцію ієрархії класів (hierarchical classification). Застосування ієрархії класів робить керованими великі потоки інформації. Наприклад, подумайте про опис житлового будинку. Будинок – це частина загального класу, званого будовою. З іншого боку, будова – це частина більш загального класу – конструкції, який є частиною ще більш загального класу об'єктів, який можна назвати створенням рук людини. В кожному випадку породжений клас успадковує все, пов'язані з батьком, якості і додає до них свої власні визначальні характеристики. Без використання ієрархії класів, для кожного об'єкту довелося б задати всі характеристики, які б вичерпно його визначали. Проте при використанні спадкоємства можна описати об'єкт шляхом визначення того загального класу (або класів), до якого він відноситься, з тими спеціальними рисами, які роблять об'єкт унікальним. Спадкоємство грає дуже важливу роль в ООП.
Питання для самоконтролю:
Які є основні принципи ООП?
В чому полягає суть принципу інкапсуляції?
Що означає принцип успадкування?
Назвіть суть принципу поліморфізму?
Які методи називаються абстрактними?
Яка різниця між віртуальними та динамічними методами?
Що таке перевантажування методів?
Які існують механізми доступу до об’єкта?