Главная    Почта    Новости    Каталог    Одноклассники    Погода    Работа    Игры     Рефераты     Карты
  
по Казнету new!
по каталогу
в рефератах

Объектно-ориентированная СУБД (прототип)

  др.;   и   следящие   за
целостностью  одного  элемента,  что  соответствует  проверке  значения   на
соответствие домену.
      Список  PRE_TRIGGERS  позволяет  организовать   ограничение   доступа,
фильтруя сообщения, посланные объектом,  ктороый  не  имеет  полномочий  для
выполнения команды, содержащейся в сообщении.
      Список POST_TRIGGERS позволяет исключить часть  данных  из  результата
выполненной объектом операции, создав тем самым  локальное  пользовательское
представление.
      Впрочем, тема безопасности заслуживает отдельного  рассмотрения.  Как,
например, в [9] и [18].



                           2.6 Действие (knowhow)


      Действие представляет собой объект типа “строка”, хранящий текст ДССП-
процедуры. Ссылка на действие может хранится в  поле  OBJKH  объекта,  через
который и происходит вызов действия. Алгоритм выбора  выполняемого  действия
рассматривается  ниже.  В  интерфейсах   объектов   указаны   идентификаторы
объектов, которые в поле OBJKH хранят идентификатор действия. Значения  этих
объектов являются именем действия. Наиболее  удобно  использовать  для  этой
цели строковые объекты. Использование поля OBJKH позволяет выполнять одно  и
то же действие для различных методов различных объектов.
      При вызове действия с идентификатором OIDKH  делается  вызов  слова  с
именем kh$.  Например,  для  объекта  с  OIDKH=0x00000DFC  это  будет
KH$00000DFC.  Если  возникает  ситуация  EXERR,  значит  слово   в   словаре
отсутствует  и  подлежит   компиляции.   Для   компиляции   текст   действия
дополняется  префиксом  “:  KH$  ”  и  суффиксом  “  ;”,   после   чего
компилируется командой TEXEC  и  выполняется.  Словарь  действий  называется
$KH_VOC.
      При изменении текста метода необходимо полностью очистить словарь ДССП
$KH_VOC,  хранящий  откомпилированные  действия,   поскольку  эти   действия
содержат в своем коде абсолютные ссылки на прежнюю откомпилированную  версию
действия. Впрочем,  эта  процедура  очистки  словаря  выполняется  лишь  при
переопределении текста действия, что бывает достаточно редко.



                            2.7 Объекты-поведения


В отсутствии классов, хранить  методы  в  каждом  объекте  было  бы  слишком
накладно. Вынесение правил поведения в отдельный объект позволяет  уменьшить
затраты на хранение объектов-данных.  Математическая  модель  ООБД  в  [17],
также разделяет данные  и  поведения,  что  дополнительно  дает  возможность
переиспользовать поведение другого объекта.
Объект-поведение представляет собой множество  объектов-методов,  которое  и
называется интерфейсом объекта.
      При посылке на вход произвольного объекта OID2 сообщения OID1 (которое
тоже  является  объектом),  сначала  проверяется,  содержится  ли   OID1   в
интерфейсе объекта OID2 (проверка идентичности).  Если  да,  то  выполняется
действие  объекта  OID1,  иначе  сравниваются  значения  OID1   и   объектов
интерфейса   (проверка   эквивалентности).   Если   соответствие    найдено,
выполняется действие, указанное в найденном в интерфейсе объекте.



                    2.8 Принципы взаимодействия объектов


Есть два основных способа управления объектами:
 . Посылка сообщений
 . Алгебра объектов
 .
      Определения операций Select и Pickup алгебры объектов  можно  найти  в
[17]. Здесь оно не рассматривается по той причине, что является  надстройкой
над управлением посылкой сообщений  и  описывается  через  механизм  посылки
сообщений. То  есть  операции  алгебры  объектов  могут  быть  заданы  через
операции посылки сообщений, без исправления структуры СУБД.  Полная  алгебра
объектов является замкнутой и состоит  из  следующих  операций:   Select  (,
Pickup (, Apply (, Expression Apply  (,  Project  (,  Combine  (,  Union  (,
Interselect (, Subtract (,  Collapse  (,  Assimilate  (.  Объектная  алгебра
более выразительна, чем реляционная, поскольку  поддерживает  полиморфность.
Оператор 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}
      s(B) (( o ( s.else(B) (( o, иначе.

      Где s.if, s.then, s.else обозначение if-части, then-части и else-части
s соответственно.

      Если Воздействие является объектом-множеством, то
      s(B) (( o ( null, если s={ }
      s(B) (( o ( s1(B) (( o, если s={s1}
      s(B) (( o ( s’(B) (( o,  s’= s – {x}  после x(B) (( o

      где x – произвольно выбранный элемент из множества s.

      Если Воздействие является объектом-списком, то
      s(B) (( o ( null, если s=( )
      s(B) (( o ( sn(B) (((… ((( s2(B) ((( s1(B) (( o))…) где s =  (s1,  s2,
…, sn)


Семантика дробящейся посылки


      Пусть B – Набор_параметров и пусть s, o(O. Тогда  оператор  дробящейся
посылки, обозначаемый ~1( определяется следующим образом:

Таблица 1: Семантика дробящейся посылки
|Условие                              |S(B) ~1( o (                        |
|s(B) (( o не( fail                   |s(B) (( o                           |
|AGG(o) & o = [A1 : o1, …, An : on]   |[A1 : s(B) (( o1, …, An : s(B) ((   |
|                                     |on]                                 |
|BIO(o) & o.if не( null               |s(B) (( o.then                      |
|BIO(o) & o.if ( null                 |s(B) (( o.else                      |
|SET(o) & o = {o1,…,on}               |{s(B) (( o1, …, s(B) (( on}         |
|SEQ(o) & o = (o1,…,on)               |(s(B) (( o1, …, s(B) (( on)         |
|Иначе                                |Fail                                |


             2.9 Транзакции и механизм согласованного управления


      Согласованное   управление   является   важным   аспектом   управления
транзакциями  в  СУБД.  В  обычных   базах   данных,   транзакции   являются
независимыми атомарными воздействиями, которые выполняются  изолированно,  в
том  числе  от  результатов  выполнения  других  транзакций.   Однако,   для
повышения  производительности,   для   некоторых   транзакций   составляется
расписание  выполнения.  Механизм  согласованного  управления   обеспечивает
корректное   выполнение   этого   множества   транзакций,   в   том    числе
продолжительных.
      В  отличие  от  традиционных  баз  данных,  исследования   в   области
согласованного  управления  для  объектно-ориентированных  баз  данных  были
ограничены. Это в значительной мере связано  с  уникальностью  требований  к
объектно-ориентированным
12345След.
скачать работу

Объектно-ориентированная СУБД (прототип)

 

Отправка СМС бесплатно

На правах рекламы


ZERO.kz
 
Модератор сайта RESURS.KZ