Szukaj…


Składnia

  • z Package_Name_To_Include;
  • pakiet New_Package_Name zmienia nazwę Package_To_Rename;
  • użyj Package_Name;
  • pakiet Parent_Name.Child_Name is

Uwagi

Pakiet zapewnia:

  • Hermetyzacja kodu
  • Oddzielna kompilacja
  • Ukryj procedury, funkcje, operatory na typach prywatnych

Podobieństwa lub analogie w innych językach:

Więcej na temat pakietów

W Hello World zapoznałeś się z pakietem Ada.Text_IO i jak go używać do wykonywania operacji we / wy w twoim programie. Paczkami można dalej manipulować, aby wykonywać wiele różnych czynności.

Zmiana nazwy : Aby zmienić nazwę pakietu, użyj renames słowa kluczowego w deklaracji pakietu, jako takiej:

package IO renames Ada.Text_IO;

Teraz, z nową nazwą, możesz używać tej samej notacji kropkowanej dla funkcji takich jak Put_Line (tj. IO.Put_Line ), lub możesz po prostu use jej z use IO . Oczywiście powiedzenie use IO lub IO.Put_Line spowoduje użycie funkcji z pakietu Ada.Text_IO .


Widoczność i izolacja : W przykładzie Hello World umieściliśmy pakiet Ada.Text_IO, używając klauzuli with . Ale zadeklarowaliśmy również, że chcemy use Ada.Text_IO na tej samej linii. Deklaracja use Ada.Text_IO mogła zostać przeniesiona do deklaratywnej części procedury:

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

W tej wersji procedury, funkcje i typy Ada.Text_IO są bezpośrednio dostępne w ramach procedury. Poza blokiem, w którym zadeklarowano użycie Ada.Text_IO , musielibyśmy użyć kropkowanej notacji, aby wywołać, na przykład:

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;

Umożliwia nam to wyodrębnienie deklaracji użytkowania… tam, gdzie są one konieczne.

Relacja rodzic-dziecko

W ramach podziału programów Ada pakiety mogą mieć tak zwane dzieci. Mogą to być również pakiety. Pakiet podrzędny ma specjalne uprawnienia: może wyświetlać deklaracje w części prywatnej pakietu nadrzędnego. Jednym z typowych zastosowań tej specjalnej widoczności jest tworzenie hierarchii typów pochodnych w programowaniu obiektowym.

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;

Każda jednostka Ada, która kieruje with Orders; może zadeklarować obiekty typu Bill a następnie wywołać operacje Add , How_Much i Pay . Nie widzi jednak składników Bill , ani nawet zamówień. Orders.Bill , ponieważ pełna definicja typu jest ukryta w prywatnej części Orders . Pełna definicja nie jest jednak ukryta w pakietach potomnych. Ta widoczność ułatwia rozszerzenie typu w razie potrzeby. Jeśli typ zostanie zadeklarowany w pakiecie potomnym na podstawie Bill , wówczas ten dziedziczący typ może bezpośrednio manipulować komponentami 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 to pakiet potomny Orders . Typ Ordered_By_Phone pochodzi od Bill i zawiera jego składnik rekordu Sum .



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow