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
  Wstęp
  1. Konstrukcje deklaratywne i imperatywne
  2. Zasada korespondencji
  3. Elementarne konstrukcje językowe w językach imperatywnych
  Podsumowanie
  Zadania
XIV.
Procedury, procedury funkcyjne, metody, reguły zakresu
XV.
Parametry procedur i metod, procedury rekurencyjne, optymalizacja poprzez modyfikację zapytań

 

2. Zasada korespondencji

Podstawowym drogowskazem przy konstruowaniu języka programowania opartego na języku zapytań będzie dla nas zasada korespondencji (correspondence principle).

Zasada korespondencji mówi, że wraz z wprowadzeniem do języka pewnej cechy X należy precyzyjnie określić inne relewantne cechy języka w taki sposób, aby cecha X współdziałała z już istniejącymi konstrukcjami, została wtopiona w istniejące lub zmodyfikowane mechanizmy nazywania, typowania, zakresu i wiązania oraz miała zapewnioną uniwersalną obsługę.

Przykładowo, jeżeli cecha X jest dynamiczną tablicą, to odpowiednimi pytaniami są: czy może być składową zapisu (struktury, obiektu), czy może być parametrem procedury, czy może być zwrócona przez procedurę funkcyjną, jakie środki będą przewidziane do typizacji, wyszukiwania, aktualizacji, usuwania, dostawiania elementów; itd.

Oddolny rozwój niektórych języków (np. SQL) jest przyczyną wielu przypadków łamania zasady korespondencji, co objawia się m.in. tym, że nowo dodawane cechy nie dają się gładko kombinować ze starymi cechami. Przykładem złamania zasady korespondencji w SQL jest sposób wprowadzenia do niego wartości NULL lub konstrukcja group by.

Zasada korespondencji może i powinna być rozszerzona dalej, poza samą kwestię definicji języka. Jeżeli wprowadzamy do języka cechę X, to równie ważne stają się odpowiedzi na następujące pytania:

  • Czy istnieje dostatecznie jasna pragmatyka cechy X, tj. sposób przełożenia konkretnej potrzeby w dziedzinie przedmiotowej na zastosowanie cechy X? Jeżeli nie ma takiej jasnej pragmatyki, to cecha X jest po prostu redundantnym, spekulacyjnym lub scholastycznym tworem.

  • Czy cecha X jest uwzględniona w metodyce projektowania aplikacji i/lub metodyce projektowania baz danych? Jeżeli nie, to cecha X stanie się cechą uboczną, pozostawioną decyzji programisty, co w przypadku niektórych cech zredukuje lub uniemożliwi ich zastosowania.

  • Czy cecha X nie jest redundantna, tj. czy może być zastąpiona przez kombinację już istniejących cech bez istotnego wzrostu pracochłonności projektowania i programowania, wzrostu pracochłonności konserwacji oprogramowania, spadku jakości oprogramowania itd.?

  • Czy i jak cecha X będzie osiągalna z zewnętrznych interfejsów, nie bazujących na definiowanym przez nas języku? Np. jeżeli do danego systemu relacyjnego dodano pewne cechy obiektowe, to mogą one być nieosiągalne dla interfejsów opartych na SQL, np. ODBC, co zredukuje zainteresowanie projektantów i programistów do stosowania tej cechy.

  • Jak cecha X została udokumentowana i objaśniona na przykładach? Jeżeli dokumentacja i przykłady są zbyt lakoniczne, zbyt matematyczne lub zbyt infantylne (dotyczące pewnych zabawowych zastosowań), to cecha może nie być rozumiana od strony możliwości jej użycia.

  • Czy cecha X jest błędogenna lub niebezpieczna dla powszechnego programisty, czy nie prowadzi do raf semantycznych (wyniku niezgodnego z powszechnym odczuciem semantyki tej cechy), czy nie prowadzi do utraty pewnych użytkowych cech systemów, np. bezpieczeństwa, ochrony, skalowalności, współbieżności itd.?

  • Jakie środki dydaktyczne będą zastosowane w celu objaśnienia i zareklamowania użycia cechy X na kursach dla studentów, projektantówi programistów?


Jak widać z tych pytań, niekoniecznie wprowadzenie nowej cechy do środowiska programistycznego oznacza poprawę. Autor jest zdania, że wiele cech wprowadzanych przez różnych autorów do języków programowania okazało wsteczny wpływ, zahamowało postęp, zamiast go wspomagać. Dotyczy to szczególnie wielu propozycji akademickich, w tym większości propozycji mających "zdrowe podstawy matematyczne" lub "głęboko uzasadnionych matematycznie", produkowanych przez osoby nie mające jakichkolwiek doświadczeń praktycznych.

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