Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
HOR / TOTAL.DOC
Скачиваний:
8
Добавлен:
16.04.2013
Размер:
312.83 Кб
Скачать

6.2. Технология написания сервера объекта.

При написании сервера объекта разработчику доступен сам объект, который может рассматриваться как локальный. При этом рекомендуется по возможности отлаживать алгоритмы, заложенные в реализацию объекта в локальном варианте, не касающимся распределенных способов взаимодействия.

Ввиду того, что объект может вызываться одновременно из разных процессов, то надо тщательнейшим образом распланировать совместное использование разделяемых ресурсов и, если это возможно, смоделировать ситуацию, при которой одновременно активны несколько экземпляров объекта.

6.3. Технология написания клиента объекта.

При написания клиентской программы, использующей объект возможно две ситуации.

Если клиентское приложение разрабатывается одновременно с серверным, то есть конечной целью является система приложений, которые связаны посредством распределенных объектов, то первоначальное тестирование можно провести в рамках одного процесса, разнеся серверную и клиентскую части в разные, легко разделяемые логически части программы. Применительно к Delphi такой единицей является модуль и форма. Отладка такого взаимодействия не затрагивает использование распределенных объектов. После локальной отладки производится разбиение программы на два отдельных приложения и производится окончательная отладка распределенного взаимодействия.

В случае же когда требуется написать приложение, работающее с уже имеющимся удаленным объектом, можно рекомендовать более тщательный анализ передаваемых и возвращаемых параметров. Также в это случае могут помочь дополнительные сервисные функции, предоставляемые библиотекой.

6.4. Отладочные возможности библиотеки.

По своим характеристикам отладочные функции библиотеки можно разбить на следующие основные группы:

  1. Контроль за выделяемыми ресурсами.

  2. Система событий.

Далее эти возможности будут рассмотрены более подробно.

Контроль за выделяемыми ресурсами.

Наиболее ярким примером в данной области является использование переменных строкового типа данных при передачи их в качестве параметров. Достаточно большой проблемой является определение необходимости копирования строки или использования имеющейся, а также своевременное освобождение выделенной памяти.

В языке Object Pascal все управление строковым типов поддерживается на уровне языка. Компилятор создает код, который корректно инициализирует строковую переменную и освобождает выделенную память, когда переменная уничтожается. В языкеC иC++ такой поддержки со стороны компилятора нет. Поэтому нужны дополнительные средства для обеспечения требуемой функциональности. В отображения для языкаC спецификацияCORBA четко определяет, в каких случаях память, выделяемая для строковых переменных, освобождается или поглощается реализацией системы, а в каких переданный указатель можно повторно использовать в других выражениях. Отображение для языкаC++ использует объектно-ориентированные возможности данного языка. Как и для большинства сложных типов данных, там определен классString_var, для которого с одной стороны определено преобразование к типуChar*, представляющему указатель на строку и позволяющему использовать переменную этого класса во всех выражениях, требующих использование строки, а с другой стороны этот класс автоматически заботится о выделении строке нужного количества памяти при создании класса и освобождении этой памяти при уничтожении класса.

Система событий.

Ввиду того, что разработчик приложения, работающего с распределенными объектами, то есть пользователь системы не имеет доступ к процессам, происходящим внутри библиотеки, то для обеспечения возможности каким-то образом отслеживать текущее внутренне состояние системы и ее отдельных частей у ключевых псевдообъектов были введены события. В понятии Delphi событие - это свойство или поле процедурного типа. При наступлении определенного события объект проверяет состояние этого свойство и в случае его ненулевого значения вызывает данную процедуру.

Например, класс Request имеет событиеBeforeDataSend. Это событие возникает непосредственно перед тем, как данные запроса, закодированные в поток байт, будут отосланы серверу объекта. Связав с эти событием свой обработчик, пользователь с одной стороны, может попытаться оценить правильность передачи параметров, а с другой стороны может фактически выставить точку останова внутри алгоритма, реализуемого системой. Другой пример - событиеOnTimeOut того же класса, определение для которого приведено ниже.

type

TTimeOutEvent = procedure (Sender: TObject;

var Wait: Boolean) of object;

Request = class

...

property OnTimeOut: TTimeOutEvent ...

Конструкция of object означает, что описан не просто процедурный тип, а тип метода. Такой тип на самом деле представляет из себя структуру, которая хранит два указателя - один на код и другой на экземпляр класса, у которого этот метод надо вызвать. Это событие возникает при истечении времени, выделенного на отработку запроса в случае неполучения до этого времени ответа на него. Подпрограмма обработки сообщения может проанализировать запрос и принять решение о том, следует ли далее ждать выполнения запроса или нет. По умолчанию переменнаяWait имеет значениеFalse, означающее, что дальше ожидать ответа не нужно. Если требуется дальнейшее ожидание, то следует этой переменной присвоить значениеTrue.

Кроме того, что система событий дает разработчику программы вмешиваться в процесс функционирования системы и частично расширять ее, этот механизм позволяет централизовать обработку сообщений в одном месте. Так как один и тот же обработчик может быть связан с несколькими источниками событий, то он может централизованно управлять всем процессом безо всяких дополнительных усилий.

Соседние файлы в папке HOR