I.
Wprowadzenie do  języków zapytań (1)
II.
Wprowadzenie do  języków zapytań (2)
III.
Pojęcia obiektowości w bazach danych (1)
IV.
Pojęcia obiektowości w bazach danych (2)
V.
Podstawy semantyczne języków zapytań
VI.
Modele składu obiektów
VII.
Stos środowisk, rezultaty zapytań, funkcja nested
VIII.
Język SBQL (Stack-Based Query Language) (1)
IX.
X.
Dalsze własności SBQL
XI.
Operatory order by i group by
XII.
Przetwarzanie struktur nieregularnych
XIII.
Rozszerzenie języków zapytań o konstrukcje imperatywne
XIV.
Procedury, procedury funkcyjne, metody, reguły zakresu
  Wstęp
  1. Parametry procedur
  2. Procedury w SBQL
  3. Rozszerzenie SBQL w modelu M3
  4. Reguły zakresu
  Podsumowanie
  Zadania
XV.
Parametry procedur i metod, procedury rekurencyjne, optymalizacja poprzez modyfikację zapytań

 

1. Parametry procedur

Procedury mogą mieć parametry. W odróżnieniu od funkcji matematycznych, gdzie w zasadzie nie mówi się o sposobach komunikowania parametrów, w językach programowania wykształciło się kilka dobrze rozpoznanych metod komunikowania parametrów o istotnych różnicach semantycznych. Niżej podamy krótki ich przegląd.

Wołanie poprzez wartość (call-by-value). Technika przekazywania argumentu procedury (lub metody) do jej wnętrza, w której przekazywana jest wartość argumentu obliczona przed przekazaniem sterowania do wnętrza procedury. Jeżeli argumentem jest referencja, to dokonuje się automatycznie dereferencji. W niektórych językach tworzy się lokalną zmienną zawierającą kopię wartości przekazanej jako argument. Zmienna ta ma nazwę parametru formalnego i można ją aktualizować tak jak zwykłą lokalną zmienną. W innych językach taka aktualizacja takiej zmiennej jest zabroniona, gdyż parametr w ciele procedury jest inaczej traktowany niż zmienna.

Wołanie poprzez referencję (call-by-reference). Technika przekazywania argumentu procedury (lub metody) do jej wnętrza, w której przekazywana jest referencja do obiektu. Dzięki temu wewnątrz procedury można dokonać zmiany stanu (aktualizacji) obiektu zewnętrznego w stosunku do tej procedury. Wołanie przez referencję jest kojarzone z własnością zmienności (mutability). Obiekt przekazywany poprzez referencję jest dostępny w ciele procedury nie pod swoją nazwą, lecz pod nazwą jej odpowiedniego parametru formalnego. Wołanie przez referencję musi być odróżnione od innych sposobów wołania poprzez składnię. W językach Pascalo-podobnych jest to słowo kluczowe var. W innych językach (np. IDL CORBA) są to słowa kluczowe inout oraz out; drugie z nich oznacza, że komunikowany obiekt (zmienna) może nie być zainicjowany, wobec czego nie wolno go czytać. Dla symetrii, w takich systemach wołanie przez wartość oznacza się słowem kluczowym in.

Ścisłe wołanie przez wartość. W technice tej nie występuje zróżnicowanie na wołanie przez wartość i wołanie przez referencję. Jeżeli komunikowana jest wartość, to jest przekazywana do ciała procedury, tak jak w wołaniu przez wartość. Jeżeli komunikowana jest referencja (pointer), to bez żadnych zmian przekazywana jest ona do wnętrza procedury, tak jak w wołaniu przez referencję. Przykładem zastosowania tej techniki jest język C.

Wołanie poprzez wartość ze zwrotem (call-by-value-return). Wołanie poprzez referencję, w którym wewnątrz ciała procedury tworzy się lokalną kopię obiektu (zmiennej), którego referencja jest przekazana jako parametr. Wszelkie operacje na parametrze wewnątrz ciała procedury następują na tej lokalnej kopii, a nie na oryginalnej zmiennej (różnica z wołaniem przez referencję). W momencie zakończenia procedury wartość tego lokalnego obiektu podstawia się z powrotem na obiekt, którego referencja jest przekazana jako parametr. Technika ma duże znaczenia w systemach rozproszonych, gdzie komunikowana referencja może dotyczyć obiektu znajdującego się poza przestrzenią adresową pamięci operacyjnej danego komputera. Technika nie jest w pełni semantycznie "czysta", gdyż umożliwia nałożenie się dwóch lub więcej aktualizacji w ramach tego samego programu lub nawet tej samej procedury, co spowoduje stratę aktualizacji, czyli błąd w programie.

Wołanie poprzez nazwę (call-by-name). Technika przekazywania parametrów (po raz pierwszy zastosowana w języku Algol-60) polegająca na tym, że parametru nie oblicza się w momencie wołania metody/procedury, ale przekazuje się go w postaci kodu (tekstu) wyrażenia będącego parametrem aktualnym. Tekst ten zastępuje wszystkie wystąpienia parametru formalnego w ciele metody/procedury (parametr jest traktowany jak makros). Specyfiką tej techniki jest to, że środowisko, w którym taki parametr jest ewaluowany, jest środowiskiem wywołania tej metody/procedury, a nie jej środowiskiem lokalnym (co jest konieczne z semantycznego punktu widzenia); jest to zwykle implementowane poprzez przekazanie wskaźnika do kodu/tekstu będącego parametrem aktualnym. Technika nie jest semantycznie "czysta", gdyż może powodować efekt, w którym obliczane wartości parametru w poszczególnych miejscach ciała metody/procedury nie są identyczne ze względu na to, że wewnątrz ciała metody mógł ulec zmianie stan, na podstawie którego obliczany jest parametr. Technika ta jest powszechnie stosowana w przypadku parametrów makr. Może mieć również znaczenie dla technik optymalizacyjnych (w szczególności, optymalizacji zapytań) opartych na przepisywaniu (rewriting).

Wołanie poprzez potrzebę (call-by-need). Technika przekazywania parametrów określana także jako leniwa ewaluacja (lazy evaluation). Oznacza opóźnienie wyliczania wartości parametru aktualnego do momentu, kiedy będzie rzeczywiście potrzebny wewnątrz ciała metody/procedury. Parametr jest ewaluowany tylko raz (różnica z wołaniem przez nazwę), w środowisku wywołania metody/procedury. Technika ma na celu optymalizację czasu wykonywania i może być kombinowana z innymi metodami (call-by-value, call-by-reference itd.). Podobnie do wołania przez nazwę, technika ta jest semantycznie "brudna", gdyż może prowadzić do efektu, w którym wartość wyliczonego parametru jest inna niż wartość, która byłaby wyliczona w momencie wołania metody/procedury.


Niektóre z tych metod będą omówione dla przypadku parametrów będących zapytaniami. Możliwe są nowe metody niespotykane lub rzadko spotykane w literaturze. Przykładem jest wołanie, w którym każdy parametr aktualny jest skojarzony z nazwą parametru formalnego. Umożliwia to przy wywołaniu dowolną kolejność parametrów oraz pomijanie parametrów (zastępowanie ich wartościami domyślnymi). Metoda ta ma znaczenie dla modelowania pojęciowego oraz jakości, czytelności i zwartości programów. Odmiana tej metody występuje np. w systemie Ingres Windows 4GL.

Copyrights © 2006 PJWSTK
Materiały zostały opracowane w PJWSTK w projekcie współfinansowanym ze środków EFS.