S. £UKI£IS]OWANŁ UOifcK l UWU AAł T I At\
karka". Ale powstają tu również interesujące możliwości dotyczące sposobu zadawania zapytań.
Ponieważ atrybut typ dziedziczy się z klasy Produkt do podklasy Drukarka, a więc można atrybut typ w podklasie nazwać rypDrukarki. Będzie on określał typ drukarki (np. laserowa lub atramentowa), podczas gdy atrybut typ w klasie Produkt przyjmuje wartość PC, laptop lub drukarka.
Do kodu ODL, zapisanego na rys. 8.2, należy dołączyć sygnatury metod odpowiednie dla następujących funkcji:
*a) Odjęcie wartości x od ceny produktu. Zakładamy, że* jest parametrem wejściowym funkcji.
*b) Zwrócenie szybkości produktu, jeśli jest to PC lub laptop, albo uruchomienie wyjątku nieKomputer w przeciwnym razie, c) Określenie wartości atrybutu ekran laptopa według zadanego x.
!d) Stwierdzenie, jeśli produkt p określa wartość wejścia, a produkt q uruchamia metodę, czy ą ma większą szybkość i jednocześnie niższą cenę niż p. Jeśli p nie jest właściwym produktem (tzn. nie jest ani PC, ani laptopem), to należy uruchomić wyjątek błądWejścia, a wyjątek brakSzybkcści, jeśli q jest niewłaściwym produktem.
Ćwiczenie 8.1.2. Na rysunku 8.3 przedstawiono opis w ODL schematu bazy danych „Okręty”. Należy do niego dołączyć sygnatury następujących metod:
a) Obliczyć moc bojową okrętu, tzn. liczbę dział przemnożoną przez sześcian średnicy.
b) Należy znaleźć okręt bliźniaczy- danego okrętu. Jeśli w danej klasie jest tylko jeden egzemplarz, to uruchomić wyjątek brakBliźniaczego.
c) Podana jest bitwa b jako parametr, a metodę stosuje się dla okrętu s. Należy odnaleźć wszystkie okręty, który uczestniczyły w bitwie b, jeśli s także w niej uczestniczy ł. Jeśli s nie uczestniczył w bitwie b, to należy uruchomić wyjątek nieUc2estniczy.
d) Jako parametry- podaje się nazwę i rok wodowania okrętu. Okręt o tych atrybutach należy dołączyć do klasy okrętów, która uruchamia metodę.
W bieżącym rozdziale opiszemy ogólnie obiektowy język zapytań (OQL). Ani w tym, ani w następnych dwóch rozdziałach opis nic będzie tak obszerny jak w przypadku opisu $QL. Objaśnimy tylko najważniejsze instrukcje i właściwości tego języka, ale wicie elementów języka OQL nie będzie uwzględnionych. Często te pozostałe możliwości występują albo w języku SQL, albo w typowych obiektowych językach programowania.
W języku OQL, inaczej niż w konw encjonalnych językach programowania, nie ma sposobu jawnego definiowania funkcji. Notacja OQL przypomina raczej notację $QL, dostarczając mechanizmu do opisu pewnych zapytań na wyższym poziomie abstrakcji niż można było to wyrazić w' typowych instrukcjach języków programowania, np. w C. W założeniu OQL ma być rozszerzeniem pewnego podstawowego języka zorientowanego obiektowo, takiego jat C++, Smalltalk lub Java. Do obiektów' można mieć zatem dostęp zarównc poprzez typowe instrukcje języka podstawowego, jak i poprzez zapytani? OQL. Ta możliwość przemieszania instrukcji języka programowania i zapy tań OQL, dzięki której unika się konieczności pośredniego przekazywani? wartości między dwoma językami, stanowi o przewadze opisywanej technik nad osadzaniem SQL w języku podstawowym, które było omawiane w pod rozdziale 7.1.
Aby lepiej zobrazow-ać pojęcia OQL, posłużymy się przykładem znanycl już klas Film, Gwiazda oraz Studio. Na rysunku 8.1 zamieszczono defini cję klasy Film. Natomiast definicje klas Studio oraz Gwiazda zostały- za czerpnięte z rys. 2.6, rozszerzyliśmy je na rys. 8.4 o deklaracje kluczy i zasię gu. Nie wprowadziliśmy jeszcze jednak deklaracji metod.
interface Gwiazda (extervc Gwiazdy key nazwa)
{
attribute string nazwisko; attribute Struct Adr
{string ulica, string miasto} adres; relatienship Set<Film> występujeW
inverse Film::gwiazdy;
};
interface Studio (extent Studia key nazwa)
{
attribute string nazwa; attribute string adres; relat.ionship Set<Filmy> posiada
inverse Film::należyDc; ł;
RYSUNEK 8.4
Fragment zorientowanej obiektowo bazy danych filmów