Значения · Наука и познание

Полиморфизм

существительное мужского рода

Коротко о главном

Что такое полиморфизм

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

01

В объектно-ориентированном программировании

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

Близкие слова

  • многочисленность форм
  • разнообразие реализаций

Вызов метода draw() у объектов Circle и Square приводит к отрисовке разных фигур.

Функция print_info принимает любой объект, реализующий интерфейс Printable.

02

В биологии и генетике

Наличие в популяции одного вида двух или более дискретных форм (морф), отличающихся друг от друга. Часто используется для описания вариативности признаков, не связанных с половым диморфизмом.

Близкие слова

  • многочисленность морф
  • вариативность форм

Полиморфизм окраски крыльев у бабочек вида Papilio memnon.

Генетический полиморфизм популяции по группе крови.

Полиморфизм в коде: динамический и статический

В программировании важно различать два основных типа полиморфизма. Динамический полиморфизм достигается через наследование и переопределение методов: вызывается тот метод, который принадлежит реальному типу объекта в момент исполнения кода. Статический полиморфизм (перегрузка методов) определяется компилятором на основе типов аргументов переданной функции. Оба механизма позволяют писать гибкий код, но служат разным архитектурным целям.

Отличие от инкапсуляции и наследования

Полиморфизм часто путают с другими принципами ООП. Если инкапсуляция скрывает внутреннее устройство объекта, а наследование позволяет повторно использовать код родительского класса, то полиморфизм отвечает за унификацию взаимодействия с разными объектами. Без полиморфизма программисту пришлось бы писать отдельные ветвления условий (if/else) для каждого типа данных, что усложнило бы поддержку кода.