Сервісно-орієнтоване програмування 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Сервісно-орієнтоване програмування



 

Ця парадигма програмування з'явилася як наслідок розі ляду програмних компонентів як готових сервісів, визначення для них інтерфейсів взаємодії в рамках нової архітектури ПЗ, зв'язаних із сервісами, у середовищі розподілених систем (CORBA, DCOM і EJB) і web - сервісів у середовищі Інтернету. Такі архітектури отримали назву сервісно-орієнтованої архітектури - SOA (Service-Oriented Architecture) і зараз активно розвиваються разом із відповідними засобами їхньої підтримки й опису (XML, SOAP, WSDL і ін.) та механізмами взаємодії звичайних сервісів розподілених застосувань і web - сервісів Інтернету [18].

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

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

Архітектура SOA мас форму піраміди, що складається з кількох шарів [18].

1. Підґрунтям піраміди є базові сервіси і базові операції, а саме, публікація, виявлення, вибір і зв'язування, які націлені на створення і використання описів сервісів.

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

3. Шар менеджменту сервісу, а саме, керування платформою сервісу, розгортання, ведення статистики виконання, підвищення ефективності, забезпечення прозорості ходу виконання транзакцій, відетеження стану ходу виконання тощо.

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

Web - сервіс має URL - адресу, інтерфейс і механізм взаємодії з іншим сервісом через протоколи Інтернету або зв'язки з іншими програмами, БД і діловими бізнес-операціями. Обмін даними між web - сервісом і програмою здійснюється за допомогою XML - документів, оформлених у вигляді повідомлень. Web - сервіси забезпечують розв'язання задачі інтеграції застосувань різної природи, будучи інструментом побудови розподілених систем. Web - сервіс надається провайдером мережі Інтернету, який має стандартний спосіб взаємодії з розподіленими (.NET, J2EE, CORBA і ін.) і прикладними системами з отримання деякої послуги.

Основні засоби опису Web - сервісів:

- мова XML для опису і побудови SOA - архітектури;

- мова WSDL (Web Services Description Language) для опису web - сервісів і їхніх інтерфейсів на XML, що стосується типів даних і повідомлень, а також моделей взаємодії і протоколів зв'язування сервісів між собою;

- SOAP (Simple Object Access Protocol) для визначення форматів запитів до web - сервісів;

- UDDI (Universal Description, Discovery and Integration) для універсального опису, виявлення й інтеграції сервісів, забезпечення їхнього збереження, упорядку­вання ділової сервісної інформації в спеціальному реєстрі з покажчиками на конк­ретні інтерфейси web - сервісів.

Сервісно-орієнтована архітектура - це сукупність взаємодіючих між собою сервісів і web - сервісів і їхніх інтерфейсів. Будь-який з компонентів SOA створюєть­ся за допомогою сервісів безвідносно до конкретних технологій, за які можна брати готові застосування типу «чорна скринька». Інтеграція компонентів і сервісів в архітектуру SOA містить у собі наступні види:

- користувальницьку інтеграцію (user intégration) для взаємодії інформацій­ної системи з конкретним користувачем;

- зв'язування застосувань (application Connectivity) для забезпечення їхньої взаємодії;

- інтеграцію процесів (process intégration) для об'єднання бізнес-процесів;

- інформаційну інтеграцію (information intégration) для забезпечення доступу до інтегрованої інформації і даних.

При цьому до створюваної архітектури SOA висуваються наступні вимоги:

- наявність існуючих інформаційних систем і поява нових;

- поетапне впровадження нових і міграція існуючих інформаційних систем;

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

- використання різних моделей і систем (портали, grid - системи й ін.).

Якщо об'єктом сервісно-орієнтованої архітектури є web - сервіс, то застосову­ється дві технології, що забезпечує функціональність (Functions) і якість сервісів (Quality of service). Ці технології винесені на рівень IT - стандартів комітету W3C і мають наступні рівні.

Технологія забезпечення функціональності web - сервісів має:

- транспортний рівень (transport layer) для обміну даними;

- комунікаційний рівень (service communication layer) для визначення прото­колів;

- рівень опису сервісу (service description layer) і зв'язаних з ним інтерфейсів;

- рівень бізнес-процесів (business process layer) для реалізації бізнес-процесів і потоків робіт через механізми web - сервісів;

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

Технологія забезпечення якості web - сервісів має наступні рівні:

- політики (policy layer) для опису правил і умов застосування web - сервісів;

- безпеки (security layer) для опису питань безпеки веб-сервісів і функціону­вання (авторизація, аутентифікація і розподіл доступу);

- транзакцій (transaction layer) для встановлення параметрів звертання до веб-сервісів і забезпечення надійності їхнього функціонування;

- керування (management layer) для керування web - сервісами.

Технологічний фундамент web - сервісів становлять: XML, SOAP, UDDI, WSDL. З їхньою допомогою здійснюється реалізація базових властивостей web – сервісу і механізму взаємодії між собою web – сервісів у середовищі SOA, що вміщують компоненти, наведені на рис. 5.11.

Рис. 5.11. Компоненти web - сервісів і взаємодія з різними системами

 

Як видно з рисунку до головних компонентів належать:

- провайдер сервісу, що здійснює реалізацію сервісу у вигляді web - сервісу, прийом і виконання запитів користувачів сервісу, а також публікацію сервісу, від­значеного в реєстрі сервісів;

- реєстр сервісів, якій містить у собі бібліотеку сервісів для користувачів сервісу і засоби пошуку і виклику необхідного сервісу за запитами, що надійшли від провайдерів сервісів на надання сервісів;

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

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

Для отримання сервісу в архітектурі SOA виконуються наступні операції:

1. Публікація сервісу WSDL з метою забезпечення доступності (через ви­клик) користувачеві сервісу і його інтерфейсу;

2. Пошук за протоколом SOAP здійснює користувач сервісу в реєстрі сервісів за заданими критеріями;

3. Зв'язування UDDI через опис користувачем необхідного сервісу, який може надаватися в таких моделях як COM, CORBA, DBMS,.JNET тощо.

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

 

Агенте програмування

 

Поняття інтелектуального і програмного агента з'явилося понад 20 років тому, їхня роль у програмній інженерії увесь час зростає [19-23]. Так, Джекобсон [23] зазначив перспективу використання агентів як менеджерів проектів, розробни­ків архітектури за діаграмами use case і ін.

Основний теоретичний базис даного програмування - темпоральна, модальна і мультимодельна логіки, дедуктивні методи доведення правильності властивостей агентів і ін.

З погляду програмної інженерії агент — це самодостатня програма, здатна керувати своїми діями в інформаційному середовищі функціонування для одер­жання результатів виконання поставленої задачі і зміни поточного стану середови­ща [19]. Агент мас такі властивості:

- автономність - це здатність діяти без зовнішнього впливу;

- реактивність - це здатність реагувати на зміни даних, середовища і сприй­мати їх;

- активність - це здатність ставити мету і виконувати задані дії для досягнен­ня цієї мети;

- здатність до взаємодії з іншими агентами (або людьми).

З інтелектуальним агентом зв'язані знання, що відображають переконання, намір, зобов'язання і т.п. Ці поняття входять у концептуальну модель і зв'язуються між собою операційними планами реалізації цілей агента. Для досягнення цілей інтелектуальні агенти взаємодіють один з одним, установлюють зв'язок між собою через повідомлення або запити і виконують задані дії або операції відповідно до наявних знань. Агенти можуть бути локальними і розподіленими (рис.5.12).

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

 

Рис. 5.12. Приклад взаємодії агентів у різних середовищах

 

Характер взаємодії між агентами залежить від сумісності цілей, компетент­ності і т.п. [21].

Основою агентного програмування є:

- формальна мова опису ментального стану агентів;

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

- засоби інтерпретації специфікацій агента;

- інструменти конвертування будь-яких програм у відповідні агентні програ­ми.

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

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

- взаємозалежністю цілей інших агентів-членів коаліції, а також від можли­вого впливу агентів один на одного;

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

- компетенцією - знаннями умов середовища функціонування і ступенем їх­нього використання.

Головний засіб комунікації агентів - транспортний протокол ТСР/1Р або про­токол агентів ACL (Agent Communication Languages). Керування агентами (Agent Management) виконується за допомогою сервісів: передача повідомлень між аген­тами, доступ агента до сервера і т.п. Комунікація агентів - це взаємодія між різни­ми агентами через подання загальних протоколів Інтернету, а також опис повідом­лень мовою HTML і декларативними або процедурними (Java, Telescript, ACL і т.п.) мовами. Кооперація агентів - це спільне виконання деяких завдань користувачів.

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

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

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

 

Рис. 5.13. Схема обробки запитів агентами у середовищі Інтернету

 

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

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

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

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

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

Однією із систем побудови агентів, заснованою на обміні повідомленнями, є система JATLite, що за допомогою Java - класів створює нових агентів, які обчислюють визначені функції в розподіленому середовищі. Система Agent Builder - це система конструювання програмних агентів, які описуються мовою Java і можуть взаємодіяти між собою, мовою KQML (Knowledge Query and Manipulation Language) [19-23].

Побудовані агенти виконують функції: менеджера проекту й онтологій, візуалізації. налагодження й ін. Реалізацію механізмів взаємодій агентів забезпечує система JAFMAS, ряд інших мультиагентних систем [19].

 

Теоретичне програмування

 

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

Авторами української теоретичної школи програмування, створеної В.М. Глушковим, запропоновані нові парадигми, а саме:

- алгебраїчне та інсерційне програмування (А.А.Летичевський і ін.) [24-26];

- експлікативне та номінативне програмування (В.Н.Редько, М.С.Нікітченко), які використовують логічний і математичний апарат для абстрактного конструювання програм [27-29];

- алгебро-алгоритмічне програмування (Г.О. Цейтлін), що поєднує алгебраїчний апарат і теорію алгоритмів [30-31 ].

 

5.3. Контрольні питання і завдання

 

1. Охарактеризуйте структурні методи програмування.

2. Наведіть основні особливості і можливості об'єктно-орієнтованого програмування.

3. Які діаграми є в мові UML для візуального проектування програм?

4. Наведіть основні типи компонентів і шляхи їхнього використання.

5. Назвіть базові поняття в компонентному програмуванні.

6. Визначте основні поняття й етапи життєвого циклу у компонентному програмуванні.

7. Визначте основні елементи аспектно-орієнтованого програмування.

8. Визначте основні елементи агентного програмування.

9. Визначте об'єкти генерувального програмування і наведіть призначення.

10. Що таке простір проблем і простір рішень?

11. Наведіть теоретичні методи програмування.

12. Охарактеризуйте алгебраїчне програмування.

13. Що таке алгоритміка і її алгебра?

14. Покажіть сутність переходу до інших алгебр.

 


Оптимізація програм

 

Основні поняття.

 

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

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

Усі ці переваги свідчать на користь застосування оптимізації. Єдиним, але істотним недоліком оптимізації є необхідність ретельного її опрацювання при створенні компілятора. Використовувані методи оптимізації ні при яких умовах не повинні приводити до зміни "змісту" вихідної програми (тобто до таких ситуацій, коли результат виконання програми змінюється після її оптимізації). На жаль, не всі методи оптимізації, використовувані розробниками компіляторів, можуть бути теоретично обґрунтовані і доведені для всіх можливих видів вихідних програм. Тому більшість компіляторів передбачає можливість відключати ті чи інші з можливих методів оптимізації. (Часто при оптимізації компілятори видають попередження розробнику програми, якщо та чи інша її ділянка викликає підозри щодо правильності його "змісту"). Застосування оптимізації також є недоцільним у процесі налагодження розроблюваної програми.

Розрізняються дві основні категорії оптимізуючих перетворень:

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

· перетворення результуючої об'єктної програми.

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

Методи перетворення програми залежать від типів синтаксичних конструкцій вихідної мови. Теоретично розроблені методи оптимізації для багатьох типових конструкцій мов програмування. Далі будуть розглянуті тільки методи оптимізації лінійних ділянок - вони зустрічаються в будь-якій програмі і складають істотну частину програмного коду.

Лінійна ділянка програми - це виконувана один по одному послідовність операцій, що має один вхід і один вихід. Найчастіше лінійна ділянка містить послідовність арифметичних операцій і операторів присвоєння значень змінним.

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

 



Поделиться:


Последнее изменение этой страницы: 2016-04-23; просмотров: 900; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.142.171.180 (0.052 с.)