- •Государственный комитет рф по высшему образованию
- •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. Выводы.
5.2. Статические экземпляры классов.
Новая объектная модель, принятая в языке Object Pascal позволяет создавать только динамические экземпляры классов. Таким образом, нельзя объявить статический объект и использовать его в разных местах программы. Но спецификацияCORBA требует как минимум наличие для каждого классаClassX соответствующей ему константного экземпляра классаTypeCode, содержащего информацию об классе. В этом случае наличие постоянных статических экземпляров было бы гораздо производительнее с точки зрения использования этих объектов и проще в реализации с точки зрения разработчика системы.
Поэтому пришлось эмулировать статические объекты, основываясь на знании структуры представления объекта в памяти.
Представление объекта в памяти.
В памяти, на которую указывает переменная класса, первые четыре байта занимает указатель на таблицу виртуальных методов класса (Virtual Method Table - VMT). СтруктураVMT никакого значения не имеет и далее не рассматривается. После указателя наVMT, который заносится конструктором класса идут поля этого класса.
Предположим, у нас имеется класс ClassI, у которого есть единственное поле типаInteger:
type
ClassI = class
I: Integer;
constructor Create(AI: Integer);
destructor Destroy; override;
end;
constructorClassI.Create(AI: Integer);
begin
I := AI;
end;
destructorClassI.Destroy;
begin
I := 0;
end;
Тогда каждый объект этого класса занимает в памяти 8 байт, которые распределяются следующим образом:
-
Смещение
Размер поля
Значение поля
+0
4байта
Указатель на VMT
+4
4байта
I: Integer
Эмуляция с помощью структуры.
Для эмуляции статического экземпляра класса ClassI достаточно объявить статическую переменную - структуру с соответствующими полями. Отличительной особенность языкаObjectPascal является тот факт, что указатель наVMT имеет собственное представление, называемое ссылкой на класс9. Этот указатель можно получить просто используя имя класса, либо вызвав методClassType для конкретного экземпляра класса. Тогда можно определить следующую структуру:
type
ClassIClass = class of ClassI;
ClassIRecord = packed record
ClassInfo: ClassIClass;
I: Integer;
end;
Статический экземпляр этой структуры полностью соответствует представлению объекта класса ClassI в памяти и может быть использован следующим образом:
const
ARecord: ClassIRecord = (ClassInfo: ClassI; I: 8);
A: ClassI = @ARecord;
Теперь имеется переменная A10 классаClassI, которая указывает на статический экземпляр класса, при этом память, которую он занимает естественно не нужно удалять при завершении программы.
Вызов конструктора и деструктора.
Если имеется потребность в вызове конструктора - например в случае когда конструктор проводит какую-нибудь нетривиальную оптимизацию, отличную от простого копирования значений, то вместо статического определения полей структуры можно было бы совершенно нормально вызвать этот конструктор уже для имеющейся статической копии при инициализации программы, например в секции initialization11 соответствующего модуля:
const
ARecord: ClassIRecord = (ClassInfo: ClassI);
A: ClassI = @ARecord;
...