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
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
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
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
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
Plik z chomika:
sliwak
Inne pliki z tego folderu:
ada-wyklad.pdf
(179 KB)
Ada2005_2.pdf
(117 KB)
8791062-Ada-Programming.pdf
(2742 KB)
tomasz_szmuc_-_programowanie_systemow_czasu_rzeczywistego-_wyklad.pdf
(877 KB)
Programy zajeb.docx
(24 KB)
Inne foldery tego chomika:
! 2015
! 2016
! 2016 automatyka
! 2018
! MATURA FIZYKA
Zgłoś jeśli
naruszono regulamin