Інформатика

Безкоштовно

Ніхто не записаний

П90. Створення класів і об’єктів

Прочитайте!

У мові Python реалізація принципів ООП практично зводиться до виконання виразу: <об’єкт>.<атрибут>. Цей вираз уже неодноразово використовувався нами для доступу до атрибутів модуля, звернення до методів об’єктів тощо. Але реалізація таких виразів відбувалася за відсутності в програмі класів.

Якщо програма містить класи, то створюється дерево пов’язаних об’єктів. У такому разі в процесі реалізації  виразу  <об’єкт>.<атрибут> інтерпретатор  починає  пошук  зазначеного атрибута в дереві пов’язаних об’єктів у такому порядку: спочатку атрибут відшукується в цьому самому об’єкті, потім — у дереві об’єктів знизу догори і зліва направо. Пошук завершується, щойно буде знайдено першу появу атрибута.

Тіло класу містить змінні та функції класу. Функції в ООП називають методами, а змінні класу — атрибутами. Атрибути створюються як звичайні змінні, а методи — як звичайні функції за допомогою інструкції def.

За допомогою параметру self здійснюється доступ до змінних екземпляра класу та методів класу всередині визначеного методу. Параметр self відокремлюється від змінної або методу крапкою. Наприклад, до змінної ask із методу класу можна звернутися  так:  self.ask.

Структуру класу можна подати детальніше:

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

Для того щоб можна було використовувати атрибути та методи класу, необхідно створити екземпляр класу за такою структурою:

<екземпляр класу> = <ім’я класу> ([параметри])

Тут <екземпляр класу> є звичайним ідентифікатором. У результаті кожного виконання цієї інструкції у пам’яті комп’ютера виділяється ділянка пам’яті, доступ до якої здійснюється за допомогою пов’язаного з ним ідентифікатора, тобто в пам’яті створюється об’єкт. Цей об’єкт має характеристики того класу, у якому його створено, тобто він отримує атрибути свого класу.

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

Зазвичай класи без методів не використовуються.

Працюємо за ПК!

Приклад 2. Розглянемо програму з двома методами, у кожному з яких замість параметра self, використовується ще один параметр.

Основна ідея цієї програми полягає в демонстрації порядку зміни властивостей створених об’єктів за допомогою методів. Дві змінні predm і klas оголошені поза межами методів. Тому обидва об’єкти (ob1 і ob2) набувають властивості, які мають ці змінні, тобто інформатика і 8. А потім за допомогою методів ці властивості змінюються.

У програмі метод func_1  має  параметри self  і  a1,  а  метод  func_2  —  параметри  self і 2.  Ці  методи  виконують  тільки  одну  дію, а саме: метод func_1 змінює значення  змін- ної predm, а метод func_2 — значення змінної klas.

У програмі створено два екземпляри класів: ob1 і ob2. Поза межами методів змінна predm набуває значення «інформатика», а змінна klas — значення  8.  За  допомогою  інструкцій  print  (ob1.predm,  ob1.klas)  і  print  (ob2.predm, ob2.klas) здійснюється виведення значень цих змінних.

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

Далі за допомогою інструкції ob1.func_1 («математика») з екземпляра ob1 викликається метод func_1 з аргументом математика. Цей аргумент передається параметру  а1,  а за допомогою інструкції self.predm = a1 змін- на predm набуває нового значення, а саме — математика.

Звернемо увагу на те, що значення змінної klas екземпляра ob1 не змінювалося, тому за допомогою  інструкції  print  (ob1.predm,  ob1.klas) буде виведено математика 8.

Після цього за допомогою інструкцій ob2.func_1 («історія») і ob2.func_2 (9) викликаються методи func_1 і func_2 з екземпляра ob2. У результаті обидві змінні змінюють своє  значення і буде надруковано історія 9.

Приклад 3. Дано два конуси різних розмірів із відомими радіусом основи й висоти. Потрібно обчислити об’єм одного з них і загальну площу іншого.

Для обчислення об’єму конуса використовують метод func_1 із параметрами self, a1 і a2, а для обчислення повної поверхні  конуса  —  метод  func_2  із  параметрами   self, a3 і a4.

Звернемо увагу, що в програмі відсутні змінні класу, тобто змінні за межами  методів. У процесі звернення до методу func_1 параметру a1 передається число 3, а параметру a2 — число 4. Результат обчислення об’єму конуса повертається в інструкцію, з якої відбулося звернення до методу, тобто до інструкції print (“об’єм = “, ob1.func (3, 4)).

Отже, результат обчислення буде виведено на екран. Після звернення до методу func_2 пара- метр а3 набуде значення 4, а параметр а4 — значення 5. Результат обчислення не повертається в інструкцію, що його викликала, а виводиться за допомогою інструкції print (“площа = “, surface) у цьому самому методі.

Самостійно розв’яжіть задачі!

Задача 1. Змінна a1 набуває значення «інформатика», а змінна a2 — «фізика». Створіть програму з двома об’єктами, але без методу, за допомогою якої з використанням першого об’єкта виводиться слово інформатика, а з використанням другого — фізика.

Задача 2. Змінна а1 набуває значення «байт». Створіть програму з двома об’єктами і функцією. Метод викликається спочатку з першого, потім — із другого об’єкта. Кожного разу виводиться значення змінної а1.

Задача 3. Змінна а набуває значення «Україна», а змін- на b — «Франція». За допомогою інструкції input() уводиться довільне ціле число. Розробіть програму без методів, у якій створюються два об’єкти. Якщо уведене число більше 5, виводиться значення з використанням першого об’єкта, інакше — з використанням другого об’єкта.

Задача 4. Розробіть програму з використанням двох методів. В одному з них обчислюється об’єм кулі радіусом r, а в іншому — площа трикутника зі сторонами a, b, c.

 

0.00 на основі 0 рейтингів

5 зірок
0%
4 зірок
0%
3 зірок
0%
2 зірок
0%
1 зірок
0%