Клас в ООП. Інкапсуляція. Модифікатори доступу.

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

Первомайський ЦНТТУМ

Гурток «Сучасні технології програмування»

Керівник гуртка Семенова Олена Анатоліївна

Розробка заняття на тему:

Тема: «Клас ООП. Модифікатори доступу класу. Інкапсуляція.»

Мета:  повторити зміст понять: клас, об“єкт класу, поля та методи класу, вивчити зміст понять «інкапсуляція», «модифікатори доступу», виховувати вміння встановлювати взаємозвʼязок та аналогію між програмними та реальними обʼєктами, розвивати увагу, спостережливість та логічне мислення.

Обладнання: ПК, ПЗ середовище програмування DevC++.

Хід заняття

1. Організаційний момент та розминка.

1. Складаємо 12 слів, що вміщують не менше 6 символів із літерами : «ф, і, в, а, п, р, о, л, д, ж, к, е, н, г, т, ь, и, м».

2. Записуємо 3 рядка цих слів за допомогою сліпого десятипальцевого методу набору через кому.

3. Перевіряємо правильність набору та ставимо усні оцінки своїй роботі. Бажано, чесні :).

2.  Основна частина. Повторення та перехід до засвоєння нових понять.

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

 Для цього дайте, будь ласка, відповіді на такі питання:

1. Що таке клас в ООП?

2. Що являється об“єктом класу?

3. Що таке поле класу?

4. Що являється методом класу?

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

 У ваших програмах при описуванні класу не зовсім зрозумілою є лише один рядок, так? Який саме? Так, це рядок «public:». Ви використовували цей модифікатор автоматично, не  вникаючи у його зміст, як і в зміст, наприклад, рядка, «#include <iostream>».

 Пригадаймо, що означає це «public:»? Адже розглядаючи суть ООП на минулих заняттях ми з вами вже торкнулися, звичайно, цього поняття…

 Це модифікатор доступу класу, один з трьох модифікаторів (пам“ятаєте, яких?) Так, три «р» класу: public, private, protected.  Через ці три «р» реалізується один з основних принципів ООП — інкапсуляція. Що воно таке? Пам“ятаєте, коли ми розглядали зміст об“єктно орієнтовного програмування, то побачили, що це на перший погляд страшне слово легко зрозуміти, якщо уважно його прочитати: «in» «capsulation» - тобто, «в» «капсулі». Інакше кажучи, «приховано». :)

 

 

 

 

 

 

 

 

 Ви запитаєте, мабуть, навіщо робити об“єкти класу прихованими?

 Давайте для відповіді повернемось у реальне життя і проведемо аналогію з ним. В житті ми маємо справу з величезною кількістю різних приладів.

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

 Поглянемо ще навкруги… Телевізор, який ми можемо ввімкнути-вимкнути за допомогою пульта або пилосос («порохотяг» в сучасному варіанті) :). Що між ними спільного? Всі ці речі також вмикаються кнопкою і у вас також немає потреби задумуватись, як саме всередині вони працюють.

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

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

 Наприклад, ви користуєтесь стандартним простором імен. Пам“ятаєте: «using namespace std;» ? Що дає вам використання (ну, звичайно, з того, що вам відомо)? (cout, cin… і т.д.) Тобто, ви користуєтесь шаблоном «cout», не задумуючись над тим, що знаходиться всередині кода, що скритий від вас, але який дозволяє вам полегшити процесс написання вашої програми. Вам непотрібно знати, як саме клас реалізований всередині, потрібно знати лише які методи доступні, які аргументи вони приймають та які повертають.

 Всі властивості та методи класу без виключення мають права доступу. Стандартно, як кажуть, за замовчуванням, прийнятий модифікатор «private:».  Давайте розглянемо все за допомогою нашого улюбленого класу котів :) .

 

 

 

 

 

 

 

 Пам“ятаєте нашу програмку з цим класом з минулого заняття?

class  Cats //Об“являємо та описуємо клас котів

{public:

string name;

int age;

void Print ()

{ cout<<“cat1 name is -  \t“<<name<<“\tcat1 age is - \t“<<age<<endl;

}

};

 іnt main ()

{

Cats cat1;

cat1.name =“Simone“;

cat1.age = 2;

cat1.Print();

return 0;

} 

 Як бачите, на початку описування класу у нас стоїть модифікатор public:. Але, як я вже сказала, за замовчуванням працює модифікатор private:. Тобто якщо ви закоментуєте рядок public:, то що ви побачите в консолі після компіляції?... Правильно, нічого, тому що ваш компілятор буде сильно сваритись, що ви намагаєтесь втрутитись у приватне життя класу, а це не дозволено :).

 Отже, щоб дозволити доступ до об“єктів, полів та методів класу, використовують модифікатор доступа  public:. Тоді всі функції та змінні, що знаходяться після, стають досяжними з усіх частин програми.

 Але це не завжди бажано з точки зору правильної роботи з об“єктами та методами класу так, як це задумали ви, створюючи ваш клас.

 Тому стандартно прийнято приватними (закритими) робити властивості класу, а публічними (відкритими) — функції, тобто, методи класу.

 Таким чином, всі дані класу, що містяться після модифікатора public: є відкритими, а ті, які містяться після private: -  закритими.

 Але методам всередині класу практично без різниці ступінь доступу до даних: всі дані методам класу всередині є доступними. Тому дії із закритими даними класа реалізуються через його методи.

 Якщо ми в нашії програмі перед описуванням методу поставимо модифікатор public:, то …? Правильно, компілятор засвариться на спробу надати об“єктам класу значення. І якщо ми закоментуємо зараз ще два рядка, то побачимо результат роботи програми в консолі… компіляція пройде без проблем.

class  Cats //Об“являємо та описуємо клас котів

{//public:

string name;

int age;

 

public:

void Print ()

{ cout<<“cat1 name is -  \t“<<name<<“\tcat1 age is - \t“<<age<<endl;

}

};

 іnt main ()

{

Cats cat1;

//cat1.name =“Simone“;

//cat1.age = 2;

cat1.Print();

return 0;

} 

 Звичайно, дані будуть взяті програмою «з даху», так як вони нами не визначені, але вона відпрацює без помилок.

 Таким чином, ви бачите, що модифікатори можна застосовувати без огляду на їх приватність, в будь-якому порядку. Але пам“ятайте, що все, що знаходиться після модифікатора, має однаковий доступ до наступного модифікатора. Якщо ми в нашому коді проведемо ось такі зміни:

 class  Cats //Об“являємо та описуємо клас котів

{public:

string name;

private:

int age;

 

public:

void Print ()

{ cout<<“cat1 name is -  \t“<<name<<“\tcat1 age is - \t“<<age<<endl;

}

};

 іnt main ()

{

Cats cat1;

cat1.name =“Simone“;

//cat1.age = 2;

cat1.Print();

return 0;

} 

 То після компіляції в консолі ми побачимо? Ім“я Саймон і незрозуміле, випадкове число його віку :)

 І ще пам“ятайте: хоча модифікатори працюють так, що їх можна застосовувати в будь-якому порядку, правилами гарного тону в програмуванні вважається одноразове використання модифікаторів :) . Тобто? …

 Ми не розглянули з вами третє «р» :) - тобто, модифікатор доступу «protected:». Його робота схожа на роботу модифікатора private:, він обмежує рівень доступу, але дає можливість побачити дані дружнім та дочірнім класам. Більш детально ми розглянемо його роботу при  розгляді принципу «наслідування».

 

 

 

 

 Таким чином, в С++ є три рівня доступу до даних класу:

- public: - робить змінні та функції класу доступними для будь-якої частини програми;

- private: - робить змінні та функції класу доступними лише всередині класу;

- protected: - дає доступ лише дружнім та дочірнім класам.

 І наостанок в якості домашнього завдання на пару хвилин: привести останню версію програми з використання нашого «котячого» класу у відповідність із «правилами гарного коду» :)...

Бажаю успіхів ! :)

docx
Додано
3 травня 2020
Переглядів
1210
Оцінка розробки
Відгуки відсутні
Безкоштовний сертифікат
про публікацію авторської розробки
Щоб отримати, додайте розробку

Додати розробку