#19 – Спадкування, поліморфізм, інкапсуляція

#19 – Спадкування, поліморфізм, інкапсуляція

Крім класів та об'єктів, ООП містить додаткові три основні концепції: спадкування, інкапсуляція та поліморфізм. За урок ми навчимося прописувати та реалізовувати всі ці концепції у мові програмування Python.

Відеоурок

Telegram group

Підписуйтесь на нашу групу в Телеграмі 🇺🇦

Що таке наслідування, інкапсуляція та поліморфізм ми вже розповідали у попередньому уроці, тому особливої уваги зараз на цьому концентрувати не будемо.


Спадкування

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


Навіщо потрібно спадкування?

Припустимо, що у нас є один великий клас «Транспорт». У класі описуються базові характеристики для всіх транспортних засобів:

  • поля: швидкість, вага, запас ходу тощо;
  • методи: отримання інформації з полів, встановлення нових значень;
  • конструктор: порожній та встановлення всіх полів.


На основі класу ми можемо спокійно створити об'єкт легкової машини, об'єкт вантажівки, об'єкт літака і так далі. Усі об'єкти мають однакові характеристики та методи.

Ми явно розуміємо, що у об'єкта машина та літак будуть різні поля та характеристики. Як можна вчинити:

  1. Можна створити два окремих класи: «Car» та «Airplane». У кожному класі будуть усі методи, поля та конструктори повторно переписані з класу «Транспорт», а також нові методи, що важливі тільки для конкретного класу;
  2. Можна створити два класи спадкоємця: «Car» та «Airplane». Обидва класи будуть успадковувати все від класу «Транспорт» і будуть містити свої додаткові функції. Таким чином повторення коду не буде і код стане меншим і чистішим.


Створення класів спадкоємців

Для створення класу спадкоємця потрібно створити клас та вказати спадкування від головного класу.


Приклад класу спадкоємця:

class Cars:
	wheels = 4 # Загальне значення для всіх об'єктів,
	# так як всі машини мають колеса

class BMW (Cars):
	is_m_serias = true # Чи є модель "М" серії?
	# Змінна потрібна лише у класі BMW


Інкапсуляція

Інкапсуляція дозволяє обмежити доступ до будь-якої функції у класі. Завдяки такому підходу зловмисники або ми самі не зможемо випадково або навмисно викликати або змінити метод.


Приклад:

class Some:
	def _printWords(self):
		print ("Спробуй мене викликати")

obj = Some()
obj._printWords() # Виклик функції нічого не дасть

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


Поліморфізм

Поліморфізм дозволяє змінювати функції у класах спадкоємців. Приклад:

class Cars:
	def nothing(self): # Порожня функція
		pass
		
class BMW (Cars):
	def nothing(self, word):
		print (word + "!") # Функція тепер працюватиме по новому
 
a = BMW()
a.nothing("Some")

Вихідний код

Весь код буде доступний після підписки на проект!

Завдання до уроку

Необхідно оформити передплату на проект, щоб отримати доступ до всіх домашніх завдань

Велике завдання за курсом

Вам необхідно оформити передплату на сайті, щоб мати доступ до всіх великих завдань. У завдання входить методика рішення, а також готовий проект з відповіддю до завдання.
PS: подібні завдання доступні при підписці від 1 місяця

Також варто подивитися

Курс Machine Learning / Машинное обучение с нуля
Изучение Python UI (GUI Apps) / Программы на Питон
Уроки ChatGPT API / Разработка программ на Python и ChatGPT
Изучение Асинхронности Python
Изучение PyQt5 / Графический интерфейс на Python
Разработка Telegram Ботов на Python
Коментарі
Додати коментар

Поки що коментарів немає