|
Программирование >> Хронологические базы данных
(0,1) (0.0) (1.1) (1,0) Рис. 24.1. Прямоугольник с координатами Рис. 24.2. Квадрат с координатами (О, О, (х1, х2, у1, у2) 1, 1) Очевидная формулировка этого запроса на языке SQL может быть представлена следующим образом. SELECT ... FROM RECTANGLES WHERE ( XI >= О AND XI <= 1 AND Yl >= 0 AND Yl <= 1 ) - нижний левый угол внутри квадрата OR ( Х2 >= О AND Х2 <= 1 AND Y2 >= О AND Y2 <= 1 ) - верхний правый угол внутри квадрата OR ( XI >= О AND XI <= 1 AND Y2 >= О AND Y2 <= 1 ) - верхний левый угол внутри квадрата OR ( Х2 >= О AND Х2 <= 1 AND Yl >= О AND Yl <= 1 ) - нижний правый угол внутри квадрата OR ( XI <= О AND Х2 >= 1 AND Yl <= О AND Y2 >= 1 ) прямоугольник полностью помещается в квадрат OR ( XI <= О AND Х2 >= 1 AND Yl >= О AND Yl <= 1 ) - нижний край пересекает квадрат OR ( XI >= О AND XI <= 1 AND Yl <= О AND Y2 >= 1 ) левый край пересекает квадрат OR ( Х2 >= О AND Х2 <= 1 AND Yl <= О AND Y2 >= 1 ) правый край пересекает квадрат OR ( XI <= О AND Х2 >= 1 AND Y2 >= О AND Y2 <= 1 ) ; верхний край пересекает квадрат {Упражнение. Убедитесь в том, что эта формулировка действительно корректна.) Однако нетрудно догадаться, что данный запрос можно сформулировать и в более простой форме. SELECT ... FROM RECTANGLES WHERE ( XI <= 1 AND Yl <= 1 нижний левый угол находится ниже и левее точки (1,1) AND Х2 >= О AND Y2 >= О ) ; - верхний правый угол находится выше и правее точки (0,0) (В упр. 24.3 в конце главы предлагается убедиться, что эта формулировка также корректна.) Возникает вопрос, может ли системный оптимизатор преобразовать исходную длинную форму запроса в соответствующую ему краткую форму. Иначе говоря, предположим, что пользователь выражает запрос в очевидной (и, очевидно, неэффективной) длинной форме. Может ли система перед выполнением запроса сократить его формулировку, сделав ее более эффективной? В [24.17] приведено доказательство того, что это почти всегда невозможно, по крайней мере оптимизаторы современных коммерческих продуктов такой возможностью не обладают. В любом случае, несмотря на то что краткая формулировка более эффективна , ее производительность может оказаться неприемлемо низкой в больщинстве современных реляционных продуктов, в которых используются обычные структуры памяти, например индексы в виде В-деревьев. (В среднем, система будет проверять 50% элементов индекса для каждой из координат XI, Х2, Y1 и Y2.) Таким образом, можно утверждать, что современные реляционные продукты действительно несоверщенны в некоторых отнощениях. Точнее говоря, проблемы, подобные описанной выше, иллюстрируют, что в этих продуктах некоторые простые запросы пользователя неоправданно сложно формулируются и выполняются с неприемлемо низкой производительностью. Именно эти соображения послужили основным побудительным мотивом для развития объектных систем. Замечание. В главе 25 (раздел 25.1) будет приведено эффективное решение задачи о прямоугольниках. 24.2. Объекты, классы, методы и сообщения Ниже представлены некоторые основные термины и концепции объектного подхода, а именно - сами объекты (естественно), объектные классы, методы и сообщения. Там, где это возможно и уместно, данные понятия сравниваются с более знакомыми понятиями. Фактически в весьма приблизительной форме объектную терминологию вполне можно соотнести с терминологией традиционного программирования (рис. 24.3).
Рис. 24.3. Объектная терминология (сводка) Предупреждение. Прежде чем перейти к подробному освещению данной темы, необходимо предупредить читателя, что впредь не следует ожидать точности изложения, присущей реляционной теории. Действительно, многие объектные концепции (или их опубликованные определения) выражены не очень точно, относительно формулировки их определений единства мнений не достигнуто и разногласия возникают даже по фундамен- тальным вопросам (в этом можно убедиться, прочитав работы [24.11], [24.48] и [24.52]). Например, не существует абстрактной, формально определенной объектной модели данных , нет согласия даже в отношении неформальной модели. (Поэтому в данной книге термин объектная модель приводится в кавычках.) Также, как это ни странно, нет четкого разграничения между уровнями абстракции, в частности (ключевого!) разграничения между самой моделью и ее реализацией. Напомним, что в главе 1 описано, в чем заключается различие между этими концепциями. Читателя следует также предупредить о том, что, исходя из сказанного выше, определения и объяснения, предложенные в этой главе, не являются универсальными, а также не обязательно полностью соответствуют принципу работы всех реальных объектных систем. Действительно, почти все предлагаемые здесь определения и толкования могут быть подвергнуты (и, вероятно, будут подвергнуты) критике со стороны специалистов. Обзор объектной технологии Вопрос: Что такое объект? Ответ: Все что угодно! Основной догмат объектного подхода - объектом может быть все что угодно (или иногда говорят все что угодно - объект первого класса ). Одни объекты являются неизменяемыми; в качестве примера можно привести числа (например, 3, 42) и символьные строки (например, Mozart , Экономика и бизнес ). Другие объекты - изменяемые; примерами могут служить объекты, представляющие отделы и служащих, которые упоминались в начале раздела 24.1. Согласно традиционной терминологии неизменяемые объекты соответствуют значениям, а изменяемые - переменным с произвольной внутренней сложностью (т.е. такие объекты могут содержать любое количество типов данных, имеющихся в обычных языках программирования, и конструкторов этих типов - чисел, строк, списков, массивов, стеков и т.д.). Замечание. В некоторых системах термин объект употребляется только для изменяемого объекта, а термин значение, или иногда литерал, - для неизменяемого объекта. Даже в тех системах, в которых термин объект используется как в первом, так и во втором случаях, следует помнить о том, что неформально, за исключением особо оговоренных ситуаций, под ним подразумевается изменяемый объект, если явно не указано обратное. Каждый объект имеет тип (в объектной терминологии - класс). Отдельные объекты иногда называются экземплярами объектов, чтобы их можно было отличить от соответствующего объектного типа или класса. Обратите внимание, что термин тип здесь используется в смысле, принятом в традиционном программировании (как в главе 5), в частности этот термин включает в себя и набор операторов (в объектной терминологии - методов), которые могут применяться для объектов данного типа. Замечание. На самом деле в некоторых объектных системах понятия типов и классов различаются. Такие системы кратко будут рассмотрены в разделе 24.3; однако пока мы будем использовать эти понятия как взаимозаменяемые. Объекты инкапсулированы. Это означает, что физическое представление, т.е. внутренняя структура объекта, например объекта DEPT (Отдел), остается скрытой от пользователей. В действительности пользователю известно только то, что объект в состоянии вьшолнять неко- Заметим, однако, что тер.мин переменная без дополнительного уточнения в объектном контексте часто используется для обозначения такой переменной, которая содержит идентификатор объекта (о чем пойдет речь далее в этом разделе).
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |