Що таке об’єктно-орієнтоване програмування (OOP)?

Об'єктно-орієнтоване програмування (OOP) є найпоширенішою парадигмою програмування у сучасній розробці програмного забезпечення. Ця парадигма пропонує розробникам організовувати свої програми навколо об'єктів. У OOP кожен об'єкт об'єднує дані та функції, які оперують цими даними. Такий підхід дозволяє зробити код модульним та зручним для подальшого розвитку.

1. Абстракція (Abstraction):

Абстракція дозволяє приховати непотрібні деталі, фокусуючись лише на важливих аспектах. Користувачі не повинні знати, як саме працює складна система, вони просто використовують відповідні функції.

Приклад: Ви можете керувати автомобілем, не знаючи, як саме він працює, просто повертаючи кермо. У програмуванні при використанні функцій вам не потрібно знати, як саме вони реалізовані.

У наведеному прикладі ми не знаємо деталей процесу приготування кави в класі CoffeeMachine, ми просто використовуємо функцію make_coffee.

from abc import ABC, abstractmethod  

# Абстрактний клас  
class CoffeeMachine(ABC):  
 @abstractmethod  
 def make_coffee(self):  
 pass  

# Наслідуваний клас  
class BasicCoffeeMachine(CoffeeMachine):  
 def make_coffee(self):  
 return "Ваша кава готова!"  

# Користувач викликає тільки функцію make_coffee, не знаючи про внутрішні деталі.  
machine = BasicCoffeeMachine()  
print(machine.make_coffee())

2. Інкапсуляція (Encapsulation):

Інкапсуляція захищає дані об'єкта від зовнішнього доступу. Доступ до цих даних можливий лише через визначені функції, що запобігає небажаним змінам ззовні.

Приклад: Ви не можете отримати доступ до балансу банківського рахунку (__balance), ви можете лише вносити або знімати гроші через певні функції.

class BankAccount:  
 def __init__(self, balance):  
 self.__balance = balance # доступ через __ забороняє зовнішній доступ  

 def deposit(self, amount):  
 self.__balance += amount  

 def withdraw(self, amount):  
 if amount <= self.__balance:  
 self.__balance -= amount  
 else:  
 print("Недостатньо коштів!")  

 def get_balance(self):  
 return self.__balance  

# Ми не можемо звернутися до змінної __balance напряму, тільки через функції.  
account = BankAccount(100)  
account.deposit(50)  
account.withdraw(30)  
print(account.get_balance()) # 120

3. Наслідування (Inheritance):

Наслідування дозволяє одному класу успадковувати властивості іншого класу. Це дає змогу розширювати існуючий код та створювати нові класи без необхідності переписувати їх з нуля.

Приклад: Клас Car успадковує властивості класу Vehicle і додає нові.

# Базовий клас  
class Vehicle:  
 def __init__(self, brand):  
 self.brand = brand  

 def start_engine(self):  
 return f"Двигун {self.brand} запущено"  

# Наслідуваний клас  
class Car(Vehicle):  
 def play_radio(self):  
 return "Відтворення радіо"  

# Клас Car успадковує властивості класу Vehicle.  
my_car = Car("Toyota")  
print(my_car.start_engine()) # Двигун Toyota запущено  
print(my_car.play_radio()) # Відтворення радіо

4. Поліморфізм (Polymorphism):

Поліморфізм дозволяє одному й тому ж методу мати різні реалізації для різних об'єктів. Функція базового класу може бути перевизначена в підкласах.

Приклад: Функція speak() в класі Animal реалізується по-різному в класах Dog та Cat; собака гавкає, а кіт мявкає.

class Animal:  
 def speak(self):  
 pass  

class Dog(Animal):  
 def speak(self):  
 return "Гав!"  

class Cat(Animal):  
 def speak(self):  
 return "Мяу!"  

# Одна й та сама функція speak дає різні результати в залежності від об'єкта.  
animals = [Dog(), Cat()]  

for animal in animals:  
 print(animal.speak())




Перекладено з: [Object Oriented Programming (OOP) Nedir?](https://medium.com/@meyragonul/object-oriented-programming-oop-nedir-3ac59740739e)

Leave a Reply

Your email address will not be published. Required fields are marked *