Программирование на C и C++

Онлайн справочник программиста на C и C++

Полиморфизм

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

Тот же самый принцип может быть применен к программированию. Например, рассмотрим случай программы, которая определяет три различных типа списков. Один из них используется для целых чисел, другой — для символов и третий — для значений с плавающей запятой. Благодаря полиморфизму можно создать два набора функций, имеющих одинаковое имя push() (поместить) и рор() (извлечь) — по одной для каждого типа данных. Общая концепция (интерфейс) заключается в том, чтобы вставлять и извлекать данные в список и из списка. Функции определяют специфические способы (методы), с помощью которых эти операции выполняются для каждого типа данных. Когда данные вставляются в список, автоматически вызывается та версия функции push(), которая соответствует типу обрабатываемых данных.

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

Первые объектно-ориентированные языки программирования были интерпретаторами, поэтому полиморфизм поддерживался в режиме времени выполнения. Однако поскольку С++ представляет собой компилятор, то полиморфизм поддерживается как в режиме времени выполнения, так и на этапе компиляции.