Основы ООП: полиморфизм

Термин полиморфизм означает изменчивость, многоликость. Это обратная сторона абстракции, совмещенной с механизмом наследования. Когда мы имеем некий общий программный интерфейс, его могут реализовать разные классы, связанные отношениями наследования. Тогда вызов методов интерфейса приведет к выполнению задачи разными способами.

Например, представим себе семейство абстрактных средств передвижения, включающее пару конкретных: машину и вертолет. Команда переместиться из точки А в точку Б будет выполнена ими одинаково успешно, но машина проделает путь по земле, а вертолет — по воздуху.

Для большей наглядности продолжим пример с программой рисования. Можно сказать, что многоликость в неё заложена на уровне графических фигур. Пользователь волен нарисовать произвольное сочетание кругов, квадратов и треугольников. Каждый из этих объектов должен уметь отображать себя на экране по своим координатам и используя свой стиль, но самое главное — делать это в виде соответствующей формы.

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

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