logo
otvety1

207 Полиморфизм. Перегрузка операций.

Полиморфи́зм - взаимозаменяемость объектов с одинаковым интерфейсом. Язык программирования поддерживает полиморфизм, если классы с одинаковой спецификацией могут иметь различную реализацию — например, реализация класса может быть изменена в процессе наследования.

Полиморфизм явл-ся одним из важнейших мех-ов ООПнаряду сабстракцией,инкапсуляциейинаследованием.

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

1)Внешняя общность проявляется как одинаковый набор методов с одинаковыми именами и сигнатурами.

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

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

Класс-потомок сам может быть родителем. Это позволяет строить сложные схемы наследования — древовидные или сетевидные.

Абстрактные предназначены для наследования. Их реализация должна быть определена в классах-потомках.

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

Реализация

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

1)Чтобы разрешить существование нескольких одноимённых операций, достаточно ввести в язык правило, согласно которому операция (процедура, функция или оператор) опознаются компилятором не только по имени (обозначению), но и по типам их параметров. Таким образом, abs(i), где i объявлено как целое, и abs(x), где x объявлено как вещественное — это две разные операции.

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