Розробка уроку

Тема: поняття об'єкта у мові програмування, його властивостей і методів. Створення програми, її виконання та налагодження мовою C++.

Мета: сформувати визначення об'єкта у мові програмування, ознайомити учнів з його властивостями та методами, навчити створювати програми мовою C++.

По завершенню вивчення учень:

Обладнання: ПК з встановленими ОС і середовищем програмування CodeBlocks або зі стійким сполученням з Інтернетом для роботи з середовищем програмування (наприклад, rextester).

Структура уроку

  1. Організаційний момент.
  2. Актуалізація опорних знань.
  3. Інструктаж з ТБ.
  4. Вироблення практичних навичок.
  5. Підбиття підсумків уроку.
  6. Домашнє завдання.

Хід уроку

1. Організаційний момент
Вітання з класом. Перевірка присутності і готовності учнів до уроку. Перевірка виконання домашнього завдання.

Мотивація навчання: на цьому уроці ви ознайомитеся з основами об'єктно-орієнтованого програмування (ООП) мовою C++. Ви дізнаєтеся про принципи ООП і навчитеся писати прості програми мовою C++.

2. Актуалізація опорних знань

Завдання. Назвати поняття, виділені жирним шрифтом, і порівняти з поданим описом у тексті щодо об'єктно-орієнтованого програмування (ООП).

Об'єктно-орієнтоване програмування – розширення структурного програмування, в якому основними є поняття класів і об'єктів. Основу ООП складають чотири концепції: інкапсуляція, успадкування, поліморфізм та абстракція.

C++ (читати Сі-плюс-плюс) — мова програмування високого рівня з підтримкою кількох парадигм програмування: об'єктно-орієнтованої, узагальненої та процедурної. Розроблена Б'ярном Страуструпом (англійською Bjarne Stroustrup) в AT&T Bell Laboratories (Мюррей-Хілл, Нью-Джерсі) 1979 року та початково отримала назву «Сі з класами». Згодом Страуструп перейменував мову на C++ у 1983 р. Базується на мові С. Вперше описана стандартом ISO/IEC 14882:1998. Найактуальнішим на момент упорядкування цього тексту є стандарт ISO/IEC 14882:2014.

У 1990-х роках С++ стала однією з найуживаніших мов програмування загального призначення. Мову використовують для системного програмування, розробки програмного забезпечення, написання драйверів, потужних серверних та клієнтських програм, а також для розробки розважальних програм, наприклад, відеоігор. С++ істотно вплинула на інші популярні мови програмування: С# та Java.

Основні переваги С++:

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

Перевантаження назв функційвизначення декількох функцій з однаковою назвою в одній області, але з різним тлумаченням, що залежить від типів і кількості аргументів (див. приклад обчислення площі прямокутника).

3. Вивчення нового матеріалу
3.1. Інкапсуляція

Основним способом організації даних в С++ є класи. На відміну від типу структури (struct) мови С, що складається лише з полів (властивостей), клас (class) С++ складається і з полів (властивостей), і функцій (методів).

Види доступу до полів (властивостей), і функцій-членів (методів):

У С++ тип структура аналогічний типу клас. Відмінність полягає у тому, що як усталено властивості й методи (поля і функції-члени) у структури публічні, а у класу — приватні.

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

Поза тілом функцій-членів (а також друзів) захищені і власні поля недоступні навіть для читання. Такий захист полів називають інкапсуляцією.

Використовуючи інкапсуляцію, автор класу може захистити свої дані від некоректного використання. Крім того, її було задумано для полегшення сумісної розробки класів. А саме: зміна способу зберігання даних, якщо їх оголошено як захищені або приватні, не вимагає відповідних змін у класах, які використовують змінений клас. Наприклад, якщо у попередній версії класу дані зберігали у вигляді лінійного списку, а в новій версії — у вигляді дерева. Тоді класи, описані до зміни формату зберігання даних, переписувати не буде потрібно, якщо дані було оголошено приватними або захищеними (у останньому випадку — якщо класи, що використовують дані, не були класами-нащадками). Не потрібно, бо жоден з цих класів не може безпосередньо звертатися до даних, а лише через стандартні функції, які в новій версії мають вже коректно працювати з новим форматом даних.

У наступному прикладі клас Point інкапсулює (приховує) координати точки. Доступ до них можливий лише за певними правилами, які реалізовують через відповідні методи. Такими правилами можуть бути, наприклад, операція створення точки (установка значень координат), а також операції «увімкнення» і «вимкнення» видимості точки, отримання значення координат.

Як видно з прикладу, для створення точки необхідно вказати координати точки і «увімкнути» дану точку, тобто зробити її видимою. Якби клас був повністю відкритий, то можна було би явно задати відповідні значення полів класу х, y та встановити true як значення visible. Але програміст може забути встановити вказати значення однієї координати або обох координат чи встановити видимість. Метод createPoint забезпечує виконання усіх необхідних дій, а закриття доступу до координат змушує діяти лише через використання даного методу. Інкапсульованими також можуть бути і методи класу.

При створенні елемента класу заборонено надавати йому значення в самому визначенні класу. Інакше трапиться помилка компіляції. Тому необхідно створювати окремий метод класу, за допомогою якого і буде відбуватися ініціалізація елементів — надання початкових значень елементам. При створенні нового представника класу кожного разу потрібно знову викликати такий метод. Навіть, якщо початкові значення в усіх представників класу збігаються.

Конструкторспеціальний метод класу, призначений для ініціалізації, тобто надання елементам класу деяких початкових значень.

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

Примітка:

Розглянемо приклад роботи конструктора й деструктора з таким виведенням (курсивом позначено введення чисел 11 і 22).

Працює конструктор: 
a = 100
b = 100

Введіть ціле число а: 11
Введіть ціле число b: 22

a = 11
b = 22

Працює конструктор: 
a = 200
b = 200

Працює деструктор
a = 200
b = 200

Працює деструктор
a = 11
b = 22

Деструктор спрацьовує при завершенні роботи програми. У програмі його не викликано, він спрацював самостійно двічі. Як і конструктор. У першу чергу буде видалено другий створений об'єкт (a = 200, b = 200), а потім — перший (a = 100, b = 100). Інакше кажучи, діє принцип: «Останнім прийшов — першим вийшов».

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

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

Одиничне успадкування передбачає лише один безпосередній базовий (батьківський) клас.

Множинне успадкування передбачає існування декількох безпосередніх базових (батьківських) класів.

Успадкування буває публічним, захищеним і приватним:

Див. код програми з прикладом найпоширенішого публічного успадкування. Ця програма має таке виведення.

F: v = 3
S: v = 4
S: v = 16

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

Поліморфізмом — залежність поведінки від класу, в якому цю поведінку викликають, — проявляється у перевизначенні для нащадку методів (функцій-членів) базового класу. Такий поліморфізм називають статичним. Крім нього в C++ є і динамічний поліморфізм, при якому визначення того, який метод (яку функцію) викликати, відбувається безпосередньо під час виконання. Для цього методи (функції-члени) потрібно оголосити віртуальними. Суто віртуальною функцією називають функцію-член, яку не визначено у базовому класі, а лише в нащадках.

Абстрактний класклас, що містить хоча б одну суто віртуальну функцію-член. Об'єкти таких класів створювати заборонено.

Функція-друг (для певного класу) — це функція, що не є функцією-членом (методом) цього класу, але має доступ до захищених і приватних полів і функцій-членів цього класу. Для опису таких функцій у тілі класу використовують службове слово friend.

Друг класуце такий (інший) клас, всі методи (функції-члени) якого можуть звертатися до будь-яких полів і функцій членів даного класу.

Примітка. В С++ не діє правило: «друг мого друга — мій друг». Інакше кажучи, поняття дружності потрібно обов'язково прописувати у коді програми.

3.4. Абстракція

Абстракція (в об'єктно-орієнтованому програмуванні) — спрощення складної дійсності моделюванням класів, що відповідають проблемі, й використання найприйнятнішого рівня деталізації окремих аспектів проблеми. Основна ідея полягає у тому, щоб відокремити спосіб використання об'єктів даних від деталей їхньої реалізації у вигляді простіших за структурою об'єктів.

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

4. Інструктаж з ТБ
5. Закріплення вивченого матеріалу


Завдання. Створити програму, що містить один базовий клас і два похідних від нього класи. Реалізувати:

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

j 1 класу = 3
j клона 1 класу = 3
Cпрацював деструктор
j 1 класу = 4
j клона 1 класу = 3
j 2 класу = 4
після піднесення до квадрату j 2 класу = 16
j 3 класу = 1.21
після витягування квадратного кореня j 3 класу = 1.1

Cпрацював деструктор
Cпрацював деструктор
Cпрацював деструктор
Cпрацював деструктор

Тут j — назва поля класів. Програму записати у файл з назвою Ваше прізвище латиницею.cpp у вказану вчителем теку.

6. Підбиття підсумків уроку
Виставлення оцінок.

7. Домашнє завдання

Вивчити матеріал уроку. У разі потреби доробити завдання, виконання якого розпочато у класі. Порівняти з демонстраційним розв'язанням.


Текст упорядкував Світлана Миколаївна Шафран, вчитель інформатики школи І-ІІІ ступенів № 285 Оболонського району міста Києва, на курсах підвищення кваліфікації з 1.10.2018 р. по 5.10.2018 р.