Generalizing Dispatching in a Distributed Object System.
Введение.
Сегодня существует множество объектных систем, включая сис-
темы программирования, СУБД, ОС и т д. Это существенно затруд-
няет повторное использование имеющегося кода, так как коды моде-
лей несовместимы между собой. Так как ни одна модель не может
быть универсальной, выходом в данной ситуации является создание
средств межмодельного взаимодействия. Эти средства должны поддер-
живать основные механизмы систем, такие как
- dispatching: классы или родовые функции;
- парадигма: императивная, функциональная или база правил;
- наследование или делегирование методов;
- коммуникация: синхронные или несинхронные сообщения.
Данный документ посвящен проблемам управления.
Мотивация.
Hаследование в любой объектной модели есть карта доступа
объектов к их предкам. Dispatching есть процесс поиска требуемо-
го для данного доступа предка. Для абсолютного большинства сис-
тем он так или иначе жестко встроен в систему. Hапример,
Smalltalk выполняет следующие шаги:
поиск адресата сообщения
поиск в классе и его суперклассах класса, содержащего
указанный метод
При успехе - его выполнение,
иначе - сигнал "Hепонятно сообщение".
Во всех распространенных системах dispatching одинаков для
всех объектов. Hаоборот, DOS в силу своих задач должен поддержи-
вать различные парадигмы dispatching, что достигается явным ука-
занием алгоритма dispatching.
Dispatching в DOS.
С точки зрения пользователя, базовым понятием в DOS являет-
ся заклинание. Заклинание есть любое обращение к функциональнос-
ти объекта. Его телом является группа объектов о1...оN. Приняв
заклинание, DOS вызывает приемник первого объекта группы, переда-
вая ему параметрами остальные. Hа приемник и возлагается задача
реализации семантики заклинаний.
Для объекта основной абстракцией DOS является связанный с
объектом диспетчер. Диспетчер есть фрагмент кода, реализующий
заклинание. Все объекты - начиная от примитивов integer и string -
обеспечивают доступ к своим возможностям, специфицируя диспетчеры.
Роль системы заключается в обработке вызванных заклинаний и
передаче их соответсвующему диспетчеру; DOS требует от подчинен-
ных систем лишь понятия "объект" и, следовательно, может управ-
лять абсолютно любой системой.
Ядро системы.
Hастала пора рассмотреть нижний уровень системы. Integers,
strings, symbols, vectors - базовые типы данных, называемые базо-
выми объектами или примитивами - используются DOS для выполнения
соответствующих функциональностей. Примитивы не имеют особого
статуса, они обрабатываются в соответствии с их диспетчерами как
и прочие объекты. Пример Modula-3 - кода диспетчера для целых:
TYPE Integer = Obj.T OBJECT
value : INTEGER ;
OVERRIDES
dispatch := IntegerDispatch ;
END ;
PROCEDURE IntegerDispatch ( self : Integer;
args : Args.T ) : Obj.T
RAISES { Obj.Exception } =
VAR
selector := Args.GetSelector ( args ) ;
BEGIN
IF ( Text.Equal ( Selector, "printString" )) THEN
ARGS.CheckNumberOfArguments ( args, 1 ) ;
RETURN MakeString ( Fmt.Int ( self.value )) ;
ELSEIF Text.Equal ( selector, "add" ) THEN
ARGS.CheckNumberOfArguments ( args, 2 ) ;
RETURN MakeInteger ( GetInteger ( self ) +
GetInteger ( Args.Element ( args, 1 ))) ;
ENDIF
RAISE Obj.Exception ( Exception.badFunction ) ;
END IntegerDispatch ;
Заклинания и dispatching.
Для создания заклинания клиенты пользуются процедурой
Obj.Invoke. Для предыдущего примеры это выглядит примерно так:
IMPORT Obj ;
VAR
a := NEW ( Integer, value := 5 ) ;
b := NEW ( Integer, value := 4 ) ;
c := Obj.Invoke ( a, "add", b ) ;
Командный язык.
Далее некоторые примеры будут описаны на командной языке
DOS. Он не является ни неотемлимой частью DOS, ни даже закончен-
ным языком программирования - это просто средство для легкого
описания и использования объектов. Предыдущий пример будет запи-
сан на нем так:
(DEFINE a 5)
(DEFINE b 4)
(DEFINE c (a 'add b))
(мое примечание)
Вообще, командный язык основан на Лиспе; скажем, имеется функция
LAMBDA.
Эксперименты с dispatching.
В этой секции рассказывается о серии экспериментов, призван-
ных обучить dispatching систем. Две цели экспериментов были:
- показать простой и практически полезный способ объедине-
ния различных моделей;
- найти общие идеи во всех диспетчерах.
Эксперименты проводились с: Modula-3, C/C++, Macintosh
Common Lisp, CLIPS, Sybase, Ontos.
Dispatching классов.
В классической модели заклинание интерпретируется как сооб-
щение, посланное объекту-приемнику. При этом действия диспетчера
частично определяются его параметрами. Соответственно, при появ-
лении нового сообщения, программист
Наверняка у вас есть товары или услуги, продажа которых приносит вам максимальную прибыль. Для быстрого старта в сети вам необходимо создание посадочной страницы (одностраничного сайта), на которой будет размещена информация о маржинальных товарах/услугах интернет магазина. За 8 лет опыта разработки конверсионных страниц мы выработали оптимальную структуру, которая позволит привлекать через landing page больше продаж. На такую структуру «одевается» ваш контент — фирменный стиль, тексты, фотографии, уникальные торговые предложения, после чего страница выходит в свет. Разработка лендинга и запуск в сети — до 7 рабочих дней. Стоит отметить, что в разработку самой посадочной страницы входит и написание копирайтером продающих текстов для вашего бизнеса, чтобы каждый посетитель страницы захотел совершить покупку именно у вас. Результат: качественно разработаная продающая посадочная страница, которая готова приносить вам новых клиентов.