Основи об’єктно-орієнтованих технологій
План
Основи об’єктно-орієнтованих технологій.
Основні характеристики об’єктно-орієнтованого підходу
Абстрактний тип даних
Інкапсуляція
Взаємодія об’єктів.
Спадкування
Поліморфізм
Література
1. Основи об’єктно-орієнтованих технологій.
Розв’язок будь-якої задачі (фізичної, математичної, економічної та програмної зокрема) вимагає певного рівню абстракції. Мови програмування високого рівня, про які йшлося вище, дають змогу піднятись на більш високий рівень абстракції порівняно з машинними кодами, які є основою мови асемблер. Ця можливість пов’язана з тим, що всі мови програмування високого рівня дозволяють крім використання стандартних типів даних, створювати свої власні типи даних, які б найбільш повно відбивали характер задачі. Крім того, принцип модульності дозволяє програмну реалізацію задачі формулювати в термінах незалежних модулів, які використовують певну структуру даних задачі.
Принципи структурного програмування є основою для організації, з одного боку, оптимальної структури програми, а з іншого боку, для конструювання необхідної структури даних для збереження і обробки інформації в програмі. Проте, дані і модулі, що їх обробляють, співіснують в структурних програмах досить окремо. Точніше кажучи, дані відіграють доволі пасивну роль – вони дозволяють модулям їх обробляти, будучи не в змозі захистити себе від некоректного використання.
Сучасна концепція програмування, названа об’єктно-орієнтованим програмуванням (ООП), визначається як технологія створення складного програмного забезпечення на основі подання програми у вигляді сукупності об’єктів, кожний з яких є екземпляром певного типу (класу), а класи утворюють ієрархію зі спадкуванням властивостей [8, 16].
Таким чином, кожний об’єкт може містити не лише дані, які характеризують його стан, а і методи їх обробки (функції), які демонструють поведінку об’єкту. Об’єктно-орієнтований підхід заснований на тому, що будь-який елемент оточуючого нас світу можна вважати об’єктом. Наприклад, на рівні об’єктної абстракції можна розглядати довільні математичні поняття. Скажімо, комплексне число можна визначити як об’єкт, який містить дані – значення дійсної та уявної частин комплексного числа, і визначає методи – допустимі дії над такими об’єктами (обчислення модуля та аргументу, кореня певного степеню з комплексного числа, тощо). Довільний технічний прилад також можна вважати об’єктом. Наприклад, телевізор дозволяє сприймати зображення та звук (це інформація, або дані), а також виконувати певні дії – перемикати канали, міняти гучність, яскравість (ці дії є методами даного об’єкту). Останній приклад демонструє також захист вмісту об’єкту, адже він використовується як “чорна скринька” – об’єкт лише реагує на зовнішні повідомлення (запити): перемкнути канал, збільшити контрастність, вимкнутись. При цьому користувач навіть не повинен знати, як саме (на технічному рівні) обробляються його запити, і позбавлений права (звісно, якщо не збирається загинути від високої напруги з викруткою в руках) втручатись у вміст об’єкту.
2. Основні характеристики об’єктно-орієнтованого підходу
Предметну область будь-якої задачі програмування будемо вважати представленою у вигляді сукупності функціональних елементів (об’єктів), що обмінюються в процесі виконання програми повідомленнями. Процес такого представлення називається об’єктною декомпозицією.
При цьому кожний об’єкт предметної області відповідає за виконання деяких дій в залежності від одержаних повідомлень та параметрів самого об’єкту.
Сукупність значень параметрів об’єкту визначає його стан або властивості, а сукупність реакцій на одержані повідомлення – поведінку або методи (які задаються як функції об’єкту). Причому властивості і методи не існують окремо, а об’єднані і утворюють єдиний об’єкт. Це принципова відміна від процедурного підходу, в якому властивості (тобто дані) існують окремо від процедур, які їх обробляють.
Отже, можна сформулювати основні ключові принципи об’єктно-орієнтованого підходу:
Що завгодно є об’єктом. Об’єкт можна представляти як своєрідну змінну: він містить дані, але водночас здатний виконувати певні дії над ними. Теоретично, будь-який елемент предметної області задачі може бути представлений в програмі як об’єкт.
Програма – це комплекс об’єктів, які обмінюються повідомленнями. Щоб попросити об’єкт щось зробити, йому треба надіслати повідомлення. Більш конкретно, повідомлення можна представляти як виклик функції, яка є методом деякого об’єкту.
Можна створювати нові типи об’єктів, використовуючи вже наявні. Ця можливість реалізується завдяки механізму спадкування.
Кожний об’єкт має певний тип. Тип об’єкту визначається повідомленнями, які йому можна надсилати.
Різні об’єкти певного типу можуть отримувати однакові повідомлення, реагуючи на них по-різному. Наприклад, оскільки об’єкт типу “коло” є одночасно об’єктом типу “форма”, успадковуючи його методи, то об’єкт “коло” гарантовано повинен приймати всі повідомлення, призначені для об’єкту “форма”. Реалізація такої можливості називається поліморфізмом об’єктів.
Загальна характеристика об’єкту: об’єкт має стан, поведінку і особистість. При цьому мається на увазі, що об’єкт має внутрішні дані (стан), методи (які визначають поведінку) і кожний об’єкт відрізняється від будь-якого іншого (принаймні тим, що має унікальну адресу в пам’яті).
Дамо, нарешті, узагальнене означення об’єкта, яке використовується у ООП.
Об’єкт ООП – це сукупність змінних стану і пов’язаних з ними методів. Ці методи визначають, як об’єкт взаємодіє із зовнішнім світом.
2. Абстрактний тип даних
Мабуть, Аристотель був першим з тих, хто почав вивчати ідею “типу”. Він говорив про “клас риб” і “клас птахів”. Ідея про об’єкти, які, хоча і є унікальними, належать до певного класу і мають спільні характеристики і поведінку, використовується в усіх об’єктно-орієнтованих мовах. Фундаментальним поняттям об’єктно-орієнтованого програмування є абстрактні типи даних (або класи).
За означенням, абстрактний тип даних – це група пов’язаних між собою даних і методів (функцій), які можуть здіснювати операції над цими даними.
Абстрактні типи даних дуже схожі на вбудовані типи: можна створювати змінні відповідного типу (які в ООП називаються об’єктами, а, наприклад, в мові С++ – екземплярами класу) і виконувати якісь дії з цими змінними (наприклад, надсилати повідомлення, при цьому об’єкт одержує повідомлення і