Języki i Środowiska Programowania Baz Danych | ||||||||||||||||||||||||||||
|
3. Rozszerzenie SBQL w modelu M3 Model M3 rozszerza M1 lub M2 o listę eksportową, która dzieli własności klasy oraz własności obiektów tej klasy na publiczne i prywatne. Własności prywatne zarówno klasy K, jak i obiektów klasy K są dostępne wyłącznie z wnętrza ciała metod (publicznych i prywatnych) klasy tej samej K. Można to prosto zrealizować poprzez odpowiednie ustawienie sekcji stosu oraz poprawkę do funkcji nested. Niech iK będzie identyfikatorem obiektu klasy K posiadającej listę eksportową exportK. Lista ta zawiera nazwy własności klasy i obiektów tej klasy dostępnych publicznie. Funkcje nested_private oraz nested_public zmieniają definicję funkcji nested uwzględniając listę eksportową:
Dla argumentów nie będących identyfikatorami obiektów funkcje te są identyczne z funkcją nested. Funkcje te podobnie jak poprzednio rozszerzamy na dowolne struktury:
Rozpatrzmy zapytanie q1 q q2, gdzie q jest operatorem niealgebraicznym. Niech eval(q1) zwróci bag{ r1, r2,...}, gdzie r1, r2,... są referencjami do obiektów będących członkami klasy K1, która jest podklasą K2, która jest podklasą K3. Niech wiązana będzie pewna nazwa m występująca w q2, przy czym m nie jest nazwą metody. W takim przypadku sytuacja przypomina model M1, gdzie operator wkładał na stos sekcje własności obiektów i klas w odpowiedniej kolejności. W M3 wykorzystana jest w tej sytuacji funkcja nested_public, zaś kolejne stany stosu ENVS przy przetwarzaniu ri są takie, jak przedstawiono na Rys.74. Sytuacja jest nieco bardziej złożona, gdy wiązana jest nazwa m występująca w q2 i m jest nazwą metody.
W tym przypadku, na stos ENVS muszą być również włożone prywatne własności klasy, do której należy metoda m oraz prywatne własności obiektu przetwarzanego przez tę metodę (którego referencja jest zwrócona przez q1). Rys.75 przedstawia tę sytuację dla przypadku, gdy metoda m jest własnością klasy K2. Rys.76 przedstawia schemat bazy danych, gdzie własności publiczne są zaznaczone znakiem +, zaś prywatne znakiem -. Dla tego schematu podamy przykłady kilku poprawnych i niepoprawnych zapytań. Zwrócimy uwagę, że w ostatnim przypadku metoda ZarNetto jest błędna, mimo że jej wywołanie w znajdującym się dalej zapytaniu mogłoby być poprawne: binder z nazwą Nazwa znajduje się na stosie. Binder ten wstawił kwantyfikator $ działający na obiektach Dział. Stanęliśmy jednak na stanowisku, że programista programujący metodę ZarNetto nie może żądać ani liczyć na to, że ta metoda będzie wywołana w kontekście określonych operatorów działających na określonych obiektach. Stanowisko to jest podyktowane pewnym spekulacyjnym rozsądkiem, który jest często zawodny. Niewykluczone, że dla pewnej klasy języków i pewnych sytuacji taka semantyka może mieć sens.
|
|||||||||||||||||||||||||||
Copyrights © 2006 PJWSTK Materiały zostały opracowane w PJWSTK w projekcie współfinansowanym ze środków EFS. |