Конспект заняття на тему: "Класи ООП. Реалізація принципу інкапсуляції через private методи."

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

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

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

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

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

Тема: «Класи ООП. Реалізація принципу інкапсуляції через private методи.»

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

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

Хід заняття

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

1. Розімнемо трошки наші сірі головні звивинки :) : складаємо 10 слів, що вміщують не менше 7 символів із літерами : «ф, і, в, а, п, р, о, л, д, ж, к, е, н, г, т, ь, и, м, ш, у, с, б».

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

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

2.  Основна частина. Повторення та перехід до розгляду задач та прикладів за темою.

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

1. Яка різниця між полем та методом класу?

2. Що таке модифікатори доступу?

3. Що таке геттер?

4. Які модифікатори застосовуються до геттерів та сеттерів?

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

 

 Методи get та set, які ми  з вами розглядали на минулому занятті, достатньо виразно ілюструють цей принцип. Та неменш виразно показує реалізацію інкапсуляції модифікатор доступу private. І сьогодні ми на прикладах це побачимо детальніше.

 Для початку розглянемо нашу незавершену програму, яка стала вашим домашнім завданням. :) Сподіваюсь, всі з ним справились. 

  Завданням було самостійно доповнити програму так, щоб користувач вводив ім“я та вік для кота в консолі, а результатом стало виведення введеного користувачем імені кота, але значення віку виводилось збільшеним на одиницю.

 Які кроки треба було додати в програму? І в яку частину?

 Так, зміни в класі нам не потрібні, тільки в тілі програми.

 Отже, в нас є отака програма:

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

{private:

string name;

int age;

 

public:

string GetName ()

{return name;}

int GetAge () 

{return age;}

 

void SetName (string sName)

{name=sName;}

void SetAge (string sAge)

{name=sAge;}

void Print ()

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

};

 

іnt main ()

{

int a;

string A;

Cats cat1;

cout<< “Як звуть Вашого кота?“<<endl;

cin>>A;

cout<<“Скільки йому років?“<<endl;

cin>>a;

cat1.SetName (A);

cat1.SetAge(a+1);// Яким ще чином можна було реалізувати цю операцію?

(окремим оператором, або через інкремент, або через метод класу: cat1.Print(a+1)  чи cat1.Print(a++); чому останній запис не вірний?)

cat1.Print();

return 0;

} 

 Ми ж пам“ятаємо, що методів у класу може бути декілька: в залежності від поведінки та можливостей об“єктів класу (пригадайте клас кавомолок, про який шла мова при першому знайомстві з класами в ООП).

 Тепер давайте подумаємо, який функціонал може бути у нашого класу? :)

 

 

 

 

 

 

 Так, об“єкти цього класу можуть піти на прогулянку :).

 Давайте додамо нашому класу такий паблік-метод :).

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

{private:

string name;

int age;

 

public:

string GetName ()

{return name;}

int GetAge () 

{return age;}

 

void SetName (string sName)

{name=sName;}

void SetAge (string sAge)

{name=sAge;}

void Print ()

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

void GoWalk() // Кіт іде на прогулянку

{cout <<“Cat  “<<name<<“ goes for a walk“<<endl;}

};

Тепер ми можемо використати цей метод. Якою командою? Так, cat1.GoWalk();

іnt main ()

{

int a;

string A;

Cats cat1;

cout<< “Як звуть Вашого кота?“<<endl;

cin>>A;

cout<<“Скільки йому років?“<<endl;

cin>>a;

cat1.SetName (A);

cat1.SetAge(a+1);/

cat1.Print();

cat1.GoWalk();

return 0;

} 

 Що ми отримаємо? Напис, що наш об“єкт пішов на прогулянку. Але наш кіт дуже розумний і перевіряє, чи двері зачинено і чи може він вийти.

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

 Яким чином ми реалізуємо цей «функціонал»? :)

 Ми додаємо ще один метод, але він буде приватним.

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

{private:

string name;

int age;

 

bool CheckDoor() //Створимо булеву функцію(метод) для перевірки стану дверей. Для спрощення ставимо  «зачинені».

{return false;}

 

public:

string GetName ()

{return name;}

int GetAge () 

{return age;}

 

void SetName (string sName)

{name=sName;}

void SetAge (string sAge)

{name=sAge;}

void Print ()

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

void GoWalk() // Кіт іде на прогулянку: перевірка дверей

{bool m=CheckDoor();

if (m)

{cout <<“Кіт  “<<name<<“ іде на прогулянку.“<<endl;}

else

{cout <<“Мяяяяуууу“<<endl;}

};

Тепер ми можемо використати цей приват-метод, де кіт перевіряє, чи зачинені двері (в нашому випадку саме так) :).

іnt main ()

{

int a;

string A;

Cats cat1;

cout<< “Як звуть Вашого кота?“<<endl;

cin>>A;

cout<<“Скільки йому років?“<<endl;

cin>>a;

cat1.SetName (A);

cat1.SetAge(a+1);

cat1.Print();

cat1.GoWalk();

return 0;

} 

 Що ми отримали? Наш кіт видає гучне «Мяу» :).

 А якщо ми в методі замінимо false  на true (тобто наш кіт лапою смикнув та відчинив двері)? Правильно, отримаємо відпрацьований функціонал «Кіт пішов на прогулянку». :)

 

 

 

 

 

 

 Напряму використати в main метод ми не можемо. Чому? Правильно, тому що він private, і прямий доступ до нього закрито. Але, як і в випадку використання геттерів та сеттерів для доступу до властивостей, тобто, полів класу, ми можемо зробити це через паблік-методи, які всередині класу можуть взаємодіяти з приват-методами.

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

 

 

 

 

 

 Творчої наснаги :).

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

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