サーチ…
構文
- 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型のオブジェクトを宣言してからAdd 、 How_Much 、 Payオペレーション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_HomeはOrders子パッケージです。タイプOrdered_By_PhoneはBillから派生し、そのレコードコンポーネントSumを含みます。