
- •Тема 1. Загальні положення
- •Теоретичний базис теорії програмування.
- •Класифікація мов програмування та їх еволюція.
- •Основні риси технології .Net. Складові .Net. Інтероперабельність і масштабованість. Основи інтеграції додатків у сервіс-орієнтованому середовищі.
- •Характеристика функціонального підходу до програмування. Поняття функції, конверсії, рекурсії. Переваги і недоліки функціонального підходу.
- •Тема 5. Синтаксис мов програмування
- •Тема 6. Семантика мов програмування
Основні риси технології .Net. Складові .Net. Інтероперабельність і масштабованість. Основи інтеграції додатків у сервіс-орієнтованому середовищі.
В лекції розглядаються питання, пов'язані з ідеології, технології та огляду практичних можливостей створення програмних систем на основі найбільш сучасного підходу до проектування та реалізації програмного забезпечення, відомого під назвою Microsoft. NET.
Спробуємо знайти відповідь на питання: що таке. NET? Незважаючи на популярність терміну, однозначно відповісти непросто, перш за все з тієї причини, що відповідь представляється багатоаспектним.
Отже, можна сказати, що. NET - це підхід до проектування та реалізації програмного забезпечення, що включає, щонайменше, чотири компоненти:
ідеологія проектування та реалізації програмного забезпечення;
модель ефективної підтримки життєвого циклу прикладних систем;
уніфікована, інтегрована технологічна платформа для програмування;
сучасний, зручний у використанні, безпечний інструментарій для створення, розгортання та підтримки програмного забезпечення.
Зупинимося докладніше на кожному з цих аспектів.
Перш за все, постараємося пояснити ідеологію підходу Microsoft. NET.
Самою корпорацією-розробником сформульовані приблизно такі найважливіші аспекти бачення (vision) ідеології. NET:
легкість розгортання додатків в глобальному середовищі Internet;
економічна розробка програмного забезпечення;
"Безшовна", гнучка інтеграція програмних продуктів та апаратних ресурсів;
надання програмного забезпечення як сервісу;
новий рівень безпеки та зручності використання.
Дійсно, як ми побачимо в ході лекції, всі аспекти бачення. NET вдалося реалізувати на якісно новому рівні, забезпечивши істотне просування вперед у напрямках гнучкості інтеграції з програмно-апаратними ресурсами, безпеки та зручності використання коду, а також зниження витрат на виробництво програмного забезпечення.
Розглянемо докладніше, як ідеологія. NET втілюється у практичні питання проектування програмного забезпечення.
Корпорацією Microsoft запропонований новаторський компонентно-орієнтований підхід до проектування, який є розвитком об'єктно-орієнтованого спрямування. Відповідно до цього підходу, інтеграція об'єктів (можливо, гетерогенної природи), проводиться на основі інтерфейсів, що представляють ці об'єкти (або фрагменти програм) як незалежні компоненти. Такий підхід істотно полегшує написання та взаємодія програмних "молекул"-компонентів в гетерогенної середовищі проектування та реалізації. Стандартизується зберігання і повторне використання компонентів програмного проекту в умовах розподіленої мережевої середовища обчислень, де різні комп'ютери і користувачі обмінюються інформацією, наприклад, взаємодіючи в рамках дослідницького або бізнес-проекту.
Істотною перевагою є і можливість практичної реалізації принципу "всяка сутність являє собою об'єкт гетерогенної програмного середовища". Багато в чому це стало реалізованим завдяки вдосконаленій, узагальненої системі типізації Common Type System, або CTS, яка буде докладніше розглянута в одній з наступних лекцій.
Сувора ієрархічність організації просторів для типів, класів та імен сутностей програми дозволяє стандартизувати і уніфікувати реалізацію.
Новий підхід до інтеграції компонентів додатків у середовищі обчислень Internet (або так звані web-сервіси) дає можливість прискореного створення додатків для глобальної аудиторії користувачів.
Універсальний інтерфейс. NET Framework забезпечує інтегроване проектування та реалізацію компонентів додатків, розроблених у відповідності з різними підходами до програмування.
Говорячи о. NET як про технологічній платформі, не можна не відзначити той факт, що вона забезпечує одночасну підтримку проектування та реалізації програмного забезпечення з використанням різних мов програмування. При цьому підтримуються десятки мов програмування, починаючи від найперших (зокрема, COBOL і FORTRAN) і закінчуючи сучасними (наприклад, C # і Visual Basic). Ранні мови програмування до цих пір активно використовуються, зокрема, для забезпечення сумісності з раніше створеними додатками (скажімо, COBOL дуже широко застосовувався для створення прикладних програм, що підтримують фінансову діяльність).
Технологія web-сервісів - це не просто данина моді на Internet, а реальна (і, мабуть, найбільш прийнятна практично) можливість забезпечення масштабованості і інтероперабельності додатків. Під масштабованістю розуміють можливість плавного зростання часу відповіді програмної системи на запит із зростанням числа одночасно працюючих користувачів; в разі web-сервісів масштабованість реалізується за допомогою розподілу обчислювальних ресурсів між сервером, на якому виконується прикладна програма (або зберігаються дані), і комп'ютером користувача.
Під інтероперабельність слід розуміти можливість інтегрованої обробки гетерогенних даних, що надходять від різнорідних прикладних програм. Саме завдяки інтероперабельності можлива уніфікація взаємодії користувачів через додаток з операційною системою на основі спеціалізованого інтерфейсу прикладних програм, або API-інтерфейсу (Application Programming Interface).
Важливо відзначити і та обставина, що нова технологія. NET не тільки затребувана світовою громадськістю, але й офіційно визнана, що відображено у відповідних стандартах ECMA (European Computer Manufacturers Association).
Тепер розглянемо інструментальні можливості. NET як засобу проектування та реалізації програмного забезпечення, тобто, власне програмування в широкому сенсі цього слова.
Перш за все, необхідно відзначити підтримку багатомовної середовища розробки додатків CLR (Common Language Runtime). Ця можливість з'явилася завдяки універсальному міжмовної інтерфейсу Common Language Infrastructure, або CLI, який підтримує розробку програмних компонентів на різних мовах програмування.
При цьому безперечною перевагою для програмістів є та обставина, що вони можуть розробляти (або допрацьовувати) програмне забезпечення на найбільш підходящому мовою програмування. Тут слід враховувати характер завдання (скажімо, рекурсія або символьна обробка більш прозоро і з меншими трудовитратами реалізується на мові функціонального програмування, а формалізація структури предметної області - на об'єктно-орієнтованої мови). Крім того, необхідно брати до уваги досвід роботи програмістів в команді розробників і мова програмування, на якому спочатку створювалася система.
Відзначимо ще дві суттєві обставини. По-перше, основні сервісні можливості для розробників, які надає середу. NET (налагодження, аналіз коду і т. д.) не залежать від конкретної мови програмування, і, отже, програмістам немає необхідності заново осягати особливості середовища розробки, якщо необхідно "перейти "з однієї мови на іншу. По-друге, незважаючи на те, що ще не всі мови програмування підтримуються. NET, існує можливість самостійної розробки транслятора для будь-якої мови програмування, причому його реалізація не викликає труднощів навіть у програмістів, практично не мають професійної підготовки в області розробки компіляторів.
Найважливішим елементом будь-якої ідеології, технології та інструментального засоби програмування в даний час є безпека. Це твердження незаперечно, якщо взяти до уваги той факт, що управління багатьма найважливішими системами життєзабезпечення та оборонної галузі автоматизовано, тобто здійснюється за допомогою комп'ютерів.
У зв'язку з цим. NET як інструментальне засіб покликане забезпечувати рівень безпеки, що відповідає сучасним вимогам.
Для цього в. NET реалізована, зокрема, такий захід безпеки, як автоматизоване управління життєвим циклом програмного забезпечення. Для програміста це виявляється, наприклад, в автоматичній реалізації процедури "збирання сміття", а також у забороні використання покажчиків на області пам'яті з невизначеним значенням ("висячих" посилань) і посилаються на себе покажчиків (циклічних посилань).
Більш істотним обмеженням безпеки є автоматизація забезпечення синтаксичної корекції коду. Це досягається за допомогою безпечних викликів функцій і процедур, контролю виходу за межі заявленого програмістом розміру статично розподіляються областей пам'яті, а також заборони використання змінних, якщо їм не задано значення за замовчуванням (ініціалізація).
Ще одним важливим аспектом комплексного забезпечення безпеки в. NET є обов'язкова перевірка проміжного коду (IL - Intermediate Language) на коректність типізації, здійснювана в рамках реалізованої стратегії розширеного контролю відповідності типів.
Істотно вдосконалені і права доступу користувачів до ресурсів. Зокрема, для включення компонента в проект необхідно перевірити джерело коду, завірений автором цифровим підписом, і переконатися в достовірності відправника.
Гнучке і надійне обмеження доступу користувачів до ресурсів здійснюється також завдяки широкому спектру динамічно коректованих відповідно до профілями користувача політик доступу.
Важливими для забезпечення безпеки є криптографічні методи, які необхідні для шифрування конфіденційної або комерційної інформації, що передається, наприклад, по Internet-каналах.
Продовжимо обговорення підтримки життєвого циклу програмного забезпечення в рамках підходу. NET.
Для установки на комп'ютери користувачів раніше створеного прикладного програмного забезпечення створюються інсталяційні комплекти у формі так званих складок.
Збиранням називається безліч модулів, необхідних для інсталяції програмного забезпечення.
Збірка характеризується унікальністю, яка забезпечується ідентифікатором її версії і цифровим підписом автора. Збірка є самодостатньою одиницею для установки програмного забезпечення і не вимагає ніяких доповнень. Можливо як індивідуальне, так і колективне (мережеве) використання складання на основі компонентної технології.
Збірка забезпечує простий і зручний механізм інсталяції і дозволяє економити кошти на розгортання програмного забезпечення, зводячи до мінімуму витрати на установку.
Опис збірки міститься в так званому маніфесті, де зберігаються ідентифікація автора і версії збірки, а також режим і політика використання останньої.
Сучасне суспільство вступило в епоху Internet-комунікації, тобто в самий найближчий час практично кожна людина зможе отримувати доступ до розподілених ресурсів глобальної мережі з будь-якої точки Землі.
У зв'язку з цим в. NET реалізована концепція web-сервісів як засобу підтримки розподілених компонентних обчислень в глобальній мережі.
При цьому найбільш істотними завданнями, вирішення яких необхідно забезпечити, є наступні:
інтерактивна обробка користувачами інформації (документів, таблиць, графіки і т.д.), представленої в електронному вигляді;
організація спільної роботи користувачів з прикладним програмним забезпеченням (засідання робочих груп, конференції і т.д.);
підтримка взаємодії прикладних програм.
У зв'язку з цим у концепції. NET сформульована і вирішена задача адаптації спочатку аморфної і практично не структурованої Internet-середовища для досягнення можливості інтеграції додатків. Основні напрямки вирішення цього завдання такі:
уніфікація інформаційної інфраструктури;
досягнення необхідного рівня інтероперабельності прикладного програмного забезпечення;
досягнення необхідного рівня масштабованості прикладного програмного забезпечення.
Завдання досягнення необхідного рівня масштабованості прикладного програмного забезпечення є технічно складною і виходить за рамки даного навчального курсу.
Завдання підтримки інтероперабельності прикладного програмного забезпечення в рамках концепції. NET вирішується за допомогою універсальної високорівневої мовного середовища Common Language Infrastructure (CLI), яка характеризується наступними можливостями.
Перш за все, здійснюється підтримка різноманітних мов програмування, а, отже, і різних підходів до програмування, зокрема, функціонального (наприклад, на основі SML, Scheme, Haskell), об'єктно-орієнтованого (наприклад, на основі С + +) і компонентного ( наприклад, на основі С #).
Крім того, інтегроване використання мов програмування здійснюється спільно з єдиною системою типів (Common Type System, CTS), що включає загальну ієрархію для примітивних типів, типів-значень і посилальних типів.
Управління оперативною пам'яттю також реалізовано в. NET в узагальненому варіанті. Зокрема, централізовано здійснюються "збірка сміття" і тестування коду на безпеку з точки зору взаємодії з оперативною пам'яттю. Механізм обробки виняткових ситуацій також уніфікований.
Нарешті, універсальна Високорівнева мовна середу Common Language Infrastructure забезпечує міжмовну налагодження.
Для будь-якого тиражируемого комерційного програмного продукту необхідно підтвердження його відповідності загальноприйнятим у світовій практиці програмування стандартам.
Відносно технологій. NET теоретичні досягнення і технологічні інновації підтверджуються думкою європейської асоціації по стандартам ECMA (European Computer Manufacturers Association).
Так, мова програмування C # і середу Common Language Infrastructure (CLI) ратифіковані організацією ECMA в якості міжнародного стандарту. Крім того, кілька незалежних розробників програмного забезпечення здійснюють проекти відповідно до специфікацій ECMA (зокрема, реалізація. NET під управлінням операційної системи Linux).
Провідні виробники апаратного та програмного забезпечення розраховують на. NET як на стратегічний шлях спільного з Microsoft розвитку. Зокрема, в 2001 році підписано угоду про співпрацю між Microsoft, Intel і Hewlett-Packard.
Всупереч поширеній думці, Microsoft не наполягає на неодмінної умови єдиності операційної системи Windows для підтримки. NET. Корпорація планує спільну розробку програмного проекту. NET під управлінням операційних систем FreeBSD і Windows.
Більш детальну інформацію про стандартизацію технологій і програмного забезпечення сімейства. NET можна отримати за адресою: http://msdn.microsoft.com/net/ecma/.
Незважаючи на перераховані вище інновації в галузі теорії, технології та практичної реалізації, в силу масштабності ідеології та новизни досліджуваної проблематики, підхід. NET не позбавлений окремих недоліків, більшість з яких, мабуть, носить тимчасовий характер. Відзначимо, на наш погляд, найбільш суттєві з них.
По-перше, розробники відзначають досить високі вимоги до апаратного забезпечення (зокрема, обсяг оперативної пам'яті повинен бути не менше 256 Мбайт, вільний обсяг жорсткого диска для роботи з Microsoft Visual Studio. NET - не менше 10 Гбайт).
Крім того, некомерційні версії програмних продуктів Microsoft, які часто надають нові істотні можливості, в недостатній мірі стійкі в роботі, а документація по ряду нових функцій програмного забезпечення представлена не в повному обсязі.
Підтримка теоретично цікавих і практично корисних мов програмування реалізована лише частково (скажімо, компілятор для мови програмування SML для Visual Studio. NET знаходиться в процесі реалізації). Оскільки багато компілятори для мов програмування надаються сторонніми по відношенню до Microsoft компаніями-розробниками або некомерційними установами, результати їх діяльності піддаються контролю і доробки з обмеженнями.
Комплекс програмно-інструментальних засобів, який реалізує підхід. NET (включаючи і компілятори для мов програмування) ратифікований за міжнародними стандартами не в повному обсязі.
Підіб'ємо підсумки лекції.
Безумовно,. NET є видатним досягненням сучасної індустрії програмування. Досить сказати, що корпорація Microsoft вважає саме. NET своєї стратегічної ідеологією і технологічної платформою на найближче десятиліття.
Безсумнівна якісна перевага над існуючими засобами автоматизованого проектування і швидкої реалізації прикладного програмного забезпечення (зокрема, Inprise Delphi і JBuilder, Oracle Developer, Microsoft Visual Studio та ін) досягається за рахунок наступних основних факторів:
інтероперабельність та міжмовне взаємодія;
багаторівнева, гнучка і надійна політика безпеки;
інтеграція з технологією web-сервісів;
спрощення процедури розгортання і використання програмного забезпечення.