Sök…


Syntax

  • med Package_Name_To_Include;
  • paket New_Package_Name byter namn på Package_To_Rename;
  • använd Package_Name;
  • paket Parent_Name.Child_Name är

Anmärkningar

Paketet tillhandahåller:

  • Kodkapsling
  • Separat sammanställning
  • Dölj procedurer, funktioner, operatörer på privata typer

Likheter eller liknande på andra språk:

Mer om paket

I Hello World introducerades du paketet Ada.Text_IO och hur du använder det för att utföra I / O-operationer i ditt program. Paket kan manipuleras ytterligare för att göra många olika saker.

Byt namn : För att byta namn på ett paket använder du nyckelordet renames i en paketdeklaration, som sådan:

package IO renames Ada.Text_IO;

Nu, med det nya namnet, kan du använda samma prickade notation för funktioner som Put_Line (dvs. IO.Put_Line ), eller så kan du bara use den med use IO . Att säga use IO eller IO.Put_Line kommer IO.Put_Line att använda funktionerna från paketet Ada.Text_IO .


Synlighet och isolering : I Hello World- exemplet inkluderade vi paketet Ada.Text_IO med en with klausul. Men vi förklarade också att vi ville use Ada.Text_IO på samma linje. use Ada.Text_IO deklarationen kunde ha flyttats till den deklarativa delen av förfarandet:

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

I den här versionen är procedurerna, funktionerna och typerna av Ada.Text_IO direkt tillgängliga i proceduren. Utanför blocket där användningen Ada.Text_IO deklareras, måste vi använda den prickade notationen för att åberopa, till exempel:

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;

Detta gör att vi kan isolera användningsdeklarationerna där de är nödvändiga.

Förhållande mellan förälder och barn

Som ett sätt att dela upp Ada-program kan paket ha så kallade barn. Det kan också vara paket. Ett barnpaket har ett speciellt privilegium: det kan se deklarationerna i föräldrapaketets privata del. En typisk användning av denna speciella synlighet är när man bildar en hierarki av härledda typer i objektorienterad programmering.

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;

Alla Ada-enheter som leds av with Orders; kan deklarera objekt av typen Bill och sedan ringa operationer Add , How_Much och Pay . Det ser emellertid inte komponenterna i Bill , inte ens i Orders.Bill , eftersom definitionen av full typ är dold i den privata delen av Orders . Den fullständiga definitionen är dock inte dolda barnpaket. Denna synlighet underlättar typförlängning vid behov. Om en typ deklareras i barnpaketet som härrör från Bill , kan denna arvtyp manipulera Bill komponenter direkt.

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 är ett Orders.From_Home med Orders . Ordered_By_Phone är härledd från Bill och innehåller dess postkomponent Sum .



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow