b ZUKJfcN J UW ANI-. OBIEKTOWO JtjZYKl ZAPYTAŃ
W bieżącym rozdziale będziemy kontynuować rozważania z rozdziału 2 na temat języka ODL. Najpierw opiszemy różne sposoby współdziałania klas ODL z szerszym środowiskiem, w którym są one zanurzane. Potem rozważymy sprawę „zasięgu’’ klasy, która w języku OQL odgrywa rolę podobną do roli, jaką w SQL odgrywa relacja.
Wkrótce przekonamy się, że język OQL, podobnie jak język SQL, umożliwia zapis działań związanych z relacjami i zbiorami. Jednak często trzeba wyrazić w języku działania dotyczące innego typu obiektów. Jeśli bowiem na przykład obiekty są dokumentami, to warto mieć dostęp do funkcji, która odnajduje w nich pewne słowa kluczowe. Jeśli z kolei obiektami są mapy lub inne obrazy, to warto mieć możliwość wyświetlania ich w określony sposób. Nawet na danych o konwencjonalnej strukturze rekordów, takich jak dane w przykładzie filmowym, można wykonać dodatkowe działania, na przykład generowanie wykresu określającego dla danej gwiazdy filmowej liczbę filmów, w których ona wystąpiła w poszczególnych latach.
W systemie SQL takie działania trzeba programować w podstawowym języku programowania, np. w C, w którym osadza się instrukcje SQL. Wartości między zmiennymi SQL a zmiennymi programu podstawowego przekazuje się, korzystając z mechanizmu opisanego w podrozdziale 7.1.
Powiązanie definicji ODL z językiem podstawowym jest łatwiejsze. Zakłada się, że językiem podstawowym jest język zorientowany obiektowo, np. C++ lub Smalltalk. Deklaracje wyrażane w języku ODL są na tyle podobne do deklaracji w każdym języku obiektowym, że można je bezpośrednio tłumaczyć z ODL. A ponadto zmienne z języka podstawowego, które odpowiadają obiektom, mogą bezpośrednio reprezentować obiekty występujące w instrukcjach ODL1.
W ODL występuje jeszcze (poza atrybutami i związkami) inny rodzaj elementów: metody, które ułatwiają łączenie języka podstawowego z deklaracjami ODL oraz zapytaniami OQL. Metoda jest to funkcja pow iązana z klasą. Metoda działa na obiekcie, a może mieć poza nim jeszcze inne argumenty. Przekonamy się, że w języku OQL metod można używać nieomal tak samo jak atrybutów klasy'.
W języku ODL można deklarować nazwy metod związanych z klasami oraz typy wejścia/wyjścia tych metod. Deklaracje te nazywa się sygnaturami i są one odpowiednikami deklaracji funkcji w C lub C++ (w odróżnieniu od definicji funkcji, która jest kodem implementującym funkcję). Kod metody można zapisać w języku podstawowy m, nie stanow i on elementu ODL.
Dlaczego sygnatury?
Zaleta wprowadzenia sygnatur polega na tym, że w trakcie implementowania schematu w języku programowania można automatycznie sprawdzać, czy' implementacja pasuje do projektu zawartego w schemacie. Oczywiście nie można w ten sposób kontrolować, czy implementowane funkcje działają zgodnie ze swoim znaczeniem, ale można chociaż sprawdzać poprawność parametrów co do ich liczby i typu.
Przypomnijmy tutaj, Ze typy zmiennych z języka podstawowego, takie jak np. typ całkowity, nic pasują do podstawowych typów danych SQL: do krotek i relacji. A zatem łączenie SQf. i języka podstawowego jest z natury rzeczy niewygodne, była o tym mowa w podrozdziale 7.1.
Deklaracje metod występują w deklaracji interfejsu razem z atrybutam i związkami. Jak to się dzieje zazwyczaj w językach wysokiego poziomu, tal i tutaj każda metoda jest związana z klasą (tzn. z interfejsem) i uruchamia si< ją na obiektach tej klasy. Oznacza to, że obiekt jest „ukrytym” argumenten metody. Dzięki temu można tej samej nazwy metody używać w wielu róż nych klasach, ponieważ to obiekt, na którym ma zostać wykonane działanie przesądza o znaczeniu metody. Taki sposób korzystania z metod nazywa si przeładowaniem (dotyczy metod określanych dla więcej niż jednej klasy).
Syntaktyka deklaracji metody jest podobna do deklaracji funkcji w języ ku C, przy czym jest ona rozszerzona o dwa elementy.
1. Parametry funkcji określa się jako in, out lub inout, co oznacza oc powiednio parametry wejścia, wyjścia lub wejścia-wyjścia. Wartość dwóch ostatnich typów parametrów' mogą ulec zmianie w wynik działania funkcji, natomiast wrartość parametru typu in nic może by zmieniona. Dlatego parametry typu out oraz inout są przekazywań przez, referencje, a parametr typu in przez w-artość. Zauważmy, i funkcja może tworzyć także wartość powrrotu, co stanowi dodatków; inny niż parametry out. oraz inout, sposób przekazywania wyliczc nych w niej wartości.
2. W funkcji mogą pojawiać się wyjątki, są to odpowiedzi funkcji r zdarzenia nietypowe, które nie mieszczą się w standardowych mech; nizmach komunikowania się funkcji poprzez parametry lub warto: powrotu. Wyjątek na ogół oznacza nietypowe lub nieoczekiwane w runki, które są obsługiwane przez pcwrne funkcje także odpowiedzią ne za ich występowanie (najczęściej bezpośrednio lub w ciągu w wołań). Na przykład jako w yjątek można potraktować dzielenie prz<