Разработка прототипа системы управления объектно-ориентированной базой данныхРефераты >> Программирование и компьютеры >> Разработка прототипа системы управления объектно-ориентированной базой данных
Список POST_TRIGGERS позволяет исключить часть данных из результата выполненной объектом операции, создав тем самым локальное пользовательское представление.
Впрочем, тема безопасности заслуживает отдельного рассмотрения. Как, например, в [9] и [18].
2.6 Действие (knowhow)
Действие представляет собой объект типа “строка”, хранящий текст ДССП-процедуры. Ссылка на действие может хранится в поле OBJKH объекта, через который и происходит вызов действия. Алгоритм выбора выполняемого действия рассматривается ниже. В интерфейсах объектов указаны идентификаторы объектов, которые в поле OBJKH хранят идентификатор действия. Значения этих объектов являются именем действия. Наиболее удобно использовать для этой цели строковые объекты. Использование поля OBJKH позволяет выполнять одно и то же действие для различных методов различных объектов.
При вызове действия с идентификатором OIDKH делается вызов слова с именем kh$<OIDKH>. Например, для объекта с OIDKH=0x00000DFC это будет KH$00000DFC. Если возникает ситуация EXERR, значит слово в словаре отсутствует и подлежит компиляции. Для компиляции текст действия дополняется префиксом “: KH$<oid> ” и суффиксом “ ;”, после чего компилируется командой TEXEC и выполняется. Словарь действий называется $KH_VOC.
При изменении текста метода необходимо полностью очистить словарь ДССП $KH_VOC, хранящий откомпилированные действия, поскольку эти действия содержат в своем коде абсолютные ссылки на прежнюю откомпилированную версию действия. Впрочем, эта процедура очистки словаря выполняется лишь при переопределении текста действия, что бывает достаточно редко.
2.7 Объекты-поведения
В отсутствии классов, хранить методы в каждом объекте было бы слишком накладно. Вынесение правил поведения в отдельный объект позволяет уменьшить затраты на хранение объектов-данных. Математическая модель ООБД в [17], также разделяет данные и поведения, что дополнительно дает возможность переиспользовать поведение другого объекта.
Объект-поведение представляет собой множество объектов-методов, которое и называется интерфейсом объекта.
При посылке на вход произвольного объекта OID2 сообщения OID1 (которое тоже является объектом), сначала проверяется, содержится ли OID1 в интерфейсе объекта OID2 (проверка идентичности). Если да, то выполняется действие объекта OID1, иначе сравниваются значения OID1 и объектов интерфейса (проверка эквивалентности). Если соответствие найдено, выполняется действие, указанное в найденном в интерфейсе объекте.
2.8 Принципы взаимодействия объектов
Есть два основных способа управления объектами:
· Посылка сообщений
· Алгебра объектов
·
Определения операций Select и Pickup алгебры объектов можно найти в [17]. Здесь оно не рассматривается по той причине, что является надстройкой над управлением посылкой сообщений и описывается через механизм посылки сообщений. То есть операции алгебры объектов могут быть заданы через операции посылки сообщений, без исправления структуры СУБД. Полная алгебра объектов является замкнутой и состоит из следующих операций: Select s, Pickup d, Apply r, Expression Apply l, Project p, Combine c, Union È, Interselect Ç, Subtract -, Collapse v, Assimilate a. Объектная алгебра более выразительна, чем реляционная, поскольку поддерживает полиморфность. Оператор Select, например, может работать с любыми видами операндов, а не только с множествами.
Согласно [17], любое сообщение в системе является объектом. Любой объект может иметь связанное с ним действие (knowhow), или не иметь его.
Алгоритм определения метода для выполнения
При посылке объекта проверяется, находится ли идентификатор объекта-сообщения в интерфейсе объекта-получателя. Если да, то выполняется knowhow, связанное с этим идентификатором. Если нет – проверяется, совпадает ли значение объекта-сообщения со значением какого-либо метода из интерфейса объекта-получателя. Если да, то выполняется связанное с этим методом действие. Иначе возвращается объект fail.
Параметры методов
Набор_параметров (Blackboard) представляет собой множество меток, аргументных пар { (L1, arg1), … , (Ln, argn) }. Li ÎA, argi ÎO для 1 £ i £ n и "i, j Î 1,…,n : i ¹ j Þ Li ¹ Li.
Впрочем, базовые методы также используют передачу параметров через стек, как более эффективный способ программирования.
Синтаксис посылки сообщения
Воздействие(Набор_параметров) ~> Получатель. Объект, называемый Воздействие (Invoker), является сообщением (message) и посылается к другому объекту, названному Получателем (Reciver), используя Набор_параметров, предоставляющий необходимые аргументы. Если параметры в Наборе_параметров отсутствуют, то можно записать короче: Воздействие ~> Получатель. Посланное сообщение всегда возвращает объект, называемый Результат (Result).
Посылка простого сообщения
Пусть B – Набор_параметров и m и r – два объекта в O.
Примитивные взаимодействия
(1) m(B) ~> fail º fail; fail(B) ~> r º fail;
(2) m(B) ~> null º null; null(B) ~> r º null;
(когда m¹ fail)
(3) m(B) ~> same º same; same(B) ~> r º r;
(когда m¹ fail и m¹ null)
При совпадении идентификатора
(4) Если существует метод x из r такой, что x º m и sig(x) = (A1,c1) ´ …´ (An,cn)® cr и {(A1,a1) ´ …´ (An,an)} ÍB и FID каждого поля сi присутствует в ai (в терминах ОО-программирования: ci является предком по значению для ai), тогда
m(B) ~> r º r.kh(x)(A1 : a1, … , An : an )
иначе проверяется совпадение значения.
При совпадении значения
(5) Если существует метод x в r или его объектах-учителях (объектов, от которых наследуется поведение) такой, что x » m и sig(x) = (A1,c1) ´ …´ (An,cn)® cr и {(A1,a1) ´ …´ ´ (An,an)}ÍB и FID каждого поля сi присутствует в ai, тогда
m(B) ~> r º r.kh(x)(A1 : a1, … , An : an )
иначе
(6) Если r является атомарным, то m(B) ~> r º fail.
Иначе m(B) ~> r является комплексным сообщением (complex message sending), обладает сложной структурой.
Комплексные сообщения
Если Воздействие является объектом-агрегатом, то
s(B) ~> o º null, если s=[ ]
s(B) ~> o º [A1 : s1(B) ~> o1, …, An : sn(B) ~> on], если s=[A1 : s1, …, An : sn]
где oj » o, oj неº o) и orf(oi) Ç orf(o) = Æ для j = 1, ,n и для любого i, j Î [1, ,n], если i ¹ j тогда oj неº o и orf(oi) Ç orf(oj) = Æ (т.е. o1,…,on являются глубокими копиями объекта-получателя o).
Если Воздействие является объектом-условием, то
s(B) ~> o º s.then(B) ~> o, если s.if(B) Ï {False, fail}