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. Введение в программирование |
| Оглавление| |