Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
92
Добавлен:
12.03.2016
Размер:
5.48 Mб
Скачать

Розділ 5

111

 

 

 

пристрій вводу/виводу і т.п.). На стадії реалізації до одного пакета можуть бути віднесені всі підсистеми, що у діаграмі розміщення зв'язані з одним вузлом.

5.1.4. Компонентне програмування

За оцінками експертів в інформаційному світі 75 % напрацювань із програмування дублюються (наприклад, програми складського обліку, нарахування зарплати, розрахунку витрат на виробництво продукції і т.п.). Більшість з цих програм типові, але кожного разу знаходяться особливості ПрО, що призводять до їх повторної розробки.

Компонентне програмування дозволяє уникнути цих проблем. Воно є подальшим розвитком ООП, заснованим на повторному використанні, специфікації компонентів і їхніх інтерфейсів, композиції та конфігурації компонентів. Зв’язки між компонентами містять у собі підтипи й еквівалентність, а об'єктні зв’язки — класи і суперкласи. Сформульовано багато визначень поняття «компонент». Наведемо одне з них.

Під компонентом розуміють самостійний продукт, що підтримує об'єктну парадигму, реалізує окрему предметну область і може взаємодіяти з іншими компонентами через інтерфейси.

Об'єкти розглядаються на логічному рівні проектування ПС, а компоненти – це безпосередня фізична, тобто програмна реалізація об'єктів. Співвідношення між об'єктами і компонентами неоднозначне. Один компонент може бути реалізацією декількох об'єктів або навіть деякої частини системи, отриманої при проектуванні. Зворотне співвідношення, тобто компонент – об’єкт, як правило, не виконується

[8–13].

Перехід до компонентів відбувався еволюційно (табл.5.1.): від підпрограм, модулів і функцій.

При цьому удосконалилися елементи, методи їхньої композиції і накопичення для подальшого використання.

Компоненти конструюються самостійно, як деяка абстракція, що містить у собі інформаційну частину й артефакт (специфікація, код, каркас і ін.).

В інформаційній частині задаються відомості: призначення, дата виготовлення, умови застосування (ОС, середовище, платформа і т.п.).

Артефакт – це реалізація (implementation), інтерфейс (interface) і схема розгортання (deployment) компонента.

Реалізація – це код, що буде виконуватися при зверненні до операцій, визначених в інтерфейсах компонента. Компонент може мати кілька реалізацій залежно від операційного середовища, моделі даних, СКБД і ін.

Для опису компонентів, як правило, застосовуються мови об’єктноорієнтованого програмування, зокрем Java, у якій поняття інтерфейсу і класу – базові, використовуються в моделях Javabeans і Enterprise Javabeans і в об'єктній моделі CORBA [14].

Таблиця 5.1. Схема еволюції повторних елементів компонентного типу

112

Розділ 5

Інтерфейс відображає операції звертання до реалізації компонента, описується в мовах IDL або APL, містить у собі опис типів і операції передачі аргументів і результатів для взаємодії компонентів. Компонент, як фізична сутність, може мати множину інтерфейсів.

Розгортання – це виконання фізичного файлу відповідно до конфігурації (версії), з урахуванням параметрів запуску системи.

Компоненти зберігаються у вигляді класів компонентів і використовуються в компонентній моделі, композиції й у каркасі інтегрованого середовища. Керування компонентами проводиться на архітектурному або інтерфейсному рівні, між ними існує взаємний зв'язок.

Компонент описується мовою програмування, не залежить від операційного середовища (наприклад, від середовища віртуальної машини Java) і від реальної платформи (наприклад, від платформ у моделі CORBA), де він буде функціонувати.

Типи компонентних структур. Розширенням поняття компонента є шаблон (паттерн) – абстракція, що містить у собі опис взаємодії сукупності об'єктів у загальній кооперативній діяльності, для якої визначені ролі учасників і їхня відповідальність. Шаблон є повторюваною частиною програмного елемента або схемою вирішення проблеми.

Компонентна модель – відбиває проектні рішення щодо композиції компонентів, визначає типи шаблонів компонентів і припустимі взаємодії між ними, а також джерело формування файлу розгортання ПС у середовищі функціонування.

Каркас являє собою високорівневу абстракцію проекту ПС, у якій функції компонентів відділені від задач керування ними. Каркас поєднує множину взаємодіючих між собою об'єктів у деяке інтегроване середовище для досягнення

Розділ 5

113

 

 

 

певної кінцевої мети. Залежно від спеціалізації каркас називають «білою скринькою» або «чорною скринькою».

Каркас типу «біла скринька» містить у собі абстрактні класи для зображення об'єктів і їх інтерфейсів. При реалізації ці класи трансформуються в конкретні класи з указівкою відповідних методів реалізації. Використання такого типу каркаса є характерним для OOП.

Для каркаса типу «чорна скринька» у його видиму частину виносять точки, що дозволяють змінювати входи і виходи.

Компонентне середовище – розширення класичної моделі клієнт–сервер з урахуванням специфіки побудови і функціонування програмних компонентів, а також результатів практичних реалізацій і їхньої апробації. Основа компонентного середовища – множина серверів компонентів (часто їх називають сервери застосувань – application servers). Усередині сервера розгортаються компонентиконтейнери. Для кожного сервера може існувати довільна кількість контейнерів.

Контейнер – це оболонка, усередині якої реалізується функціональність компонента. Взаємодія контейнера із сервером строго регламентована і здійснюється через стандартизовані інтерфейси. Контейнер керує породжуваними компонентами і їхніми екземплярами з відповідною функціональністю. У загальному випадку усередині нього може існувати довільна кількість екземплярівреалізацій, кожна з яких має унікальний ідентифікатор.

Інтерфейс компонентів. З компонентами у складі контейнера зв'язані два типи інтерфейсів: один для взаємодії з іншими компонентами, а другий інтерфейс системних сервісів, необхідних для функціонування самого контейнера і реалізації спеціальних функцій, наприклад, підтримка розподілених транзакцій, у яких беруть участь кілька компонентів.

Перший тип інтерфейсу — домашній (Home interface) забезпечує керування екземплярами компонента з обов'язковими реалізаціями методів пошуку, створення і видалення окремих екземплярів.

До другого типу належать функціональні інтерфейси (fuction interface), що забезпечують доступ до реалізації компонента. Фактично з кожним екземпляром зв'язаний свій функціональний інтерфейс.

Екземпляри компонентів контейнера можуть взаємодіяти за допомогою системних сервісів, розміщених в інших компонентах. Самі компоненти можуть розміщатися як усередині одного сервера, так і в різних серверах для різних платформ. Така взаємодія забезпечується унікальними іменами компонентів і екземплярів, а також регламентована інтерфейсами і системними функціями. Інтерфейс відображає перелік сервісів, вхідні та вихідні параметри сервісів та їхні типи, переду- і постумови функціонування компонента, а також перелік інших компонентів, сервіси яких потрібні для здійснення своїх сервісів.

Архітектура компонентного середовища може складатися з наступних типів об'єктів:

сервери компонентів;

контейнери компонентів;

реалізації функцій, подані як екземпляри усередині контейнерів;

реалізація компонентних моделей, об'єктів, що задовольняють установку і конфігурування окремих компонентів для деякої комп'ютерної платформи;

114

Розділ 5

клієнтські компоненти і інтерфейси, що забезпечують кінцевого користувача, реалізовані у вигляді різних типів клієнтів (веб-клієнти, повноцінні реалізації графічного інтерфейсу і т.д.);

компонентне застосування, як сукупність компонентів.

Кожний з типів об'єктів може реалізовуватися окремо, оскільки для кожного з них існують свої специфікації і вимоги, а також правила взаємодії з іншими елементами середовища компонентного програмування. Всі елементи разом узяті утворюють ланцюжок, що визначає порядок реалізації компонентної ПС. Кожен тип елементів може реалізовуватися окремим розробником і відповідно до цього визначається його роль у процесі створення компонентної системи.

Згідно до розподілені об'єктів на типи і з огляду на визначене місце кожного з них у процесі створення компонентної програми, варто зробити висновок, що ЖЦ компонентної системи значно складніше, ніж ЖЦ в інших підходах до програмування. Фактично мова йде про декілька окремих ЖЦ для кожного типу компонентів.

Композиція (інтеграція) компонентів і розгортання не залежать від ЖЦ розробки компонентів, заміна будь-якого компонента на новий компонент не повинна призвести до перекомпіляції або перенастроювання зв'язків у ПС.

Інтерфейс компонента може бути визначений у вигляді специфікації точок доступу до компонента, що обумовлюють його варіантність, і використовуючи які клієнт одержує сервіс у клієнт-серверному середовищі. Виходячи з того, що інтерфейс не надає реалізацію операцій, можна змінювати реалізацію без зміни інтерфейсу і, таким чином, покращувати функціональні властивості компонента без перебудови ПС у цілому, а також додавати нові інтерфейси (і реалізацію) без зміни існуючої реалізації усієї ПС.

Семантика інтерфейсу компонента може бути представлена за допомогою контрактів, що визначають зовнішні обмеження і підтримують інваріант, який містить у собі правила встановлення взаємозв’язків властивостей компонента або умови його життєздатності. Крім того, для кожної операції компонента контракт може визначати обмеження, що повинні бути враховані клієнтом перед викликом операції (передумова), і постумови перевірки правильності функціонування компонента після завершення операції. Перед- і постумова визначають специфікацію поведінки компонента і залежать від стану компонента, а також інтерфейсу і зв'язаним з ним набором інваріантів. Контракти й інтерфейс зв'язані між собою, але їхні сутності різні. Інтерфейс являє собою колекцію операцій або функціональних властивостей специфікації сервісів, що підтримує компонент. Контракт задає опис поведінки компонента, націлений на взаємодію з іншими компонентами і відбиває семантику функціональних властивостей компонента.

Таким чином, модель специфікації семантики компонента визначає його інтерфейс і обмеження. Кожен інтерфейс складається з набору операцій (сервісів, що він пропонує або потребує). З кожною операцією зв'язаний набір перед- і постумов.

Структури з компонентів. Композиція компонентів може бути таких типів: компонент з компонентом зв’язані через інтерфейс на рівні застосування; каркас з компонентом зв’язані через інтерфейси на системному рівні; компонент з каркасом взаємодіють через інтерфейси на сервісному рівні; каркас з каркасом взаємодіють через інтерфейси на мережному рівні.

Розділ 5

115

 

 

 

Компоненти запам'ятовуються в репозитарії компонентів, а їхні інтерфейси – в репозитарії інтерфейсів. Компоненти і їхні композиції, як правило, запам'ятовуються в репозитарії компонентів, а їхні інтерфейси також в репозитарії інтерфейсів.

Повторне використання в компонентному програмуванні – це застосування готових порцій формалізованих знань, здобутих під час попередніх реалізацій ПС, у нових розробках систем [13–15].

Компоненти повторного використання (КПВ) – це готові компоненти,

елементи оформлених знань (проектні рішення, функції, шаблони й ін.), що використовуються у ході розроблення не тільки самими розробниками, а й іншими користувачами шляхом адаптації їх до нової ПС, що спрощує і скорочує терміни її розробки. В Інтернеті у даний момент є багато різних бібліотек, репозитаріїв, що містять у собі КПВ, які можна використовувати в нових проектах.

При створенні компонентів, орієнтованих на повторне використання, їхні інтерфейси повинні містити операції, що забезпечують різні способи застосування компонентів. КПВ повинні відповідати визначеним вимогам, мати характерні властивості і структуру, а також механізми звертання до них.

Головною перевагою створення ПС із компонентів є зменшення витрат на розробку за рахунок вибору готових компонентів з подібними функціями, придатними для практичного використання, і пристосування їх до нових умов, на що витрачається менше зусиль, ніж на аналогічну розробку нових компонентів.

Пошук готових компонентів ґрунтується на методах класифікації і каталогізації. Методи класифікації призначені для подання інформації про компоненти з метою швидкого пошуку і добору. Методи каталогізації – для їхнього фізичного розміщення в репозитаріях із забезпеченням доступу до них у процесі інтеграції в компонентну систему.

Методологія компонентної розробки ПС. Створення компонентної системи починається з аналізу ПрО і побудови концептуальної моделі, на основі якої створюється компонентна модель (рис. 5.6).

Вона містить у собі проектні рішення щодо композиції компонентів, використання різних типів шаблонів, зв'язків між ними й операцій розгортання ПС у середовищі функціонування.

Готові компоненти беруться, наприклад, з репозитаріїв у Інтернеті і використовуються при створенні програмних систем, технологія побудови яких описується наступними етапами ЖЦ.

1.Пошук, вибір КПВ і розроблення нових компонентів, виходячи із системи класифікації компонентів і їхньої каталогізації, формалізоване визначення специфікацій інтерфейсів, поводження і функціональності компонентів, а також їхнього анотування і розміщення в репозитарії системи або в Інтернеті.

2.Розроблення вимог (Requirements) до ПС – це формування й опис функціональних, нефункціональних і інших властивостей ПС.

3.Аналіз поведінки (Behavioral Analysis) ПС полягає у визначенні функцій системи, деталей проектування і методів їхнього виконання.

116

 

 

 

 

Розділ 5

 

 

 

 

 

 

 

 

 

 

Завдання

Побудова

 

Побудова

 

 

 

 

 

 

концептуальної

 

компонентної

 

 

 

 

 

 

 

 

 

 

 

 

 

моделі ПрО

 

моделі системи

 

 

 

 

 

 

 

 

 

 

 

 

Інтернет

 

 

Пошук, оцінка ,

Побудова

 

 

 

вибір

нових

 

 

 

 

компонентів

компонентів

 

 

 

Каталог

 

 

 

 

Інтернету

 

 

 

Репозитарій 1

 

 

 

Репозитарій

 

 

 

 

компонентів системи

 

Репозитарій 2

. . .

Репозитарій n

Анотування,

Композиція

 

 

 

 

зберігання

 

 

 

 

компонентів

компонентів у

ПС

 

 

 

 

ПС

 

Рис. 5.6. Схема побудови ПС із компонентів, взятих з Інтернету

4.Специфікація інтерфейсів і взаємодій компонентів (Interface and Interaction Specification) віддзеркалює розподіл ролей компонентів, інтерфейсів, їхню ідентифікацію і взаємодію компонентів через потоки дій або робіт (workflow).

5.Інтеграція набору компонентів і КПВ (Application Assembly and Component Reuse) у єдине середовище ґрунтується на підборі й адаптації КПВ, визначенні сукупності правил, умов інтеграції і побудові конфігурації каркаса системи.

6.Тестування компонентів і середовища (Component Testing) ґрунтується на методах верифікації і тестування для перевірки правильності як окремих компонентів і КПВ, так і інтегрованої з компонентів програмної системи.

7.Розгортання (System Deployment) містить у собі оптимізацію плану компонентної конфігурації з урахуванням середовища, розгортання окремих компонентів і створення цільової компонентної конфігурації для функціонування ПС.

8.Супровід ПС (System Support and Maintenance) складається з аналізу помилок і відмов при функціонуванні ПС, пошуку і виправлення помилок, повторного її тестування й адаптації нових компонентів до вимог і умов інтегрованого середовища.

Таким чином, компонентне програмування є основою економії витрат на програмування нових програм за рахунок використання готових КПВ, які можуть зберігатися у різних сховищах (бібліотеках, репозитаріях, базах знань тощо).

5.1.5. Аспектно–орієнтоване програмування

Аспектно-орієнтоване програмування (АОП) [15–17] – це парадигма побудови гнучких до змін ПС шляхом додавання нових аспектів (функцій), що забезпечують, наприклад, безпеку, взаємодію компонентів з іншим середовищем, а

Розділ 5

117

 

 

 

також синхронізацію одночасного доступу частин ПС до даних і виклик нових компонентів із загальносистемних середовищ.

Аспектом може бути компонент повторного використання, фрагмент програми, що реалізує концепцію взаємодії компонентів у середовищі, захисту даних тощо. Програмна система, яка створюється з КПВ, об'єктів, невеликих методів та аспектів, доповнюється необхідними засобами взаємодії, синхронізації та захисту. Отже, вбудовані фрагменти наповнюють компоненти новим змістовним аспектом.

Практична реалізація аспектів, розміщених у різних частинах елементів ПС, забезпечується механізмом перетинних посилань і точками з’єднання, через які відбувається зв'язок з аспектним фрагментом для отримання визначеної додаткової функції.

Воснові АОП лежить метод, подібний до методу розбиття задач ПрО на ряд функціональних компонентів, визначення необхідності використання різного роду додаткових аспектів і встановлення точок розташування аспектів в окремих компонентах, де це потрібно. Ці роботи виконуються на процесі ЖЦ процесу розробки, доповнюють реалізацію ПС засобами забезпечення взаємодії компонентів або їх синхронізації. Подібний підхід застосовується під час налагодження програм, коли додаткові фрагменти коду вбудовуються в певні точки початкової програми для видачі результатів перевірки. Якщооли налагодження закінчується позитивно, ці фрагменти вилучаються. У випадку аспектів – їхні програмні фрагменти залишаються в основній програмі.

Створення кінцевої ПС в АОП виконується за технологією, що відповідає розробці компонентних систем, з тією різницею, що використані аспекти визначають особливі умови виконання компонентів у середовищі взаємодії. Аспекти можна асоціювати з виконанням різних ролей взаємодіючими особами, що наближає аспект до ролі програмного агента, який виконує додаткові функції при визначенні архітектури системи та якості компонентів.

ВАОП при виробленні проектних рішень використовується механізм фільтрації вхідних повідомлень, за допомогою яких проводиться зміна параметрів і імен текстів аспектів у конкретно заданому компоненті системи. Код компонента стає «нечистим», коли його перетиняють аспекти, і при композиції з іншими компонентами загальні засоби (виклик процедур, RPC, RMI, IDL і ін.) стають недостатніми. Оскільки аспекти вимагають декларативного зчеплення описів, особливо коли їх фрагменти беруться з одних об'єктів для інших.

Один з механізмів композиції компонентів і аспектів – фільтр композиції, що оновлює аспекти без зміни їх функціональних можливостей. Фактично фільтрація стосується вхідних і вихідних параметрів повідомлень, які перевизначають відповідні імена об'єктів. Іншими словами, фільтри делегують внутрішнім частинам компонентів параметри, переадресовуючи раніше встановлені посилання, перевіряють і розміщують у буфері повідомлення, локалізують обмеження і готують відповідний компонент для виконання.

ВОО-системах можуть використовуватися методи, призначені для виконання деяких розрахунків при звертання до інших зовнішніх методів. У [17] сформулювано закон, відповідно до якого не повинні створюватися довгі послідовності дрібних методів, тому що в вихідному коді з’являться операції, які не пов’язані з іменами класів компонентів.

118

Розділ 5

З погляду моделювання, аспекти можна розглядати як каркаси декомпозиції системи, в яких окремі аспекти перетинають КПВ, як схематично показано на рис. 5.7 для програм Р1, Р2 і Р3, тобто в певних точках різних КПВ може бути звернення до одного аспекту.

На наведеному рисунку, наприклад, програма Р1 містить у собі аспект, що здійснює звертання до деякої точки програми Р2, яка після отримання інформації записує її у захищену БД, а потім аспект програми Р2 забезпечує взаємодію з програмою Р3 для передавання відомостей про запис необхідної інформації у БД.

Різним аспектам проектованої системи можуть відповідати й різні парадигми програмування: об’єктно-орієнтовані, структурні й ін. Утворюється мультипарадигменна концепція розробки спроектованої системи.

Р1

Р2

Р3

Рис. 5.7. Приклад розташування аспектів у програмах Р1, Р2 і Р3

Через аспектні механізми встановлюються зв'язки з іншими предметними областями в сімействі програм або систем ПрО. Мова АОП дозволяє описувати аспекти для різних систем сімейства. Після компіляції описів перетинних аспектів, вони генеруються [16], поєднуються, оптимізуються і орієнтуються на виконання в динаміці. При цьому кожний аспект може стати модулем-посередником, що реалізує шаблон взаємодії окремих програм або систем.

Інакше кажучи, на процесі розробки виявляється, що аспекти надто щільно «переплетені» з компонентами й тому потрібна мінімізація зчеплень між аспектами й компонентами через посилання до варіантів використання, зіставлення із шаблоном або блоком коду, у якому встановлені перетинні посилання. Природно, що вказані перетини можуть спричинити зниження ефективності виконання програм або систем, де вони розтащовані.

Аналіз ПрО закінчується побудовою характеристичної моделі та встановленням статичних або динамічних зв'язків з додатковими аспектами моделі. Різним аспектам ПС, як правило, відповідають різні парадигми програмування, які вимагають їхнього вдосконалення й узагальнення при розробленні ПЗ для нової ПрО.

В АОП використовується модель модульних розширень у рамках метамодельного програмування, що забезпечує оперативне використання нових механізмів композиції окремих частин ПС або їхніх сімейств із урахуванням предметно-орієнтованих можливостей мов (наприклад, SQL) і каркасів, які підтримують аспекти.

Розділ 5

119

 

 

 

Технологія розробки ПС методами АОП містить у собі ряд загальних процесів (рис.5.8), описаних далі.

1.Декомпозиція функціональних задач із умовою багаторазового застосування модулів і виділених аспектів виконання (паралельно, синхронно тощо).

2.Аналіз мов специфікації аспектів для опису виділених аспектів й інших задач ПрО.

3.Визначення точок вбудовування аспектів у компоненти й формування посилань і зв'язків з іншими елементами ПрО.

4.Розроблення фільтрів для їх подання на боці сервера в цілях керування відповідно заданими аспектами.

Рис.5.8. Технологічна схема проектування ПС засобами АОП

5.Визначення механізмів композиції (викликів процедур, методів, зчеплень) функціональних модулів, КПВ й аспектів у точках їхнього з'єднання, як фрагментів керування виконанням або звертання із цих точок до інших модулів.

6.Створення об'єктної або компонентної моделі, доповнення її вхідними й вихідними фільтрами повідомлень, що посилають об'єктам повідомлення з завданням виконання методів або аспектів.

7.Компіляція, спільне налагодження модулів і аспектів, після чого

композиція їх у готовий програмний продукт.

Для ефективної реалізації аспектів розроблені системи Aspect, ІР1-бібліотека розширень, активні бібліотеки, а також проведене розширення МП Smalltalk

засобами опису аспектів (Aspect++, Aspect, AspectC#, JAC).

Систему Aspect розробив дослідницький центр Xerox PARC в цілях підтримки АОП на базі мови Java [15, 16].

________________________

1 Абревіатура IP позначає Intensional Programming – інтенсивне програмування як розширення середовище для метапрограмування на основі активного висхідного коду.

120

Розділ 5

Мова цієї системи є розширенням мови Java засобами АОП, тобто будь-яка програма на Java буде виконуватися в системі Aspect. Система має компілятор, налагоджувач і генератор документації.

Компілятор видає байт-код, сумісний з віртуальною машиною Java. Розширення мови Java стосуються способів опису правил інтеграції аспектів і Javaоб'єктів і базуються на таких ключових поняттях:

точка під’єднання JoinPoint у програмі, асоційована з контекстом виконання (виклик методу, конструктора, доступ до поля класу й ін.);

набір точок зрізу Pointcut для точок JoinPoint, що задовольняє певні умови;

набір інструкцій Advice у мові Java, виконуваних до, після або замість кожної із точок JoinPoint, що входять у заданий зріз;

завдання аспекту Introduction для змінювання структури Java-класу шляхом додавання нових полів, методів і ієрархії.

Точка зрізу (точка у програмі, в яку вставляються певні інструкції, що були виконані до або будуть виконуватися замість цієї точки) й набір інструкцій визначають правила інтеграції й разом формують відповідний модуль системи.

Загальними принципами розробки ПС із використанням засобів АОП системи

Aspect є:

побудова моделі ПС за компонентами і аспектами;

виділення в окремі модулі наскрізної функціональності шляхом аспектної декомпозиції;

реалізація кожної вимоги окремо;

інтеграція аспектів у програмний код.

Інтеграція аспектів відбувається в момент компіляції. Модель побудови готової ПС із компонентів, аспектів та фрагментів готового коду подано на рис 5.9 [15].

Рис.5.9. Інтеграція аспектів і компонентів

Після компіляції одержується готова система з функціональністю, інтегрованою за правилами, описаними в аспектних модулях.

Існують інші реалізації АОП: AspectC++, AspectC, AspectC#, розширення мов С++, С, С# аспектами; JAC система, написана мовою Java, для створення розподілених ПС; Weave.NET – проект реалізації механізму підтримки АОП без прив'язки до конкретної МП усередині компонентної моделі .NET Framework і ін.

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