← Назад к вопросам

Что такое три принципа ООП?

1.2 Junior🔥 161 комментариев
#Архитектура приложений

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI21 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

# Три принципа ООП

Вы можете спросить о трёх или четырёх основных принципах. Основная тройка:

1. Инкапсуляция (Encapsulation)

Идея: объект скрывает свои внутренние детали и предоставляет чёткий интерфейс для взаимодействия.

class User:
    def __init__(self, name: str, age: int):
        self._name = name  # private
        self._age = age    # private
    
    @property
    def age(self) -> int:
        return self._age
    
    @age.setter
    def age(self, value: int) -> None:
        if value < 0 or value > 150:
            raise ValueError("Invalid age")
        self._age = value

В контексте тестирования:

  • Инкапсулирую логику поиска элементов в Page Object
  • Скрываю детали реализации (CSS селектор, XPath, текст кнопки)
  • Предоставляю чистый интерфейс: click_login_button() вместо driver.find_element(By.XPATH, "...").click()

2. Наследование (Inheritance)

Идея: класс может наследовать свойства и методы от родительского класса, переиспользуя код.

class Animal:
    def __init__(self, name: str):
        self.name = name
    
    def make_sound(self) -> str:
        pass

class Dog(Animal):
    def make_sound(self) -> str:
        return f"{self.name} says: Woof!"

class Cat(Animal):
    def make_sound(self) -> str:
        return f"{self.name} says: Meow!"

В контексте тестирования:

  • Создаю базовый Page Object для всех страниц
  • Наследую специфичные страницы (LoginPage, ProfilePage)
  • Общие методы (wait, click) находятся в базовом классе

3. Полиморфизм (Polymorphism)

Идея: один интерфейс может работать с объектами разных типов. Один метод может иметь разную реализацию в разных классах.

class PaymentMethod:
    def pay(self, amount: float) -> str:
        pass

class CreditCard(PaymentMethod):
    def pay(self, amount: float) -> str:
        return f"Paid {amount} with Credit Card"

class PayPal(PaymentMethod):
    def pay(self, amount: float) -> str:
        return f"Paid {amount} with PayPal"

def process_payment(method: PaymentMethod, amount: float):
    return method.pay(amount)

В контексте тестирования:

  • Создаю общий интерфейс для разных драйверов (Selenium, Playwright, Appium)
  • Один тест может работать с любым драйвером

Бонус: четвёртый принцип — Абстракция (Abstraction)

Абстракция часто называют четвёртым принципом.

Идея: упростить сложность, показав только необходимые детали.

from abc import ABC, abstractmethod

class DatabaseConnection(ABC):
    @abstractmethod
    def connect(self):
        pass
    
    @abstractmethod
    def query(self, sql: str):
        pass

class PostgresConnection(DatabaseConnection):
    def connect(self):
        print("Connecting to PostgreSQL...")

Применение в тестировании

Эти принципы — фундамент для:

  • DRY (Don't Repeat Yourself) — наследование и инкапсуляция
  • SOLID — S, O, L, I, D опираются на эти три принципа
  • Page Object Model — инкапсуляция + полиморфизм
  • Масштабируемые тест-фреймворки — без ООП тесты быстро становятся спагетти-кодом
Что такое три принципа ООП? | PrepBro