Языки программирования - концепции и принципы

ориентированное программирование на языке Ada


14.5. Объектно- ориентированное программирование на языке Ada 95

 

В языке Ada 83 наличие пакетной конструкции обеспечивает полную поддержку инкапсуляции, а наличие производных типов частично обеспе­чивает наследование. Полного наследования нет, потому что, когда вы произ­водите новый тип, то можете добавлять только новые операции, но не новые компоненты данных. Кроме того, единственный полиморфизм — это стати­ческий полиморфизм вариантных записей. В языке Ada 95 поддерживается полное наследование за счет того, что программисту дается возможность рас­ширить запись производного типа. Чтобы обозначить, что родительский тип записи пригоден для наследования, его нужно объявить как теговый (tagged)  тип записи:

package Airplane_Package is

     type Airplane_Data is tagged

          record

               ID:String(1..80);

               Speed: Integer range 0..1000;

               Altitude: Integer range 0..100;

          end record;

end Airplane_Package;

Этот тег аналогичен тегу в языке Pascal и дискриминанту в вариантных запи­сях языка Ada, где он используется для того, чтобы различать разные типы, производные друг из друга. В отличие от этих конструкций, тег теговой записи неявный, и программист не должен явно к нему обращаться. Заглядывая впе­ред, скажем, что этот неявный тег будет использоваться, чтобы диспетчери-зовать вызовы подпрограмм для динамического полиморфизма.

Чтобы создать абстрактный тип данных, тип должен быть объявлен как приватный и полное объявление типа дано в закрытой части:

package Airplane_Package is

              type Airplane_Data is tagged private;

              procedure Set_ID(A: in out Airplane_Data; S: in String);

              function Get_ID(A: Airplane_Data) return String;

              procedure Set_Speed(A: in out Airplane_Data; I: in Integer);

              function Get_Speed(A: Airplane_Data) return Integer;

               procedure Set_Altitude(A: in out Airplane_Data; I: in Integer);


Содержание  Назад  Вперед