074.Ada语言中的package分离式编译实例

         多个子程序封装在一个文件里过于庞大,且分类不清,这时就使用了程序包(package),作为一种分组机制,将子程序归类封装成独立的单元。Ada 的程序包机制主要受 Pascal 及 70 年代时的软件工程技术影响。当时很主要的一项革新就是软件包的概念。软件包使一个大程序分离成了多个单元,使软件维护更加方便,可重用性也更高,是结构化编程思想中必不可少的一部份。
         程序包的声明(Package Declaration), 程序包一般分为两部份,声明部分和执行部份。声明部份声明子程序、变量等实体,他们通常被称为资源;而执行部份则是声明部分中实体的实现。它们的扩展名一般情况下分别为 ads 和 adb。

①:adderpkg.ads – 声明部分

package AdderPkg is
   type MY_ARRAY is array(INTEGER range <>) of FLOAT;
   procedure Add_Em_Up(In_Dat : in     MY_ARRAY;
                       Sum    :    out FLOAT);
end AdderPkg;

②:adderpkg.adb – 实现部分,这里类似于C语言

package body AdderPkg is
   procedure Add_Em_Up(In_Dat : in     MY_ARRAY;
                       Sum    :    out FLOAT) is
   Total : FLOAT;
   begin
      Total := 0.0;
      for Index in In_Dat'FIRST..In_Dat'LAST loop
         Total := Total + In_Dat(Index);
      end loop;
      Sum := Total;
   end Add_Em_Up;
end AdderPkg;

③:main.adb – 使用部分

with Ada.Text_IO, Ada.Float_Text_IO;
use Ada.Text_IO, Ada.Float_Text_IO;

with AdderPkg;
use AdderPkg;

procedure Adder1 is

   FIRST : constant := 2;
   LAST  : constant := 7;
   Sum_Of_Values : FLOAT;

   New_Array : MY_ARRAY(FIRST..LAST);

   procedure Summer(In_Dat : MY_ARRAY;
                    Sum    : out FLOAT) renames AdderPkg.Add_Em_Up;
begin
   for Index in New_Array'FIRST..New_Array'LAST loop
      New_Array(Index) := FLOAT(Index);
   end loop;

   Put_Line("Call Add_Em_Up now");
   Add_Em_Up(New_Array, Sum_Of_Values);
   Put("Back from Add_Em_Up, total is");
   Put(Sum_Of_Values, 5, 2, 0);
   New_Line;

          -- The next three statements are identical
   Add_Em_Up(New_Array, Sum_Of_Values);
   AdderPkg.Add_Em_Up(New_Array, Sum_Of_Values);
   Summer(New_Array, Sum_Of_Values);

end Adder1;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值