Введение в программирование - Учебное пособие (Корочкин А. В.)

16.7 примеры

П   Пример 1 .      Пакет с тэ! овами типами и    их расширениями package   ORBIT_WORK   is

type   Gum    is integer   range    - 10C .. 10C ;

type   Orbit   is tagged record

X:   fixed; Y:   boolean ; end record ;

214

215

Глава 16. Обьектно-ориентированное программирование

 

Для пакета    SWEET    определен тип    SweetJDrbit, производный от Orbit с добавлением   компоненты Z.    Процедуры   Fiat,  Ford,   Volvo

procedure Fiat    ( О             in Orbit; F : out   Gum ) ;

procedure Ford    ( О           in   out    Orbit) ;

procedure Volvo ( О            out          Orbit);

type Orbit_A is new Orbit  with        --расширение типа  Orbit record

A:    float; end record;

procedure Ford (A:    in out   Orbit);

type Orbit_B is new Orbit_A with -- расширение типа Orbit_A record

В:   character; end record;

procedure Ford(B: in out   Orbit_B); procedure Sun ( В : in         Orbit_B);

end ORBIT_WORK;

Пакет Orbit_Work содержит в спецификации описания трех типов: Orbit и два расширенных типа Orbit_A и Orbit_B , являющимися расширениями типов Orbit и Orbit_A соответственно.

Для типа Orbit определены три процедуры Fiat, Ford, Volvo . Для типа Orbit_A определена процедура Ford. Для типа Orbit_B определены процедуры Ford и Sun.

Для всех трех типов определена процедура Ford, то есть она является совмещенной.

Типы Orbit_A и Orbit_B наследуют операции Fiat и Volvo от типа Orbit.

Тело пакета  Orbit_Work : package   body    ORBIT_WORK  is

procedure Fiat    (О :    in Orbit; F : out Gum )   is separate ;

procedure Volvo  (О :    out   Orbit)   is   separate ;

procedure Ford   (О:    in    out  Orbit)   is

end   Ford;

procedure Ford    (A:   in    out  Orbit_A)   is

end Ford;

procedure Ford   ( В :   in    out  Orbit_B) is

•    •    •

end   Ford; end    ORBIT_WORK;

П   Пример 2     Использование пакета   Orbit_Work

with ORBIT_WORK; package    SWEET    is

type   Sweet_Orbit  is   new   Orbit_Work. Orbit   with record

Z : Orbit_Work. Gum ; end record;

in

SweetJDrbit; Orbit_Work. Gum ); out     SweetJDrbit); out     SweetJDrbit); SweetJDrbit);

procedure Fiat    (SO

FF:    out

procedure Ford   ( SO:    in procedure Volvo  ( SO : procedure Reno  ( SO:    in

end   SWEET;

216

217

Ада 95. Введение в программирование

Глава 16. Обьектно-ориентированное программирование

являются   совмещенными.   Дополнительно   определена      процедура Reno.

Совокупность  типов    Orbit, Orbit_A,  Orbit_B   и     Sweet  образуют класс, его корень - тип   Orbit. Иерархия классов Orbit:

Orbit

Y :    boolean ; A:    float; end record ;

procedure              Fiat     ( OA

procedure              Ford    ( OA

procedure              Volvo ( OA

Gum);

in Orbit_A ;   F :    out in    out   Orbit_A ); out   Orbit_A);

 

type    Orbit_B    is record

В : character; end record ;

new    Orbit_A    with -- расширение типа

Orbit В

Orbit_A

I Orbit В

Orbit Sweet

 

Типы Orbit_A   и  Orbit_B образуют подкласс.

G   Пример З .      Пакет с абстрактными типами и абстрактными процедурами.

package  ABSJRACTJDRBIT  is

type    Orbit   is   abstract    tagged     null    record; procedure Ford (АО   :   in   out Orbit)    is   abstract;

end   ABSTRACTJDRBIT ; Использование  пакета :

with  ABSTRACTJDRBIT ; package   ORBIT_WORK_2   is

type  Gum   is integer range  -100.. 100 ;

type Orbit_A    is   new Abstract_Orbit. Orbit    with

- - расширение типа   Orbit

record X:    fixed;

procedure Ford ( В : in out Orbit_B ); end   ORBIT_WORK_2;

Пакет ABSTRACT_ORBIT определяет абстрактный тип Orbit как запись без компонент и абстрактную процедуру Ford для него. Процедура Ford не имеет тела. В пакете ORBIT_WORK_2 на основании типа Orbit содается тип Orbit_2 с добавлением компонент и новых прмитивных операций. Тип Orbit_B явяляется расширением типа Orbit_A. Операция Ford является совмещенной дли типов Orbit А и Orbit В.

219

218_______________Ада 95. Введение в программирование