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 .