Назовите и объясните основные принципы ООП

Ответ

Основные принципы объектно-ориентированного программирования (ООП) направлены на создание модульного, гибкого и поддерживаемого кода. Их четыре:

  1. Инкапсуляция (Encapsulation) Объединение данных (атрибутов) и методов для их обработки в единый объект (класс) с сокрытием деталей реализации. Это защищает данные от прямого неконтролируемого доступа и упрощает интерфейс объекта.

    Почему это важно? Позволяет изменять внутреннюю логику объекта, не затрагивая код, который его использует.

    class BankAccount:
        def __init__(self, initial_balance):
            # __balance является "приватным" атрибутом
            self.__balance = initial_balance
    
        def deposit(self, amount):
            if amount > 0:
                self.__balance += amount
    
        def get_balance(self):
            return self.__balance
  2. Наследование (Inheritance) Механизм, позволяющий создавать новый класс (потомок) на основе существующего (родителя), заимствуя его атрибуты и методы. Это способствует повторному использованию кода и построению иерархии классов.

    Почему это важно? Устраняет дублирование кода и организует классы по принципу "is-a" (является).

    class Animal:
        def speak(self):
            raise NotImplementedError("Subclass must implement abstract method")
    
    class Dog(Animal): # Dog наследует от Animal
        def speak(self):
            return "Woof!"
  3. Полиморфизм (Polymorphism) Способность объектов разных классов отвечать на один и тот же вызов метода по-разному. Позволяет использовать единый интерфейс для работы с объектами разных типов.

    Почему это важно? Делает систему более гибкой и расширяемой. Можно добавлять новые классы без изменения кода, который их использует.

    class Cat(Animal):
        def speak(self):
            return "Meow!"
    
    # Функция работает с любым потомком Animal
    def make_animal_sound(animal: Animal):
        print(animal.speak())
    
    make_animal_sound(Dog()) # Выведет "Woof!"
    make_animal_sound(Cat()) # Выведет "Meow!"
  4. Абстракция (Abstraction) Выделение наиболее значимых характеристик объекта и игнорирование второстепенных. В программировании это реализуется через создание простых интерфейсов для сложных систем, скрывая детали их реализации.

    Почему это важно? Снижает сложность системы, позволяя разработчикам фокусироваться на взаимодействии объектов, а не на их внутреннем устройстве.