Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП_самостійне_опрацюв.doc
Скачиваний:
0
Добавлен:
01.01.2020
Размер:
1.22 Mб
Скачать

Тема 1.2. Приклади та застосування інкапсуляції, успадкування, поліморфізму.

Всі мови ООП, засновані на трьох основоположних концепціях, званих інкапсуляцією, поліморфізмом і спадкоємством. Розглянемо ці концепції.

Інкапсуляція

Інкапсуляція (encapsulation) – це механізм, який об'єднує дані і код, які маніпулюють цими даними, а також захищає і те, і інше від зовнішнього втручання або неправильного використання. У об'єктно-орієнтованому програмуванні код і дані можуть бути об'єднані разом; в цьому випадку говорять, що створюється так званий "чорний ящик". Коли коди і дані об'єднуються у такий спосіб, створюється об'єкт (object). Іншими словами, об'єкт - це те, що підтримує інкапсуляцію.

Усередині об'єкту коди і дані можуть бути закритими (private). Закриті коди або дані доступні тільки для інших частин цього об'єкту. Таким чином, закриті коди і дані недоступні для тих частин програми, які існують поза об'єктом. Якщо коди і дані є відкритими, то, не дивлячись на те, що вони задані усередині об'єкту, вони доступні і для інших частин програми. Характерною є ситуація, коли відкрита частина об'єкту використовується для того, щоб забезпечити контрольований інтерфейс закритих елементів об'єкту.

Насправді об'єкт є змінним визначеного користувачем типу. Може показатися дивним, що об'єкт, який об'єднує коди і дані, можна розглядати як змінну. Проте стосовно об'єктно-орієнтованого програмування це саме так. Кожен елемент даних такого типу є складеній змінній.

Поліморфізм

Поліморфізм (polymorphism) (від грецького polymorphos) – це властивість, яка дозволяє одне і те ж ім'я використовувати для вирішення два або більш схожих, але технічно різних завдань. Метою поліморфізму, стосовно об'єктно-орієнтованого програмування, є використання одного імені для завдання загальних для класу дій. Виконання кожної конкретної дії визначатиметься типом даних. Наприклад для мови Сі, в якому поліморфізм підтримується недостатньо, знаходження абсолютної величини числа вимагає трьох різних функцій: abs(), labs() і fabs(). Ці функції підраховують і повертають абсолютну величину цілих, довгих цілих і чисел з плаваючою крапкою відповідно. У С++ кожна з цих функцій може бути названа abs(). Тип даних, який використовується при виклику функції, визначає, яка конкретна версія функції дійсно виконується. У С++ можна використовувати одне ім'я функції для безлічі різних дій. Це називається перевантаженням функцій (function overloading).

У більш загальному сенсі, концепцією поліморфізму є ідея "один інтерфейс, безліч методів". Це означає, що можна створити загальний інтерфейс для групи близьких по сенсу дій. Перевагою поліморфізму є те, що він допомагає множити складність програм, вирішуючи використання того ж інтерфейсу для завдання єдиного класу дій. Вибір же конкретної дії, залежно від ситуації, покладається на компілятор. Вам, як програмістові, не потрібно робити цей вибір самому. Потрібно тільки пам'ятати і використовувати загальний інтерфейс. Приклад з попереднього абзацу показує, як, маючи три імена для функції визначення абсолютної величини числа замість одного, звичайне завдання стає складнішим, ніж це дійсно необхідно.

Поліморфізм може застосовуватися також і до операторів. Фактично у всіх мовах програмування обмежено застосовується поліморфізм, наприклад, в арифметичних операторах. Так, в Сі, символ + використовується для складання цілих, довгих цілих, символьних змінних і чисел з плаваючою крапкою. В цьому випадку компілятор автоматично визначає, який тип арифметики потрібний. У С++ ви можете застосувати цю концепцію і до інших, заданим вами, типам даних. Такий тип поліморфізму називається перевантаженням операторів (operator overloading).

Ключовим в розумінні поліморфізму є те, що він дозволяє вам маніпулювати об'єктами різного ступеня складності шляхом створення загального для них стандартного інтерфейсу для реалізації схожих дій.

Наслідування

Спадкоємство (inheritance) – це процес, за допомогою якого один об'єкт може набувати властивостей іншого. Точніше, об'єкт може успадковувати основні властивості іншого об'єкту і додавати до них риси, характерні тільки для нього. Спадкоємство є важливим, оскільки воно дозволяє підтримувати концепцію ієрархії класів (hierarchical classification). Застосування ієрархії класів робить керованими великі потоки інформації. Наприклад, подумайте про опис житлового будинку. Будинок – це частина загального класу, званого будовою. З іншого боку, будова – це частина більш загального класу – конструкції, який є частиною ще більш загального класу об'єктів, який можна назвати створенням рук людини. В кожному випадку породжений клас успадковує все, пов'язані з батьком, якості і додає до них свої власні визначальні характеристики. Без використання ієрархії класів, для кожного об'єкту довелося б задати всі характеристики, які б вичерпно його визначали. Проте при використанні спадкоємства можна описати об'єкт шляхом визначення того загального класу (або класів), до якого він відноситься, з тими спеціальними рисами, які роблять об'єкт унікальним. Спадкоємство грає дуже важливу роль в ООП.

Питання для самоконтролю:

  1. Які є основні принципи ООП?

  2. В чому полягає суть принципу інкапсуляції?

  3. Що означає принцип успадкування?

  4. Назвіть суть принципу поліморфізму?

  5. Які методи називаються абстрактними?

  6. Яка різниця між віртуальними та динамічними методами?

  7. Що таке перевантажування методів?

  8. Які існують механізми доступу до об’єкта?

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]