Поняття класу та об’єкту є основою об’єктно-орієнтованого програмування (ООП). Програма створюється як деяка сукупність об’єктів, які взаємодіють між собою. ООП базується на трьох основних принципах:інкапсуляція, наслідування та поліморфізм. Розглянемо сутність цих принципів.
Об’єкти дозволяють об’єднувати функції (методи класу) та дані (змінні, що зберігають значення атрибутів) всередині одного елемента. Атрибути являють собою інформацію, а методи — дії.
ОБ’ЄКТ = АТРИБУТИ + МЕТОДИ
Інкапсуляція — це об’єднання в межах класу певних даних і методів для роботи з ними.
Наприклад, ми описали клас Balloons, що представляє повітряні кульки, який містить дані про кульку: колір, висота, «надутість», і методи: змінити значення атрибутів в разі протикання кульки, збільшити розміри кульки тощо. При цьому клас стає новим типом даних в програмі, що створюється, і ми можемо створювати змінні цього нового типу.
Наслідування — це можливість створення нового класу (нащадка) на базі існуючого (базового).
Розглянемо такі поняття, як людина та учень. Будь-яка людина має ім’я, прізвище, вік та інші загальні характеристики. Учень також має ім’я, прізвище, вік, але, крім цього, він має додаткові характеристики: навчальний заклад, клас, середній бал успішності. З точки зору наслідування, учень є нащадком поняття людина. Таким чином, клас-нащадок містить ті самі атрибути та методи, що й базовий клас, але при цьому його можна розширити через додавання нових методів та атрибутів. Це позбавляє необхідності починати опис класу-нащадку «з нуля» — описувати атрибути й методи, успадковані від базового класу.
Приклад:
На основі базового класу Тварина створити 2 класи: Собака і Кіт, що мають власні методи.
class Animal():
def __init__(self, name):
self.name=name
def breathe(self):
print(self.name,' дихає')
def eat_food(self,food):
print(self.name, 'їсть', food)
class Dog (Animal):
def guard(self):
print(self.name, ' охороняє')
class Cat (Animal):
def catchmouse(self):
print(self.name,' ловить мишу')
dog1 = Dog("Cірко")
cat1 = Cat("Мурчик")
cat1.breathe() #
cat1.eat_food (' рибку')
dog1.eat_food (' кістку')
dog1.guard() # відправляємо собаку охороняти
cat1.catchmouse() # відправляємо кота на полювання
class Animal():
def __init__(self, name):
self.name=name
def breathe(self):
print(self.name,' дихає')
def eat_food(self,food):
print(self.name, 'їсть', food)
class Dog (Animal):
def guard(self):
print(self.name, ' охороняє')
class Cat (Animal):
def catchmouse(self):
print(self.name,' ловить мишу')
dog1 = Dog("Cірко")
cat1 = Cat("Мурчик")
cat1.breathe() #
cat1.eat_food (' рибку')
dog1.eat_food (' кістку')
dog1.guard() # відправляємо собаку охороняти
cat1.catchmouse() # відправляємо кота на полювання
Поліморфізм — це різна поведінка методу в різних класах. Методи з однаковим ім’ям, описані в різних класах, можуть мати різну реалізацію.
Приклад:
Описати метод Голос для класів Собака і Кіт.
class Dog (Animal):
def voice(self):
print(self.name, ' Гав-гав')
class Cat (Animal):
def voice(self):
print(self.name, ' Мяу-мяу')
cat1.voice()
dog1.voice()
class Dog (Animal):
def voice(self):
print(self.name, ' Гав-гав')
class Cat (Animal):
def voice(self):
print(self.name, ' Мяу-мяу')
cat1.voice()
dog1.voice()
Приклад:
Описати класи Трикутник і Квадрат. Додати до описів класів метод для обчислення площі фігури.
class Triangle:
def __init__(self, width, height):
self.width = width
self.height = height
def getArea(self):
area = self.width * self.height / 2.0
return area
class Square:
def __init__(self, size):
self.size = size
def getArea(self):
area = self.size * self.size
return area
myTriangle = Triangle(4, 5)
mySquare = Square(7)
s_triangle = myTriangle.getArea()
print (s_triangle ) # буде надруковане 10.0
s_square = mySquare.getArea()
print (s_square) # буде надруковане 49
class Triangle:
def __init__(self, width, height):
self.width = width
self.height = height
def getArea(self):
area = self.width * self.height / 2.0
return area
class Square:
def __init__(self, size):
self.size = size
def getArea(self):
area = self.size * self.size
return area
myTriangle = Triangle(4, 5)
mySquare = Square(7)
s_triangle = myTriangle.getArea()
print (s_triangle ) # буде надруковане 10.0
s_square = mySquare.getArea()
print (s_square) # буде надруковане 49
Джерела:
Інформатика : підруч. для 7 кл. закл. загал. серед. освіти / [О. О. Бондаренко, В. В. Ластовецький, О. П. Пилипчук, Є. А. Шестопалов]. — Харків : Вид-во «Ранок», 2020.