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

Структурне програмування.

Структурний підхід до програмування (60 – 70 роки ХХ ст.).Структурний підхід до програмуванняпредставляє собою сукупність технологічних прийомів, що охоплюють виконання всіх етапів розробки програмного забезпечення. В основі структурного підходу лежитьдекомпозиція(розбиття на частини) складних систем з ціллю наступної реалізації у вигляді окремих невеликих (ло 40–50 операторів) підпрограм. З появою інших принципів декомпозиції (об’єктного, логічного і т.д.) даний спосіб отримав назву процедурної декомпозиції.

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

Підтримка принципів структурного програмування була закладена в основу так званих процедурних мов програмування. Як правило вони включали основні “структурні” оператори передачі керування, підтримували вкладання підпрограм, локалізацію і обмеження області “видимості” даних. Серед найбільш відомих мов цієї групи варто назвати PL/1, ALGOL-68, Pascal, C.

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

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

Модульне програмування пропонує виділення груп підпрограм, що використовують одні і ті ж глобальні дані в окремі модулі (бібліотеки підпрограм), наприклад модуль графічних ресурсів, модуль підпрограм виводу на принтер (рис. 1.4). Зв’язки між модулями при використанні даної технології виконуються через спеціальний інтерфейс, в той час як доступ до реалізації модуля (до тіл підпрограм і деяким “внутрішнім” змінним) заборонений. Цю технологію підтримують сучасні версії мов Pascal і C(C++), мови Ада і Modula.

 

Модулі з локальними даними і підпрограмами

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

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

1.1.3. Об’єктно – орієнтоване програмування.

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

Об’єктна структура програми вперше була використана у мові імітаційного моделювання складних систем Simula, яка виникла ще в 60-х роках ХХ ст. Такий спосіб представлення програми отримав розвиток у спеціалізованій мові моделювання Smalltalk (70-ті роки ХХ ст.), а потім був використаний в нових версіях універсальних мов програмування, таких як Pascal, C++, Modula, Java.

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

Бурний розвиток технологій програмування, в основі яких лежить об’єктний підхід, дозволив розв’язати багато проблем. Так, були створені середовища, які підтримують візуальне програмування, наприклад Delphi, C++ Builder, Visual C++ і т.д. При використанні візуального середовища у програміста з’являється можливість проектувати деяку частину, наприклад інтерфейси майбутнього продукту, з використанням візуальних засобів додавання і налаштування спеціальних бібліотечних компонентів. Результатом візуального проектування є заготовка майбутньої програми, в яку вже внесені відповідні коди.

Використання об’єктного підходу має багато переваг, однак його конкретна реалізація в об’єктно-орієнтованих мовах програмування, таких як Pascal і C++, має суттєві недоліки:

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

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

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

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

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

Компонентний підхід лежить в основі технологій, розроблених на базі COM (Component Object Model – компонентна модель об’єктів), і технології створення розподілених додатків CORBA (Common Object Request Broker Architecture – загальна архітектура з посередником обробки запитів об’єктів). Ці технології використовують схожі принципи і розрізняються лише особливостями їх реалізації.

Технологія COM фірми Microsoft є розвитком технології OLE (Object Linking and Embedding – зв’язування та внедрение об’єктів), яка використовувалась в ранніх версіях Windows для створення складових документів. Технологія COM визначає загальну парадигму взаємодії програм довільних типів: бібліотек, додатків, операційної системи, тобто дозволяє одній частині програмного забезпечення використовувати функції (служби), що надаються іншою, незалежно від того чи функціонують ці частини в межах одного процесу, в різних процесах на одному комп’ютері чи на різних комп’ютерах (рис. 1.6). Модифікація COM, забезпечує передачу викликів між комп’ютерами, називається DCOM (Distributed COM – розподілена COM).

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

Кожен інтерфейс має своє ім’я, яке починається з літери “I”, і глобальний унікальний ідентифікатор IDD (Interface IDentifier). Будь-який об’єкт COM обов’язково реалізує інтерфейс IUnknown (на схемах цей інтерфейс завжди розміщують зверху). Використання цього інтерфейсу дозволяє отримати доступ до інших інтерфейсів об’єкта.

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

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

2) локальний сервер; створюється окремим процесом (модулем, ехе), який працює на одному комп’ютері з клієнтом;

3) віддалений сервер; створюється процесом, який працює на іншому комп’ютері.

Наприклад, Microsoft Word є локальним сервером. Він включає багато об’єктів, які можуть використовуватись іншими додатками.

Для звернення до служб клієнт повинен отримати вказівник на відповідний інтерфейс. Перед першим зверненням до об’єкта клієнт посилає запит до бібліотеки COM, що містить інформацію про всі зареєстровані в системі класи COM об’єктів, і передає їй ім’я класу, ідентифікатор інтерфейсу і тип сервера. Бібліотека запускає необхідний сервер, створює необхідні об’єкти і повертає вказівники на об’єкти та інтерфейси. Отримавши вказівники, клієнт може викликати необхідні функції об’єкта.

Взаємодія клієнта і сервера забезпечується базовими механізмами COM або DCOM, тому клієнту неважливе місцезнаходження об’єкта. При використанні локальних і віддалених серверів в адресному просторі клієнта створюється proxy-об’єкт замісник об’єкта COM, а в адресному просторі сервера COM – заглушка, відповідна клієнту. Отримавши завдання від клієнта, замісник упаковує його параметри і, використовуючи служби операційної системи, передає виклик заглушці. Заглушка розпаковує завдання і передає його об’єкту COM. Результат повертається клієнту у зворотному порядку.

На базі технології COM та її розподіленої версії DCOM були розроблені компонентні технології, які розв’язують різні задачі розробки програмного забезпечення.

OLE-automation або просто Automation (автоматизація) – технологія створення додатків, які програмуються, та забезпечує програмуючий доступ до внутрішніх служб цих додатків. Вводить поняття диспінтерфейсу (dispinterface) – спеціального інтерфейсу, який полегшує виклик функцій об’єкта. Цю технологію підтримує, наприклад Microsoft Excel, надаючи іншим додаткам свої служби.

ActiveX–технологія, побудована на базі OLE-automation, призначена для створення програмного забезпечення, як зосередженого на одному комп’ютері, так і розподіленого в мережі. Передбачає використання візуального програмування для створення компонентів – елементів управління ActiveX. Отримані таким чином елементи управління можна встановлювати на комп’ютер дистанційно з віддаленого сервера, причому код залежить від операційної системи що використовується. Це дозволяє використовувати елементи управління ActiveX в клієнтських частинах додатків Інтернету.

Основними перевагами технології ActiveX, які забезпечують їй широке використання, є:

1) швидке написання програмного коду, оскільки всі дії, пов’язані з організацією взаємодії сервера та клієнта, беруться на програмне забезпечення COM, програмування мережевих додатків стає схожим на програмування для окремого комп’ютера;

2) відкритість та мобільність – специфікації технології недавно були передані в Open Group як основа відкритого стандарту;

3) можливість написання додатків з використанням знайомих засобів розробки, наприклад Visual Basic, Visual C++, Borland Delphi, Borland C++ та будь-яких засобів розробки на Java;

4) велика кількість уже існуючих безкоштовних програмних елементів ActiveX (до того ж практично будь-який програмний компонент OLE сумісний з технологіями ActiveX і може використовуватись без модифікацій в мережевих додатках);

5) стандартність – технологія ActiveX основана на стандартах Інтернет (TCP/IP, HTML, Java), з одного боку, і стандартах введених в свій час Microsoft і необхідних для збереження сумісності (COM, OLE).

MTS (Microsoft Transaction Server – сервер управління трансакціями) – технологія, що забезпечує безпеку і стабільну роботу розподілених додатків при великих об’ємах даних які передаються.

MIDAS (Multitier Distributed Application Server – сервер багатоланкових розподілених додатків) – технологія, яка організовує доступ до даних різних комп’ютерів з врахуванням балансування навантаження мережі.

Всі вказані технології реалізують компонентний підхід, закладений в COM. Так, з точки зору COM елемент управління ActiveX – “чорний ящик”, який володіє властивостями, методами та подіями, який можна використовувати як будівельний блок при створенні додатків.

Технологія CORBA, розроблена групою компаній OMC (Object Management Group – група впровадження об’єктної технології програмування), реалізують підхід, аналогічний COM, на базі об’єктів та інтерфейсів CORBA. Програмне ядро CORBA реалізовано для всіх апаратних і програмних платформ, і тому цю технологію можливо використовувати для створення розподіленого програмного забезпечення в гетерогенному (різнорідному) обчислювальному середовищі. Організація взаємодії між об’єктами клієнта і сервера в CORBA здійснюється за допомогою спеціального посередника названого VisiBroker, та іншого спеціалізованого програмного забезпечення.

Особливістю сучасного етапу розвитку технології програмування, крім зміни підходу, є створення та супроводження програмного забезпечення, які були названі CASE-технології (Computer-Aided Software/System Engineering – розробка програмного забезпечення програмних систем з використанням комп’ютерної підтримки). Без засобів автоматизації розробка достатньо складного програмного забезпечення на сучасний момент стає тяжко реалізованою задачею: пам’ять людини вже не в стані фіксувати всі деталі, які необхідно враховувати при розробці програмного забезпечення. На сьогодні існують CASE-технології, які підтримують як структурний, так і об’єктний (у тому числі і компонентний) підходи до програмування.

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

1.2. Класифікація програмного забезпечення

Можна виділити три класи ПЗ:

1. системне;

2. пакети прикладних програм (прикладне ПЗ);

3. інструментарій технології програмування (інструментальні засоби для розробки ПЗ).

Системне ПЗ направлене:

· на створення операційного середовища функціонування інших програм;

· забезпечення надійної та ефективної роботи самого комп’ютера і обчислювальної мережі;

· проведення діагностики і профілактики апаратури комп’ютера і обчислювальних мереж;

· виконання допоміжних технологічних процесів (копіювання, архівація, відновлення файлів програм і БД і т.п.).

Системне ПЗ (System Software) – сукупність програм і програмних комплексів для забезпечення роботи комп’ютера і обчислювальних мереж.

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

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