ullman245 (2)

ullman245 (2)



"ty u S ZORIENTOWANE OBIEKTOWO JfjZYKI ZAPYTAŃ

Gdy mamy już listę, uporządkowaną lub nie, wówczas do każdego elementu listy możemy się dostać przez określenie numeru jego pozycji na liście, np. i-ty element listy L uzyskujemy, specyfikując i,[i - 1]. Przypomnijmy tutaj, że zgodnie z konwencją języków C i C++ numeracja elementów list i tablic rozpoczyna się od zera (0).

PRZYKŁAD 8.19

Naszym celem będzie teraz utworzenie funkcji, która dla każdego filmu drukuje jego tytuł, rok oraz długość. Szkic tej funkcji został przedstawiony na rys. 8.10.

1)    listaFilmów = SELECT m

FROM Filmy m

ORDER BY m.tytuł, m.rok;

2)    liczfcaFilmów = COUNT(Filmy);

3} for (i 0; i < iiczbaFilmów, .1++) {

4)    film=listaFilmów[i];

5)    cout « film.tytuł << „ " « film.rok « „ "

6)    « film.długość << „\n";

7)    }

RYSUNEK 8.10

Sprawdzanie i drukowanie poszczególnych filmów

W wierszu 1) następuje uporządkowanie obiektów klasy Film i zapisanie listy wynikowej w zmiennej listaFilmów, której typem jest List<Filra>. W wierszu 2) wylicza się liczbę filmów, stosując w tym celu operator COUNT z języka OQL. Następnie w wierszach od 3) do 6) zapisano pętlę for, w której zmienna kontrolowana i przebiega wszystkie pozycje utworzonej listy. Dla wygody i-ty składnik listy jest przypisywany zmiennej fi m. W końcu, w wierszach 5) i 6) następuje wydrukowanie odpowiednich atrybutów filmu.

8.4.4. Tworzenie nowych obiektów

Wiemy już, że dzięki wyrażeniom OQL typu select-from-whcre można tworzyć now e obiekty. Tworzy się je, przetw arzając obiekty istniejące. Można także tworzyć nowe obiekty przez zespolenie stałych lub innych wyrażeń w struktury lub kolekcje. Wiadomo już, że dokonują tego konstruktor)' typów zastosowane do wartości. W takich przypadkach wartości, z których tworzy się obiekty, otacza się nawiasami okrągłymi, w odróżnieniu od nawiasów trójkątnych, stosowanych przy konstruowaniu typów. W przykładzie 8.7 występowała instrukcja

SELECT DISTINCT Strucfc(gwiazdal: sl, gwiazdaż: s2) która służyła do określenia, że w wyniku zapytania powstaje zbiór obiektów typu Struct(gwiazdal: Gwiazda, gwiazda2: Gwiazda}. Polom tej Struktury nadano nazwy gwiazdal i gwiazda2, ponieważ w ten sposób jest łatwo uchwycić odpowiedniość pomiędzy typami pól i zmiennych sl i s2.

PRZYKŁAD 8.20

Now e kolekcje można także tworzyć w ten sposób, że do obiektów tego samego typu stosuje się któryś z konstruktorów' typów: Set, 3ag, List lub Array. Rozważmy na przykład następujący ciąg przypisań:

x = Struct(a:1, b:2) ; y = Bag(x, x, Struct(a:3, b:4));

W pierwszym wierszu określa się wartość zmiennej x, której typem jest

Struct(a: integer, b: integer)

czyli struktura o dwóch polach całkowitych a i b. Wartości takiego typu można traktować jako krotki o składowych całkowitych, odpowiadających polom a i b. Wówczas wartość r można przedstawić jako (1, 2). W drugim wierszu występuje definicja zmiennej y, która została tam określona jako wielozbiór, którego z kolei elementami są struktury zdefiniowane tak samo jak zmienna *. W tym wielozbiorzc dwa razy występuje para (1,2) oraz jeden raz para (3,4).

Jeśli zostanie określony pewien typ, a zapytanie tworzy kolekcję obiektów' tego typu, to wówczas nazwy typu można używać zamiast jawnego wyrażenia. W przykładzie 8.7 widać było, w jaki sposób utworzyć jawnie zbiór par. Po słowie kluczowym SELECT wystąpiło tam wyrażenie, w którym zastosowano konstruktor Struct do utworzenia obiektów o dwóch polach - ich wartościami były obiekty- reprezentujące gw iazdy filmowe.

Zdefiniujmy teraz typ ParyGwiazdjako:

Struct{gwiazdal: Gwiazda, gwiazda2: Gwiazda}

Wówczas można utyć tego typu w klauzuli SELECT w instrukcji z przykładu 8.7 w następujący sposób:

SELECT DIST1NCT ParyGwiazd(gwiazdal: sl, gwiazda2: s2) FROM Gwiazdy sl, Gwiazdy s2

WHERE sl.adr = s2.adr AND sl.nazwisko < s2.nazwisko

Jedyna zmiana polega na tym, że inaczej niż w- przykładzie 8.7 typem wyniku określa się teraz jako Set<ParyGwiazd>. Taki wynik można przypisać zmiennej z języka podstawowego, której typ jest określony w len sam sposób.


Wyszukiwarka

Podobne podstrony:
ullman245 (2) "ty u S ZORIENTOWANE OBIEKTOWO JfjZYKI ZAPYTAŃ Gdy mamy już listę, uporządkowaną
42460 ullman241 (2) 488 8. ZORIENTOWANE OBIEKTOWO JĘZYKI ZAPYTAŃ Korzystamy tutaj z podzapytania po
43611 ullman239 (2) 484 S. ZORIENTOWANE OBIEKTOWO JE2YK! ZAPYTAŃ SELECT m FROM Filmy :r. WHERE m.nal
44501 ullman253 (2) 512 8 ZORIENTOWANE OBIEKTOWO JĘZYK! ZAPYTAŃ Pozostałe funkcje można definiować a
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

więcej podobnych podstron