
Jednostka programowa
Pakiet
W postaci pakietu można zebrać w jednym miejscu procedury i funkcje operujące na danych.
Opis pakietu podzielony jest na dwie części:
W poniższym przykładzie zdefiniowaliśmy pakiet Counter udostępniający procedurę Increment, zwiększającą wartość licznika, i funkcję Get, służącą do odczytywania bieżącej wartości licznika.
Plik: counter.ads
Specyfikacja pakietu w języku Ada ma postać:
Po słowie kluczowym private można zamieścić niezbędne deklaracje, które nie powinny być widoczne na zewnątrz pakietu.
Zmienna o identyfikatorze Counter, zdefiniowana w części prywatnej pakietu, może mieć taką samą nazwę jak cały pakiet. Ich rozróżnienie wynika z kontekstu użycia tego identyfikatora.
W naszym przykładzie zadeklarowano procedurę Increment i funkcję Get podając jedynie ich nagłówki. Ich treść znajduje się w pliku zawierającym treść pakietu:
Plik: counter.adb
W języku Ada treść pakietu ma postać:
W treści pakietu muszą być podane definicje wszystkich procedur i funkcji jakie zadeklarowano w specyfikacji pakietu.
Treścią procedury Increment jest instrukcja przypisująca zmiennej Counter nową wartość, o jeden większą od poprzedniej.
Do przetestowania pakietu Counter zdefiniowaliśmy procedurę Test_Counter:
Plik: test_counter.adb
W powyższej procedurze użyliśmy operatora & do połączenia dwóch łańcuchów znaków. Każdy standardowy typ, w tym użyty przez nas typ Natural składający się z nieujemnych wartości całkowitych, posiada atrybut Image dostarczający łańcuch znaków reprezentujący wartość danego typu.
Kompilacja przykładu:
Wynik uruchomienia:
Opis pakietu podzielony jest na dwie części:
- specyfikacja -- umieszczona w pliku z rozszerzeniem .ads
- treść -- umieszczona w pliku z rozszerzeniem .adb
W poniższym przykładzie zdefiniowaliśmy pakiet Counter udostępniający procedurę Increment, zwiększającą wartość licznika, i funkcję Get, służącą do odczytywania bieżącej wartości licznika.
package Counter is
procedure Increment;
function Get return Natural;
private
Counter : Natural := 0;
end Counter;
Plik: counter.ads
Specyfikacja pakietu w języku Ada ma postać:
package nazwa is
deklaracje
private
deklaracje
end nazwa;
Po słowie kluczowym private można zamieścić niezbędne deklaracje, które nie powinny być widoczne na zewnątrz pakietu.
Zmienna o identyfikatorze Counter, zdefiniowana w części prywatnej pakietu, może mieć taką samą nazwę jak cały pakiet. Ich rozróżnienie wynika z kontekstu użycia tego identyfikatora.
W naszym przykładzie zadeklarowano procedurę Increment i funkcję Get podając jedynie ich nagłówki. Ich treść znajduje się w pliku zawierającym treść pakietu:
package body Counter is
procedure Increment is
begin
Counter := Counter + 1;
end Increment;
function Get return Natural is
begin
return Counter;
end Get;
end Counter;
Plik: counter.adb
W języku Ada treść pakietu ma postać:
package body nazwa is
treść
end nazwa;
W treści pakietu muszą być podane definicje wszystkich procedur i funkcji jakie zadeklarowano w specyfikacji pakietu.
Treścią procedury Increment jest instrukcja przypisująca zmiennej Counter nową wartość, o jeden większą od poprzedniej.
Do przetestowania pakietu Counter zdefiniowaliśmy procedurę Test_Counter:
with Counter;
with Ada.Text_IO;
procedure Test_Counter is
begin
Ada.Text_IO.Put_Line ("Counter = " & Natural'Image (Counter.Get));
Counter.Increment;
Ada.Text_IO.Put_Line ("Counter = " & Natural'Image (Counter.Get));
Counter.Increment;
Counter.Increment;
Ada.Text_IO.Put_Line ("Counter = " & Natural'Image (Counter.Get));
end Test_Counter;
Plik: test_counter.adb
W powyższej procedurze użyliśmy operatora & do połączenia dwóch łańcuchów znaków. Każdy standardowy typ, w tym użyty przez nas typ Natural składający się z nieujemnych wartości całkowitych, posiada atrybut Image dostarczający łańcuch znaków reprezentujący wartość danego typu.
Kompilacja przykładu:
$ gnatmake test_counter.adb
gcc -c test_counter.adb
gcc -c counter.adb
gnatbind -x test_counter.ali
gnatlink test_counter.ali
Wynik uruchomienia:
$ ./test_counter
Counter = 0
Counter = 1
Counter = 3
$