Есть два основных способа управления объектами:
· Посылка сообщений
· Алгебра объектов
·
Определения операций 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}
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)
Дата: 2019-05-28, просмотров: 214.