
- •Государственный комитет рф по высшему образованию
- •0. Введение.
- •0.1. Идея общей интеграции.
- •0.2. Взаимодействие на уровне процедур.
- •0.3. Распределенные объекты.
- •0.4. Почему corba.
- •1. Поддержка на различных платформах.
- •2. Устойчивость стандарта.
- •3. Сложность освоения.
- •4. Поддержка повторного использования кода.
- •1. Постановка задачи.
- •1.1. Классические объекты.
- •1.2. Распределенные объекты в терминах спецификации corba.
- •1.3. Требования, предъявляемые к orb-у.
- •2. СпецификацияCorba.
- •2.1. Объектная модель.
- •2.2. Обзор архитектурыCorba.
- •2.3. Пример Брокеров Объектных Запросов.
- •3. Структура системы.
- •3.1. Уточнение деталей реализации.
- •3.2. Структура ядра системы.
- •3.3. Структура библиотеки.
- •3.4.Структура подсистемы обработки запросов.
- •3.5. Входные и выходные данные.
- •4. Протокол обменаGiop.
- •4.1. Особенности и цели протокола.
- •4.2. Обзор протоколаGiop.
- •4.3. Синтаксис Общего Представления Данных -cdr.
- •4.4. Формат сообщений протокола giop.
- •4.5. Транспорт для протоколаGiop.
- •4.6. Реализация взаимодействия по протоколуGiop.
- •4.7. Поддержка протоколаGiop в рамках отображения дляObject Pascal.
- •5. Разработка отображения для языкаObject Pascal.
- •5.1. Множественное наследование.
- •5.2. Статические экземпляры классов.
- •Initialization
- •Initialization
- •6. Технология написания и отладки приложений, работающих с распределенными объектами.
- •6.1. Этапы разработки программы.
- •6.2. Технология написания сервера объекта.
- •6.3. Технология написания клиента объекта.
- •6.4. Отладочные возможности библиотеки.
- •7. Пример программы, работающей с распределенными объектами.
- •7.1. Последовательность действий при создании объекта.
- •7.2. Объект библиотека.
- •7.3. Сервер объекта.
- •7.3. Клиент объекта.
- •7.4. Окончательный результат.
- •8. Анализ конкурентоспособности программного продукта.
- •8.1. Введение.
- •8.2. Ситуация на рынке.
- •8.3. Программные продукты - конкуренты.
- •8.4. Основные понятия.
- •8.5. Параметры для оценки эффективности.
- •8.6. Расчет эффективности.
- •8.7. Цена.
- •8.8. Конкурентоспособность.
- •8.9. Выводы и прогнозы.
- •9. Вопросы эргономики и их решение для создания комфортных условий труда программистов.
- •9.1. Введение.
- •9.2. Рабочее место программиста.
- •9.3. Вредные факторы, присутствующие на рабочем месте и их классификация.
- •9.4. Вредные производственные воздействия.
- •9.5. Эргономические требования.
- •9.6. Эргономика окружающей среды.
- •9.7. Экологическая безопасность.
- •9.8. Выводы.
Initialization
A.Create(8);
end.
В этом случае можно не заполнять никаких полей структуры, за исключением поля ClassInfo, так такой способ вызова конструктора предполагает, что экземпляр класса уже имеется и не следует инициализировать указатель наVMT.
Вызов деструктора несколько более проблематичен. Проблема заключается в том, что при вызове деструктора ему в регистре DL передается дополнительный флаг, который указывает на то, нужно ли освобождать занятую память (DL=1) или нет(DL=0). Средствами только языкаObject Pascal добиться вызова деструктора с передачей нуля невозможно. Поэтому единственным выходом является использование встроенного ассемблера.
При реализации не потребовалось явно вызывать деструктор, но если бы это было необходимо, то можно применить, например такой вариант. У общего предка TObject всех классов в языкеObject Pascal12определяется виртуальный конструкторDestroy и методFree, который вызывает деструктор, если ссылка на объект не имеет значениеnil. Аналогично этому можно объявить функциюStaticFree, которая будет вызывать деструктор, не освобождая при этом занятую память.
type
ClassI = class
...
procedure StaticFree;
end;
...
procedure ClassI.StaticFree;
const
vtDestroy = -4;
asm
mov dl,0 { установить флаг }
mov ecx,[eax] { получить адрес VMT }
call dword ptr [ecx].vtDestroy { вызвать деструктор }
end;
Функция использует следующие соглашения о вызове методов. По умолчанию используется модель вызова register, в соответствии с которой первый параметр - указатель на экземпляр класса передается через регистрEAX13. А указатель на виртуальный деструкторDestroy находится но смещению -4 вVMT.Тогда код инициализации и завершения будет выглядеть следующим образом:
Initialization
A.Create(8);
finalization
A.StaticFree;
end.
Недостатки данного подхода.
Единственным сколько-нибудь значительным недостатком данного подхода является необходимость вручную рассчитывать размер объекта и создавать новый тип - запись, соответствующую данному классу. Однако значимость последнего аспекта можно уменьшить посредством применения не статической инициализации, а вызова конструктора класса. Расчет размера объекта обычно не представляет никаких проблем посредством обычного суммирования размера полей объекта.
6. Технология написания и отладки приложений, работающих с распределенными объектами.
При разработки систем, работающих с распределенными объектами, многие стандартные методы написания и тестирования программ не подходят ввиду отсутствия возможностей по управлению сразу несколькими процессами. Поэтому при разработке системы были предприняты дополнительные усилия, предназначенные на облегчение процесса тестирования программ, а также были выработаны некоторые рекомендации.
6.1. Этапы разработки программы.
Цикл разработки любого программного продукта, как правило, включает в себя следующие этапы (с различными вариациями):
Постановка задачи в словесной форме (техническое задание).
Построение математической модели.
Проектирование программного продукта и разработка алгоритмов.
Кодирование алгоритмов на языке программирования.
Автономная и комплексная отладка.
Изготовление документации, описаний и передача в эксплуатацию.
При использовании распределенных объектов этапы 1-3 и 6 мало отличаются от стандартных. Например, разработку программы можно вести как методом сверху вниз, так и методом снизу вверх. Но на этапах 4 и 5 возникают дополнительные трудности, которые не решаются стандартными методами.
Например, если разрабатывается новый объект, который впоследствии должен использоваться как распределенный, то разработчик может отладить работу объекта в локальном (нераспределенном) варианте. В то же время гораздо труднее смоделировать ситуацию одновременной работы множества таких объектов и всех тонкостей их взаимодействия. Разработка клиентского приложения существенно осложняется отсутствием возможности отладки в локальном варианте - такого объекта попросту нет - и весьма ограниченным набором действий, которые можно предпринять по отношению к удаленному объекту.
Поэтому при разработке библиотеки дополнительное внимание было уделено во-первых уменьшения потенциальной возможности появления ошибок посредством автоматического контроля используемых ресурсов и максимально жесткой проверке параметров, передаваемых функциям библиотеки при вызове из программ пользователя. В библиотеке заложены алгоритмы, позволяющие обнаруживать часть некорректных указателей, то есть указателей на области памяти, в которых нечего не находится, либо которые используются неправильным образом. Очевидно, что это достигается за счет увеличения размера кода и, что более существенно, увеличения времени обработки запроса. Поэтому было принято решение о создании двух версий библиотеки. Отладочная версия библиотеки содержит тщательный всевозможный анализ параметров на предмет их корректности и по возможности хранит информацию о всех выделенных ресурсах. В рабочей версии подобный контроль осуществляется на минимально необходимом уровне, что в свою очередь дает более высокую производительность при работе с библиотекой.
Разработчик имеет возможность на этапе разработки приложения использовать отладочную версию библиотеки с расширенной диагностикой. После того, как он отладит свою программу и сочтет ее достаточно надежной, он может заменить отладочную версию рабочей и использовать конечный продукт с максимумом производительности.