Typy prywatne 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 =.
Typy prywatne 2 Przykład 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.
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ń.
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); a 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.
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.
Typy prywatne 6 Zadanie 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 Napisać funkcję Konstruktor_2d konstruującą daną typu Wektor_2D zdefiniowanego wyżej. Wykorzystać zasoby pakietu My_Robust_Input.
Typy prywatne 7 Zadanie Przyjmując definicję typu Wektor_2D jak w zadaniu poprzednim, napisać funkcje "+", "*", "*" służące odpowiednio do: obliczania sumy dwóch wektorów i obliczania iloczynu wektora przez skalar rzeczywisty. Zadanie Przyjmując definicję typu Wektor_2D jak w zadaniu poprzednim, napisać pełne deklaracje stałych Wersor_Pierwszy i Wersor_Drugi, które reprezentują odpowiednio wektory:
Typy prywatne 8 Typy prywatne ograniczone