6.2. Створення класів і об'єктів

Views:
 
Category: Education
     
 

Presentation Description

Python. Створення класів і об'єктів.

Comments

Presentation Transcript

Завдання для самостійного виконання:

Профільна інформатика 10 клас Тема 6 . Класи , об'єкти, наслідування

Завдання для самостійного виконання:

6.2. Створення класів і об'єктів 30.11.2018 Профільна інформатика. Тема 6 2

Завдання для самостійного виконання:

реалізація принципів ООП У мові Python реалізація принципів ООП практично зводиться до виконання виразу : < об'єкт >.<атрибут>. Цей вираз уже неодноразово використовувався нами для доступу до атрибутів модуля, звернення до методів об'єктів тощо . Але реалізація таких виразів відбувалася за відсутності в програмі класів . Якщо програма містить класи , то створюється дерево пов'язаних об’єктів . У такому разі в процесі реалізації виразу < об'єкт >.<атрибут> інтерпретатор починає пошук зазначеного атрибута в дереві пов'язаних об'єктів у такому порядку: спочатку атрибут відшукується в цьому самому об'єкті , потім - у дереві об'єктів знизу догори і зліва направо. Пошук завершується , щойно буде знайдено першу появу атрибута . 30.11.2018 Профільна інформатика. Тема 6 3

Завдання для самостійного виконання:

Створення класу Об'єкти в програмі можна створювати пише на основі класів , тому програма починається зі створення класу . Класи можна розробляти самостійно або імпортувати з інших модулів . Класи розміщуються на початку програмного коду . Класи створюються за допомогою інструкції class i мають таку загальну структуру: с lass < ім'я класу > [( класи , що є нащадками )]: < тіло класу > 30.11.2018 Профільна інформатика. Тема 6 4

Завдання для самостійного виконання:

Методи та атрибути Тіло класу містить змінні та функції класу . Функції в ООП називають методами, а змінні класу - атрибутами. Атрибути створюються як звичайні змінні , а методи – як звичайні функцїї за допомогою інструкції def . Методи можна розглядати як невеликі програми , призначені для опрацювання об'єктів , тобто вони створюють нові властивості об'єктів , змінюють наявні тощо . Методи фактично є аналогами підпрограм у мовах процедурного програмування . Щоб визначити , який саме екземпляр класу слід опрацьовувати , у методі обов’язково слід указати перший параметр з іменем self ( інші параметри можуть бути відсутні ). Цьому параметру автоматично передається посилання на відповідний екземпляр класу . 30.11.2018 Профільна інформатика. Тема 6 5

Завдання для самостійного виконання:

доступ до змінних екземпляра класу За допомогою параметру self здійснюється доступ до змінних екземпляра класу та методів класу всередині визначеного методу. Параметр self відокремлюється від змінної або методу крапкою . Наприклад , до змінної ask із методу класу можна звернутися так: self.ask . Структуру класу можна подати детальніше : class < ім'я класу > ([суперклас_1, суперклас_2....]): змінна = значення def ім'я методу ( sel ,...): self. змінна = значення … 30.11.2018 Профільна інформатика. Тема 6 6

Завдання для самостійного виконання:

екземпляр класу Необхідно чітко розуміти , що в результаті виконання інструкції class буде створено новий екземпляр класу , який також є об’єктом , посилання на який присвоюється імені змінної . Якщо цей клас має батьківські класи ( суперкласи ), від якого він є нащадком , то вони вказуються в круглих дужках через кому. Якщо він не є нащадком , то круглі дужки не вказуються , для того щоб можна було використовувати атрибути та методи класу , необхідно створити екземпляр класу за такою структурою: < екземпляр класу > = < ім'я класу > ([ параметри ]) Тут < екземпляр класу > є звичайним ідентифікатором . У результаті кожного виконання цієї інструкції у пам'яті комп'ютера виділяється ділянка пам'яті , доступ до якої здійснюється за допомогою пов'язаного з ним ідентифікатора , тобто в пам'яті створюється об'єкт . Цей об'єкт має характеристики того класу , у якому його створено, тобто він отримує атрибути свого класу . 30.11.2018 Профільна інформатика. Тема 6 7

Завдання для самостійного виконання:

звернення до класу Під час кожного звернення до класу створюється новий екземпляр класу з різними значеннями атрибутів . Наприклад , якщо в класі обчислюється об'єм піраміди з висотою h , основою якої є квадрат зі стороною а, то під час кожного звернення до класу буде створюватися такий самий об'єкт з атрибутами h і а, але значення їх будуть різними . Зазвичай класи без методів не використовуються . Метод викликається з основного блоку програми за допомогою інструкції : < екземпляр класу >.< ім'я методу> ([ параметри ]) 30.11.2018 Профільна інформатика. Тема 6 8

Завдання для самостійного виконання:

Приклад 1. найпростіша програма без методу class kl7_01(): # клас з іменем kl7_01 a=" гарно " # змінна а класу kl7_01 ob1=kl7_01() # екземпляр ob1 класу kl7_01 ob2=kl7_01() # екземпляр ob2 класу kl7_01 print(ob1.a) # виведення значення змінної а екземпляра ob1 print(ob2.a) # виведення значення змінної а екземпляра ob2 30.11.2018 Профільна інформатика. Тема 6 9 У цій програмі оголошено змінну (атрибут) з іменем а і два екземпляри ob1 і ob2 класу KI7_01. Імена екземплярів різні , тому для них буде відведено дві ділянки пам'яті , але їх зміст однаковий і має значення змінної а, тобто гарн o. Виведення атрибута цих об'єктів здійснюється двічі за допомогою вбудованої функції print. У результаті буде двічі виведено слово гарно .

Завдання для самостійного виконання:

Додамо в цю програму метод з іменем func i параметром self . В інструкції цього методу виводиться значення змінної a , до якого додається слово і правильно . class kl7_01(): # клас з іменем kl7_01 a=" гарно " # змінна а класу kl7_01 def func (self): # метод func із параметром self print( self.a +" і правильно") # інструкція методу ob1=kl7_01() # екземпляр ob1 класу kl7_01 ob2=kl7_01() # екземпляр ob2 класу kl7_01 print(ob1.a) # виведення значення змінної а екземпляра ob1 print(ob2.a) # виведення значення змінної а екземпляра ob2 ob1.func() # виклик методу func для екземпляра ob1 для виведення нового значення ob2.func() # виклик методу func для екземпляра ob2 для виведення нового значення 30.11.2018 Профільна інформатика . Тема 6 10 Найпростіша програма a одним методом

Завдання для самостійного виконання:

Виконання програми з одним методом Метод func викликається в програмі двічі : з екземплярів класу ob 1 і ob 2 . Результат виведення : гарно гарно гарно і правильно гарно і правильно У програмі використовувався один метод лише зі стандартним параметром self . 30.11.2018 Профільна інформатика. Тема 6 11

Завдання для самостійного виконання:

Приклад 2. програма з двома методами, у кожному з яких , окрім параметра self , використовується ще один параметр class kl7_03(): # клас з іменем kl7_03 predm =" інформатика " # змінна predm класу kl7_03 klas =8 # змінна klas за межами методу def func_1(self,a1): # метод func_1 з параметром a1 self.predm =a1 # зміна значення змінної predm def func_2(self,a2): # метод func_2 із параметром а2 self.predm =a2 # зміна значення змінної klas ob1=kl7_03() # екземпляр ob1 класу kl7_03 ob2=kl7_03() # екземпляр ob2 класу kl7_03 print(ob1.predm,ob1.klas) # виведення значення змінних predm і klas екземпляра ob1 print(ob2.predm,ob2.klas) # виведення значення змінних predm і klas екземпляра ob2 ob1.func_1(" математика") # звернення до методу func_1 екземпляра ob1 зі значенням аргументу "математика" ob2.func_1(" історія ") # звернення до методу func_1 екземпляра ob2 зі значенням аргументу " історія " ob2.func_2(9) # звернення до методу func_2 екземпляра ob2 зі значенням аргументу 9 # виведення значень змінних predm і klas після їх зміни в методі func_1 а потім func_2 print(ob1.predm,ob1.klas) print(ob2.predm,ob2.klas) 30.11.2018 12

Завдання для самостійного виконання:

Програма з двома методами, у кожному з яких два параметри Основна ідея цієї програми полягає в демонстрації порядку зміни властивостей створених об’єктів за допомогою методів . Дві змінні predm і klas оголошені поза межами методів . Тому обидва об’єкти ( ob1 і ob2) набувають властивості , які мають ці змінні , тобто інформатика і 8, а потім за допомогою методів ці властивості змінюються . У програмі метод func_l параметри self і а1, a метод func_2 - параметри self і а2 . Ці методи виконують тільки одну дію , а саме : метод func_1 змінює значення змінної predm , а метод func_2 — значення змінної klas . У програмі створено два екземпляри класів : ob1 і ob2. Поза межами методів змінна predm набуває значення “ інформатика ”, а змінна klas — значення 8. За допомогою інструкцій print( obl.predm , ob2.klas) i print (ob2.predm, ob2.k1as ) здійснюється виведення значень цих змінних . Зважаючи на те, що в першій інструкції змінні викликаються з екземпляра ob 1 , а в другій інструкції вони викликаються з e кземпляра ob2, значення змінних однакове , тому двічі буде виведено інформатика 8. Далі за допомогою інструкції ob1.func_l (« математика ») з екземпляра ob 1 викликається метод func_1 з аргументом математика. Цей аргумент передається параметру а1, а за допомогою інструкції self.predm = а1 змінна predm набуває нового значення , а саме - математика . 30.11.2018 13

Завдання для самостійного виконання:

Виконання програми з двома методами Звернемо увагу , що значення змінної klas екземпляра ob 1 н e змінювалося , тому за допомогою інструкції print ( ob 1 . predm , ob 1 .kl а s) буде виведено математика 8 . Після цього за допомогою інструкцій ob2. func_1(“ історія ”) і ob2.func_2(9) викликаються методи func_1 і func_2 з екземпляра ob2. У результаті обидві змінні змінюють своє значення і буде надруковано історія 9 . Результат виконання програми : інформатика 8 інформатика 8 математика 8 історія 9 30.11.2018 Профільна інформатика. Тема 6 14

Завдання для самостійного виконання:

Приклад 4. Дано два конуси різних розмірів із відомими радіусом основи й висоти . Потрібно обчислити об'єм одного з них і загальну площу другого. class kl7_04(): # клас з іменем kl7_04 def func_1(self,a1,a2 ): # метод func_1 з параметрами self,a1 і a2 volume=1/3*(3.14*a1*a1*a2)# обчислення обєму конуса return volume # повернення результату def func_2(self,a3,a4 ): # метод func_2 з параметрами self,a3 і a4 v=a3*a3+a4*a4 # сума квадратів радіуса і висоти surface=3.14*a3*(a3+math.sqrt(v))# обчислення повної площі конуса print("s=", surface) # виведення площі конуса import math # імпортування модуля math ob1=kl7_04() # екземпляр ob1 класу kl7_04 ob2=kl7_04() # екземпляр ob2 класу kl7_04 print("v=",ob1.func_1(3,4)) # звернення до методу func_1 і виведення результату ob2.func_2(4,5) # звернення до методу func_1 30.11.2018 Профільна інформатика. Тема 6 15

Завдання для самостійного виконання:

Програма з двома методами, кожен із яких має три параметри Для обчислення об’єму конуса використовують метод func_1 із параметрами self , a1 і a2, а для обчислення повної поверхні конуса - метод func_2 із параметрами self , а3 і а4. Звернемо увагу , що в програмі відсутні змінні класу , тобто змінні за межами методів . У процесі звернення до методу func_l параметру а1 передається число 3, а параметру а2 - число 4. Результат обчислення об'єму конуса повертається в інструкцію , з якої відбулося звернення до методу, тобто до інструкції print (“ об'єм =”, ob1.func (3, 4)). Отже , результат обчислення буде виведено на екран . Після звернення до методу func_2 параметр а3 набуде значення 4, а параметр а4 – значення 5. Результат обчислення не повертається в інструкцію , що його викликала , а виводиться за допомогою інструкції print ("s=", surface ) у цьому самому методі . Результат виконання програми : об'єм = 37.67999959399999 площа = 130.66324342215658 30.11.2018 Профільна інформатика. Тема 6 16

Завдання для самостійного виконання:

Запитання для перевірки знань 30.11.2018 Профільна інформатика. Тема 6 17

Завдання для самостійного виконання:

Завдання для самостійного виконання 30.11.2018 Профільна інформатика. Тема 6 18