что оптимизатор должен полагаться только
неявно
предполагается, что оптимизатор должен полагаться только на
спецификацию объектов и не затрагивать их реализацию.
Обосновывается это требованием обеспечения позднего связывания
(во время выполнения запроса) с объектами, когда во время
компиляции запроса неизвестна реализация операций.
Конечно, это правильно, если поддерживать возможности
переопределения внутренних структур данных и реализации операций
в подтипах в полном объеме. Заметим, однако, что потребности в
полиморфизме такого рода довольно ограничены и можно, например,
потребовать явного указания при определении типа тех операций,
которые допускается переопределять в подтипах.
Тогда при компиляции запроса (выраженного, например, с помощью
предложенной выше алгебры объектов) по типу каждого
класса-операнда можно определить, какие операции и внутренние
структуры данных являются общими для всех подклассов этого
класса.
Поскольку мы не хотим раскрывать инкапсуляцию объектов при
формулировании запросов, предикаты выборки объектов (это касается
оператора селекции) могут задаваться только с привлечением
операций класса (вернее операций типа этого класса). При
компиляции запроса можно отметить те предикаты, в которых
используются операции-инварианты подклассов данного класса.
После этого можно воспользоваться реализацией этих операций для
упрощения предикатов и сведения их в лучшем случае к предикатам
на внутренних атрибутах объектов. Фактически должно быть
произведено частичное вычисление предикатов выборки на основе
параметров логического выражения выборки и внутреннего
представления типа. Конечно, технически эта процедура может быть
выполнимой только в том случае, если в качества языка
программирования типов используется язык достаточно высокого
уровня (например, некоторый чисто функциональный или логический
язык).
Литература
- Malkolm Atkinson, Francois Bansilhon, David DeWitt, Klaus
Dittrich, David Maier, Stanley Zdonik. The Object-Oriented
Database System Manifesto // 1st Int.
Содержание Назад Вперед