Огляд інструментальних засобів або програмного середовища
Досліджуємо особливості програми ідеології. NET для проектування та реалізації об'єктно-орієнтованих програм.
Корпорацією Microsoft запропоновано новаторський компонентно-орієнтований підхід до програмування, який є розвитком об'єктно-орієнтованого спрямування. Відповідно до цього підходу, інтеграція об'єктів (можливо, гетерогенної природи) проводиться на основі інтерфейсів, що представляють ці об'єкти (або фрагменти програм) як незалежні компоненти. Такий підхід суттєво полегшує написання та взаємодія програмних "молекул"-компонент у гетерогенному середовищі проектування та реалізації. Стандартизується зберігання і повторне використання компонент програмного проекту в умовах розподіленої мережевої середовища обчислень, де різні комп'ютери і користувачі обмінюються інформацією, наприклад, взаємодіючи в рамках дослідницького або бізнес-проекту.
Істотною перевагою слід вважати і можливість практичної реалізації принципу "будь-яка сутність є об'єктом" в гетерогенної програмному середовищі. Багато в чому це стало можливим завдяки вдосконаленій, узагальненої системі типізації Common Type System.
Сувора ієрархічність організації просторів для типів, класів та імен сутностей програми дозволяє стандартизувати і уніфікувати реалізацію.
Новий підхід до інтеграції компонент додатків в середовищі обчислень Internet (або так звані веб-сервіси) дає можливість прискореного створення програм для широкого кола користувачів.
Універсальний інтерфейс. NET Framework забезпечує інтегроване проектування та реалізацію компонентів додатків, розроблених відповідно до різних підходів до програмування.
Говорячи про. NET як про технологічній платформі, не можна не відзначити той факт, що вона забезпечує одночасну підтримку проектування та реалізації програмного забезпечення з використанням різних мов програмування. При цьому підтримуються десятки мов програмування, починаючи від найперших (зокрема, COBOL і FORTRAN) і закінчуючи сучасними (наприклад, C # і Visual Basic). Ранні мови програмування до цих пір активно використовуються, зокрема, для забезпечення сумісності з раніше створеними додатками, критичними для бізнесу (скажімо, COBOL дуже широко застосовувався для створення прикладних програм, що підтримують фінансову діяльність).
Застосування технології веб-сервісів - це не просто данина моді на Internet, а реальна (і, мабуть, найбільш прийнятна) можливість забезпечення масштабованості та інтероперабельності додатків. Під масштабованістю розуміють можливість плавного зростання часу відповіді програмної системи на запит із зростанням числа одночасно працюючих користувачів; у разі веб-сервісів масштабованість реалізується за допомогою розподілу обчислювальних ресурсів між сервером, на якому виконується прикладна програма (або зберігаються дані) і комп'ютером користувача.
Під інтероперабельність розуміється можливість інтегрованої обробки гетерогенних даних, що надходять від різнорідних прикладних програм. Саме завдяки інтероперабельності можлива уніфікація взаємодії користувачів через додаток з операційною системою на основі спеціалізованого інтерфейсу прикладних програм, або API-інтерфейсу (Application Programming Interface).
Слід відзначити і ту обставину, що нова технологія. NET не тільки затребувана світовою громадськістю, а й офіційно визнана, що відображено у відповідних стандартах ECMA (European Computer Manufacturers Association).
Тепер розглянемо інструментальні можливості. NET як засоби проектування та реалізації програмного забезпечення, тобто, власне, програмування в широкому сенсі цього слова.
Перш за все, необхідно відзначити підтримку багатомовної середовища розробки додатків CLR (Common Language Runtime).
Ця можливість з'явилася завдяки різноманітності міжмовної інтерфейсу Common Language Infrastructure, або CLI, який підтримує розробку програмних компонентів на різних мовах програмування.
При цьому безперечною перевагою для програмістів є те, що вони можуть розробляти (або допрацьовувати) програмне забезпечення на найбільш підходящому мовою програмування. Тут слід враховувати характер завдання (скажімо, рекурсію або символьну обробку більш природно реалізувати на мові функціонального програмування, а формалізацію структури предметної області - на об'єктно-орієнтованому мовою). Крім того, необхідно брати до уваги досвід роботи програмістів в команді розробників і ту мову програмування, на якій спочатку створювалася система.
Відзначимо ще дві суттєві обставини. По-перше, основні сервісні можливості для розробників, які надає середовище. NET (налагодження, аналіз коду і т. д.) не залежать від конкретної мови програмування, і, отже, програмістам немає необхідності заново осягати особливості середовища розробки, якщо потрібно перейти з однієї мови на іншу. По-друге, незважаючи на те, що ще не всі мови програмування підтримуються. NET, існує можливість самостійної розробки транслятора для будь-якої мови програмування, причому це не викликає труднощів навіть у програмістів, які практично не мають професійної підготовки в області розробки компіляторів.
Коротко розглянемо основні аспекти архітектурного рішення Microsoft. NET Framework, зазначивши насамперед та обставина, що важливу роль відіграє середовище розробки Microsoft Visual Studio.NET, а першорядне значення має середовище виконання програм - Common Language Runtime (CLR). Середовище виконання CLR реалізує управління пам'яттю, типами даних, міжмовних взаємодією, розгортанням (deployment) додатків.
Істотною перевагою конструктивного рішення. NET є компонентно-орієнтований підхід до проектування та реалізації програмного забезпечення. Суть підходу полягає у принциповій можливості створення незалежних складових програмного забезпечення з уніфікованою інтерфейсної частиною для багаторазового повторного і розподіленого використання. При цьому продуктивність рішення обумовлена багатомовністю інтегровних програмних проектів (концепція. NET потенційно підтримує довільний мова програмування, в числі найбільш відомих мов - C #, Visual Basic, C та ін.)
У ході компіляції програма на. NET-сумісному мовою програмування трансформується відповідно до заздалегідь заданої узагальненої специфікацією мови Common Type System (CTS). Система типів CTS повністю описує всі типи даних, які підтримує середовищем виконання, визначає їх взаємозв'язку і зберігає їх відображення в системі типів. NET.
Під Common Language Specification (або CLS) розуміється набір правил, що визначають підмножина узагальнених типів даних, щодо яких гарантується, що вони безпечні при використанні у всіх мовах. NET.
Інтерфейси реалізуються за допомогою форм Windows і ASP.NET для веб-додатків.
У ході виконання процедури трансляції вихідний текст програми (написаний на SML, C #, Visual Basic, C або будь-якому іншому мовою програмування, який підтримується. NET) перетворюється компілятором в так звану збірку (assembly) і зберігається у вигляді файлу динамічно приєднуваної бібліотеки (Dynamically Linked Library, DLL) або виконуваного файлу (Executable, EXE).
Природно, що для кожного компілятора (будь то компілятор мови C #, csc.exe або Visual Basic, vbc.exe) середовищем часу виконання проводиться необхідне відображення використовуваних типів у типи CTS, а програмного коду - в код "абстрактної машини". NET - MSIL (Microsoft Intermediate Language).
У результаті програмний проект формується у вигляді збірки - самодостатнього компонента для розгортання, тиражування і повторного використання. Збірка ідентифікується цифровим підписом автора і унікальним номером версії.
Розглянемо досить узагальнений приклад трансляції багатокомпонентного гетерогенного програмного проекту під управлінням Microsoft. NET.
Припустимо, що компоненти проекту написані на трьох мовах програмування: вже знайомому нам мовою SML, досліджуваній мові C #, а також мовою С + +, який характеризується можливістю створення потенційно небезпечного коду (зокрема, динамічного розподілу пам'яті).
Вихідні тексти компонент проекту транслюються, відповідно, компіляторами з мов SML, C # і C + + в уніфікований MSIL-код і зберігаються у файлах у вигляді збірок.
У ході перегляду та виконання програмного проекту Just-In-Time (JIT) компілятор середовища CLR виробляє виконання проекту з "ледачим" (по мірі необхідності) позначенням відтранслюваного проміжного коду збірок.
Істотно, що потенційно небезпечний код на мові C принципово нездійсненний власне JIT-компілятором, але виконується за допомогою сервісів операційної системи. Відповідальність за працездатність програми і безпеку коду в цьому випадку лежить вже не на середовищі проектування і розробки програмного забезпечення. NET, а на програмістові-розробника.
Суттєвим позитивним відзнакою Microsoft. NET від існуючих аналогів на сучасному ринку програмного забезпечення є універсальна система типізації.
У ході компіляції програма на. NET-сумісному мовою програмування трансформується відповідно до заздалегідь заданої Common Type System (CTS) узагальненої специфікацією мови. Система типів CTS повністю описує всі типи даних, які підтримує середовищем виконання, визначає їх взаємозв'язку і зберігає їх відображення в систему типів. NET.
Система типізації Microsoft. NET є частково впорядкована множина, яке на якісному рівні може розумітися як ISA-ієрархія (абревіатура ISA походить від англійських слів "is a", які означають "є одним з").
Так, наприклад, висловлювання STUDENT ISA PERSON означає, що тип STUDENT є підтип типу PERSON (тут цілком доречна аналогія з множинами і цілком точна аналогія з доменами).
Таким чином, система типів Microsoft. NET утворює ієрархію зі зростанням спільності знизу вгору (див. рис. 14.4), в якій явно виділяються дві великі групи типів, а саме, типи-посилання і типами-значеннями. Різниця між останніми визначається особливостями виклику в процедурах: по імені або за значенням (call-by-name, CBN) і по посиланню (call-by-reference, CBR).
Зауважимо також, що система типізації Microsoft. NET крім розвинутої ієрархії визначених типів дозволяє користувачеві створювати власні типи (як типи-посилання, так і типи-значення) на основі вже існуючих.
Виклад найважливіших аспектів Microsoft. NET було б неповним, якби ми не згадали про такому суттєвому архітектурному принципі як веб-сервіси.
Значення веб-сервісів полягає у розподілі можливостей розроблених прикладних систем по каналах Internet.
В якості середовища розробки прикладних систем доцільно використовувати Microsoft Visual Studio. NET, надає цілий комплекс розвинених засобів створення, редагування та налагодження програмного коду на різних мовах програмування. У разі нескладних завдань можна обмежитися примітивними редакторами тексту програм, подібних Notepad.
Інтерфейсна частина прикладної програмної системи в Internet-архітектурі представлена так званими веб-формами, призначеними для введення і виведення даних в уніфікованому форматі.
В якості мови реалізації може використовуватися мова гіпертекстової розмітки HTML (HyperText Markup Language). Взаємодія між клієнтом і додатком у найпростішому випадку здійснюється з використанням традиційного Internet-протоколу передачі даних HTTP (HyperText Transfer Protocol).
Структуровані дані зберігаються у форматі XML (варіант HTML з більш суворим синтаксисом).
Зауважимо, що технологія веб-сервісів, реалізована Microsoft, припускає інтеграцію з компонентами незалежних виробників.
Спробуємо сформулювати визначення поняття "веб-сервіс" (або, інакше, "веб-служба").
Під веб-сервісами звичайно розуміють програмовані компоненти прикладних програмних систем, які доступні для клієнта (користувача) за допомогою стандартних протоколів, що застосовуються для роботи в Internet-середовищі.
Як вже згадувалося раніше, саме веб-сервіси є однією з найважливіших складових ідеології. NET, центральною частиною даної архітектури, оскільки призначені для реалізації декларованого Microsoft основоположного принципу "програмне забезпечення як сервіс".
Сенс використання веб-сервісів полягає в можливості розподілу функцій розроблених прикладних систем з глобальної мережі.
Для реалізації цього завдання веб-сервіси організуються на перевірених часом, традиційних, а також розвиваються стандартах взаємодії додатків в Internet, а саме:
- HTTP - стандартний протокол обміну гіпертекстовими документами в Internet з можливістю передачі даних задопомогою веб-форм;
- XML - формат зберігання структурованих даних з можливістю обміну ними по Internet-каналах;
- SOAP - стандартний протокол взаємодії компонент (глобально) розподіленого додатка (Simple Object Access Protocol);
- UDDI - стандарт інтеграції додатків (Universal Description, Discovery and Integration);
- WSDL - універсальна мова опису веб-сервісів (Web Service Description Language);
а також цілий ряд інших менш уживаних протоколів.
Одним із принципових технологічних переваг проектування та реалізації програмного забезпечення, декларованих Microsoft, є так званий компонентний підхід до програмування.
У своїй основі зазначений підхід збігається з традиційним об'єктно-орієнтованим, проте він має ряд важливих особливостей. Оскільки кінцевою метою навчального курсу є гетерогенне компонентне програмування, необхідно з самого початку усвідомити сенс основних понять, на яких грунтується компонентний підхід.
Центральної концепцією підходу (і це очевидно вже з назви) є поняття компонента.
Під компонентом в подальшому будемо розуміти незалежний модуль програмного забезпечення, який можна використовувати повторно, а також тиражувати.
На відміну від "традиційних" об'єктів ООП компоненти володіють наступними характеристичними властивостями:
- В цілому компонент має більш високим рівнем абстракції в порівнянні з об'єктом (під останнім розуміється конструкція рівня мови програмування);
- - Компоненти можуть містити в своєму складі множинні класи;
- Компоненти з точки зору користувача є інваріантами по відношенню до тієї мови програмування, на якому вони реалізовані.
Таким чином, виявляється, що в загальному випадку розробник і користувач компонента можуть бути територіально розділені і мають можливість використовувати різні мови програмування в рамках єдиного середовища розробки додатків Microsoft. NET.
Зауважимо, що спроби побудови компонентних програмних систем робилися і рядом інших розробників програмного забезпечення (зокрема, технологія JavaBeans виробництва Sun Microsystems), а також міжнародних асоціацій, які об'єднують зусилля дослідників і практиків у галузі об'єктного програмування (наприклад, стандарт брокерів об'єктних запитів CORBA організації Object Management Group).
В основі таких спроб лежали варіанти об'єктних моделей. Один з подібних варіантів, детально пророблений з математичної точки зору, - модель дворівневої концептуалізації, яку нам належить розглянути в ході даного курсу. Поки ж лише коротко охарактеризуємо основні відмінні риси найбільш відомих з представлених на ринку сучасного програмного забезпечення об'єктних моделей.
Перш за все, розглянемо компонентну модель Microsoft, яка зазвичай позначається в літературі абревіатурою COM (Component Object Model).
Компонентна об'єктна модель COM є основним стандартом Microsoft для компонентного проектування та реалізації програмного забезпечення. На сьогодні це найбільш розвинена, і, мабуть, найбільш вдала в практичному плані модель, яка забезпечує можливість ініціалізації та використання компонентів як усередині одного процесу, так і між процесами або між комп'ютерами незалежно від мови реалізації. COM-модель підтримується в ідеології. NET для цілого ряду мов програмування (C #, SML, Visual Basic, C + + та ін), є основою для ActiveX, OLE, а також для багатьох інших технологій Microsoft.
На відміну від СОМ, модель Java Beans, базовий стандарт Sun Microsystems для компонент, виявляється залежною від мови реалізації.
Дослідивши основні особливості об'єктно-орієнтованого та компонентного підходів до проектування та реалізації програмного забезпечення, зробимо короткий порівняльний аналіз цих особливостей і підходів у цілому.
Перш за все, перерахуємо основні поняття, що характеризують кожен з підходів. Потім можна порівняти ці підходи один з одним з метою пошуку аналогій між ними.
В об'єктно-орієнтованому підході ключовими слід вважати, зокрема, поняття класу і інтерфейсу. Зауважимо, що в компонентно-орієнтованому підході ці поняття також є системоутворюючими.
При цьому під класом розуміється базова сутність, що визначається як сукупність елементів.
Під інтерфейсом розуміється набір семантично пов'язаних абстрактних елементів. Для компонентно-орієнтованого підходу поняття інтерфейсу має першорядне значення, оскільки лише за допомогою цього механізму клієнт в архітектурі з моделлю COM може безпосередньо здійснювати взаємодію з COM-класом. Зауважимо, що інтерфейси підвищують безпеку коду, так як взаємодія з об'єктом відбувається не безпосередньо, а через покажчик (посилання). Поняття властивості (як атрибута об'єкта) і методу (як операції над об'єктом), як і механізму подій (співвідносин над об'єктами предметної області), властиві обом підходам.
Принципово новим є наявність в COM-моделі збірок - самодостатніх одиниць інформації для інсталяції і розгортання програмних продуктів.
У цілому компонентний підхід є більш зручним з практичної точки зору, хоча механізми, реалізовані в ньому, принципово можна порівняти з можливостями ООП.
Незважаючи на перераховані вище інновації в галузі теорії, технології та практичної реалізації, з огляду на масштабність ідеології і новизни досліджуваної проблематики, підхід. NET не позбавлений окремих недоліків, більшість з яких, мабуть, носить тимчасовий характер. Перерахуємо, на нашу думку, найбільш суттєві з них.
По-перше, розробники відзначають достатньо високі вимоги до апаратного забезпечення (зокрема, обсяг оперативної пам'яті повинен бути не менше 256 мегабайт, вільний обсяг жорсткого диска для роботи з Microsoft Visual Studio. NET - не менше 10 гігабайт).
Крім того, некомерційні версії програмних продуктів Microsoft, які часто надають нові істотні можливості, в недостатній мірі стійкі в роботі; документація по ряду нових функцій програмного забезпечення представлена не в повному обсязі.
Підтримка ряду теоретично цікавих і практично корисних мов програмування обмежена. Оскільки цілий ряд компіляторів для мов програмування надається сторонніми по відношенню до Microsoft компаніями-розробниками або некомерційними установами, результати їх діяльності піддаються контролю і доопрацювання з обмеженнями.
Комплекс програмно-інструментальних засобів, який реалізує підхід. NET (включаючи і компілятори для мов програмування), не повністю ратифікований за міжнародними стандартами.
Безумовно,. NET є видатним досягненням сучасної індустрії програмування. Досить сказати, що корпорація Microsoft вважає саме. NET своєї стратегічної ідеологією і технологічною платформою на найближче десятиліття.
Безсумнівна якісну перевагу над існуючими засобами автоматизованого проектування і швидкої реалізації прикладного програмного забезпечення досягається за рахунок наступних основних факторів:
- Інтероперабельність і міжмовна взаємодія;
- Багаторівнева, гнучка і надійна політика безпеки;
- Інтеграція з технологією веб-сервісів;
- Спрощення процедури розгортання і використання створюваного програмного забезпечення;
Незважаючи на деяку незавершеність рішення для широкого комерційного використання в силу концептуальної новизни і грандіозності проекту, підхід. NET, безумовно, значно впливає на комерційну індустрію програмування в цілому і сприяє радикальному вдосконаленню галузі.