32
© K.Subieta. Obiektowe języki zapytań 06, Folia 1 kwiecień 2004 Obiektowe języki zapytań Wykładowca: Kazimierz Subieta Polsko-Japońska Wyższa Szkoła Technik Komputerowych, Warszawa [email protected] Instytut Podstaw Informatyki PAN, Warszawa [email protected] Wykład 06: Modele składu obiektów

Obiektowe języki zapytań

Embed Size (px)

DESCRIPTION

Obiektowe języki zapytań. Wykładowca : Kazimierz Subieta Polsko-Japońska Wyższa Szkoła Technik Komputerowych, Warszawa [email protected] Instytut Podstaw Informatyki PAN, Warszawa [email protected]. Wykład 06: Modele składu obiektów. Złożoność modeli obiektowych (1). - PowerPoint PPT Presentation

Citation preview

© K.Subieta. Obiektowe języki zapytań 06, Folia 1 kwiecień 2004

Obiektowe języki zapytań

Wykładowca: Kazimierz Subieta

Polsko-Japońska Wyższa SzkołaTechnik Komputerowych, [email protected]

Instytut Podstaw Informatyki PAN, [email protected]

Wykład 06: Modele składu obiektów

© K.Subieta. Obiektowe języki zapytań 06, Folia 2 kwiecień 2004

Złożoność modeli obiektowych (1)

Istniejące modele obiektowe są bardzo złożone. Model obiektowy standardu ODMG włącza dużą liczbę pojęć takich jak:

obiekty, literały, typy, podtypy, interfejsy, dziedziczenie, przesłanianie, polimorfizm, kolekcje, struktury, związki, operacje, wyjątki i inne.

Jeszcze bardziej złożony jest model SQL-99, ponieważ do wymienionych pojęć dokłada (co najmniej) relacje i abstrakcyjne typy danych (ADT).

Zasadniczy udział w tej złożoności mają cechy drugorzędne i brak dążenia do upraszczania i redukcji pojęć, eliminacji pojęć drugorzędnych i zastępowanie bardziej specyficznych pojęć przez pojęcia bardziej ogólne.

Konsekwencją złożoności modelu obiektowego jest złożoność języka zapytań, w szczególności jego semantyki, ponieważ każda cecha modelu obiektowego musi mieć swoje odbicie w składni, semantyce i w pragmatyce języka bazującego na tym modelu. • Precyzyjna semantyka języka oznacza konieczność zdefiniowania zbioru

wszystkich stanów (zbioru Stan). Złożoność modelu obiektowego powoduje złożoność definicji tego zbioru i w konsekwencji złożoność definicji języka.

© K.Subieta. Obiektowe języki zapytań 06, Folia 3 kwiecień 2004

Złożoność modeli obiektowych (2)

Złożoność oznacza zwiększenie trudności przy formalnej analizie semantyki, czyli utrata kontroli nad uniwersalnością języka oraz znaczne zmniejszenie potencjału dla optymalizacji zapytań.

Obecny świat informatyki przemysłowo-komercyjnej nie docenia problemu semantyki języków zapytań oraz optymalizacji zapytań.

Dla SQL-99 lub OQL nie można zbudować modeli formalnych z powodu zasadniczych wad ich specyfikacji i licznych niespójności.

Brak modelu formalnego uniemożliwia wnioskowanie o semantycznie równoważnych przekształceniach optymalizacyjnych.

Z tego powodu konieczne staje się uproszczenie modeli obiektowych i/lub taka abstrakcja nad tymi modelami, która byłaby formalnie prosta i jednocześnie dostatecznie wiernie oddawałaby modele praktyczne. • Modele obiektowe wprowadzają dużo pojęć, często różnie rozumianych.

Nie jest możliwe zbudowanie pojedynczego modelu formalnego.

Będziemy opierali się o pewną rodzinę modeli, z tą samą bazą pojęciową.

© K.Subieta. Obiektowe języki zapytań 06, Folia 4 kwiecień 2004

Modele składu obiektów

M0: obejmuje dowolnie powiązane hierarchiczne struktury danych; nie obejmuje klas, dziedziczenia, interfejsu i hermetyzacji. Model M0 pozwala wyjaśnić semantykę relacyjnych języków zapytań (szczególnie SQL), przykrywa koncepcję zagnieżdżonych relacji, struktury implikowane przez XML i dane określane jako pół-strukturalne.

M1: uzupełnia M0 o pojęcia klasy, dziedziczenia i wielodziedziczenia w najczęściej spotykanym rozumieniu; nie obejmuje hermetyzacji i interfejsu.

M2: uzupełnia model M1 oraz nieco go modyfikuje wprowadzając dziedziczenie pomiędzy obiektami oraz dynamiczne role. Można go również uważać jako model odwzorowujący koncepcję wielu interfejsów do obiektu.

M3: uzupełnia model M1 lub M2 o pojęcie hermetyzacji - podział własności klas i obiektów na publiczne i prywatne.

Podana rodzina modeli nie zamyka tematu.

object store

© K.Subieta. Obiektowe języki zapytań 06, Folia 5 kwiecień 2004

Pojęcia wspólne dla modeli M0, M1, M2 i M3

Wewnętrzny identyfikator obiektu. Jest nadawany automatycznie przez system i nie posiada semantyki w świecie zewnętrznym. Jest nieczytelny. Jest unikalny dla danego obiektu. Służy do identyfikacji obiektów w pamięci komputera. Nie będziemy zajmować się budową identyfikatorów ani ich specjalizowaniem w zależności od rodzaju obiektu lub pamięci.

Zewnętrzna nazwa obiektu. W odróżnieniu od wewnętrznego identyfikatora, zewnętrzna nazwa jest nadawana przez projektanta, programistę lub administratora. Jest powiązana z modelem koncepcyjnym lub biznesowym aplikacji działających na bazie danych. Posiada (nieformalną) semantykę w świecie zewnętrznym. Np. taką nazwą może być Klient lub Zarobek. W odróżnieniu od wewnętrznego identyfikatora, zewnętrzna nazwa nie musi być i zwykle nie jest unikalna.

Wartość atomowa. Wartość atomowa jest z naszego punktu widzenia niepodzielna, nie posiada wyróżnialnych składowych. Wartość atomowa może być liczbą, stringiem, blobem, ciałem metody, perspektywy, procedury, reguły, itd.

© K.Subieta. Obiektowe języki zapytań 06, Folia 6 kwiecień 2004

Model M0

• I - zbiór identyfikatorów (i, i1, i2, ... - oznaczenia identyfikatorów)

• N - zbiór nazw (n, n1, n2, ... - oznaczenia nazw)

• V - zbiór wartości atomowych (v, v1, v2, ... - oznaczenia wartości)

Obiekt atomowy: trójka <i, n, v>.

Obiekt pointerowy: trójka <i1, n, i2>. Obiekt jest identyfikowany przez i1, natomiast i2 jest pointerem (referencją) do innego obiektu.

Obiekt złożony: trójka <i, n, T>, gdzie T jest zbiorem dowolnych obiektów. Powyższa reguła umożliwia rekurencyjne tworzenie obiektów o nieograniczonej złożoności i o nieograniczonej liczbie poziomów hierarchii.

Skład obiektów jest zdefiniowany jako para <S, R>, gdzie S jest zbiorem obiektów, zaś R jest zbiorem identyfikatorów "startowych”.

• Zbiór R wyznacza punkty wejściowe do składu obiektów, tj. obiekty "korzeniowe" (root objects), które mogą być początkiem wyszukiwania w zbiorze przechowywanych obiektów.

© K.Subieta. Obiektowe języki zapytań 06, Folia 7 kwiecień 2004

Ograniczenia w modelu M0

Każdy obiekt, podobiekt, itd. w składzie posiada unikalny identyfikator.

Jeżeli (na dowolnym poziomie hierarchii obiektów) wystąpi obiekt pointerowy <i1,n,i2>, to powinien istnieć również obiekt posiadający identyfikator i2. Warunek oznacza brak zwisających pointerów (lub tzw. integralność referencyjną).

Dowolny identyfikator ze zbioru R jest identyfikatorem pewnego obiektu znajdującego się w składzie.

Będziemy abstrahować od obiektów, które nie są osiągalne ze zbioru R, bezpośrednio lub pośrednio. Obiekt bezpośrednio osiągalny posiada identyfikator ze zbioru R. Obiekt jest osiągalny, jeżeli jest bezpośrednio osiągalny lub jest podobiektem obiektu osiągalnego. Obiekt jest także osiągalny, jeżeli posiada identyfikator i2 oraz jest osiągalny obiekt pointerowy <i1, n, i2>. Obiekty nieosiągalne nie są w stanie wpłynąć na wynik ewaluacji zapytań; są one tzw. nieużytkami (garbage) i mogą być w dowolnym momencie skasowane.

© K.Subieta. Obiektowe języki zapytań 06, Folia 8 kwiecień 2004

Przykład składu w modelu M0

Dział [0..*]NazwaLokacja[1..*]

Diagram klas

PracujeW

Zatrudnia[1..*]

Prac [0..*]NazwiskoZar

Adres [0..1]MiastoUlicaNrDomu

S - Obiekty:

< i1 , Prac , {< i2, Nazwisko, ”Nowak” >, < i3, Zar, 2500 >, < i4, PracujeW, i17 > } >,

< i5 , Prac , {< i6, Nazwisko, ”Kowalski” >, < i7, Zar, 2000 >, < i8, PracujeW, i22 > } >,

< i9 , Prac , {< i10, Nazwisko, ”Barski” >, < i11, Zar, 900 >, < i12, Adres, {< i13, Miasto, ”Radom” >,

< i14, Ulica, ”Wolska” >, < i15, NrDomu, 12 > } >,

< i16, PracujeW, i22 > } >,

< i17 ,Dział, {<i18, Nazwa, ”Produkcja” >, < i19, Lokacja, ”Kielce” >, < i20, Lokacja, ”Kraków” >, < i21, Zatrudnia, i1 > } >,

< i22 , Dział,{< i23, Nazwa, ”Sprzedaż” >, < i24, Lokacja, ”Radom” >, < i25, Zatrudnia, i5 >, < i26, Zatrudnia, i9 > } >

R - Identyfikatory startowe:i1 , i5 , i9 , i17 , i22

© K.Subieta. Obiektowe języki zapytań 06, Folia 9 kwiecień 2004

Poglądowy obraz małej bazy danych

i1 Prac

i2 Nazwisko ”Nowak”

i3 Zar 2500

i4 PracujeW

i5 Prac

i6 Nazwisko ”Kowalski”

i7 Zar 2000

i8 PracujeW

i9 Prac

i10 Nazwisko ”Barski”

i11 Zar 900

i16 PracujeW

i13 Miasto ”Radom”

i14 Ulica ”Wolska”

i15 NrDomu 12

i12 Adres

i17 Dział

i18 Nazwa ”Produkcja”

i19 Lokacja ”Kielce”

i21 Zatrudnia

i20 Lokacja ”Kraków”

i22 Dział

i23 Nazwa ”Sprzedaż”

i24 Lokacja ”Radom”

i25 Zatrudnia

i26 Zatrudnia

© K.Subieta. Obiektowe języki zapytań 06, Folia 10 kwiecień 2004

Modelowanie „zmiennych” języka programowania

Nie będziemy robić rozróżnienia pomiędzy pojęciem języków programowania określanym jako „zmienna” oraz wprowadzonymi przez nas obiektami. • Np. zmienna x z języka programowania posiadająca aktualną wartość 5

będzie w naszych modelach składu reprezentowana jako trójka <i, x, 5>, gdzie i jest pewnym identyfikatorem wewnętrznym tej zmiennej, np. jej adresem w pamięci operacyjnej.

Nie będziemy również rozróżniać pojęcia zmiennej i pojęcia obiektu na zasadzie: obiekt posiada swoją klasę, zaś zmienna nie posiada klasy. • Wszystkie obiekty posiadają klasę, ale dla niektórych obiektów są one puste

(nie zawierają żadnych inwariantów), wobec czego są pomijane.

• Model M0 nie ma klas, ale wprowadza obiekty (inaczej „zmienne”).

Nie zajmujemy się również cechą trwałości obiektów, tj. czy obiekty są przechowywane na dysku czy też w pamięci operacyjnej. • Cecha trwałości nie ma znaczenia dla definiowania semantyki języka

zapytań.

© K.Subieta. Obiektowe języki zapytań 06, Folia 11 kwiecień 2004

Relatywizm obiektów

Nie będziemy przywiązywać wagi do podziału obiektów na proste i złożone, a także nie wprowadzamy specjalnej terminologii i pojęć dla obiektów złożonych.

Tego rodzaju relatywizm obiektów ma zasadnicze znaczenie dla uproszczenia definiowanych języków, znacznie upraszcza metamodel i operacje na metamodelu, zwiększa uniwersalność języka i ma zasadnicze znaczenia dla prostoty oraz klarowności semantyki i pragmatyki. • W wielu koncepcjach obiektowości (np w standardach CORBA i ODMG)

relatywizm nie jest wyznawany. Np. w ODMG atrybut jest tzw. literałem, który nie jest obiektem. Podobnie, większość koncepcji innych autorów implicite zakłada, że obiekt musi być złożony, tj. musi posiadać strukturę wewnętrzną w postaci atrybutów, pól, itp.

W tej koncepcji zbędne również staje się pojęcie modułu. Moduł jest po prostu obiektem składającym się z obiektów.

object relativism

© K.Subieta. Obiektowe języki zapytań 06, Folia 12 kwiecień 2004

Modelowanie kolekcji i struktur

W zdefiniowanym powyżej modelu M0 (jak i w następnych modelach) nie zakładamy unikalności zewnętrznych nazw obiektów. Dotyczy to dowolnego poziomu hierarchii obiektów. • Przykładowo, na górnym poziomie hierarchii nazwy Prac i Dział nie są

unikalne, zaś wewnątrz obiektów Dział nie są unikalne nazwy Lokacja i Zatrudnia.

• To założenie umożliwia modelowanie kolekcji bez wprowadzania w tym celu specjalnych środków formalnych. Kolekcja nie występuje jako identyfikowalny byt programistyczny - w odróżnieniu np. od ODMG.

• Podobne założenie odnośnie kolekcji przyjmuje XML.

Abstrahujemy od wielu pojęć wprowadzanych w innych modelach, takich jak krotki (tuples), struktury, warianty/unie, zapisy (records), zbiory (sets), wielozbiory (bags), ekstensje (extents), itd. • Pojęcia te dadzą się wyrazić w terminach podanego modelu poprzez pewne

ograniczenie lub wyspecjalizowanie.

• Z naszego punktu widzenia są to zestawy obiektów lub obiekty złożone.

© K.Subieta. Obiektowe języki zapytań 06, Folia 13 kwiecień 2004

W naszych modelach składu kolekcja nie występuje jako pojedynczy, identyfikowalny byt programistyczny. • Nie można utworzyć pojedynczej referencji prowadzącej do kolekcji.

• Można zbudować zbiór referencji do elementów danej kolekcji, w szczególności, do wszystkich elementów danej kolekcji.

Można oczywiście utworzyć obiekt, który w środku będzie miał tak samo nazwane podobiekty, i wtedy można zbudować referencję do takiego obiektu.

Taki zabieg oczywiście nic nie wnosi do koncepcji, nadal jesteśmy w modelu M0.

Model M0 zajmuje się wyłącznie kolekcjami zwanymi bagi (bags). Inne kolekcje, takie jak sekwencje, wymagają nowego modelu.

Kolekcje

OsobaOsobaOsobaOsoba OsobaOsoba OsobaOsoba OsobaOsoba

OsobyOsoby

© K.Subieta. Obiektowe języki zapytań 06, Folia 14 kwiecień 2004

Modelowanie powiązań pomiędzy obiektami

Obiekty pointerowe umieszczone wewnątrz obiektów są w stanie odwzorować powiązania pomiędzy obiektami. • Np. każdy obiekt pointerowy PracujeW prowadzi do odpowiedniego obiektu

Dział, zaś każdy obiekt pointerowy Zatrudnia prowadzi do obiektu Prac.

Podobnie jak w modelu ODMG nie będziemy interesowali się powiązaniami o arności wyższej niż 2 oraz powiązaniami posiadającymi własne atrybuty.

Takie opcje zwiększają złożoność programistycznego interfejsu. • W szczególności, trudności są związane z aktualizacją takich powiązań, np.

przełączeniu jednej gałęzi danego powiązania do innego obiektu.

• Powiązania posiadające własne atrybuty prowadzą do niejasności koncepcyjnej. Konieczne byłoby tworzenie nowego rodzaju klasy, która opisywałaby atrybuty powiązań.

• Konieczne byłyby podwójne definicje klas: dla obiektów i dla powiązań.

Nie wydaje się również potrzebne dekorowanie powiązania klasą (jak w UML)

© K.Subieta. Obiektowe języki zapytań 06, Folia 15 kwiecień 2004

Wartości zerowe, warianty, dane półstrukturalne

M0 umożliwia formalizację wartości zerowych i wariantów (unii). Np. atrybut (złożony) Adres występuje tylko dla jednego obiektu Prac. • Model niczym nie zobowiązuje nas do tego, aby obiekty posiadające te same

nazwy posiadały pod-obiekty o tych samych nazwach.

• Model nie wprowadza (jak dotąd) ograniczeń typologicznych, co daje pełną swobodę w zakresie budowy poszczególnych obiektów.

• Będziemy uważać, że ewentualny dyskryminator wariantu jest takim samym pod-obiektem jak pozostałe.

M0 przykrywa nieregularności w danych, określane ostatnio jako dane pół-strukturalne (semistructured). • Oznacza to, że budowana przez nas semantyka będzie adekwatna do budowy

języków zapytań i języków programowania obsługujących takie struktury.

• W szczególności, semantyka będzie nadawała się do struktur rozważanych w technologiach opartych na XML.

• Nie będziemy jednak dążyć do dopasowania lukru syntaktycznego języka zapytań do lukru syntaktycznego XML.

© K.Subieta. Obiektowe języki zapytań 06, Folia 16 kwiecień 2004

Model relacyjny i model zagnieżdżonych relacji

Model M0 włącza struktury danych zakładane przez model relacyjny jako szczególny przypadek. Semantykę relacyjnego języka zapytań (w szczególności SQL) można będzie zdefiniować jako szczególny przypadek definiowanej przez nas semantyki. • Nie będziemy nastawiać się na definiowanie semantyki SQL. SQL jest

językiem o licznych anomaliach, niekonsekwencjach i semantycznych rafach, w związku z tym definiowanie jego precyzyjnej semantyki jest trudne i mało sensowne. Przed taką definicją należałoby wcześniej uporządkować koncepcję języka, a na to w przypadku SQL jest za późno.

Model M0 przykrywa również model zagnieżdżonych relacji (NF2) jako szczególny przypadek.

Również struktury danych implikowane przez inne modele, określane przez ich autorów jako funkcjonalne, obiektowe, logiczne, semantyczne, itd. dadzą się sformalizować w terminach podanego prostego modelu.

© K.Subieta. Obiektowe języki zapytań 06, Folia 17 kwiecień 2004

Relacja zapisana w modelu M0

Schemat relacyjny: Prac( Nazwisko, Zarobek, PracujeW )

NazwiskoNowakKowalskiBarski

Zarobek250020002000

PracujeWProdukcjaSprzedażSprzedaż

Model relacyjny - Relacja Prac

S - Obiekty:< i1 , Prac, { < i2, Nazwisko, ”Nowak” >,

< i3, Zarobek, 2500 >, < i4, PracujeW, ”Produkcja” > } >,

< i5 , Prac, { < i6, Nazwisko, ”Kowalski” >, < i7, Zarobek, 2000 >, < i8, PracujeW, ”Sprzedaż” > } >,

< i9 , Prac, { < i10, Nazwisko, ”Barski” >, < i11, Zarobek, 2000 >, < i12, PracujeW, ”Sprzedaż” > } >

R - Identyfikatory startowe:i1 , i5 , i9

Model składu obiektów M0:

Krotki relacji jako obiekty złożone

© K.Subieta. Obiektowe języki zapytań 06, Folia 18 kwiecień 2004

<pracownik><imie>Jan</imie><nazwisko>Kowalski</nazwisko><data_urodz>1973-12-1</data_urodz><pensja>2500</pensja>

</pracownik>

S - Obiekty:< i1, pracownik, {

< i2, imie, ”Jan” >, < i3, nazwisko, "Kowalski" >,< i4, data_urodz, 1973-12-1>< i5, pensja, 2500>

} >R - Identyfikatory startowe:i1

Model składu obiektów M0:

Plik XML

Dokument XML zapisany w modelu M0

Nie ma różnic koncepcyjnych. Potencjalne drobne problemy:

• Jak określić identyfikatory dla obiektów XML?

• Jak traktować informacje (tzw. atrybuty) wewnątrz XML-owych tagów?

• Jak modelować powiązania (obiekty pointerowe) w XML?

© K.Subieta. Obiektowe języki zapytań 06, Folia 19 kwiecień 2004

Sekwencje i tablice w modelu M0

Istnieją ważne operatory, które potrzebują uwzględnienia porządku w obiektach. Do nich należy np. operator order by języka SQL. Istotny jest również operator wyboru n pierwszych (lub ostatnich) elementów z pewnej kolekcji. Umożliwia on m.in. takie zapytania jak „Podaj 50-ciu najlepiej zarabiających pracowników”.

Czy potrzebne jest wzbogacenie naszego modelu o pojęcie "sekwencji"?• Model M0 bezpośrednio nie uwzględnia sekwencji. Należy go rozszerzyć.

• Można też np. zastosować konwencję w której nazwy obiektów są liczbami naturalnymi. Np. tablica ustalająca dzieci pracownika w porządku od najstarszego do najmłodszego mogłaby mieć postać:

• <i1, Dzieci, { <i2, 1, ”Jacek”>, <i3, 2, ”Adam”>, <i4, 3, ”Anna”> }>

• Przy takim modelu dostęp do elementu tablicy następowałby poprzez indeks, np. Dzieci.2 oznaczałoby wiązanie do identyfikatora i3 (wartości ”Adam”).

• Możliwe byłoby również użycie takich wyrażeń jak np. Dzieci.[x+1], które przy wartości obiektu x równej 2 zwróci i4.

• Są inne metody realizacji pojęcia sekwencji w ramach modelu M0.

© K.Subieta. Obiektowe języki zapytań 06, Folia 20 kwiecień 2004

Model M1 - klasy i dziedziczenie

Model M1 wprowadza pojęcia klasy i dziedziczenia w wersji prototypów. Klasa jest obiektem podobnym do wprowadzonych poprzednio obiektów.

Obiekty będące klasami będą wyróżnione jako te, które przechowują inwarianty innych obiektów. Ta rola klas będzie miała wpływ na definiowaną przez nas semantykę języków zapytań.

W M1 skład obiektów jest zdefiniowany jako <S, R, KK, OK>, gdzie:

• S jest zbiorem obiektów (rozszerzonym o klasy),

• R jest zbiorem identyfikatorów obiektów będących „wejściem” do nawigacji w obiektowej strukturze danych,

• relacja KK I I wyznacza związek dziedziczenia pomiędzy klasami,

• relacja OK I I wyznacza przynależność obiektów do klas.

Dla każdej pary <i1, i2> KK, i1 oznacza identyfikator klasy dziedziczącej, zaś i2 oznacza identyfikator klasy z której się dziedziczy.

Model M1 obejmuje wielokrotne dziedziczenie.

© K.Subieta. Obiektowe języki zapytań 06, Folia 21 kwiecień 2004

Przykład modelu M1

S - Obiekty i klasy:< i1 , Osoba , { < i2, Nazwisko, ”Wilski” >, < i3, RokUr, 1950 > } >,

< i4 , Prac , { < i5, Nazwisko, ”Nowak” >, < i6, RokUr, 1944 >, < i7, Zar, 2500 >, < i8, PracujeW, i127 > } >,

< i9 , Prac , { < i10, Nazwisko, ”Kowalski” >, < i11, RokUr, 1940 >, < i12, Zar, 2000 >, < i13, PracujeW, i128 > } >,

< i40 , KlasaOsoba , { < i41, Wiek, (..kod metody Wiek..) >,inwariant: Nazwa obiektów = "Osoba",..pozostałe inwarianty klasy KlasaOsoba ..}>,

< i50 , KlasaPrac , { < i51, ZmieńZar, (..kod metody ZmieńZar..) >,< i52, ZarNetto, (...kod metody ZarNetto..) >,inwariant: Nazwa obiektów = "Prac";..pozostałe inwarianty klasy KlasaPrac .. }>,

R - Identyfikatory startowe:i1 , i4 , i9

KK - Związki dziedziczenia między klasami:< i50 , i40 > OK - Związki dziedziczenia między obiektami i klasami:< i1 , i40 >, < i4 , i50 >, < i9 , i50 >

© K.Subieta. Obiektowe języki zapytań 06, Folia 22 kwiecień 2004

Graficzna reprezentacja przykładu modelu M1

i40 KlasaOsoba

i41 Wiek (...kod...)

................

i50 KlasaPrac

i51 ZmieńZar (...kod...)

................

i52 ZarNetto (...kod...)

i4 Prac

i5 Nazwisko ”Nowak”

i7 Zar 2500

i8 PracujeW

i6 RokUr 1944

i127

i1 Osoba

i2 Nazwisko ”Wilski”

i3 RokUr 1950

i128

i9 Prac

i10 Nazwisko ”Kowalski”

i12 Zar 2000

i13 PracujeW

i11 RokUr 1940

OsobaNazwiskoRokUrWiek

PracZarZmieńZarZarNetto

PracujeW

© K.Subieta. Obiektowe języki zapytań 06, Folia 23 kwiecień 2004

Inwariant klasy - nazwa jej obiektów

Model M1 implikuje problemy z wiązaniem nazw. Zgodnie z zasadą zamienialności (substitutability, LSP), jeżeli w

wyrażeniu występuje nazwa Osoba, to związane muszą być nie tylko obiekty Osoba, ale również obiekty Prac.

M1 w sformułowaniu formalnym nie zawiera bezpośrednio informacji, która to umożliwia, zatem musi być rozszerzony. • W klasycznych modelach problem ten nie występuje, gdyż nazwa obiektów

nie jest inwariantem klasy, zaś zamienialność wynika z hierarchii klas lub typów.

To rozszerzenie można zrobić na kilka sposobów. Podany sposób zakłada, że klasy są wyposażona w dodatkowy inwariant -

nazwę obiektów danej klasy.

© K.Subieta. Obiektowe języki zapytań 06, Folia 24 kwiecień 2004

Model M2 - dynamiczne role

Model M2 jest uporządkowaną piątką <S, R, KK, OK, OO>, gdzie wprowadziliśmy nową relację OO I I.• Relacja OO pozwala obiektom dziedziczyć z innych obiektów, na takiej

samej zasadzie jak obiekty dziedziczą z klas. Obiekty dziedziczące z obiektu A będziemy nazywać rolami obiektu A. Możliwe jest dziedziczenie z ról.

• Relacja OO ustala semantykę manipulacji obiektami z dynamicznymi rolami. W szczególności, usunięcie obiektu będzie powodować usunięcie wszystkich jego ról.

Model M2 jest wolny od pewnych anomalii typologicznych i jest formalnie bardziej „czysty” w stosunku do modelu M1. W szczególności, nie ma wspomnianego problemu z wiązaniem nazw.• Jest paradoksem fakt, że model składu wprowadzający role, który jest

semantycznie czysty i prosty, jest uważany za zbyt skomplikowany.

• Wydaje się, że wynika to z pewnych obciążeń myślenia o obiektowości, wynikających z tradycji istniejących języków programowania, takich jak C++ i Smalltalk.

© K.Subieta. Obiektowe języki zapytań 06, Folia 25 kwiecień 2004

Przykład modelu M2

S - Obiekty i klasy:

< i1 , Osoba , { < i2, Nazwisko, "Wilski" >, < i3, RokUr, 1950 > } >,< i4 , Osoba , { < i5, Nazwisko, "Nowak" >, < i6, RokUr, 1944 >} >,< i7 , Osoba , { < i8, Nazwisko, "Kowalski" >, < i9, RokUr, 1940 >} >,< i13 , Prac , { < i14, Zar, 2500 >, < i15, PracujeW, i127 > } >,< i16 , Prac , { < i17, Zar, 2000 >, < i18, PracujeW, i128 > } >,< i19 , Student , { < i20, NrIndeksu, 76943 >, < i21, Wydział, "fizyka" >} >,

< i40 , KlasaOsoba , { < i41, Wiek, (...kod metody Wiek...) >, ...pozostałe inwarianty klasy KlasaOsoba ...}>,

< i50 , KlasaPracownik , { < i51, ZmieńZar, (...kod metody ZmieńZar...) >, < i52, ZarNetto, (...kod metody ZarNetto...) >,

...pozostałe inwarianty klasy KlasaPrac ... }>,

< i60 , KlasaStudent , { < i61, ŚredniaOcen, (...kod metody ŚredniaOcen...) >, ...pozostałe inwarianty klasy KlasaStudent ... }>,

R - Identyfikatory startowe: i1 , i4 , i7 , i13 , i16 , i19

KK - Związki dziedziczenia między klasami: Zbiór pusty

OK - Związki dziedziczenia między obiektami i klasami: < i1 , i40 >, < i4 , i40 >, < i7 , i40 >, < i13 , i50 >, < i16 , i50 >, < i19 , i60 >,

OO - Związki dziedziczenia między obiektami i obiektami: < i13 , i4 >, < i16 , i7 >, < i19 , i7 >

© K.Subieta. Obiektowe języki zapytań 06, Folia 26 kwiecień 2004

Graficzna reprezentacja przykładu modelu M2

i1 Osoba

i2 Nazwisko ”Wilski”

i3 RokUr 1950

i40 KlasaOsoba

i41 Wiek (...kod...)

.............

i50 KlasaPrac

i51 ZmieńZar (...kod...)

................

i52 ZarNetto (...kod...)

i60 KlasaStudent

i61 ŚredniaOcen (...kod...)

................

i13 Prac

i14 Zar 2500

i15 PracujeW

i127

i4 Osoba

i5 Nazwisko ”Nowak”

i6 RokUr 1944

i7 Osoba

i8 Nazwisko ”Kowalski”

i9 RokUr 1940

i128

i16 Prac

i17 Zar 2000

i18 PracujeW

i19 Student

i20 NrIndeksu 76943

i21 Wydział ”fizyka”

© K.Subieta. Obiektowe języki zapytań 06, Folia 27 kwiecień 2004

Odmienność i zalety modelu z rolami (1)

Wielokrotne dziedziczenie: Ponieważ role są hermetyzowane, nie może wystąpić konflikt nazw nawet wtedy, gdy różne role (czyli specjalizacje obiektu) posiadają własności o tych samych nazwach.

Powtarzalne dziedziczenie: Jest normalne, że obiekt może mieć dwie lub więcej ról o tej samej nazwie. Np. Kowalski może być dwa razy studentem, w różnych szkołach. Ten przypadek nie jest objęty klasycznym modelem dziedziczenia lub wielokrotnego dziedziczenia.

Przechowywanie obiektów historycznych: Role idealnie nadają się do przechowywania obiektów historycznych nie powodując przy tym anomalii z unikalnością identyfikatorów obiektów. Np. można łatwo zapisać fakt, że Kowalski był już kiedyś dwa razy studentem.

Wielo-aspektowe dziedziczenie: Klasa może być specjalizowana wg wielu aspektów, np. według stosunku do zatrudnienia lub stosunku do wykształcenia. UML przykrywa tę cechę, ale jest ona nieobecna w narzędziach obiektowych, co prowadzi m.in. do efektu "eksplozji klas". Role automatycznie mają cechę wielo-aspektowego dziedziczenia.

© K.Subieta. Obiektowe języki zapytań 06, Folia 28 kwiecień 2004

Odmienność i zalety modelu z rolami (2)

Warianty (unie): Cecha ta, wprowadzona m.in. w C++, CORBA i ODMG, prowadzi do wielu semantycznych i implementacyjnych problemów. Role przykrywają tę cechę, przez co staje się niepotrzebna.

Migracja obiektów: Role mogą pojawiać się i znikać dynamicznie, co w terminach klasycznych modeli obiektowych oznacza, że obiekt zmienia klasę (czyli "migruje") bez zmiany tożsamości. Dla klasycznych modeli jest to duży problem. W przypadku ról problem ten nie istnieje.

Spójność referencyjna: W przypadku ról związki mogą prowadzić do ról, a nie do całych obiektów. Np. jeżeli nawigujemy od obiektu Szkoła do obiektu Kowalskiego poprzez jego rolę Student, wówczas niedostępny jest atrybut Zar i metoda ZarNetto. Jest to znaczne uściślenie hermetyzacji.

Dynamiczne dziedziczenie: KlasaPrac nie dziedziczy statycznie z KlasaOsoba. Zamiast tego, rola Prac dziedziczy dynamicznie z roli Osoba wszystkie cechy, włączając metody zawarte w klasie KlasaOsoba. Stwarza to nową sytuację dla przesłaniania i polimorfizmu.

© K.Subieta. Obiektowe języki zapytań 06, Folia 29 kwiecień 2004

Odmienność i zalety modelu z rolami (3)

Heterogeniczne, przecinające się kolekcje. W klasycznych modelach, np. w ODMG, jeżeli obiekt był elementem kolekcji, to nie mógł być jednocześnie elementem innej kolekcji. Jest to ograniczenie modelowania pojęciowego. Dynamiczne role posiadają naturalną zdolność modelowania heterogenicznych, przecinających się kolekcji.

• Np. można utworzyć rolę Pacjent, i tą rolę objąć ludzi i zwierzęta, oraz inną rolę ObiektyDzisiajAktualizowane obejmującą obiekty dowolnego typu. Kolekcje Pacjent i ObiektyDzisiajAktualizowane są heterogeniczne i zachodzą na siebie.

Programowanie aspektowe (Aspect-Oriented Programming, AOP) i rozdzielenie aspektów. AOP zajmuje się rozdzieleniem przecinających się aspektów (cross-cutting concerns) celem umieszczenie każdego aspektu w odrębnym module programu (np. historię zmian, reguły bezpieczeństwa, wizualizację, itd.). Dynamiczne role mają wiele zbieżności z AOP lub mogą być wykorzystane jako techniczne wspomaganie AOP.

© K.Subieta. Obiektowe języki zapytań 06, Folia 30 kwiecień 2004

Model M3 - hermetyzacja i ukrywanie informacji

Model M3 uwzględniający hermetyzację możemy zbudować zarówno na gruncie modelu M1, jak i modelu M2, ponieważ cecha hermetyzacji jest ortogonalna w stosunku do wprowadzonych wcześniej własności.

Idea hermetyzacji polega na tym, aby w określonych sytuacjach zabronić dostępu do pewnych własności obiektów, określanych jako „prywatne”. • Chodzi o to, aby własności prywatne były dostępne z „wnętrza” obiektu, zaś

niedostępne z jego „zewnętrza”. Będzie to wymuszone poprzez stosową semantykę języka zapytań.

Model M3 uzupełnia model M1 lub M2 w taki sposób, że klasy są wyposażona w dodatkowy inwariant - listę eksportową. Jest ona zbiorem nazw własności tej klasy i jej obiektów (metod, atrybutów), które będą widoczne z zewnątrz.

Lista eksportowa będzie użyta w procesie ewaluacji zapytań jako dodatkowy środek kontroli zakresu obowiązywania nazw.• Podobny środek polega na wprowadzeniu pojęcia interfejsu do obiektów

danej klasy.

© K.Subieta. Obiektowe języki zapytań 06, Folia 31 kwiecień 2004

Przykład modelu M3

S - Obiekty i klasy:< i1 , Osoba , { < i2, Nazwisko, ”Wilski” >, < i3, RokUr, 1950 > } >,

< i4 , Prac , { < i5, Nazwisko, ”Nowak” >, < i6, RokUr, 1944 >, < i7, Zar, 2500 >, < i8, PracujeW, i127 > } >,

< i9 , Prac , { < i10, Nazwisko, ”Kowalski” >, < i11, RokUr, 1940 >, < i12, Zar, 2000 >, < i13, PracujeW, i128 > } >,

< i40 , KlasaOsoba , { < i41, Wiek, (..kod metody Wiek..) >,inwariant: Nazwa obiektów = "Osoba",inwariant: Lista eksportowa = {"Nazwisko",

"Wiek"},..pozostałe inwarianty klasy KlasaOsoba ..}>,

< i50 , KlasaPrac, { < i51, ZmieńZar, (..kod metody ZmieńZar..) >,< i52, ZarNetto, (...kod metody ZarNetto..) >,inwariant: Nazwa obiektów = "Prac";inwariant: Lista eksportowa = {"PracujeW",

"ZmieńZar", "ZarNetto" },..pozostałe inwarianty klasy KlasaPrac .. }>,

R - Identyfikatory startowe:i1 , i4 , i9

KK - Związki dziedziczenia między klasami:< i50 , i40 > OK - Związki dziedziczenia między obiektami i klasami:< i1 , i40 >, < i4 , i50 >, < i9 , i50 >

+PracujeW

Osoba+ Nazwisko- RokUr+ Wiek

Prac- Zar+ ZmieńZar+ ZarNetto

© K.Subieta. Obiektowe języki zapytań 06, Folia 32 kwiecień 2004

Schemat bazy danych dla modeli składu

Język schematu bazy danych jest bardzo ważnym uzupełnieniem dowolnego modelu składu.

Język schematu stanowi inherentną część języka zapytań (jego pragmatyki), gdyż na podstawie schematu programista wie, co baza danych zawiera i jak jest zorganizowana.

Schemat bazy danych jest również wykorzystywany przez SZBD dla właściwej organizacji danych, reprezentacji danych, kontroli typów danych oraz wymuszenia niektórych ograniczeń dotyczących danych.

Przykładem takiego języka jest ODL wg standardu ODMG. • Schematy są również wyrażane w postaci graficznej; np. w UML.

Dla każdego wprowadzonego modelu składu konieczne jest opracowanie języka umożliwiającego zapis schematu. Jest to duże zadanie. • W tym wykładzie będziemy przyjmować (nie do końca słusznie), że schemat

jest ważny dla pragmatyki języka, ale jest mniej istotny dla jego semantyki.

• Z tego powodu dalej będziemy stosować notację ad hoc (wzorowaną na UML) popartą objaśnieniami i przykładami.