Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OOP_Посібник (1).doc
Скачиваний:
8
Добавлен:
01.05.2019
Размер:
544.77 Кб
Скачать

Міністерство освіти і науки України

Чернівецький національний університет

імені Юрія Федьковича

Об’єкто-орієнтоване

програмування на С++

Методичні рекомендації та модульні завдання

Чернівці

2009

ББК 22.183.4я7

О-13

УДК 519.68(076)

Друкується за ухвалою редакційно–видавничої ради

Чернівецький національний університет

імені Юрія Федьковича

О-13 Об’єкто-орієнтоване програмування на С++: Методичні рекомендації та модульні завдання / Укл. Т.М. Сопронюк, С.М. Тимку.– Чернівці: ЧНУ, 2009. – 68 с.

У методичних вказівках наведено основні теоретичні відомості, необхідні для виконання лабораторних завдань із дисципліни “Об’єкто-зорієнтоване програмування на С++”. Розглянуто нові можливості С++, яких не було в С і які не мають прямого відношення до поняття класів об’єктів, зокрема, структури, перезавантаження функцій, шаблони функцій. Від поняття структури в мові С здійснено перехід до класу. Описано операції конструювання екземплярів класу та їх знищення, визначення видимості членів класу – функцій і даних, статичні члени класу, функції-друзі класу, інтерфейс і реалізація класу, перевизначення операторів для об’єктів даного класу. Розглянуто також засоби використання створених класів (контейнеризація і успадкування) для розширення можливостей існуючих класів. Описано поняття базового і породженого класів, ієрархії класів. Наведено ряд коментованих програм-прикладів, які демонструють об’єкто-зорієнтовані можливості мови С++. Наведено модульні завдання, терміні їх здачі та кількість балів.

Для студентів математичного факультету спеціальностей “Прикладна математика”, “Соціальна інформатика”, “Програмне забезпечення автоматизованих систем”.

ББК 22.183.4я7

УДК 519.68(076)

© Видавництво “Рута”, 2009

ЗМІСТ

Методичні рекомендації 1

та модульні завдання 1

ЗМІСТ 3

Вступ 5

§1. Об’єкт. Структура. Клас. 7

§2. Управління доступом до членів класу 11

§3. Перезавантаження функцій 12

§4. Шаблони функцій 13

§5. Конструктори 14

§6. Статичні члени класу 17

§7. Деструктори 18

§8. Перезавантаження операцій 20

§9. Друзі класу 21

§10. Бінарні й унарні операції 24

§11. Створення класів з підкласами. Агрегація 25

§12. Успадкування 27

§13. Ієрархія успадкування класів 29

Модуль 1 (20 балів) 33

Лабораторна робота №1 (6 балів) 33

Тема: Структури. Зовнішні функції і функції-члени структури. 33

Лабораторна робота №2 (6 балів) 36

Тема: Перезавантаження операцій і функцій 36

Лабораторна робота №3 (8 балів) 40

Тема: Структури та класи 40

Модуль 2 (30 балів) 46

Лабораторна робота №4 (15 балів) 46

Тема: Створення класів 46

Завдання 46

Модуль 3 (30 балів) 60

Лабораторна робота №5 (12 балів) 60

Тема: Створення класів з використанням існуючих класів. Успадкування. Агрегація. 60

Завдання 60

Лабораторна робота №6 (8 балів) 61

Тема: Абстрактні класи 61

Модуль контроль (15 балів) 64

Модуль контроль підсумковий (30 балів) 66

Розподіл балів і годин 68

Список літератури 69

Вступ

Об'єктно-орієнтоване програмування (ООП) – це методика, що концентрує основну увагу на зв'язках між об'єктами, а не на деталях їхньої реалізації. Усі мови OЗП, включаючи С++, засновані на трьох основних концепціях: інкапсуляції, поліморфізмі й успадкуванні.

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

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

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

Об'єкт, що поєднує коди і дані, можна розглядати як змінну визначеного користувачем типу, кожен елемент даних такого типу є складеною змінною.

2. Поліморфізм

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

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

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

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

3. Успадкування

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

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