logo search
Языки программирования

Динамический полиморфизм в языке Ada 95 имеет место, когда фактиче­ский параметр относится к cw-типу, а формальный параметр относится к конкретному типу.

Реализации диспетчеризации во время выполнения в языках Ada 95 и C++ похожи, тогда как условия для диспетчеризации совершенно разные:

• В C++ подпрограмма должна быть объявлена виртуальной, чтобы мож­но было выполнить диспетчеризацию. Все косвенные вызовы виртуаль­ной подпрограммы диспетчеризуются.

• В языке Ada 95 любая унаследованная подпрограмма может быть замеще­на и неявно становится диспетчеризуемой. Диспетчеризация выполняется только в случае необходимости, если этого требует конкретный вызов.

Основное преимущество подхода, принятого в языке Ada, состоит в том, что не нужно заранее определять, должен ли использоваться динамический поли­морфизм. Это означает, что не существует различий в семантике между вызовом виртуальной и невиртуальной подпрограммы. Предположим, что Airplane_Data был определен как теговый, но никакие порождения сделаны не были. В этом случае вся система построена так, что в ней все вызовы разрешены статически. Позже, если будут объявлены производные типы, они смогут использовать дис­петчеризацию без изменения или перекомпиляции существующего кода.