===== Полиморфизм ===== Возможность использовать один и тот же код для разных типов данных. Благодаря полиморфизму достигается высокая степень повторного использования, уменьшается объем кода и снижаются трудозатраты на его написание. ==== Разновидности ==== * **Ad-hoc-полиморфизм** - в статически типизируемых языках достигается путем перегрузки функций и операторов. Семантический анализатор выбирает из доступного набора одноименных функций ту, которая подходит по типам аргументов. * **Параметрический полиморфизм** - в языках с сильной типизацией реализуется при помощи вывода и подстановки типов. К этой разновидности относят, например, шаблоны в C++, которые иногда называют статическим полиморфизмом. * **Полиморфизм подтипов** - в ООП-языках реализуется при помощи наследования классов. Основан на принципе подстановки Барбары Лисков: функции, которые используют базовый тип, должны иметь возможность использовать подтипы базового типа, не зная об этом.