APP 16 Ogolne Jednostki Programowe

background image

Ogólne jednostki programowe 1

Przykład.

Procedura Wymien

W Adie parametry formalne i parametry aktualne

podprogramów muszą być zgodne.

Procedura wymieniająca wartości zmiennych typu

Natural

procedure

Wymien_Natural (N1, N2 :

in out

Natural)

is

Temp: Natural;

begin

Temp := N1;
N1 := N2;
N2 := Temp;

end

Wymien_Natural;

background image

Ogólne jednostki programowe 2

Ta sama procedura wymieniająca wartości zmiennych

typu Float

procedure

Wymien_Float (F1, F2 :

in out

Float)

is

Temp: Float;

begin

Temp := N1;
N1 := N2;
N2 := Temp;

end

Wymien_Float;

Przy wymianie danych innych typów musimy pisać

nowe procedury i nigdy nie mamy pewności, że te

które już napisaliśmy wyczerpią wszystkie aktualne

i przyszłe potrzeby programów klienckich.

background image

Ogólne jednostki programowe 3

Wszystkie procedury Wymien możemy umieścić w

pakiecie, np. Procedury_Wymiany, ale po
włączeniu do niego procedury obsługującej
kolejny typ danych, musimy dokonać ponownej
kompilacji tego pakietu.

Podejście takie jest

nieoszczędne, nieeleganckie i

zawodne

, bo w przypadku wykrycia i usunięciu

błędów w jednej z testowanych procedur możemy
zapomnieć o poprawie jednej, lub kilku
pozostałych.

Zadanie.

Czy procedury Wymien_Natural i

Wymien_Float mogą obydwie mieć nazwę Wymien?

background image

Ogólne jednostki programowe 4

Ada umożliwia opracowanie jednej procedury

ogólnej

(

generic

), która po odpowiednim

przystosowaniu, nazywanym

konkretyzacją

(

instantation

) do aktualnie używanego typu

danych może być użyta w programie klienckim

wymieniającym wartości zmiennych.

Procedura ogólna wymieniająca wartości typu

Typ_Danych może mieć postać:

procedure

Wymien_Ogolnie (W1, W2 :

in out

Typ_Danych)

is

Temp: Typ_Danych;

begin

Temp := N1;
N1 := N2;
N2 := Temp;

end

Wymien_Ogolnie;

background image

Ogólne jednostki programowe 5

Typy jako parametry formalne jednostki ogólnej
W tekście programu musimy umieścić sekcję ogólną,

w której deklarujemy nazwę typu będącego typem
parametrów procedury Wymien_Ogolnie,
podajemy nagłówek tej procedury, a potem całą jej
deklarację. Piszemy:

-- Specyfikacja ogólnej procedury wymiany

generic

type

Typ_Danych

is private

;

procedure

Wymien_Ogolnie (W1, W2 :

in out

Typ_Danych);

-- Treść ogólnej procedury wymiany
-- Tutaj wstawiamy treść pokazaną na poprzednim
-- slajdzie

background image

Ogólne jednostki programowe 6

Kompilacja tej procedury daje kod gotowy do jej

konkretyzacji w programie klienckim, lub w

dalszej części naszego programu, w którym

pojawiła się sekcja ogólna.

W przypadku typów Integer i Natural

konkretyzacje mogą mieć postać:

procedure

Wymien_Integer

is new

Wymien_Ogolnie

(Typ_Danych => Integer);

procedure

Wymien_Float

is new

Wymien_Ogolnie

(Typ_Danych => Float);

Zadanie.

Czy typ Typ_Danych zadeklarowany w

sekcji ogólnej jako

private

, może być typem

prywatnym ograniczonym –

limited private

?

Uzasadnij odpowiedź.

background image

Ogólne jednostki programowe 7

Przykład.

Program

Wymiana_Ogolna

W programie sekcja ogólna i treść procedury

ogólnej znajdują się w części deklaracyjnej
programu.

Drugim rozwiązaniem jest umieszczenie

procedury ogólnej w pakiecie, którego część
publiczna zawiera deklarację typu Typ_Danych i
nagłówek naszej procedury Wymien_Ogolnie

Przykład.

Pakiet

Wymiana

Program

Wymiana_Ogolna_Import

background image

Ogólne jednostki programowe 8

Definicja.

Jednostka ogólna

(

generic unit

) jest

wzorcem

(

template

) procedury, funkcji, albo pakietu.

Jednostka ogólna definiowana jest z parametrami

formalnymi, którymi zazwyczaj są typy danych, ale
mogą nimi być też nazwy procedur i funkcji.

Podprogramy jako parametry formalne

jednostki ogólnej

Przykład.

Weźmy pod uwagę funkcję obliczającą wartość

większego z jej dwóch argumentów typu Integer.

background image

Ogólne jednostki programowe 9

function

Maksimum (A, B :

in

Integer)

return

Integer

is

Wynik : Integer;

begin

if

A > B

then

Wynik := A;

else

Wynik := B;

end if

;

return

Wynik;

end

Maksimum;

Chcemy skonstruować ogólną funkcję Maksimum

wyznaczającą wartość większego z dwóch jej

argumentów, niezależnie od tego jakiego są

typu. Możemy oczywiście użyć ogólnego typu

parametrów formalnych, aby poinformować

kompilator, że konkretyzacja może dotyczyć

dowolnego typu.

background image

Ogólne jednostki programowe 10

Nie jest to jednak w rozpatrywanym przypadku

informacja wystarczająca ponieważ

nie wszystkie

typy mogące konkretyzować naszą funkcję ogólną
mają zdefiniowaną wstępnie relację większości,
używaną w części operacyjnej tej funkcji.

Możemy oczywiście napisać odpowiednią funkcję

obliczającą wartość tej relacji w przypadku
podanego w konkretyzacji typu, ale kompilator

musi

posiadać informację, że ma tej funkcji użyć.

W sekcji ogólnej umieszcza się informację, że
taka funkcja istnieje.

Piszemy:

background image

Ogólne jednostki programowe 11

Sekcja ogólna

generic

type

Typ_Danych

is private

;

with function

Wiekszy(L, R :

Typ_Danych)

return

Boolean;

function

Maksimum (W1, W2 : Typ_Danych)

return

Typ_Danych;

background image

Ogólne jednostki programowe 12

Treść funkcji ogólnej

function

Maksimum (W1, W2 : Typ_danych)

return

Typ_danych

is

begin

if

Wiekszy(W1, W2)

then

return

W1;

else

return

W2;

end if

;

end

Maksimum;

background image

Ogólne jednostki programowe 13

Konkretyzacja w przypadku typu standardowego

Float może mieć postać:

function

Maksimum_Float

is new

Maksimum

(Typ_Danych => Float, Wiekszy => ">");

Trzeba jednak pamiętać, że kompilator

nie może

sprawdzić

, czy przy konkretyzacji stosujemy

właściwą funkcję wyznaczającą wartość relacji
Wiekszy.

Moglibyśmy

również napisać

function

Maksimum_Float

is new

Maksimum

(Typ_Danych => Float, Wiekszy => "<");

background image

Ogólne jednostki programowe 14

Przykład.

Program

Obliczanie_Maksimum


Document Outline


Wyszukiwarka

Podobne podstrony:
APP Ogolne Jednostki Programowe
APP Zadania 12 Jednostki Ogolne
16 Ogolne zasady leczenia ostrych zatrucid 16903 ppt
F-16 dla PSP program i ofset
16 Problem jednosci nauki
Założenia ogólne do programu praktyki, BUDOWNICTWO PCZ I rok, Geodezja
16 Ogolne zasady leczenia ostrych zatrucid 16903 ppt
Szkol Ogólne Zakładowy program szkolenia
app 16
Nowy Dokument programu Microsoft Office Word (16)
12 - 16 z WIZYTĄ W SADZIE, EDUKACJA, Plany pracy - wg. nowej podstawy programowej
Program instruktażu ogólnego, BHP, Szkolenie


więcej podobnych podstron