Полиморфизм
Полиморфизм — возможность с помощью одного имени обозначать операции из различных классов (но относящихся к общему суперклассу). Вызов обслуживания по полиморфному имени приводит к исполнению одной из некоторого набора операций.
Рассмотрим различные реализации процедуры Записывать. Для класса ПараметрыПолета реализация имеет вид
procedure Записывать (the: in out ПараметрыПолета) is
begin
-- записывать имя параметра
-- записывать отметку времени
end Записывать;
В классе Кабина предусмотрена другая реализация процедуры:
procedure Записывать (the: in out Кабина) is
begin
Записывать (ПараметрыПолета (the)); -- вызов метода
-- суперкласса
-- записывать значение давления
-- записывать процентное содержание кислорода
-- записывать значение температуры
end Записывать;
Предположим, что мы имеем по экземпляру каждого из этих двух классов:
Вполете: ПараметрыПолета:= Инициировать;
Вкабине: Кабина:= Инициировать (768. 21. 20);
Предположим также, что имеется свободная процедура:
procedure СохранятьНовДанные (d: in out
ПараметрыПолета'class; t: БортовоеВремя) is
begin
if ТекущВремя(d) >= t then
Записывать (d): -- диспетчирование с помощью тега
end if;
end СохранятьНовДанные;
Что случится при выполнении следующих операторов?
q СохранятьНовДанные (Вполете, БортовоеВремя (60));
q СохранятьНовДанные (Вкабине, БортовоеВремя (120));
Каждый из операторов вызывает операцию Записывать нужного класса. В первом случае диспетчеризация приведет к операции Записывать из класса ПараметрыПолета. Во втором случае будет выполняться операция из класса Кабина. Как видим, в свободной процедуре переменная d может обозначать объекты разных классов, значит, здесь записан вызов полиморфной операции.