Полиморфизм (polymorphism) (от греческого polymorphos) — это свойство, ко-
торое позволяет одно и то же имя использовать для решения двух или более
схожих, но технически разных задач. Целью полиморфизма, применительно
к объектно-ориентированному программированию, является использование
одного имени для задания общих для класса действий. Выполнение каждого
конкретного действия будет определяться типом данных. Например, для
языка С, в котором полиморфизм поддерживается недостаточно, нахожде-
ние абсолютной величины числа требует трех различных функций: abs(),
labs() и fabs(). Эти функции подсчитывают и возвращают абсолютную вели-
чину целых, длинных целых и чисел с плавающей точкой соответственно.
В C++ каждая из этих функций может быть названа abs(). (Один из спосо-
бов, который позволяет это делать, показан далее в этой главе.) Тип данных,
который используется при вызове функции, определяет, какая конкретная
версия функции действительно выполняется. Как вы увидите, в C++ можно
использовать одно имя функции для множества различных действий. Это
называется перегрузкой функций (function overloading).
В более общем смысле, концепцией полиморфизма является идея "один ин-
терфейс, множество методов". Это означает, что можно создать общий ин-
терфейс для группы близких по смыслу действий. Преимуществом поли-
морфизма является то, что он помогает снижать сложность программ, раз-
решая использование того же интерфейса для задания единого класса
действий. Выбор же конкретного действия, в зависимости от ситуации, воз-
лагается на компилятор. Вам, как программисту, не нужно делать этот вы-
бор самому. Нужно только помнить и использовать общий интерфейс.
Пример из предыдущего абзаца показывает, как, имея три имени для функ-
ции определения абсолютной величины числа вместо одного, обычная зада-
ча становится более сложной, чем это действительно необходимо.
Полиморфизм может применяться также и к операторам. Фактически во
всех языках программирования ограниченно применяется полиморфизм,
например, в арифметических операторах. Так, в С, символ + используется
для складывания целых, длинных целых, символьных переменных и чисел с
плавающей точкой. В этом случае компилятор автоматически определяет,
какой тип арифметики требуется. В C++ вы можете применить эту концеп-
цию и к другим, заданным вами, типам данных. Такой тип полиморфизма
называется перегрузкой операторов (operator overloading),
Ключевым в понимании полиморфизма является то, что он позволяет вам
манипулировать объектами различной степени сложности путем создания
общего для них стандартного интерфейса для реализации похожих действий. |