Что такое полиморфизм в ООП?

«Что такое полиморфизм в ООП?» — вопрос из категории ООП, который задают на 31% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Полиморфизм — это принцип ООП, позволяющий объектам с разной внутренней реализацией отвечать на один и тот же вызов метода. В контексте разработки и тестирования ПО это означает, что код может работать с объектами разных классов через общий интерфейс.

Практическое значение для QA-инженера:

  1. Понимание кода: Умение читать автотесты, построенные на полиморфизме (например, использование паттерна Page Object, где разные страницы наследуют общий базовый класс).
  2. Создание гибких тестов: Можно писать тестовые методы, которые принимают абстрактный тип (интерфейс), а затем работать с любыми его реализациями.

Пример из автоматизации тестирования (Java): Допустим, у нас есть разные типы драйверов для работы с веб-элементами.

// Общий интерфейс для работы с элементом
interface UIElement {
    void click();
    String getText();
}

// Конкретные реализации
class WebElementAdapter implements UIElement {
    private WebElement element;
    public WebElementAdapter(WebElement element) { this.element = element; }
    @Override
    public void click() { element.click(); }
    @Override
    public String getText() { return element.getText(); }
}

class MobileElementAdapter implements UIElement {
    private MobileElement element;
    // ... аналогичная реализация для мобильного элемента
}

// Тестовый метод, использующий полиморфизм
public void testElementInteraction(UIElement element) {
    // Этот метод не знает, Web это элемент или Mobile.
    // Он работает через общий интерфейс UIElement.
    element.click();
    Assert.assertEquals("Expected Text", element.getText());
}

Основные виды полиморфизма, важные для тестирования:

  • Полиморфизм подтипов (наследование): Самый частый случай. Дочерний класс переопределяет метод родительского класса.
  • Параметрический полиморфизм (дженерики): Позволяет создавать общие классы и методы (например, List<WebElement>), что широко используется в фреймворках.

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

Видео-ответы