Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałDobrosław Zdziebłowski Został zmieniony 10 lat temu
1
Języki i środowiska programowania systemów rozproszonych, Wykład 05, Slajd 1 2011 Języki i środowiska programowania systemów rozproszonych Wykładowca: Tomasz Kowalski Wykłady przygotowane na podstawie materiałów prof. Kazimierza Subiety Wykład 5 Stos środowisk, rezultaty zapytań, funkcja nested
2
Języki i środowiska programowania systemów rozproszonych, Wykład 05, Slajd 2 2011 Stos środowisk Pojęcie stosu środowisk pojawiło się w informatyce w latach 60-tych. Od tego czasu stos ten jest elementem konstrukcji większości znanych języków, włączając Pascal, C/C++, Smalltalk, Java, itd. Idea jest prosta i oczywista, ale nie jest często dostatecznie dobrze objaśniona w podręcznikach. Przy konstrukcji semantyki języków zapytań musimy wrócić do stosu środowisk. Zasady zarządzania środowiskami programu mają wpływ na technikę i niezawodność programowania. Są one następujące: Środowisko lokalne danego bytu programistycznego ma priorytet w stosunku do środowiska bardziej globalnego. Zasada lokalnego kontekst. Zasada dowolnego zagnieżdżania wołań procedur. environment stack
3
Języki i środowiska programowania systemów rozproszonych, Wykład 05, Slajd 3 2011 Ilustracja działania stosu środowisk Procedura p1 wywołuje procedurę p2, która wywołuje procedurę p3 czas... Sekcja danych globalnych Sekcja lokalnych danych i parametrów procedury p1... Sekcja danych globalnych Wywołanie p1 Sekcja lokalnych danych i parametrów procedury p2 Sekcja lokalnych danych i parametrów procedury p1... Sekcja danych globalnych Wywołanie p2 Sekcja lokalnych danych i parametrów procedury p3 Sekcja lokalnych danych i parametrów procedury p2 Sekcja lokalnych danych i parametrów procedury p1... Sekcja danych globalnych Wywołanie p3 Sekcja lokalnych danych i parametrów procedury p1... Sekcja danych globalnych Wyjście z p2 Wyjście z p1... Sekcja danych globalnych Sekcja lokalnych danych i parametrów procedury p2 Sekcja lokalnych danych i parametrów procedury p1... Sekcja danych globalnych Wyjście z p3
4
Języki i środowiska programowania systemów rozproszonych, Wykład 05, Slajd 4 2011 Wiązanie Wiązanie jest to zastępowanie nazw występujących w tekście programu na byty programistyczne czasu wykonania, np. na adresy RAM, identyfikatory obiektów, adresy startowe procedur, itd. Przykładowo, wiązanie nazwy zmiennej x oznacza zastąpienie tej nazwy przez adres RAM, gdzie przechowywana jest wartość zmiennej x. Wiązanie może być wczesne lub statyczne (early binding, static binding), czyli odbywa się w czasie kompilacji, albo późne lub dynamiczne (late binding, dynamic binding), czyli odbywa się w czasie wykonania. binding
5
Języki i środowiska programowania systemów rozproszonych, Wykład 05, Slajd 5 2011 Przykładowa sytuacja na stosie środowisk Zmienne e, f zadeklarowane wewnątrz bloku l Zmienne c, d i parametry z(55), t(83) procedury p2 Zmienne a, b i parametry x, y procedury p1......... Zmienne i inne byty globalne Wierzchołek stosu Dół stosu Kolejność poszukiwania wiązania dla zmiennej g procedure p1( x, y ) { deklaracje zmiennych a, b;... call p2( 55, 83 );... } procedure p2( z, t ) { deklaracje zmiennych c,d;... { (* blok l *) deklaracje zmiennych e, f; g := 75;... };... } Wykonywany jest blok l w procedurze p2 wywołanej z p1.
6
Języki i środowiska programowania systemów rozproszonych, Wykład 05, Slajd 6 2011 Po co jest mechanizm stosu środowiskowego? Abstrakcja i hermetyzacja. Izolacja. Semantyczna niezależność i ponowne użycie. Wywoływanie procedur z innych procedur. Spójne zarządzanie nazwami użytymi w programie. Realizacja metod transmisji parametrów. Kontrola typologiczna (analiza statyczna). Podane motywacje mają znaczenie dla języków zapytań, pozwalając zrealizować takie ich założenia jak: możliwość dowolnego zagnieżdżania zapytań, możliwość powoływania lokalnych nazw wewnątrz zapytań, możliwość używania nazw z bazy danych łącznie z nazwami zmiennych programistycznych, nazwami procedur, funkcji i metod.
7
Języki i środowiska programowania systemów rozproszonych, Wykład 05, Slajd 7 2011 Stos środowisk w SBA Stos środowisk dostosujemy do wymagań semantyki języków zapytań oraz konstrukcji pochodnych, takich jak perspektywy, procedury bazy danych, itd. Stos będzie spełniać następujące założenia: Będzie zgodny z modelami składu AS0 - AS3. Będzie w jednorodny sposób traktował dane indywidualne i kolekcje. Maksymalny rozmiar stosu nie będzie implementacyjnie ograniczony. Stos będzie składał się z sekcji, gdzie każda sekcja będzie przechowywać informację o pewnym środowisku czasu wykonania, np. środowisku wywołania pewnej funkcji, procedury lub metody, środowisku wnętrza pewnego obiektu, środowisku wnętrza pewnej klasy, środowisku obiektów bazy danych, itd. Rozmiar sekcji nie będzie ograniczony. Na dole stosu umieszczone będą sekcje globalne, do których należą globalne zmienne aplikacji, baza danych, wspólne biblioteki procedur i funkcji, oraz zmienne środowiskowe systemu komputerowego.
8
Języki i środowiska programowania systemów rozproszonych, Wykład 05, Slajd 8 2011 Binder Podstawową strukturą przechowywaną na stosie środowisk jest binder. Binder jest parą, gdzie n jest zewnętrzną nazwą (nazwą zmiennej, stałej, obiektu, funkcji, perspektywy, procedury, metody, itd.), zaś x jest bytem czasu wykonania (zwykle referencją do obiektu). Parę będziemy zapisywać n( x ). Definicję tę uogólnimy. Koncepcja bindera jest bardzo prosta. Zadaniem bindera n(x) jest wiązanie, czyli zastąpienie nazwy n występującej w zapytaniu lub programie na wartość x, będącą bytem czasu wykonania. Dla dowolnej nazwy występującej w programie musi być na stosie odpowiedni binder, który zamieni tę nazwę na byt czasu wykonania. Nazwa, dla której odpowiadający jej binder nie istnieje, nie może być związana, czyli jest błędna. Przy luźnych modelach składu (tzw. półstrukturalnych, semistructured) możemy uznać, że wiązanie takiej nazwy jest puste (jest pustym zbiorem). binder
9
Języki i środowiska programowania systemów rozproszonych, Wykład 05, Slajd 9 2011 Rola binderów Uogólnienie: Binder jest parą n(x), gdzie n może być dowolną zewnętrzną nazwą definiowaną przez programistę, użytkownika, projektanta aplikacji, projektanta bazy danych, itp., zaś x może być dowolnym rezultatem zwracanym przez zapytanie. W podejściu stosowym do języków zapytań stos środowisk składa się z sekcji odpowiadających poszczególnym środowiskom czasu wykonania. Sekcja jest zbiorem binderów do bytów programistycznych odpowiadającego jej środowiska. W budowanej przez nas semantyce bindery będą miały także inne zastosowania, w szczególności, będą niekiedy zwracane jako rezultaty zapytań. Stos środowiskowy będziemy oznaczać ENVS (ENVironment Stack).
10
Języki i środowiska programowania systemów rozproszonych, Wykład 05, Slajd 10 2011 Przykładowy skład i 1 Prac i 5 Prac i 9 Prac i 17 Dział i 22 Dział Obiekty trwałe i 127 Xi 128 Y Obiekty ulotne
11
Języki i środowiska programowania systemów rozproszonych, Wykład 05, Slajd 11 2011 Przykładowy ENVS Sekcja chwilowa przetwarzania Sekcja chwilowa przetwarzania - własności lokalne wywołanej metody Sekcja chwilowa przetwarzania - własności wnętrza aktualnie przetwarzanego obiektu Prac Sekcje danych globalnych Prac(i 1 ) X(i 127 ) Y(i 128 ) N(5) I("Maria")......... Nazwisko(i 10 ) Zarobek(i 11 ) Adres(i 12 ) PracujeW(i 16 )......... Bindery do obiektów/zmiennych nietrwałych aktualnej sesji użytkownika Prac(i 1 ) Prac(i 5 ) Prac(i 9 ) Dział(i 17 ) Dział(i 22 ) Bindery do globalnych funkcji bibliotecznych Bindery do zmiennych i funkcji środowiska komputerowego Sekcja bazy danych
12
Języki i środowiska programowania systemów rozproszonych, Wykład 05, Slajd 12 2011 Pojęcie stanu Pojedyncza referencja jest szczególnym przypadkiem rezultatu zapytania. W ten sposób, poprzez definicję składu obiektów i stosu ENVS uzyskaliśmy precyzyjną definicje pojęcia stanu. W podejściu stosowym pojęcie stanu (dziedzina Stan) jest definiowane jako stan składu obiektów plus stan stosu środowisk. Brak pojęcia stanu jest bardzo poważną wadą wielu koncepcji i modeli obiektowych, w szczególności standardów SQL-99, XQuery i ODMG. Zgodnie z wcześniejszymi definicjami, semantyka zapytania jest funkcją odwzorowującą stan, czyli skład obiektów oraz stan ENVS, w rezultat. Odwzorowaniem, które będzie podstawą dalszych definicji, jest semantyka pojedynczej nazwy występującej w zapytaniu lub w programie. Czynność ewaluacji takiej nazwy nosi nazwę wiązania. Wiązanie odbywa się na ENVS zgodnie z regułą stosu, które nakazuje przeszukiwanie stosu od jego wierzchołka w kierunku jego podstawy, z pominięciem niektórych sekcji.
13
Języki i środowiska programowania systemów rozproszonych, Wykład 05, Slajd 13 2011 Reguły wiązania nazw Zasady przeszukiwania stosu i wyznaczania rezultatu wiązania są następujące: Dla wiązanej nazwy n, ENVS jest przeszukiwany aż do znalezienia sekcji, w której znajduje się binder oznaczony nazwą n. Po znalezieniu takiej sekcji wyszukiwanie jest zakończone. Wszystkie bindery z tej sekcji oznaczone nazwą n tworzą rezultat przeszukiwania. Rezultat wiązania uzyskuje się poprzez odrzucenie ze znalezionych binderów nazwy n i pozostawienie wyłącznie wartości tych binderów.
14
Języki i środowiska programowania systemów rozproszonych, Wykład 05, Slajd 14 2011 Prac(i 1 ) X(i 127 ) Y(i 128 ) N(5) I("Anna")......... Nazwisko(i 10 ) Zarobek(i 11 ) Adres(i 12 ) PracujeW(i 16 )......... Prac(i 1 ) Prac(i 5 ) Prac(i 9 ) Dział(i 17 ) Dział(i 22 )......... start przeszukiwania stosu Mechanizm przeszukiwania stosu - funkcja bind bind( nazwa ) - funkcja wiązania nazw: bind( Prac ) = i 1 bind( Y ) = i 128 bind( I ) = "Anna" bind( Zarobek ) = i 11 bind( Dział ) = { i 17, i 22 } Binder Prac(i 1 ) znajduje się w dwóch sekcjach stosu, ale w tym przypadku wiązanie nazwy Prac zwróci i 1, a nie {i 1, i 5, i 9 }.
15
Języki i środowiska programowania systemów rozproszonych, Wykład 05, Slajd 15 2011 Rezultaty zwracane przez zapytania Oprócz referencji i wartości atomowych zapytania mogą zwrócić bindery. Uogólnienie podanych założeń prowadzi do następującej rekurencyjnej definicji dziedziny Rezultat: Atomowa wartość należąca do V (np. 3, "Kowalski", TRUE, itd.) należy do dziedziny Rezultat. Referencja do obiektu (inaczej identyfikator obiektu) dowolnego typu należąca do I należy do dziedziny Rezultat. W szczególności, do dziedziny Rezultat należą referencje do metod, procedur, funkcji, perspektyw, itd. Jeżeli x Rezultat, zaś n N jest dowolną nazwą, wówczas para n(x) należy do dziedziny Rezultat. Taki rezultat będziemy nazywać nazwaną wartością; w innym kontekście został on już określony jako binder. Jeżeli x 1, x 2, x 3,... są atomowymi wartościami, referencjami lub nazwanymi wartościamy, wówczas struct{ x 1, x 2, x 3,...} Rezultat. Kolejność elementów w strukturze ma znaczenie. Jeżeli x 1, x 2, x 3,... są wyżej wymienionymi rezultatami, wówczas bag{ x 1, x 2, x 3,...} Rezultat oraz sequence{ x 1, x 2, x 3,...} Rezultat.
16
Języki i środowiska programowania systemów rozproszonych, Wykład 05, Slajd 16 2011 Przykłady zbioru Rezultat Atomowe: 25, "Kowalski", i 11, i 18 Złożone: struct{i 1, i 56 } sequence{ i 1, i 6, i 11 } bag{ struct{i 1, i 56 }, struct{i 6, i 72 }, struct{i 11, i 72 }} bag{struct{n("Kowalski"), Zarobek(2500), d(i 56 )}} bag{struct{ Dział(i 56 ), Prac( bag{ struct{ n("Nowak"), s(i 9 ) }, struct{ n("Stec" ), s(i 14 ) }})} Przy pomocy podanych konstruktorów można tworzyć struktury przypominające obiekty. Nie są one jednak obiektami, ponieważ nie można im przypisać własnych identyfikatorów i nie można ich związać z istniejącą lub nową klasą. Używając terminologii ODMG, rezultaty zapytań są literalami. Takiej terminologii nie będziemy stosować.
17
Języki i środowiska programowania systemów rozproszonych, Wykład 05, Slajd 17 2011 Rezultaty zapytań zapisane jako tablice sequence{ i 1, i 6, i 11 } i 1 i 6 i 11 bag{ struct{i 1, i 56 }, struct{i 6, i 72 }, struct{i 11, i 72 }} i 1 i 6 i 11 i 56 i 72 bag{ struct{ n("Nowak"), s(i 9 )}, struct{ n("Stec"), s(i 14 )}, struct{ n("Mikuła" ), s(i 18 )}} n "Nowak" "Stec" "Mikuła" s i 9 i 14 i 18
18
Języki i środowiska programowania systemów rozproszonych, Wykład 05, Slajd 18 2011 Otwieranie nowego zakresu na stosie środowisk W klasycznych językach programowania otwieranie nowego zakresu na wierzchołku ENVS następuje w momencie wywołania procedury (funkcji, metody) lub w momencie wejścia sterowania w nowy blok. Skasowanie tej sekcji następuje w momencie zakończenia działania procedury (funkcji, metody) lub w momencie wyjścia sterowania z bloku. Do klasycznych sytuacji otwierania nowego zakresu na ENVS dołączymy nową. Stanowi ona istotę podejścia stosowego do języków zapytań. Pewne operatory występujące w zapytaniach (zwane niealgebraicznymi) działają na stosie podobnie do wywołań bloków programów. Np. w zapytaniu języka SBQL: Prac where (Nazwisko = Kowalski and Zarobek > 1000) część (Nazwisko = Kowalski and Zarobek > 1000) jest blokiem, który jest ewaluowany w nowym środowisku określonym przez wnętrze obiektu Prac aktualnie testowanego przez operator where. Na stos ENVS jest wkładana nowa sekcja zawierająca bindery do wszystkich wewnętrznych własności (atrybutów, metod, itd.) tego obiektu Prac.
19
Języki i środowiska programowania systemów rozproszonych, Wykład 05, Slajd 19 2011 Ilustracja otwierania nowego zakresu PRAC (i 1 ) PRAC (i 5 ) PRAC(i 9 ) DZIAŁ (i 17 ) DZIAŁ (i 22 ) Nazwisko(i 10 ) Zarobek(i 11 ) Adres(i 12 ) PracujeW(i 16 ) PRAC (i 1 ) PRAC (i 5 ) PRAC(i 9 ) DZIAŁ (i 17 ) DZIAŁ (i 22 ) Stos w momencie ewaluacji zapytania PRAC. Ewaluacja (wiązanie) nazwy PRAC zwraca {i 1, i 5, i 9 } PRAC where (Nazwisko = Kowalski and Zarobek > 1000) Stos w momencie ewaluacji pod-zapytania (Nazwisko = Kowalski and Zarobek > 1000) dla trzeciego obiektu PRAC. Ewaluacja (wiązanie) nazwy Nazwisko zwraca i 10. Ewaluacja (wiązanie) nazwy Zarobek zwraca i 11. Operator where iteruje po rezultacie zapytania PRAC. W każdej iteracji wkłada (i po ewaluacji zdejmuje) sekcję stosu zawierającą bindery do wnętrza kolejnego obiektu PRAC. wiązanie
20
Języki i środowiska programowania systemów rozproszonych, Wykład 05, Slajd 20 2011 Funkcja nested Intencją jest zdefiniowanie funkcji, której argumentem jest referencja do obiektu, zaś wynikiem jest wewnętrzne środowisko tego obiektu, które ma być umieszczone na ENVS. Takie środowisko jest zbiorem binderów. Funkcję nazwaliśmy nested. nested(i 9 ) = { Nazwisko (i 10 ), Zarobek (i 11 ), Adres (i 12 ), PracujeW (i 16 ) } i 9 Prac i 10 Nazwisko Barski i 11 Zarobek 2000 i 16 PracujeW i 13 Miasto Radom i 14 Ulica Wolska i 15 NrDomu 12 i 12 Adres
21
Języki i środowiska programowania systemów rozproszonych, Wykład 05, Slajd 21 2011 Uogólnienie funkcji nested Dla dowolnej wartości atomowej v V nested( v ) = (zbiór pusty). Dla identyfikatora i obiektu atomowego (nie posiadającego podobiektów) nested( i ) =. Dla obiektu złożonego,,..., }> nested( i ) = { n 1 (i 1 ), n 2 (i 2 ),..., n k (i k ) }. Dla identyfikatora i obiektu pointerowego dla którego istnieje w składzie obiekt nested( i ) = { n 1 (i 1 ) }. Dla dowolnego bindera n(x) nested( n(x) ) = { n(x) }. Jeżeli argumentem funkcji nested jest struktura elementów, wówczas wynik jest sumą teorio-mnogościową rezultatów funkcji nested dla pojedynczych elementów tej struktury nested( struct{ x 1, x 2, x 3,...}) = nested( x 1 ) nested( x 2 ) nested( x 3 )...
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.