Основы разработки программного обеспечения вычислительных систем. Милованов И.В - 45 стр.

UptoLike

45
Предположим, что мы имеем по экземпляру каждого из этих двух
классов:
В полете: ПараметрыПолета:= Инициировать;
В кабине: Кабина:= Инициировать (768. 21. 20);
Предположим также, что имеется свободная процедура:
procedure СохранятьНовыеДанные (d: in out
ПараметрыПолета'class; t: БортовоеВремя) is
begin
if ТекущееВремя(d) >= t then
Записывать (d): – диспетчирование с помощью тега
end if;
end СохранятьНовыеДанные.
Что случится при выполнении следующих операторов?
СохранятьНовыеДанные (Вполете, БортовоеВремя (60));
СохранятьНовыеДанные (Вкабине, БортовоеВремя (120)).
Каждый из операторов вызывает операцию «Записывать» нужного
класса. В первом случае диспетчеризация приведёт к операции «Записы-
вать» из класса «ПараметрыПолета». Во втором случае будет выполняться
операция из класса «Кабина». Как видим, в свободной процедуре пере-
менная d может обозначать объекты разных классов, значит, здесь запи-
сан вызов полиморфной операции.
АГРЕГАЦИЯ
Отношения агрегации между классами аналогичны отношениям аг-
регации между объектами.
Повторим пример с описанием класса «КонтроллерУгла»:
with Класс «ГрафикРазворота». Класс «РегуляторУгла»;
use Класс «ГрафикРазворота», Класс «РегуляторУгла»;
Package Класс «КонтроллерУгла» is
type указатель наГрафик is access all ГрафикРазворота;
type КонтроллерУгла is tagged private:
procedure Обрабатывать (in out КонтроллерУгла;
yгол: указатель на График);
function Запланировано (КонтроллерУгла;
угол: указатель на График) return Секунда;
private
type КонтроллерУгла is tagged record;
регулятор: РегуляторУгла;
end Класс «КонтроллерУгла».