К. М. Лавріщева програмна інженерія підручник Київ, 2008
Скачать 5.23 Mb.
|
Типи компонентних структур. Розширенням поняття компонента є шаблон (паттерн) – абстракція, що містить у собі опис взаємодії сукупності об'єктів у загальній кооперативній діяльності, для якої визначені ролі учасників і їхня відповідальність. Шаблон є повторюваною частиною програмного елемента або схемою вирішення проблеми. Компонентна модель –відбиває проектні рішення щодо композиції компонентів, визначає типи шаблонів компонентів і припустимі взаємодії між ними, а також джерело формування файлу розгортання ПС у середовищі функціонування. Каркас являє собою високорівневу абстракцію проекту ПС, у якій функції компонентів відділені від задач керування ними. Каркас поєднує множину взаємодіючих між собою об'єктів у деяке інтегроване середовище для досягнення Розділ 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 |