pwir2-print.pdf

(113 KB) Pobierz
Programowanie wspólbiezne i rozproszone -- czesc II
Programowanie współbiezne i rozproszone – czesc II
Marcin Szpyrka
Katedra Automatyki
Akademia Górniczo-Hutnicza w Krakowie
2008/09
Programowanie współbiezne i rozproszone – czesc II, c Marcin Szpyrka 2008/09
1
Pakiety – wprowadzenie
– Pakiet jest jedn a z wazniejszych konstrukcji jezyka Ada umozliwiaj ac a grupowanie
deklaracji i definicji, jak równiez ukrywanie szczegółów ich wnetrza.
– Pakiety pozwalaj a na budowanie aplikacji z mniejszych bloków, które mog a byc
oddzielnie kompilowane, grupowane w biblioteki pakietów i wielokrotnie
wykorzystywane.
– Pakiety definiowane s a z dwóch komponentów: specyfikacji okreslaj acej strukture czesci
widocznej (stałe, typy, zmienne, podprogramy) i deklaracje stałych i zmiennych w czesci
prywatnej oraz implementacji (tresci, ciała), zawieraj acej definicje elementów
wymienionych w specyfikacji.
– Specyfikacja i implementacja pakietu mog a byc kompilowane oddzielnie. Mozliwa jest
rekompilacja samej implementacji pakietu, jezeli specyfikacja nie uległa zmianie.
– Zastosowanie pakietów jest równiez podstaw a programowania obiektowo-orientowanego
w jezyku Ada.
Programowanie współbiezne i rozproszone – czesc II, c Marcin Szpyrka 2008/09
2
393671517.012.png 393671517.013.png
Pakiety
package Stack is -- specyfikacja
procedure Push(X : Integer);
function Pop return Integer;
end ;
packagebody Stack is -- implementacja pakietu
Max : constant := 100; -- te zmienne i stałe
S : array (1..Max) of Integer; -- nie s a dostepne
Top : Integer range 0..Max; -- na zewn atrz pakietu
procedure Push(X : Integer) is
begin
Top := Top + 1;
S(Top) := X;
end ;
-- ...
begin -- inicjalizacja
Top := 0;
end ;
Programowanie współbiezne i rozproszone – czesc II, c Marcin Szpyrka 2008/09
3
Pakiety
– Zazwyczaj pakiet zapisywany jest w dwóch plikach: specyfikacja w pliku PLIK.ads, zas
implementacja w pliku PLIK.adb, choc obie czesci mog a wyst apic w czesci deklaracyjnej
dowolnego bloku.
– Czesc inicjalizacyjna pakietu nie jest obowi azkowa. Jezeli w specyfikacji pakietu znajduje
sie specyfikacja podprogramu, to jego definicja musi sie znalezc w ciele pakietu.
– Mozna zdefiniowac podprogram w ciele pakietu bez podawania jego specyfikacji w
specyfikacji pakietu. Podprogram taki pozostaje niedostepny z zewn atrz pakietu i moze
byc wywołany tylko z czesci deklaracyjnej pakietu lub z wnetrza innych podprogramów w
tym pakiecie.
– Czas zycia wszystkich elementów zadeklarowanych wewn atrz pakietu jest taki sam jak
czas zycia pakietu.
– W specyfikacji pakietu mog a sie takze znalezc deklaracje zmiennych, definicje stałych
i typów. Specyfikacja pakietu stanowi opis elementów pakietu dostepnych dla
uzytkownika (poza czesci a private).
Programowanie współbiezne i rozproszone – czesc II, c Marcin Szpyrka 2008/09
4
393671517.014.png 393671517.015.png 393671517.001.png
Pakiety złozone tylko ze specyfikacji
Pakiet definiowany na poziomie jednostki bibliotecznej moze miec implementacje tylko wtedy,
gdy jest ona wymagana, np. konieczna jest implementacja wyspecyfikowanych podprogramów.
Wiele pakietów składa sie tylko ze specyfikacji.
package Days is
type Day is (Mon, Tue, Wed, Thu, Fri, Sat, Sun);
subtype Weekday is Day range Mon .. Fri;
Tomorrow : constantarray (Day) of Day :=
(Tue, Wed, Thu, Fri, Sat, Sun, Mon);
NextWorkDay : constantarray (Weekday) of Weekday :=
(Tue, Wed, Thu, Fri, Mon);
end ;
Programowanie współbiezne i rozproszone – czesc II, c Marcin Szpyrka 2008/09
5
Typy prywatne
Pakiety mog a wykorzystywac prywatne typy danych, dzieki którym mozna ukryc przed
uzytkownikiem szczegóły implementacyjne pakietu. Pełna definicja typu znajduje sie wówczas
w czesci prywatnej pakietu i nie jest dostepna z zewn atrz. W takiej sytuacji bezposredni dostep
do danych typu prywatnego jest ograniczony do operacji przypisania i porównania (= lub /=)
oraz do operacji zamieszczonych w specyfikacji interfejsu pakietu (czesc przed słowem
private ).
package ComplexNumbers is
type Complex isprivate ;
I : constant Complex; -- !!! tu jeszcze nie ma wartosci
function "-"(X : Complex) return Complex;
function "+"(X, Y : Complex) return Complex;
-- ... + (jednoargumentowy), -, * , /
function Comp(R, I : Float) return Complex;
function Re(X : Complex) return Float;
function Im(X : Complex) return Float;
private
type Complex isrecord
RePart, ImPart : Float;
endrecord ;
I : constant Complex := (0.0, 1.0);
end ;
Programowanie współbiezne i rozproszone – czesc II, c Marcin Szpyrka 2008/09
6
393671517.002.png 393671517.003.png 393671517.004.png
Typy prywatne
packagebody ComplexNumbers is
-- ...
function "+"(X, Y : Complex) return Complex is
begin
return (X.RePart + Y.RePart, X.ImPart + Y.ImPart);
end ;
function Comp(R, I : Float) return Complex is
begin
return (R, I);
end ;
-- ...
end ;
use ComplexNumbers;
C, D : Complex;
C := Comp(1.5, -0.7);
D := C + I;
Programowanie współbiezne i rozproszone – czesc II, c Marcin Szpyrka 2008/09
7
Typy prywatne
– Typ prywatny miedzy swoj a deklaracj a, a pełn a implementacj a jest nie w pełni
zdefiniowany. Mozemy z jego uzyciem definiowac tzw. odroczone stałe:
I : constant Complex;
których pełna definicja (wraz z okresleniem wartosci) musi sie pojawic w czesci prywatnej
po pełnej definicji typu.
I : constant Complex := (0.0, 1.0);
– Mozna definiowac podtypy dla nie w pełni zdefiniowanych typów, jak równiez
specyfikowac podprogramy, które przyjmuj a argumenty, lub zwracaj a wartosci takich
typów.
– Nie mozna definiowac zmiennych tego ani alokowac obiektów takich typów.
Programowanie współbiezne i rozproszone – czesc II, c Marcin Szpyrka 2008/09
8
393671517.005.png 393671517.006.png 393671517.007.png 393671517.008.png
Typy, klasy, operacje podstawowe
Klasy
type B isnew A;
Tak zdefiniowany typ B nazywamy typem pochodnym typu A , zas typ A nazywamy typem
rodzicielskim (mówimy o typach nieznakowanych). Zbiór wartosci typu pochodnego jest kopi a
zbioru wartosci typu rodzicielskiego.
Klas a nazywamy typ wraz z jego wszystkimi typami pochodnymi.
Operacje podstawowe
Do operacji podstawowych zaliczmy:
– predefiniowane operacje: przypisanie, porównanie, atrybuty itp.;
– dla typów pochodnych: operacje podstawowe odziedziczone od rodzica;
– dla typów deklarowanych w specyfikacji pakietu: podprogramy, które przyjmuj a argument
lub zwracaj a wartosc tego typu i zostały zadeklarowane w tym samym pakiecie (wł aczaj ac
w to czesc prywatn a).
Za operacje podstawowe uwazane s a równiez literały typu wyliczeniowego, gdyz s a one
traktowane jako bezargumentowe funkcje zwracaj ace wartosc tego typu. Przykładowo dla typu
Boolean operacjami podstawowymi s a stałe False i True .
Programowanie współbiezne i rozproszone – czesc II, c Marcin Szpyrka 2008/09
9
Operacje podstawowe – cd
– Operacje podstawowe odziedziczone od rodzica mog a zostac przedefiniowane, w tym
samym bloku deklaracyjnym, w którym definiowany jest nowy typ.
– Nie mozna definiowac typu pochodnego od typu prywatnego, zanim typ prywatny nie
zostanie w pełni zdefiniowany. Jezeli definiuje typ pochodny od typu prywatnego, w tym
samym bloku deklaracyjnym co rodzicielski typ prywatny, to dziedziczone s a tylko te
operacje podstawowe, które zadeklarowano przed deklaracj a typu pochodnego.
– Jezeli kilka typów ma wspólny typ rodzicielski (niekoniecznie bezposredni), to mozna
rzutowac wartosci jednego typu na drugi.
type Apples isnew Integer;
type Oranges isnew Integer;
NoOfApples : Apples;
NoOfOranges : Oranges;
-- ...
NoOfApples := NoOfApples + 1;
NoOfOranges := NoOfOranges + 1;
NoOfApples := NoOfOranges;
-- niepoprawne
NoOfApples := Apples(NoOfOranges);
Programowanie współbiezne i rozproszone – czesc II, c Marcin Szpyrka 2008/09
10
393671517.009.png 393671517.010.png 393671517.011.png
Zgłoś jeśli naruszono regulamin