82105 ullman255 (2)

82105 ullman255 (2)



516 S. ZORIENTOWANE OBIEKTOWO JEŻYKI ZAPYTAŃ

1)    B*UNCTION AdresADT {: s CHAR (50),    : c CHAR (2)

RETURNS AdresADT;

2)    :a AdresADT;

BEGIN

3}    : s := adresADT{)    ;

4)    :a.ulica := :s;

5)    :a.miastQ := :c;

6)    RETURN :a;

ENC;

7} FUNCTION adrR(:al AdresADT, :a2 AdresADT)

RETURNS BOOLEAN;

8)    RETURN (:al.ulica = :a2.ulica AND

:al.miasto = a2.miasto);

9)    FUNCTION adrMK(:al AdresADT, :a2 AdresADT)

RETURNS BOOLEAN;

10)    RETURN ({:al.miasto < a2.miasto) OR

(:ai.miasto = :a2.miasto)

AND :al.ulica < a2.ulica));

11)    FUNCTION całyAdres{:a AdresADT) RETURNS CHAR(82);

12}    ;z CHAR(10);

BEGIN

13)    :z = znajdźKod(:a.ulica, :a.miasto);

14)    RETURN(:a.ulica II ' ' II

:a.miasto |    ' 'II :z);

F.ND;

RYSUNEK 8.19 Niektóre funkcje adresu A OT

rzonyra, ponieważ mają one inne argumenty. A więc nie można zinterpretować wywołania w wierszu 3) jako wywołania rekurencyjnego. W wierszu 4) wartość pierwszego argumentu zostaje przypisana składowej ulica obiektu a, a w wierszu 5) określa się wartość składowej miasto obiektu a jako przypisanie wartości drugiego argumentu. W końcu, w wierszu 6) obiekt a staje się wynikiem działania funkcji.

W wierszach 7) i 8) definiuje się operator równości dla obiektów typu AdresADT. Na rysunku 8.17 w wierszu 4) określono, że ten operator ma się nazywać adrR, a więc stosujemy tutaj tę nazwę. Treść jego jest prosta: zwraca on wartość IRUE wtedy i tylko wtedy, gdy są identyczne wartości obu składowych w dwóch obiektach. Jest on zatem taki sam jak równość domniemana i można w związku /. tym zdefiniować go tak samo, jak zdefiniowano równość w przykładzie 8.31.

W wierszach 9) i 10) zapisano deklarację operatora <, czyli funkcji adrMN Określa się tutaj, że pierwsz>r adres jest mniejszy od drugiego, jeśli miastc z pierwszego adresu poprzedza leksykograficznie miasto z drugiego adresi (w znaczeniu alfabetycznym). Jeśli miasta są te same. to porównuje się ulice.

W wierszach od 11) do 14) definiuje się funkcję całyAdres, która ni podstawie obiektu ty pu AdrADT zwraca pełny adres, tzn. ulicę, miasto oraz S - cyfrowy kod pocztowy (wraz z myślnikiem). W wierszu 12) została zade klarowana zmienna lokalna : z, w której przechowuje się kod pocztowy W wierszu 13) jest wywołana funkcja znajdźKod. Jest to funkcja zewnętrz na, która ma dwa argumenty: ulicę i miasto, Postać deklaracji tej funkcji zewnętrznej zostanie omówiona w p. 8.6.3.

Funkcja znajdźKod zwraca wartość kodu pocztowego określonego adresu, a procedura może być bardzo skomplikowana, z przeszukiwaniem innej bazy' danych włącznie. Nie będziemy pisać definicji tej procedury. W końcu w wierszu 14) konkatenujemy adres zapisany w obiekcie : a z kodem pocztowym zapisanym w : z. Między składowymi adresu umieściliśmy spacje, pc to by je od siebie odseparować.

8.6.3. Funkcje zewnętrzne

Typy ADT mogą zawierać również metody, które zapisuje się w pewnym języku podstawowym, niekoniecznie w $QL3. W takich sytuacjach w definicji typu ADT umieszcza się tylko sygnaturę funkcji oraz informację o języku, w którym jest ona określona. Postać deklaracji zewnętrznej jest następująca:

DEC LA RE r.x TERMA! <nazwa funkcji> <sygnatura>

LAMGUAGE <nazwa języka>

PRZYKŁAD 8.33

Aby skorzystać z funkcji znajdźKod, którą zdefiniowano w przykładzie 8.32, trzeba ją zadeklarować w definicji typu AdresADT. Funkcja la ma dwa parametry typu CHARACTER o długościach odpowiednio: 50 i 20, a zwraca jeden wynik, który- jest napisem o długości 10. Poniżej przedstawiamy poprawną deklarację funkcji:

DECLARF. EX TE RN AL znajdźKod

CHAR(50) CHAR(20} RETURNS CHAR(10)

LANGUAGE C;

Określenie języka jako C oznacza, że adres argumentu będzie przekazany do funkcji znajdźKod w postaci właściwej dla programów zapisanych w C.


Wyszukiwarka

Podobne podstrony:
42460 ullman241 (2) 488 8. ZORIENTOWANE OBIEKTOWO JĘZYKI ZAPYTAŃ Korzystamy tutaj z podzapytania po
24504 ullman238 (2) 482 S ZORIENTOWANE OBIEKTOWO JĘZYKI ZAPYTAŃ T cych klauzulę WHERE. Te nazwiska s
70029 ullman243 (2) 492 8. ZORIENTOWANE OBIEKTOWO JĘZYKI ZAPYTAŃ lect-from-whcre; przedstawiono ją n
73187 ullman254 (2) 514 s zorientowani: obiektowo języki zapytań traktowano by jako równe, jeśli wyg
ullman247 (2) :>uu 8. ZORIENTOWANE OBIEKTOWO JĘZYKI ZAPYTAŃ8.5.1. Typ wiersza W języku SQL3 można
ullman250 (2) 506 8 ZORIENTOWANE OBIEKTOWO JEŻYKI ZAPYTAŃ która relacja jest relacją R? W rozpatry w
48057 ullman236 (2) 478 8 ZORIENTOWANE OBIEKTOWO JĘZYKI ZAPYTAŃ8.2.2. System typów Struktura typów w
ullman249 (2) 504 fi ZORIENTOWANE OBIEKTOWO JĘZYKI ZAPYTAŃ jako referencja. Rozpoczynamy od zdefinio

więcej podobnych podstron