- •Розподілені системи обробки інформації
- •Передмова
- •Розділ 1. Огляд компонентних технологій створення розподілених програмних систем
- •1.1. Узагальнена архітектура і механізм функціонування об'єктних розподілених систем
- •1.2. Основні приклади технологій створення розподілених систем
- •1.3. Переваги використання розподілених технологій
- •Розділ 2. Розроблення розподілених систем на основі модели com/dcom у Delphi
- •2.1. Використання dll у Delphi
- •2.1.1. Поняття dll
- •2.1.2. Створення dll у середовищі Delphi (експорт)
- •2.1.3. Використання dll у Delphi (імпорт)
- •2.1.4. Створення динамічних бібліотек для редагування ресурсів
- •2.2. Основи сом-технології
- •2.2.1. Загальний опис
- •2.2.2. Базові поняття
- •2.2.3. Бібліотека сом
- •2.2.4. Бібліотека типів
- •2.3.2. Сервер сом у Delphi
- •2.3.3. Бібліотека типів у delphі
- •2.4. Створення системи клієнт-сервер на основі базового com-об’єкту у складі внутрішнього сервера
- •2.4.1. Створення сом-сервера
- •2.4.2. Створення сом-клієнта
- •2.4.3. Використання сом-об’єкту в клієнтській програмі
- •2.5. Механізм міжпроцесного обміну
- •2.6. Створення систем клієнт-сервер на основі зовнішнього базового сом-об’єкту
- •2.6.1. Основні поняття
- •2.6.2. Засоби організації потокової взаємодії клієнта і сервера
- •2.6.3. Методи формування екземпляра сом-об’єкту
- •2.6.4. Формування екземпляра зовнішнього сом-об’єкту
- •2.6.5. Створення сом-сервера
- •2.6.6. Створення сом-клієнта
- •2.7. Автоматизація
- •Створення сервера автоматизації;
- •2.7.1. Базові поняття
- •2.7.2. Сервер автоматизації
- •2.7.3. Контролер автоматизації
- •2.8. Створення системи клієнт-сервер на основі внутрішнього сервера автоматизації
- •2.8.1. Об'єкт автоматизації. Клас tAutoObject
- •2.8.2. Вбудований сервер автоматизації
- •2.8.3. Створення клієнта автоматизації
- •2.9. Зовнішній сервер автоматизації
- •2.9.1. Основні визначення
- •2.9.2. Виконання маршалінгу з рядками, шрифтами і зображеннями
- •2.9.3. Перетворення наявного застосунка в сом-сервер автоматизації
- •2.9.4. Створення клієнта автоматизації
- •2.10. Події в сом і зворотні виклики на основі інтерфейсів диспетчирування
- •2.10.1. Створення сервера автоматизації
- •3. Формування бібліотеки типів
- •4. Формування методів
- •5. Реєстрація сервера
- •2.10.2. Створення клієнтського застосунка
- •2.10.3. Підключення множини клієнтів до сервера
- •2.11. Інтерфейси зі зворотним викликом
- •2.11.1. Створення сервера
- •2.11.2. Створення клієнтського застосунка
- •2.12. Технологія ActiveХ
- •2.12.1. Використання готових елементів АctiveХ
- •2.12.2. Розроблення власних елементів АctiveХ
- •2.12.3. Поширення елементів керування ActiveХ і форм ActiveХForm у Web-середовище
- •2.14. Dcom технологія
- •2.14.1. Загальна схема взаємодії сом-клієнта і сом-сервера
- •2.14.2. Розроблення системи «клієнт-віддалений сом-сервер»
- •Розділ 3. Проектування розподілених систем на платформі Microsoft .Net
- •3.1.1. Здійсненя викликань з типів .Net до типів сом
- •3.1.2. Звернення клієнта сом до збірки .Net
- •3.2. Об’єктно-орієнтована архітектура .Net Remotіng – основа створення розподілених систем Mіcrosoft .Net.
- •3.2.1. Створення системи клієнт-сервер на основі технології Remoting
- •Розділ 4. Створення системи "клієнт - сервер" на основі технології corba
- •4.1. Загальні теоретичні відомості
- •4.2. Створення серверного застосунка
- •1. Створення файла опису інтерфейсу
- •Викликання конструктора створення corba сервера
- •Формуємо модуль Unit1
- •Формуємо реалізацію методу
- •4.3. Створення клієнтського застосунка
- •Викликання конструктора corba-клієнта
- •2. Формування форми
- •3. Запуск застосунка
- •Приклад програмних кодів сервера
- •4.4. Порівняльний аналіз технологій сом і соrва
- •4.4.1. Основні принципи об'єктних моделей
- •4.4.2. Об'єктні моделі
- •4.4.3. Підтримка операційних систем
- •4.4.4. Формальний опис архітектури і проблеми реалізації
- •4.4.5. Підсумки порівняння
- •Літературні джерела
4.4.2. Об'єктні моделі
У моделях CORBA і COM клієнт одержує обслуговування від серверного об’єкту, запитуючи метод, заданий в інтерфейсі об’єкту. Важливою характеристикою обох технологій є чітке розмежування інтерфейсів, кожен з яких за суттю є абстрактним набором зв'язаних методів, і конкретних реалізацій цих методів. Клієнту доступний опис інтерфейсу об’єкту, через який він одержує доступ до методів, тобто функціональності даного об’єкту. Деталі реалізації методів від клієнта повністю приховані. Метод викликається за посиланням, і реальні дії виконуються в адресному просторі об’єкту.
Однак за цією фундаментальною подібністю починаються значні розходження між конкретним втіленням у двох моделях понять об'єктів, інтерфейсів, виклику за посиланням і т.ін. На них і зупинимося.
У CORBA інтерфейс об’єкту задається за допомогою визначеної групою OMG мови опису інтерфейсів (Interface Definition Language, IDL). Тип об’єкту — це тип його інтерфейсу. Інтерфейс ідентифікується іменем, представленим ланцюжком символів. У моделі CORBA визначений базовий тип для всіх об'єктів — CORBA::Object. Об'єкт підтримує тип свого безпосереднього інтерфейсу і, за принципом спадкування, всі його базові типи.
У СОМ об'єкт характеризується своїм класом. Клас — це реалізація деякої множини інтерфейсів. Множинне спадкування інтерфейсів не підтримується, натомість цей об'єкт може мати кілька інтерфейсів одночасно. У СОМ інтерфейс може визначатися шляхом успадкування іншого інтерфейсу. Для всіх інтерфейсів існує базовий інтерфейс — IUknown. Щоб перейти від інтерфейсу базового типу до успадкованого інтерфейсу або від одного з інтерфейсів об’єкту до іншого, клієнт має викликати метод QueryInterface, визначений у базовому інтерфейсі IUknown. Для ідентифікації класів та інтерфейсів СОМ використовуються ті самі універсальні унікальні ідентифікатори (UUID), що прийняті для ідентифікації інтерфейсів у специфікації DCE RPC. Можна застосовувати і символьні позначення інтерфейсу, але потім вони мають бути трансльовані в належний ідентифікатор UUID. Об'єкт у СОМ — це екземпляр класу. Клієнт одержує доступ до об’єкту за допомогою вказівника на один з його інтерфейсів (interface pointer).
Усі ці особливості випливають із суті моделі СОМ, що реалізує інтеграцію об'єктів на рівні двійкових кодів. Двійкове подання інтерфейсу об’єкту в СОМ ідентичне віртуальній таблиці функцій мови С++.
Інтеграція на рівні двійкових кодів можлива тільки на одній апаратно-операційній платформі. Звичайно, визначення інтерфейсів за допомогою двійкових таблиць не залежить від конкретної мови програмування. Але підтримка різних мов має спиратися на механізм викликів віртуальних функцій, які безпосередньо застосуємо тільки до С++, а для всіх інших мов буде піддаватися попередній обробці. Тому за кількістю підтримуваних мов СОМ поступається CORBA, у якій передбачений гнучкий механізм відображення описів інтерфейсів у термінах IDL у відповідні структури тієї чи іншої мови програмування.
Розходження між мовами IDL за версією OMG і Microsoft — одне з найбільш значних для двох об'єктних моделей. У CORBA мова опису інтерфейсів — найважливіша частина архітектури, основа схеми інтеграції об'єктів. Всі інтерфейси і типи даних визначаються на IDL. Різні мови програмування підтримуються завдяки заданим відображенням між описам типів даних на IDL у відповідні визначення конкретною мовою. Ці відображення реалізуються компілятором IDL, що генерує вихідні коди потрібною мовою. Насьогодні підтримується відображення в С, С++, SmallTalk, Ada95, Visual Basic, Кобол Cobol і Java. Сам IDL синтаксично нагадує декларації типів у С++, але аж ніяк не ідентичний цій мові.
Якщо в моделі інтеграції об'єктів CORBA мова IDL відіграє фундаментальну роль, то Microsoft IDL (MIDL) — лише один з можливих способів визначення інтерфейсів об’єкту. MIDL — не більш ніж корисний інструментарій для написання інтерфейсів. На відміну від CORBA IDL, MIDL не визначає загального набору типів даних, доступних різним мовам програмування. На MIDL можна визначити інтерфейси і типи даних, що зрозуміють програми на С і С++, але для Visual Basic і Java цього вже зробити не можна.
Обидві об'єктні моделі передбачають ситуацію, коли у клієнта вже у процесі виконання програми виникає потреба використовувати ті чи інші об'єкти. У цьому випадку в клієнта не буде скомпільованих команд для викликання методів, оскільки інтерфейс об’єкту не був відомий на етапі компіляції. Тому йому будуть потрібні спеціальні інтерфейси динамічного виклику. У CORBA механізм DII (Dynamic Invocation Interface) спирається на Interface Repositоry, що містить написані на IDL визначення типів даних і інтерфейсів. Конкретна реалізація такого репозитарію залежить від розроблювача брокера об'єктних запитів ORB. Крім динамічних викликів, репозитарій інтерфейсів у CORBA може використовуватися для систематичної організації і збереження даних визначеного проекту. У СОМ ті самі функції виконують інтерфейс Dispatch і бібліотеки типів Type Libraries.
CORBA і СОМ абсолютно по-різному підходять до проблем ідентифікації (identity) об'єктів і їхнього збереження в довгостроковій пам'яті (persistance). CORBA вводить поняття об'єктного посилання (object reference), що унікальним чином ідентифікує об'єкт у мережі. Тим самим екземпляру об’єкту дається право на існування протягом деякого часу. Об'єкти можуть активуватися, зберігатися в довгострокій пам'яті, пізніше знову реактивізуватися і дезактивуватися, і при цьому об'єктне посилання буде вказувати весь час на те саме конкретне втілення об’єкту. Для особливо значущих об'єктів, призначених для тривалого використання, об'єктні посилання можуть інтегруватися зі службою чи каталогами служби імен.
У СОМ поняття об'єктного посилання відсутнє. Найближчий аналог — це механізм moniker («прізвисько»), що забезпечує перетворення символьного імені об’єкту у вказівник інтерфейсу.