Języki i Środowiska Programowania Baz Danych | |
|
1. Konstrukcje deklaratywne i imperatywne Założeniem języków zapytań jest deklaratywność, czyli wyrażanie bezpośrednio celu wyszukiwania, a nie operacji prowadzących do tego celu. Deklaratywność jest często wiązana ze specyficznymi systemami opartymi na programowaniu w logice, takimi jak Prolog lub Datalog. Zwolennicy tego rodzaju podejścia twierdzą niekiedy, że tylko wyrażenia logiki matematycznej (i pochodne) są w pełni deklaratywne. Tego rodzaju opinie będziemy uważać za koniunkturalne próby zbudowania fałszywego stereotypu mającego na celu wywyższenia danego paradygmatu naukowego nad inne. W istocie, jakakolwiek specyficzna składnia lub semantyka, nawet jeżeli jest budowana na gruncie logiki matematycznej, nie ma w tym zakresie przewagi z definicji. Deklaratywność wynika z psychologii, odczuć użytkownika języka, a nie z jakichkolwiek tworów formalnych. Przykładowo, zarówno algebra relacji, jak i SQL są uważane za języki deklaracyjne, mimo że ich semantyka jest objaśniana w sposób operacyjny. W istocie, deklaratywność nie jest celem samym w sobie - ma o tyle znaczenie, o ile skraca czas tworzenia programu, czyni go bardziej zrozumiałym, oraz zapewnia łatwiejszą i mniej kosztowną pielęgnację. Deklaratywność oznacza więc minimalizowanie tych elementów w wyrażeniach języka, które odnoszą się do środowiska komputerowego, oraz maksymalizowanie tych elementów, które odnoszą się do dziedziny przedmiotowej i modelowania pojęciowego tej dziedziny zachodzącego w umyśle projektanta lub programisty. Kluczem do deklaratywności jest uzyskanie jak najprostszego odwzorowania pojęciowego pomiędzy rzeczywistym problemem w dziedzinie przedmiotowej a zapisem bądź rozwiązaniem tego problemu w środowisku komputerowym; i odwrotnie. Z technicznego punktu widzenia konstrukcje deklaratywne nie mogą (lub raczej nie powinny) zmieniać stanu. Zmiany stanu (np. stanu bazy danych) wymagają wprowadzenia konstrukcji imperatywnych.
Twórcy koncepcji opartych na programowaniu w logice starają się retuszować ten oczywisty fakt poprzez różnorodne konstrukcje. Np. w systemie LDL zastosowano mimikrę syntaktyczną w postaci symbolu -, który "przypomina" negację, ale w istocie jest konstrukcją imperatywną, której semantyką jest usunięcie pewnej danej [Mant93]. Obecność tego rodzaju konstrukcji zmusza do odpowiedzi na pytanie, czy twórcy tego rodzaju koncepcji w swojej misji zbudowania stereotypu "programowania deklaracyjnego" nie posuwają zbyt daleko, poza granicę zwyczajnej uczciwości w przedstawianiu faktów takimi, jakimi one naprawdę są. Konsekwencje obecności tego rodzaju symboli w programach logicznych są następujące:
Przy konstrukcji rozszerzeń zdefiniowanego przez nas języka SBQL będziemy starali się trzymać czystości rozdzielenia tej części języka, która nie może zmienić stanu obiektów (czyli "czystych" deklaratywnych zapytań), oraz części, która będzie zajmować się zmianami stanu (czyli części imperatywnej). Generalnie, będziemy stosowali zasadę, zgodnie z którą efekty uboczne w zapytaniach są niewskazane. Mamy do tego dwa ważne powody:
Będziemy przyjmować, że dotychczas zdefiniowane przez nas zapytania w SBQL są częścią deklaratywną konstruowanego przez nas języka. Część deklaratywna nie będzie z definicji posiadać efektów ubocznych, ale nie będziemy zabraniać zastosowania efektów ubocznych w zapytaniach poprzez umieszczenie w nich funkcji lub metod, które tego rodzaju efekty posiadają. Zapytania mogą służyć do wyznaczania zmian w bazie danych poprzez specjalne konstrukcje, które będziemy nazywać imperatywnymi. Podział całości języka na część deklaratywną i imperatywną będzie wynikać ze składni. |
Copyrights © 2006 PJWSTK Materiały zostały opracowane w PJWSTK w projekcie współfinansowanym ze środków EFS. |