сам вирішує, що з ним робити).
Відмінність ООП від традиційного підходу полягає у тому, що тут програміст може визначати клас (тип даних), який є зручним для розв’язання конкретної задачі, а не примушений використовувати для цього лише існуючі типи даних. Можна в рамках ООП розширювати мову програмування шляхом створення нових типів даних, необхідних для розв’язку конкретної задачі. Програмна система надає цим новим типам, або класам, таку саму підтримку, яка існує для вбудованих типів.
Тип об’єкту – це сукупність методів, які підтримує об’єкт, тобто інтерфейс. Інтерфейс визначає те, що може робити даний об’єкт. Проте десь повинен існувати код, в якому запрограмовані відповідні дії. Цей код, разом з прихованими даними об’єкту, складає його реалізацію.
Це просто зрозуміти по аналогії з процедурним програмуванням. Для кожного типу визначені функції, які реалізують усі можливі дії із змінними цього типу. В разі потреби виконати певну дію викликається відповідна функція. Іншими словами, в термінах ООП: об’єкту надсилається запит (повідомлення), а об’єкт вирішує, як його обробити (виконує код).
3. Інкапсуляція
Інкапсуляція – це механізм, який об’єднує дані і методи, що маніпулюють цими даними, і захищає і те, і інше від зовнішнього втручання або невірного використання. Коли методи і дані об’єднуються в такий спосіб, утворюється об’єкт.
Іншими словами, інкапсуляція – це “приховування інформації”, застосоване до об’єктів. Подібно до того, як в процедурному програмуванні глобальна функція не має доступу до локальних змінних іншої функції, так і дані всередині об’єкту приховані від інших частин програми. Для маніпулювання даними об’єкту інші частини програми повинні попросити об’єкт викликати його власні інкапсульовані методи, які і повертають інформацію про стан об’єкту (або дані) модулю, що послав запит. Реалізація класу об’єкту може бути змінена непомітно для решти програми, якщо незмінним залишається інтерфейс класу.
4. Взаємодія об’єктів.
Об’єкти в програмі не існують самі по собі. Програмування в термінах об’єктів має зміст лише тоді, коли можливо організувати їх взаємодію. Одним із базових принципів ООП є наступний: об’єкти можуть взаємодіяти один з одним, надсилаючи повідомлення з проханням виконати деякий належний метод або виконуючи метод у відповідь на запит іншого об’єкту. Взаємодіючи, об’єкти утворюють програму.
Повідомлення – це практично те саме, що і виклик функції у процедурному програмуванні. Об’єкт не може прямо змінити стан іншого об’єкту, він може тільки попросити його виконати деякі дії, надсилаючи повідомлення.
Будь-яке повідомлення складається з трьох частин:
ім’я об’єкту, якому воно адресоване;
ім’я методу, який повинен виконати об’єкт-адресат;
параметри, необхідні для виконання метода.
Таким чином, звертання до властивості чи метода об’єкту відбувається з використанням стандартного для об’єктно-орієнтованих мов синтаксису – крапкової нотації. Різні об’єкти можуть мати властивості і методи з однаковими назвами. Саме тому, щоб вказати, до методу якого саме об’єкта відбувається звертання, перед іменем методу вказується ім’я об’єкту, відокремлене крапкою.
Приклад (виклик методу рух об’єкту Тролейбус з параметром швидкість): Тролейбус.рух (швидкість=30 км/год).
5. Спадкування
Абстрактний тип даних, який описує деякий об’єкт, називатимемо надалі класом. Після того, як клас створений і відтестований, він може бути використаний неодноразово. Найпростішим способом повторно використати клас є створення об’єкту (екземпляру) даного класу. Але і сам клас може стати цеглиною при побудові нового класу. Останній може бути створений з довільної кількості об’єктів інших класів, у будь-якому їх поєднанні. Цей процес називається композицією (або агрегацією).
Інший спосіб утворення нового класу – це механізм спадкування.
Спадкування – це процес, шляхом якого деякий клас може успадковувати властивості та методи деякого існуючого класу, додаючи до них деякі особисті риси.
Спадкування використовується у випадку, коли треба створити клас з функціональністю, схожою на функціональність вже існуючого класу. При успадкуванні утворюється клон існуючого (батьківського, базового) класу, який є коренем ієрархії успадкування, і цей клон (нащадок) відповідним чином модифікується. Ці два класи можуть мати спільні характеристики і поведінку, але один з них (нащадок) може мати більше властивостей і обробляти більше повідомлень (або обробляти їх інакше).
У одного батьківського класу може бути декілька нащадків, при цьому батьківський (базовий) клас містить всі властивості і методи, спільні для його нащадків.
Приклад.
Форма (базовий клас)
Властивості:
колір,
розмір,
розташування,
…
Методи:
обрахувати площу,
намалювати,
знищити,
зсунути,
… | Трикутник (нащадок)
Властивості:…
Методи:
віддзеркалити (додається),
обрахувати площу (змінюється),
…
Квадрат (нащадок)
Властивості:…
Методи:
обрахувати площу (змінюється),
…
Круг (нащадок)
Властивості:…
Методи:
обрахувати площу (змінюється),
…
Клас-нащадок успадковує інтерфейс базового класу. Це означає, що всі повідомлення, які може обробляти базовий клас, може обробляти і клас-нащадок. Оскільки клас розпізнається за повідомленнями, які він може обробляти, то клас-нащадок має той самий тип, що і базовий клас. “Круг – це форма”. Це називається еквівалентністю типів через успадкування.
6. Поліморфізм
Поліморфізм – це властивість різних об’єктів по-різному відповідати на однакові повідомлення, тобто одне й те саме ім’я може використовуватись для методів різних класів. В попередньому прикладі метод “обрахувати площу” міститься в різних нащадках: Трикутник, Квадрат, Круг і в самому базовому класі Форма, але в кожному з них діє по-різному. Надсилаючи одне й те саме повідомлення “обрахувати площу” об’єктам всіх цих різних класів, одержимо різні (правильні для відповідного класу) результати.
Основною концепцією поліморфізму є ідея про те, що один інтерфейс дозволяє реалізувати багато методів.
При цьому вибір конкретного методу, залежно від ситуації, здійснює компілятор. Механізм цього вибору такий: під час виклику певного методу класу спочатку шукається такий метод у самому класі. Якщо його знайдено – він виконується, якщо ж ні – відбувається звертання до класу, який є базовим (батьківським) для заданого класу