Ответ
Программа считается объектно-ориентированной, если она построена на четырех ключевых принципах:
-
Инкапсуляция — объединение данных (атрибутов) и методов для их обработки в едином объекте (классе). Внутренняя реализация скрыта от внешнего мира, а доступ к данным осуществляется через публичный интерфейс (методы). Это защищает данные от прямого неконтролируемого изменения.
-
Наследование — механизм, позволяющий создавать новый класс (потомок) на основе существующего (родителя). Потомок перенимает атрибуты и методы родителя, может их расширять или переопределять. Это способствует переиспользованию кода.
-
Полиморфизм — способность объектов с одинаковым интерфейсом (например, с одинаковым названием метода) иметь разную реализацию этого интерфейса. Это позволяет писать обобщенный код, который может работать с объектами разных классов.
-
Абстракция — выделение наиболее значимых характеристик объекта и игнорирование второстепенных. В программировании это реализуется через создание абстрактных классов или интерфейсов, которые определяют общий контракт для всех своих потомков, не вдаваясь в детали их реализации.
Пример на Python, иллюстрирующий все принципы:
from abc import ABC, abstractmethod
# Абстракция: определяем общий интерфейс для всех фигур
class Shape(ABC):
@abstractmethod
def area(self):
pass
# Наследование: Circle и Rectangle наследуют от Shape
class Circle(Shape):
# Инкапсуляция: данные (radius) и методы (area) объединены в классе
def __init__(self, radius):
self.__radius = radius # __ делает атрибут приватным
def area(self):
return 3.14 * self.__radius ** 2
class Rectangle(Shape):
def __init__(self, width, height):
self.__width = width
self.__height = height
def area(self):
return self.__width * self.__height
# Полиморфизм: функция print_area работает с любым объектом типа Shape
def print_area(shape: Shape):
print(f"Площадь фигуры: {shape.area()}")
# Создаем объекты разных классов
circle = Circle(10)
rectangle = Rectangle(5, 4)
print_area(circle) # Выведет: Площадь фигуры: 314.0
print_area(rectangle) # Выведет: Площадь фигуры: 20