Міністерство освіти та науки України
КІСТ КНЕУ ім. В. Гетьмана
Самостійна робота № 1
з предмету: "Технологія програмування та створення програмних продуктів ”
на тему: "Моделі реалізації об’єктно-орієнтованих систем"
за ІІ семестр 2010-2011 н.р.
Київ - 2010
Ідентифікація інтерфейсу
У кожного інтерфейсу СОМ два імена. Простої, символьне ім'я призначене для людей, воно не унікально (допускається, щоб це ім'я було однаковим у двох інтерфейсів). Інше, складне ім'я призначене для використання програмами. Програмне ім'я унікальне, це дозволяє точно ідентифікувати інтерфейс.
Прийнято, щоб символьні імена Сомів-інтерфейсів починалися з букви І (від Іnterface). Наприклад, згаданий нами інтерфейс для роботи з файлами повинний називатися Іработа с файлами, а інтерфейс перетворення їхніх форматів – Іпреобразование форматів.
Програмне ім'я будь-якого інтерфейсу утвориться за допомогою глобально унікального ідентифікатора (globally unіque іdentіfіer - GUІ). GUІ інтерфейсу вважається ідентифікатором інтерфейсу (іnterface іdentіfіer - ІІ). GUІ - це 16-байтовая величина (128-бітове число), генеруємо автоматично.
Унікальність у часі досягається за рахунок включення в кожен GUІ мітки часу, покажчика моменту створення. Унікальність у просторі забезпечується цифровими параметрами комп'ютера, що використовувався для генерації GUІ.
Опис інтерфейсу
Для визначення інтерфейсів застосовують спеціальну мову - мова опису інтерфейсів (Іnterface Defіnіtіon Language - ІDL). Наприклад, ІDL-описание інтерфейсу для роботи з файлами 1Работасфайлами має вид:
[ object.
uuid(E7CDODOO-1827-11CF-9946-444553540000) ]
interface IРаботаСФайлами: IUnknown {
import "unknown.idl"
HRESULT ОткрытьФайп ([in] OLECHAR имя [31]);
HRESULT ЗаписатьФайл ([in] OLECHAR имя [31]);
HRESULT ЗакрытьФайл ([in] OLECHAR имя [31]);
}
Реалізація інтерфейсу
СОМ задає стандартний двійковий формат, що повинний реалізувати кожен СОМ-об'єкт і для кожного інтерфейсу. Стандарт гарантує, що будь-який клієнт може викликати операції будь-якого об'єкта, причому незалежно від мов програмування, на яких написаний клієнт і об'єкт.
Обробка клієнтського виклику виконується в наступному порядку:
за допомогою покажчика на віртуальну таблицю витягається покажчик на необхідну операцію інтерфейсу;
покажчик на операцію забезпечує доступ до її реалізації;
виконання коду операції забезпечує необхідну послугу.
Unknown - базовий інтерфейс COM
Інтерфейс lUnknown забезпечує мінімальне "спорядження" кожного об'єкта СОМ. Він містить три операції і надає будь-як об'єкту СОМ дві функціональні можливості:
операція Querylnterface() дозволяє клієнту одержати покажчик на будь-який інтерфейс об'єкта (з іншого покажчика інтерфейсу);
операції AddRef() і Release() забезпечують механізм керування часом життя об'єкта.
Одержання покажчика на інтерфейс за допомогою Querylnterface: 1 - за допомогою
покажчика на інтерфейс А клієнт запитує покажчик на інтерфейс У, викликаючи
Querylnterface (ІІ_B); 2 - об'єкт повертає покажчик на інтерфейс У;
3 - тепер клієнт може викликати операції з інтерфейсу В
Правила фіналізації СОМ-об'єкта дуже прості:
при видачі клієнту покажчика на інтерфейс виконується СЧС+1;
при виклику операції AddRef виконується СЧС+1;
при виклику операції Release виконується СЧС-1;
при СЧС=0 об'єкт знищує себе.
Звичайно, клієнт повинний допомагати гідному харакірі об'єкта-самурая:
при одержанні від іншого клієнта покажчика на інтерфейс СОМ-об'єкта він повинний викликати в цьому об'єкті операцію AddRef;
наприкінці роботи з об'єктом він зобов'язаний викликати його операцію Release.
Створення СОМ- об'єктів
Створення СОМ-об'єкта базується на використанні функцій бібліотеки СОМ. Бібліотека СОМ:
містить функції, що пропонують базові послуги об'єктам і їх клієнтам;
надає клієнтам можливість запуску серверів СОМ-об'єктів.
Доступ до послуг бібліотеки СОМ виконується за допомогою викликів звичайних функцій. Найчастіше імена функцій бібліотеки СОМ починаються з префікса "З". Наприклад, у бібліотеці мається функція CoCreateіnstance.
Для створення Сома-об'єкта клієнт викликає функцію бібліотеки СОМ CoCreateіnstance. Як параметри цієї функції посилаються ідентифікатор класу об'єкта CLSІ і ІІ інтерфейсу, підтримуваного об'єктом. За допомогою CLSІ бібліотека шукає сервер класу (це робить диспетчер керування сервісами SCM - Servіce Control Manager). Пошук виробляється в системному реєстрі (Regіstry), що відображає CLSІ на адресу коду сервера, що виконується. У системному реєстрі повинні бути зареєстровані класи всіх Сомів-об'єктів.
Створення одиночного Сома-об'єкта: 1 - клієнт викликає CoCreatelnstance
(CLSІ M, ІІ А); 2 - бібліотека СОМ знаходить сервер і запускає його;
3 - бібліотека СОМ повертає покажчик на інтерфейс А;
4 - тепер клієнт може викликати операції Сома-об'єкта
Параметри функції CoCreateіnstance, використовуваної клієнтом, дозволяють також задати тип сервера, якому потрібно запустити (наприклад, "у процесі" чи локальний).
Повторне використання СОМ-об'єктів
Причина - у типовому СОМ-середовищі базові об'єкти й об'єкти-спадкоємці створюються, випускаються й обновляються незалежно. У цих умовах зміни базових об'єктів можуть викликати непередбачені наслідки в об'єктах-спадкоємцях їхньої реалізації. СОМ пропонує інші засоби повторного використання - включення й агрегурувание.
Застосовуються наступні терміни:
внутрішній об'єкт - це базовий об'єкт;
зовнішній об'єкт - це об'єкт, що повторно використовує послуги внутрішнього об'єкта.
Достоїнство включення - простота. Недолік - низька ефективність при довгому ланцюжку "делегують " об'єктів.
Недолік включення усуває агрегирование. Воно дозволяє зовнішньому об'єкту обманювати клієнтів - представляти в якості власні інтерфейси, реалізовані внутрішнім об'єктом.
Повторне використання СОМ-об'єкта за допомогою агрегирования.
Представимо дві практичні задачі:
запит клієнтом у внутрішнього об'єкта (за допомогою операції Querylnterface) покажчика на інтерфейс зовнішнього об'єкта;
зміна клієнтом лічильника посилань внутрішнього об'єкта (за допомогою операції AddRef) і інформування про цьому зовнішнього об'єкта.
КОНТРОЛЬНІ ПИТАННЯ:
Як можна ідентифікувати інтерфейс?
Розглянути опис інтерфейсу?
Як виконується обробка клієнтського виклику?
Розписати про базовий інтерфейс СОМ (операції, правила фіналізації).
Для чого використовуються повторні СОМ – об’єкти?
Створити в MS Visio СОМ – об’єкт.