Ответ
Четыре фундаментальных принципа объектно-ориентированного программирования (ООП):
-
Инкапсуляция (Encapsulation)
- Что это: Объединение данных (полей) и методов, которые с ними работают, в единый класс, и ограничение прямого доступа к внутреннему состоянию объекта.
- Зачем: Для сокрытия сложности, защиты данных от некорректного изменения и обеспечения целостности объекта.
-
Пример на Python:
class BankAccount: def __init__(self): self._balance = 0 # Защищенный атрибут def deposit(self, amount): if amount > 0: self._balance += amount # Изменение через публичный метод def get_balance(self): return self._balance # Чтение через геттер
-
Наследование (Inheritance)
- Что это: Возможность создания нового класса (дочернего) на основе существующего (родительского), перенимая его свойства и методы.
- Зачем: Для повторного использования кода, создания иерархий и реализации полиморфизма.
- Пример на Java:
class Vehicle { void move() { System.out.println("Vehicle is moving"); } } class Car extends Vehicle { // Car наследует от Vehicle @Override void move() { System.out.println("Car is driving"); } }
-
Полиморфизм (Polymorphism)
- Что это: Способность объектов с одинаковым интерфейсом (методом) иметь разную реализацию.
- Зачем: Для написания гибкого, обобщенного кода, который работает с объектами разных типов.
- Пример:
from abc import ABC, abstractmethod class Shape(ABC): @abstractmethod def area(self): pass
class Circle(Shape): def area(self): return 3.14 * self.radius 2 # Своя реализация class Square(Shape): def area(self): return self.side 2 # Своя реализация
Полиморфный вызов
shapes = [Circle(5), Square(4)] for s in shapes: print(s.area()) # Вызывается правильный метод для каждого объекта
-
Абстракция (Abstraction)
- Что это: Выделение существенных характеристик объекта и игнорирование нерелевантных деталей. Реализуется через абстрактные классы и интерфейсы.
- Зачем: Для управления сложностью, позволяя работать с высокоуровневыми концепциями, а не с деталями реализации.
- Пример на C#:
// Абстракция "Транспортное средство" interface IVehicle { void StartEngine(); // Контракт, скрывающий детали void StopEngine(); }
class Car : IVehicle { public void StartEngine() { / Сложная логика зажигания / } public void StopEngine() { / Логика остановки / } } // Пользователь кода знает только о StartEngine(), а не о том, как он работает.