A 4AJt\JLCCI W IŁif*. I UWU J l^c, T M ĆAT X l/\.N
zero. W ODL deklarację funkcji można zakończyć słowem kluczowym raises, po którym w nawiasie umieszcza się listę wyjątków, które funkcja może wywołać.
PRZYKŁAD 8.1
Na rysunku 8.1 można prześledzić kolejny etap ewolucji definicji interfejsu klasy Film, jej poprzednia faza była przedstawiona na ry s. 2.6. Poza sygnaturami występują tu jeszcze dwie zmiany.
1. W wierszu 2) umieszczono deklarację extent. Szersze omówienie celu tej instrukcji nastąpi w p. 8.1.3.
2. W wierszu 3) zadeklarowano atrybuty tytuł oraz rok jako klucz relacji Film.
1) interface Fiira 2} (eztent Filmy
3} key (tytuł, rok))
{
4) attribute string tytuł;
5) attribute integer rok;
6) attribute integer długość;
7) attribute cnumerat.ion (kolor, czarno-biały)
typFilmu;
8) relationship Set<Gwiazda> gwiazdy
inverse Gwiazda:: występujeW;
9) relationship Studio należyDo
inverse Studio::posiada;
10) float długośćWGodzinach() raises(brakDługości);
11) nazwiskaGwiazd(out Set<String>);
12) inneFilmy(in Gwiazda, out Set<Film>)
raises ( brakTakiejGwiazdy);
RYSUNEK 8.1
Dołączenie sygnatur metod do klasy t'.L - m
Do deklaracji interfejsu dołączono także metody. W wierszu 10) umieszczono deklarację długośćWGodzinach. Zakładamy, że służy ona do utworzenia wartości określającej długość filmu, którego obiekt wywołuje, ale wyrażonej nie w minutach (jak to się dzieje w przypadku atrybutu długość), a skonwertowanej do liczby zmiennopozycyjnej, określającej jej wartość wyrażoną w godzinach. Zauważmy, że ta funkcja nie ma żadnych parametrów. Obiekt Film, do którego stosuje się tę metodę, jest jedynym, „ukrytym” jej argumentem i w związku z tym kod tej funkcji będzie miał dostęp wyłącznie do długości danego obiektu klasy film.
Można równic/, zauważyć, że funkcja może się zakończyć wywołaniem wyjątku o nazwie brakDługości. Zakłada się. że uruchomienie wyjątku następuje, jeśli nie jest określona wartość atrybutu długość obiektu, do którego stosuje się metodę długosćWGodzinach, albo gdy ta wartość jest niewłaściwa, np. ujemna.
Pamiętajmy, że z nazwy metody wcale nie musi wynikać jej faktyczne znaczenie. Na przykład metoda długośćWGoćzinach może mieć kod, który' zawsze zwraca wartość 3.14159, bez względu na obiekt klasy Film, który ją uruchamia. Można także zaimplementować ją w ten sposób, że będzie zwracany kwadrat długości w postaci zmiennopozycyjnej. Każda funkcja, która nie ma argumentów (oprócz obiektu, który ją uruchamia), zwraca wartość zmiennopozycyjną i nie dopuszcza innych, poza brakDługości, wyjątków.
W wierszu 11) umieszczono inną sygnaturę o nazwie nazwiskoGwia?.-dy. Ta funkcja nie zwraca żadnej wartości, ale ma parametr wyjściowy, którego typem jest zbiór tekstów. Zakładamy, że wartość tego parametru jest wyliczana przez kod funkcji i w wyniku powstaje zbiór napisów odpowiadający wartościom atrybutu nazwisko gwiazd filmu, którego obiekt uruchamia metodę. Jednak, jak zawsze, nie ma gwarancji, że zaimplementowana funkcja zachowa się w ten właśnie sposób.
W końcu, w wierszu 12), występuje deklaracja trzeciej metody: nr.e-Filmy. Ma ona jeden parametr wejściowy typu Gwiazda. Można oczekiwać, że ma ona następującą implementację. Zakładamy, że parametr Gwiazda oznacza jedną z gwiazd obiektu, który' uruchamia metodę, jeśli tak nie jest, to uruchamia się wyjątek brakTakiejGwiazdy. Jeśli jednak jest to gwiazda występująca w danym filmie, to wartością parametru wyjściowego, którego typ określono jako zbiór filmów, staje się zbiór obejmujący wszystkie inne filmy, w których dana gwiazda występowała.
□
Dla każdej klasy w języku ODL (dla interfejsu) można określić jej zasięg, czyli nazwę zbioru obejmującego bieżące obiekty- tej klasy. Deklaracja obejmuje słowo kluczowe extent, po którym podaje się nazwę zasięgu. Musi ona wystąpić bezpośrednio po deklaracji nazwy interfejsu (klasy).
W pewnym sensie zasięg klasy jest odpowiednikiem nazwy relacji, a definicja samej klasy jest podobna do deklaracji typu atrybutów tej relacji. Przekonamy się, że zapytania OQL odwołują się do zasięgu, a nie do nazwy klasy.
PRZYKŁAD 8.2
W wierszu 2) na rys. 8.1 występuje definicja zasięgu klasy Film. Jego nazwą jest wyraz Filmy. Wartością Fil my jest zbiór wszystkich obiektów' klasy Film, które w danej chwili są zapisane w bazie danych.
□