Języki i Środowiska Programowania Baz Danych | |||||||
|
3. Funkcja nested W poprzedniej sekcji staraliśmy się pokazać, że wewnętrzne środowisko pojedynczego obiektu powinno być w pewnych sytuacjach umieszczone na ENVS po to, aby istniała możliwość spójnego i jednorodnego wiązania nazw występujących w zapytaniach, w szczególności nazw atrybutów. Obecnie sformalizujemy i uogólnimy to pojęcie oraz określimy sposób jego wyznaczania. Naszą intencją jest zdefiniowanie funkcji, której argumentem jest referencja (identyfikator) do obiektu, zaś wynikiem jest wewnętrzne środowisko tego obiektu, które ma być umieszczone na ENVS. Jak zdefiniowaliśmy poprzednio, takie środowisko jest zbiorem binderów. Funkcję nazwaliśmy nested. Funkcja nested odnosi się do danego składu obiektów; inaczej mówiąc, skład obiektów jest jej parametrem implicite. Funkcja została zilustrowana na Rys.39. Funkcję nested musimy uogólnić w taki sposób, aby jej argumentem był dowolny rezultat zapytania. Wiąże się to z tym, że operatory języka zapytań (np. operator selekcji where) będą przetwarzały dowolne kolekcje element po elemencie i w każdym z tych kroków będą zmieniały wierzchołek stosu ENVS. Definicja funkcji powinna więc uwzględniać dowolne wartości zwracane przez zapytania. Odpowiednio więc do rekurencyjnej definicji zbioru rezultatów zapytań zdefiniujemy funkcję nested:
Funkcję nested będziemy także stosować do identyfikatorów klas. W tym przypadku przyjmujemy, że klasa jest obiektem, wobec tego funkcja nested zwróci bindery do wszystkich własności tego obiektu, np. do metod, typów itd. Może się zdarzyć, że w pewnym modelu składu (różnym od M0-M3) przy obliczaniu nested(i) nie można zwrócić bindera z referencją do podobiektu, gdyż ta referencja nie istnieje lub jest niedostępna. Przykładem jest sytuacja, kiedy w obiekcie z identyfikatorem i pewien atrybut jest stałą lub jest wyliczany na bieżąco. W takich sytuacjach funkcja nested może zwrócić po prostu binder n(v), gdzie n jest nazwą atrybutu z obiektu i, zaś v jest wartością (a nie referencją do) tego atrybutu. Jedynym skutkiem takiej zmiany modelu składu i funkcji nested jest to, że dla takiego atrybutu nie można będzie stosować operacji aktualizacyjnych, które wymagają referencji do atrybutu. Zapytania wyszukujące będą oczywiście bez problemów działać przy tak zmodyfikowanej funkcji nested. Zwrócimy uwagę, że funkcja nested nie dokonuje operacji na stosie środowiskowym. Jest ona funkcją w sensie matematycznym, parametryzowaną stanem składu i nie posiadającą efektów ubocznych. Fizyczne umieszczenie rezultatu funkcji nested odbywa się poprzez procedurę eval (od ang. evaluation) dokonującą ewaluacji zapytania, która wykorzystuje funkcję nested w ramach pewnego mechanizmu. Sposób wykorzystania tej funkcji może być bardziej złożony niż mechaniczne przeniesienie wyniku funkcji nested na stos środowiskowy. Przykłady działania funkcji nested (patrz skład z Rys.23 i Rys.24):
|
||||||
Copyrights © 2006 PJWSTK Materiały zostały opracowane w PJWSTK w projekcie współfinansowanym ze środków EFS. |