478 8 ZORIENTOWANE OBIEKTOWO JĘZYKI ZAPYTAŃ
Struktura typów w języku OQL jest określona tak. aby pasowała do deklaracji ODL (patrz p. 2.1.7). Ale w języku OQL nie ma ograniczeń na głębokość zagnieżdżania konstruktorów'typów.
Przy okazji omawiania systemu typów obowiązującego w językach programowania trzeba było odróżniać deklarację typu zmiennej (czasami nazywaną obiektem mutowalnym) od opisu wartości stałej (nazywaną również obiektem niemutowalnym). W instrukcjach OQL korzysta się albo zc zmiennych zadeklarowanych w języku podstawowym, gdzie często korzysta się z zapisu ODL, który wprowadzono w p. 2.1.7. albo z podobnego do niego. W języku ODL, który służy do definiowania danych, nie ma potrzeby definiowania stałych, ale w programach OQL jest taka konieczność. Stąd też trzeba się dowiedzieć, w jaki sposób tworzyć stałe określonego typu w' języku OQL. Poniżej przedstawiamy elementy i sposób ich łączenia przy opisie stałych w języku OQL:
1. Typy podstawowe:
a) Typy atomowe: całkowity, zmiennopozycyjny, znak, tekst oraz logiczny. Są one reprezentowane tak samo jak w SQL, tyle tylko, że do wyróżniania tekstów' używa się podwójnego cudzysłowu.
b) Typ wyliczeniowy. Jego wartości są na bieżąco definiowane w ODL. Każdej z tych wartości można użyć jako stałej.
2. Typy złożone są tworzone przez zastosowanie konstruktora dow olnego typu:
a) Set (. ..).
b) Bag (...).
c) List {...).
d) Array (. ..
e) Struct (...).
Pierwsze cztery z nich są określane wspólnym mianem kolekcji. Zarów no kolekcje, jak i struktury- można dowolnie stosować do wartości odpowiednich typów podstawowych lub złożonych. Jednakże w przypadku stosowania operatora struct trzeba określać nazwę pola i wartość w tym polu. Po każdej nazwie pola występuje dwukropek, a następnie wartość; pary złożone z pola i wartości oddziela się przecinkami.
PRZYKŁAD 8.3
Wyrażenie bag(2,1,2) oznacza wiclozbiór, w którym liczba całkowita 2 występuje dwa razy, a liczba całkowita 1 tylko jeden raz. Wyrażenie:
struct (ala: bag(2,l,2}/ bar: „flis")
oznacza strukturę o dwóch polach. Pierwsze, o nazwie a la, zawiera wielo-zbiór wraz z jego wartościami, a drugie, które nazywa się bar, ma wartość tekstową „flis".
Składowe zmiennych typu złożonego są dostępne przez zastosowanie notacji kropkowej, podobnej do kropki używanej w języku C. a także do kropki w języku SQL. Obow iązuje przy tym następująca zasada: Jeśli a oznacza pewien obiekt klasy C, a p określa jakiś element tej klasy - jest to atrybut, związek bądź metoda - to a.p oznacza wynik „zastosowania” p do obiektu a. Oznacza to:
1. Jeśli p jest atrybutem, to a.p oznacza wartość tego atrybutu dla obiektu a.
2. Jeśli p jest związkiem, to a.p jest obiektem lub kolekcją obiektów' dostępną z a przez związek p.
3. Jeśli p jest metodą (być może z parametrami), to a.p oznacza wynik zastosowania metody/; do obiektu a.
Strzałki zamiast kropek
W OQL strzałka —► stanowi synonim kropki. Można wyczuć w tym rozwiązaniu wpływ języka C, w którym kropka i strzałka służą do uzyskania dostępu do składowych struktury. Jednakże w języku C- zakres stosowania tych dwóch operatorów jest inny, natomiast w OQL korzysta się z nich wymiennie. W języku C a.f oznacza, że a jest strukturą, podczas gdy p—► £ oznacza, że p jest wskaźnikiem do tej struktury. W obu przypadkach wynikiem jest po prostu w artość pola £ tej struktury.
PRZYKŁAD 8.4
Niech mój Film oznacza zmienną w języku podstawowym, której wartością jest pewien film. Wówczas:
• Wartością wyrażenia mój Film. długość jest długość tego filmu.
• Wartością wyrażenia mój Film. długośćWGodz lnach {) jest liczba rzeczywista, określająca czas trwania filmu wyrażony w godzinach, a obliczony przez zastosowanie metody dlugośćWGodzinach do obiektu mój Film.
• Wartością wyrażenia mój Film. gwiazdy jest zbiór obiektów typu Gwiazda, powiązanych z filmem mój Film poprzez związek
gwiazdy.
• Wartością wyrażenia mój Fi Im.nazwiskaGwiazd (mojaGwiazda) nie zwraca żadnej wartości (tzn. w C++ typem tego wyrażenia jest void). Ubocznym efektem działania tej metody jest przypisanie zmiennej wynikowej mojaGwiazda zbioru napisów, które oznaczają nazwiska gwiazd występujących w filmie.
□