Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

K.Subieta. Bazy danych i inżynieria oprogramowania, Wykład 10, Folia 1 Bazy danych i inżynieria oprogramowania Kazimierz Subieta Instytut Podstaw Informatyki.

Podobne prezentacje


Prezentacja na temat: "K.Subieta. Bazy danych i inżynieria oprogramowania, Wykład 10, Folia 1 Bazy danych i inżynieria oprogramowania Kazimierz Subieta Instytut Podstaw Informatyki."— Zapis prezentacji:

1 K.Subieta. Bazy danych i inżynieria oprogramowania, Wykład 10, Folia 1 Bazy danych i inżynieria oprogramowania Kazimierz Subieta Instytut Podstaw Informatyki PAN, Warszawa Polsko-Japońska Wyższa Szkoła Technik Komputerowych, Warszawa Wykład 10: Wprowadzenie do standardu ODMG, część 4: OQL

2 K.Subieta. Bazy danych i inżynieria oprogramowania, Wykład 10, Folia 2 Plan wykładu (część 4) Wstępne informacje o OQL Wynik zapytań w OQL Tworzenie obiektów Wyrażenia ścieżkowe Predykaty, złączenia Wartości zerowe Wołanie metod

3 K.Subieta. Bazy danych i inżynieria oprogramowania, Wykład 10, Folia 3 Co to jest język zapytań? Nie jest to kompletny język programowania, lecz język umożliwiający w dokonywanie w sprawny sposób podstawowych operacji na bazie danych, głównie wyszukiwawczych. Język zapytań musi być: DeklaracyjnyOkreślający co, a nie jak MakroskopowyPrzetwarzający quasi-równolegle wiele danych w tym samym czasie Niezależny od organizacji danych,Niezależny od reprezentacji danych, abstrakcyjnyindeksów, tablic wskaźników, organizacji plików, itd. Naturalny dla użytkownikaWspomagający naturalne schematy myślenia, łatwy do nauczenia i używania Automatycznie optymalizowalnyUmożliwiający zastosowanie metod radykalnej poprawy czasu wykonania InterpretowanyUmożliwiający zapytania ad hoc, dynamiczne tworzenie perspektyw i zapamiętanych procedur, itp.

4 K.Subieta. Bazy danych i inżynieria oprogramowania, Wykład 10, Folia 4 OQL -wstępne informacje (1) Object Query Language OQL bazuje na modelu obiektowym ODMG OQL jest obiektowym językiem zapytań w stylu SQL (ale zbieżność jest powierzchowna, KS.). Rozbieżności dotyczą pojęć obiektowych, takich jak złożone obiekty, tożsamość obiektów, wyrażenia ścieżkowe, polimorfizm, wołanie operacji, późne wiązanie OQL przewiduje konstrukcje wysokiego poziomu do przetwarzania zbiorów obiektów, ale nie jest ograniczony do przetwarzania zbiorów (może również przetwarzać struktury, listy, tablice, itp. z taka samą efektywnością) OQL zapewnia swobodne ortogonalne kombinowanie operatorów, o ile tylko nie narusza to mocnej kontroli typów. Wynika to z faktu, że rezultat zapytania ma typ należący do systemu typów ODMG i w związku z tym może stanowić argument większego zapytania. (Faktycznie, OQL jest w tym względzie lepszy od SQL, ale daleki od ideału, KS.) OQL nie jest kompletny obliczeniowo (tj. są zapytania, których nie można w nim zadać, nie posiada operacji aktualizacyjnych, nie posiada abstrakcji programistycznych i konstrukcji sterujących, KS.)

5 K.Subieta. Bazy danych i inżynieria oprogramowania, Wykład 10, Folia 5 OQL -wstępne informacje (2) Zapytania OQL mogą być używane wewnątrz języków programowania, dla których ODMG zdefiniował wiązania. OQL może także wołać operacje zdefiniowane w tych językach programowania. OQL nie przewiduje explicite operacji aktualizacyjnych, ale może wywoływać operacje zapisane w innych językach, które są dla tego celu zdefiniowane. Jest to motywowane obiektowością, która zdaniem ODMG zakłada, że wszystko co dzieje się na obiektach ma być wykonywane za pomocą metod (jest tu pewne nieporozumienie: nie można uniknąć niektórych operacji generycznych; KS) OQL zapewnia deklaracyjny (nieproceduralny) dostęp do obiektów. Stąd wynika, że zapytania OQL mogą być łatwo optymalizowane, co wynika z istoty deklaracyjności (jest to pobożne życzenie, KS.) Formalna semantyka OQL może być łatwo zdefiniowana. (Jest to nieprawda, formalna semantyka OQL jest poważnym problemem badawczym; na szczęście nie jest to problem praktyczny; KS).

6 K.Subieta. Bazy danych i inżynieria oprogramowania, Wykład 10, Folia 6 Krótka charakterystyka OQL Bazuje na SQL? Jest to mimikra mająca chyba na celu wytrącenie broni z ręki ideologom broniącym intergalaktycznego znaczenia SQL. Konsekwencją są bardzo kontrowersyjne decyzje syntaktyczne (za dużo lukru, zbyt duże syntaktyczne zlepki), KS. Semantyka prawie całkowicie odchodzi od SQL: Złożone obiekty Tożsamość obiektów Mocna kontrola typów Klasy (dziedziczenie, przesłanianie) Metody (pisane w jęz. programowania) Hermetyzacja (ograniczona) Nawigacje, wyrażenia ścieżkowe (path expressions) Złączenia (joins) w wariancie nawigacyjnym (dependent joins) Asocjacyjne powiązania Interakcyjne zapytania (są wątpliwości, jest to język zbyt skomplikowany dla tego celu, KS) Programowanie poprzez zanurzenie w C++, Smalltalk, Java,... (luźne zintegrowanie, loose coupling) Cele :

7 K.Subieta. Bazy danych i inżynieria oprogramowania, Wykład 10, Folia 7 OQL - kilka przykładów select x from Profesorowie as x where x.zarobek > 5000 Dziedziczenie select s.nazwisko, w.nazwa_wykładu from Studenci as s, s.jest_zapisany_na as w Zależne złączenie Pracownicy.nazwisko Rezygnacja z lukru SQL (niestety, niekonsekwentna) Kowalski.żona.adres.ulica Wyrażenia ścieżkowe (niestety, niekonsekwentne) select max(select d.wiek from p.dzieci as d) from Pracownicy as p where p.nazwisko = Nowak Ortogonalność (niestety, niekonsekwentna) select x.nazwisko, x.zarobek_netto() from Pracownicy as p where p.nazwisko = Walesa Wołanie metod

8 K.Subieta. Bazy danych i inżynieria oprogramowania, Wykład 10, Folia 8 Wejście i wynik zapytań w OQL Jako samodzielny język, OQL umożliwia formułowanie zapytań skierowanych do obiektów bazując na ich nazwach, które są punktami wejściowymi w bazie danych. Nazwa może dotyczyć dowolnego rodzaju obiektów: atomowych, struktur, kolekcji, literali (?, KS) Jako język zanurzony, OQL formułowanie zapytań skierowanych do obiektów j.w., które są podtrzymywane przez dany język programowania. Zapytanie w OQL jest traktowane jako funkcja, której wynikiem jest obiekt o typie określonym przez zapytanie. Pracownik zarobek gr_zawodowa Klasy Ekstensje Osoby Pracownicy select distinct x.wiek from Osoby as x where x.nazwisko = Nowak Osoba nazwisko rok_ur płeć wiek select distinct struct(a: x.wiek, b: x.płeć) from Pracownicy as x where x.nazwisko = Nowak kieruje

9 K.Subieta. Bazy danych i inżynieria oprogramowania, Wykład 10, Folia 9 Przykłady w OQL select distinct struct( nazwisko: x.nazwisko, elita: (select y from x.kieruje as y where y.zarobek > 10000)) from Pracownicy as x Dla każdego pracownika, podaj nazwisko oraz zbiór kierowanych przez niego pracowników, którzy zarabiają ponad 10000: Rezultat jest typu: set )> select struct( w: x.wiek, p: x.płeć ) from (select y from Pracownicy as y where y.gr_zawodowa = 10) as x where x.nazwisko = Nowak Operator select wewnątrz select: Operator select wewnątrz from: Dla pracowników o nazwisku Nowak z 10-tej grupy zawodowej, podaj wiek i płeć:

10 K.Subieta. Bazy danych i inżynieria oprogramowania, Wykład 10, Folia 10 Tworzenie obiektów Osoba( nazwisko: Nowak, data_ur: 2/28/56, płeć: M ) Tworzenie obiektu Osoba Taka konstrukcja jest odróżniana od konstrukcji zwracającej literał (obiekt bez tożsamości, czyli wartość): struct( a: 10, b: Adam ) Tworzenie obiektów w ramach języka zapytań jest nie do przyjęcia. Normalnie, język zapytań jest językiem pasywnym, nie zmieniającym stanu; dopiero zanurzenie zapytań w konstrukcje imperatywne pozwala zmienić stan. Jest to semantyczna niekonsekwencja, która rodzi poważne problemy: (1) jeżeli nie ma ekstensji, w jakim środowisku (module?) tworzone są nowe obiekty? (2) Co zwraca takie zapytanie i czy może być kombinowane z innymi zapytaniami? (3) Dlaczego jest tworzenie, a nie ma usuwania, wstawiania, i podstawiania? ODMG naraża się tu na zarzut niekompetencji w zakresie konstrukcji języków programowania. set( 1, 2, 5 ) list( 1, 2, 2, 3, 1 ) bag(1, 2, 2, 3, 1 ) array( 1, 2, 2, 3, 1 )

11 K.Subieta. Bazy danych i inżynieria oprogramowania, Wykład 10, Folia 11 Co zwraca zapytanie? Kolekcję obiektów posiadających tożsamość, np. select x from Osoby as x where x.nazwisko = Nowak zwraca kolekcję obiektów Osoba posiadających nazwisko Nowak. Nie jest jasne, czy taka kolekcja musi mieć własną tożsamość, czy też tożsamość ma mieć każdy zwracany obiekt, KS. Obiekt z tożsamością, np. element( select x from Osoby as x where x.PESEL = ) zwraca obiekt Osoba posiadających nr PESEL Pomysł, że zapytanie zwraca obiekty, a nie referencje do obiektów, jest chory. Określenie dziedzin semantycznych dla zapytań jest mało precyzyjne i mało kompetentne. Kolekcję literali, np. select x.NrPaszportu from Osoby as x where x.gr_zawodowa = 10 Literal, np. Szef.zarobek

12 K.Subieta. Bazy danych i inżynieria oprogramowania, Wykład 10, Folia 12 Wyrażenia ścieżkowe Startując od obiektu, można nawigować w głąb jego struktury, lub wzdłuż prostych związków: Osoba as x x. mąż_lub_żona.adres.miasto.nazwa Nazwa miasta, w którym żyje małżonek(-ka) osoby x: Niech x będzie zmienną, an którą podstawia się obiekt Osoba: Osoba mąż_lub_żona adres.... miasto nazwa.... obiekt atrybut pod-atrybut pod-pod-atrybut x -> mąż_lub_żona -> adres -> miasto -> nazwa Niestety, jeżeli związek nie jest 1:1, to tego rodzaju nawigacja jest niedozwolona; należy użyć standardowego select... from...: dzieci x.dzieci.imię select y.imię from x.dzieci as y Uzasadnienie dla tego ograniczenia pozwala sądzić, że niektórzy ludzie z ODMG nie kojarzą, gdzie jest składnia, a gdzie semantyka...

13 K.Subieta. Bazy danych i inżynieria oprogramowania, Wykład 10, Folia 13 Predykaty, złączenia Podaj adresy dzieci osób żyjących na ulicy Blacharskiej, mających co najmniej dwoje dzieci. Interesują nas tylko dzieci żyjące w innym mieście niż rodzice. select c.adres from Osoby as x, x.dzieci as d wherex.adres.ulica = Blacharska and count(x.dzieci) >= 2 and d.adres.miasto != x.adres.miasto predicates, joins select p from Osoby as p, Kwiaty as k where p.nazwisko = k.nazwa Rozbudowany predykat Złączenie a la SQL Mamy dwie kolekcje, Osoby i Kwiaty. Podaj osoby, których nazwiska są nazwami kwiatów:

14 K.Subieta. Bazy danych i inżynieria oprogramowania, Wykład 10, Folia 14 Wartości zerowe null values Rezultat dostępu do własności/obiektu posiadającego wartość nil jest UNDEFINED. Operator. lub -> działający na UNDEFINED zwraca UNDEFINED Porównanie UNDEFINED z czymkolwiek zwraca FALSE Dwie funkcje: is_undefined(UNDEFINED) = TRUE is_defined(UNDEFINED) = FALSE Dowolna inna operacja na UNDEFINED powoduje błąd wykonania. Reguły przetwarzania UNDEFINED: select nkmpl from Osoba as nkmpl where is_undefined( nkmpl.adres.miasto ) Podaj osoby, w których adresie brakuje miasta: KS: Naiwne podejście do poważnego problemu wartości zerowych. ODMG modyfikuje tu nieco paranoiczne rozwiązania przyjęte w SQL (patrz artykuły Ch. Date), ale jest to leczenie bólu zęba przy pomocy herbatki ziołowej.

15 K.Subieta. Bazy danych i inżynieria oprogramowania, Wykład 10, Folia 15 Wołanie metod Nie ma istotnej różnicy w użyciu nazwy atrybutu i nazwy metody; select max( select d.wiek from os.dzieci as d ) from Osoby as os where os.nazwisko = Kolski Podaj wiek najstarszego dziecka Kolskiego: najstarsze_dziecko jest metodą zdefiniowaną dla obiektów Osoba i zwracającą obiekt Osoba; mieszka-w jest metodą z jednym parametrem zwracającą True lub False. Jeżeli metoda zwróci obiekt (referencję?), to od takiego obiektu można dalej nawigować: select os.najstarsze_dziecko.adres.ulica from Osoby as os where os.mieszka_w( Buraków ) Podaj ulice na których mieszkają najstarsze dzieci osób z Burakowa: wiek jest metodą zdefiniowaną dla obiektów Osoba.

16 K.Subieta. Bazy danych i inżynieria oprogramowania, Wykład 10, Folia 16 Polimorfizm, późne wiązanie, wskazanie klasy polymorphism, late binding, class indicator Przy wołaniu metod, brana jest pod uwagę metoda, która jest najbliżej obiektu będacego adresatem komunikatu. Decyzję, którą metodę należy wybrać podejmuje się podczas czasu wykonania. Osoba... co_robi Pracownik... co_robi Student... co_robi select os.co_robi from Osoby as os W zależności od tego, czy konkretna Osoba jest po prostu osobą, czy też pracownikiem, czy też studentem, wybierana jest dynamicznie inna metoda co_robi. W takich sytuacja czesto trzeba wskazać klasę (zastosować casting): select ((Student)os).rok_studiów from Osoby as os where studiuje in os.co_robi


Pobierz ppt "K.Subieta. Bazy danych i inżynieria oprogramowania, Wykład 10, Folia 1 Bazy danych i inżynieria oprogramowania Kazimierz Subieta Instytut Podstaw Informatyki."

Podobne prezentacje


Reklamy Google