background image

 

 

Typy prywatne 1

1.

Typy prywatne

W Adzie 

typy prywatne

 (

private types

) służą do 

bezpiecznego udostępniania danych 
zdefiniowanych w pakiecie, z którego korzysta 
klient tego pakietu.

Typy prywatne opisują stopień widzialności 

danych pomiędzy pakietem i klientem pakietu.

W przypadku typu prywatnego program kliencki 

dysponuje zdefiniowaną wstępnie 

instrukcją 

podstawienia

 := i zdefiniowaną wstępnie 

relacją nierówności

 /=, która zanegowana 

jest równoważna 

relacji równości

 =.

background image

 

 

Typy prywatne 2

Przykład 1.

 Wektory_2D

Część pakietu do słowa kluczowego 

private

 

jest udostępniona programowi klienckiemu. W 

tej części zadeklarowano typ Wektor_2d i stałą 

Zero tego typu, przy czym deklaracje te są 

niepełne

Typ poza nazwą nie ma opisu, a stała nie ma 

nadanej wartości. 

Te szczegóły implementacyjne określone są w 

części prywatnej

 i dzięki temu 

są 

niewidoczne

 w programie klienckim.

W części prywatnej podana jest pełna 

deklaracja typu Wektor_2d oraz oparte na niej 

wartościowanie stałej Zero. 

background image

 

 

Typy prywatne 3

Tego rodzaju stałą nazywamy 

stałą odłożoną

 

(

deferred constant

). 

Klient pakietu Wektory_2D może używać danych 
typu Wektor_2D mając zdefiniowane wstępnie 
instrukcję podstawienia i relację równości. Poza 
tym, klient może korzystać z operacji dodawania 
"+"  wektorów i mnożenia "*" wektora przez 
liczby rzeczywiste.
Pakiet udostępnia też operacje wejścia/wyjścia w 
postaci procedur
Czytaj_Wektor_2D i Wypisz_Wektor_2D
Pierwsza z nich jest konstruktorem danych typu 
Wektor_2D, natomiast nie zdefiniowano w 
pakiecie selektora oraz zapytań.

background image

 

 

Typy prywatne 4

W programie klienckim pakietu udostępniającego 

typ prywatny można deklarować stałe i zmienne 

tego typu w zwykły sposób, ale 

nie można 

zmiennym

 nadawać wartości początkowych 

odwołując się szczegółów implementacyjnych typu 

prywatnego.

Następująca deklaracja 

jest błędna

:

A : Wektor_2D := (1 => 1.0, 2 => 2.0);

poprawna

 jest deklaracja

A : Wektor_2D := Zero;
Obiekty zadeklarowane w części prywatnej pakietu 

definicyjnego 

są dostępne

 w części 

implementacyjnej.

Przykładem jest stała Zero z pakietu Wektory_2D.

background image

 

 

Typy prywatne 5

W pakiecie można wyróżnić trzy logicznie części:
1.

Część widoczną

 (

visible part

) dla klienta 

pakietu określającą logiczny interfejs między 

klientem, a pakietem

2.

Część prywatną

 (

private part

), która określa 

szczegóły implementacji tego interfejsu

3.

Część implementacyjną

 (

implementation 

part

), szczegóły implementacyjne obiektów 

udostępnianych przez część widoczną.

W części widocznej 

nie można

 definiować 

zmiennych i alokować pamięci dla danych typu 

prywatnego, 

można

 natomiast deklarować stałe 

odłożone, inne typy, podtypy i nagłówki 

podprogramów z parametrami typu prywatnego.

background image

 

 

Typy prywatne 6

Zadanie 1. 

Napisać funkcje Pierwsza_Skladowa 

i Druga_Skladowa obliczające odpowiednio 

pierwszą i drugą składową wektora typu 

Wektor_2D. Założyć przy tym, że pełna 

deklaracja tego typu ma postać

type

 Wektor_2D 

is record

  

Pierwsza_Wsp : Float;

  

Druga_Wsp : Float;

end record

;

Zadanie 2. 

Napisać funkcję Konstruktor_2d 

konstruującą daną typu Wektor_2D 

zdefiniowanego wyżej. 
Wykorzystać zasoby pakietu Odporne_Wejscie.

background image

 

 

Typy prywatne 7

Zadanie 3. 

Przyjmując definicję typu 

Wektor_2D jak w zadaniu 1, napisać funkcje 
"+", "*", "*" służące odpowiednio do: 
obliczania sumy dwóch wektorów i 
obliczania iloczynu wektora przez skalar 
rzeczywisty.

Zadanie 4. 

Przyjmując definicję typu 

Wektor_2D jak w zadaniu 1, napisać pełne 
deklaracje stałych Wersor_Pierwszy i 
Wersor_Drugi, które reprezentują 
odpowiednio wektory: 

1

(1,0)

=

e

2

(0,1)

=

e

background image

 

 

Typy prywatne 8

2. Typy prywatne ograniczone


Document Outline