サーチ…


構文

  • Package_Name_To_Include;
  • パッケージNew_Package_NameはPackage_To_Renameの名前を変更します。
  • Package_Nameを使用します。
  • パッケージParent_Name.Child_Nameは

備考

パッケージ提供:

  • コードカプセル化
  • 別々のコンパイル
  • プライベート型のプロシージャ、関数、演算子を非表示にする

他の言語の類似点または類似点:

パッケージの詳細

Hello Worldでは、あなたはパッケージAda.Text_IO導入され、プログラム内でI / O操作を実行するためにそれを使用する方法をAda.Text_IO 。パッケージをさらに操作して、さまざまなことを行うことができます。

名前の変更 :パッケージの名前を変更するには、パッケージ宣言でキーワードrenames次のように使用します。

package IO renames Ada.Text_IO;

さて、新しい名前で、 Put_Line (つまりIO.Put_Line )のような関数に同じドット表記をuseことができます。あるいは、単にuse IO useてそれをuse IOこともできます。もちろん、 use IOまたはIO.Put_Lineを使用すると、パッケージAda.Text_IO関数が使用されます。


可視性と分離Hello Worldの例では、 with節を使用してAda.Text_IOパッケージを追加しました。しかし、 use Ada.Text_IOを同じ行にuse Ada.Text_IOたいと宣言しました。 use Ada.Text_IO宣言は、プロシージャの宣言部分に移動できました。

with Ada.Text_IO;
 
procedure hello_world is
   use Ada.Text_IO;
begin
   Put_Line ("Hello, world!");
end hello_world;

このバージョンでは、 Ada.Text_IOのプロシージャ、関数、およびタイプは、プロシージャ内で直接使用できます。 Ada.Text_IO使用が宣言されているブロックの外側では、呼び出すには点線の表記法を使用する必要があります。たとえば、次のようになります。

with Ada.Text_IO;
 
procedure hello_world is
begin
   Ada.Text_IO.Put ("Hello, ");       --  The Put function is not directly visible here
   declare
      use Ada.Text_IO;
   begin
      Put_Line ("world!");            --  But here Put_Line is, so no Ada.Text_IO. is needed
   end;
end hello_world;

これにより、use ...宣言を必要な場所に分離することができます。

親子関係

Adaプログラムを細分する方法として、パッケージにはいわゆる子供がいるかもしれません。これらもパッケージにすることができます。子パッケージには特別な権限があります。親パッケージのprivate部分の宣言を見ることができます。この特殊な可視性の典型的な使用法の1つは、オブジェクト指向プログラミングで派生型の階層を形成する場合です。

package Orders is
   type Fruit is (Banana, Orange, Pear);
   type Money is delta 0.01 digits 6;
   
   type Bill is tagged private;

   procedure Add
     (Slip   : in out Bill;
      Kind   : in     Fruit;
      Amount : in     Natural);
   
   function How_Much (Slip : Bill) return Money;
   
   procedure Pay
     (Ordered : in out Bill;
      Giving  : in     Money);
   
private
   type Bill is tagged record
      --  ...
      Sum : Money := 0.0;
   end record;
end Orders;

with Orders;先頭に置くAdaユニットwith Orders; Bill型のオブジェクトを宣言してからAddHow_MuchPayオペレーションAdd呼び出すことができます。ただし、 BillのコンポーネントやOrders.Billのコンポーネントは表示されません。完全型定義はOrders プライベート部分に隠されているためです。しかし、完全な定義は子パッケージに隠されているわけではありません。この可視性により、必要に応じて型拡張が容易になります。型がBillから派生した子パッケージで宣言されている場合、この継承型はBillのコンポーネントを直接操作できます。

package Orders.From_Home is
   type Address is new String (1 .. 120);
   
   type Ordered_By_Phone is new Bill with private;
   
   procedure Deliver
     (Ordered : in out Ordered_By_Phone;
      Place   : in     Address);

private
   type Ordered_By_Phone is new Bill with
      record
         Delivered : Boolean := False;
         To        : Address;
      end record;
end Orders.From_Home;

Orders.From_HomeOrders子パッケージです。タイプOrdered_By_PhoneBillから派生し、そのレコードコンポーネントSumを含みます。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow