Архітектурні рішення Microsoft. NET Framework, Різне, Програмування, статті

Зміст



Офіційний старт нової платформи Microsoft. NET


13 лютого відбувся офіційний старт нової платформи Microsoft. NET – на грандіозної презентації в Сан-Франциско були представлені робочі версії двох головних її елементів: операційного середовища. NET Framework та інструментального набору Visual Studio. NET. Що нового пропонують ці кошти, що вони обіцяють розробникам і користувачам?


На жаль, незважаючи на велику кількість публікацій про дані продуктах, багато чого залишається вельми туманним. Найдивовижніше, що “димову завісу” активно підтримує і сама Microsoft. Наприклад, в офіційному прес-релізі з приводу виходу новинок написано, що це “наріжні камені в реалізації стратегії Microsoft щодо XML Web Services”. Хоча навіть при поверхневому погляді видно, що. NET Framework і VS.NET ніяк явно не пов’язані з цими сервісами.


Не кажучи вже про те, що технологія XML Web Services базується на відритих стандартах і є платформно-незалежною. У цьому зв’язку представляється корисним уважніше розібратися з архітектурними рішеннями, лежать в основі одного з базових елементів Microsoft. NET, – операційного середовища. NET Framework.


Нова операційна середа


Структура. NET Framework показана на рис. 1, з якого видно, що ця середу представляє собою додатковий операційний шар, що розділяє програми користувача і базові сервіси Windows. Таким чином, . NET Framework – це фактично нова платформа розробки і виконання прикладних програм.


Хотілося б відзначити, що термін “платформа” ми зазвичай застосовуємо в двох різних сенсах. З одного боку, це “концепція” (ідеї, специфікації і т. д.), з іншого – набір цілком конкретних об’єктів (файлів, документації та ін.) Ця двоїстість повною мірою відноситься до. NET Framework.


Рис. 1 Структурна схема. NET Framework

В даний час поставляється програмний набір. NET Framework SDK 1.0, в який крім власне модулів операційного середовища входять документація, а також ряд автономних компіляторів – VB, C # (тобто розробку простих. NET-додатків можна вести і без візуального середовища Visual Studio. NET). Пакет встановлюється поверх Windows NT 4.0, 2000 або XP в підкаталог WINNTMicrosoft.NETFramework v1.0.XXX. Він поширюється безкоштовно (його можна завантажити з Web-сайту Microsoft) або в складі VS.NET.


. NET Framework складається з двох головних компонентів: бібліотеки базових класів і CLR (Common Language Runtime – загальна для мов середу виконання NET-додатків), які відповідно призначені для вирішення наступних завдань:



У цьому середовищі ведеться розробка і виконання програм. Головним інструментом створення додатків є звичайно ж Visual Studio. NET, в якому кожен з мов програмування взаємодіє с. NET Framework через загальний інтерфейс. До складу VS.NET входить кілька мов Microsoft, серед яких найважливіша роль відводиться C / C + +, C # і VB.


У саму середовище розробки увійшли кошти, раніше реалізовані у вигляді пакета Visual InterDev. VS.NET дозволяє створювати. NET-додатки різних типів, але всі вони є тими чи іншими модифікаціями трьох базових варіантів – Console Application, Windows Application і Class Library.


Створення універсальної середовища розробки і загальних базових функцій зумовило те, що відтепер всі мови програмування Microsoft поставляються у вигляді єдиного пакета (наприклад, окремого продукту VB.NET вже немає). Крім того, це сильно спрощує підключення до неї (у вигляді додаткових модулів Add-Ins) інших мов програмування. В даний час про створення таких засобів (Cobol, Fortran, Perl та ін) оголосили багато розробників. Крім того, деякі постачальники (зокрема, Borland) пропонують власні інтегровані засоби програмування для. NET.


Представники Microsoft, порівнюючи. NET з конкуруючою Java 2 Platform, часто підкреслюють, що корпорація зовсім не прагне домінувати в області мов програмування, надаючи всім розробникам рівні можливості (прозорий натяк на Sun). В якійсь мірі це справедливо (хоча “пільгові” умови для Microsoft закладені в. NET спочатку), але найважливіше полягає зовсім в іншому: всі незалежні інструменти будуть тільки в середовищі. NET Framework.


Бібліотека базових класів


. NET Framework Class Library – бібліотека базових функцій, на основі яких будуються все. NET-додатки. Принципова новизна полягає в тому, що якщо раніше подібний набір створювався для кожного мови програмування, то тепер він – один для всіх коштів.


Втім, говорити про різні наборах функцій для різних мов в “до. NET-івських” часи можна з великою часткою умовності. Та ж Microsoft для QuickBasic і QuickC використовувала єдині внутрішні конструкції і бібліотеки підпрограм ще наприкінці 80-х років. А компілятори VB спочатку були реалізовані за допомогою проміжного коду на Сі.


Така уніфікація системи розробки автоматично нівелює функціональні можливості різних мов, тому вибір інструменту в значній мірі залежить від пристрасті конкретного програміста до того чи іншого синтаксису. Це сьогодні особливо добре видно на прикладі VB.NET і C #. Проте тут варто відзначити, що Microsoft залишилася вірна принципом “розділяй і володарюй” – в її мовах збережені штучні відмінності, що зумовлюють необхідність застосування різних засобів для вирішення різних завдань.


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


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


Наприклад, бібліотеки MFC VC + + – це набір статичних об’єктних модулів, які підключаються до додатка на етапі компоновки виконуваного модуля програми і стають при цьому його складовою частиною. А . NET Class Library – динамічні бібліотеки класів, які є компонентом. NET Framework.


Рис. 2 Склад бібліотек базових класів
Про достоїнства застосування об’єктних бібліотек (LIB) і бібліотек класів (DLL) відтепер можна говорити лише з точки зору академічного інтересу. Адже розробники. NET позбавлені можливості вибору (за винятком тих, хто пише на C / C + +, які займають особливе становище в засобах розробки. NET). Очевидно, що прив’язка прикладної програми до платформи. NET істотно зросла в порівнянні з традиційною Windows.


Бібліотека класів. NET реалізована у вигляді набору DLL (зараз їх 20), імена яких починаються з ідентифікатора System (рис. 2). До речі, з малюнка добре видно, що за підтримку технології Web Services відповідає лише одна з DLL.


Відразу потрібно підкреслити, що хоча дані файли мають розширення DLL, – мова йде про новий тип бібліотек, відмінному від звичайних DLL і ActiveX (COM) DLL (незрозуміло, навіщо потрібно використовувати одне розширення для файлів різних типів – це призводить до плутанини).


. NET і COM-об’єкти


Class Library – лише базовий набір функцій, який можна розширювати за рахунок додаткових бібліотек. NET-об’єктів, що створюються незалежними розробниками. У кілька спрощеній формі відмінність між системними і додатковими бібліотеками полягає в тому, що перші автоматично доступні для додатків (як частина ОС!), а другі потрібно підключати індивідуально.


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


На відміну від плоского ідентифікатора типу “ІмяПріложенія.ІмяКласса” в COM, тепер можна використовувати “ІмяПріложенія.Імя1.Імя2 …. ІмяКласса”. Якщо раніше, наприклад у VB 6.0, модуль класу міг містити тільки один клас, то тепер (VB.NET) один модуль може включати ієрархію класів:


Public Class Class0 ‘об’єкт нульового рівня


‘Код класу


End Class


Namespace Name1 ‘об’єкти першого рівня


Public Class Class1


End Class


Public Class Class2


End Class


Namespace Name2 ‘об’єкти другого рівня


Public Class Class2


End Class


End Namespace


End Namespace


Відповідно повні імена об’єктів для цього модуля, включеного в MyClass.dll, будуть виглядати наступним чином:


MyClass.Class0


MyClass.Name1.Class1


MyClass.Name1.Class2


MyClass.Name1.Name2.Class2


Для використання скорочених імен об’єктів допускається імпорт просторів імен:


Imports MyClass


Imports MyClass.Name1


Тоді в програмі до об’єктів можна звертатися з такими іменами: Class0, Class1, Class2, Name2.Class2. Зрозуміло, що використовувати імпорт просторів імен потрібно дуже акуратно, щоб не виникло протиріч ідентифікаторів класів.


У наведеному вище прикладі ми не можемо імпортувати MyClass.Name1.Name2, так як виникне невизначеність для імені Class2 (воно зустрічається двічі в різних просторах імен).


Об’єднання окремих. NET-компонентів в один додаток безпосередньо пов’язано з новим поняттям “збірка” (Assembly). Як відомо, з контролем версій в COM справа йшла, м’яко кажучи, не найкращим чином. Фактично підтримка сумісності версій була повністю покладена на розробника COM-об’єктів.


Технологія. NET Assembly покликана вирішити всі ці проблеми, відомі під назвою DLL Hell (ад DLL). У спрощеному вигляді ідея полягає в перенесенні процедур реєстрації об’єктів з системного Реєстру на рівень окремих додатків.


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


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


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


Common Language Runtime


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


Фактично CLR виконує програми, написані тільки на одному стандартному мовою Microsoft Intermediate Language (MSIL), який в свою чергу відповідає специфікаціям Common Language Specification. До речі, MSIL – це цілком реальний мову програмування (з використанням синтаксису в стилі “Сі”), на ньому можна писати вихідні модулі і транслювати їх за допомогою автономного компілятора, який входить до складу. NET Framework SDK *.


* Насправді точним аналогом Java (з точки зору його ролі для платформи) є саме MSIL – мова платформи. NET нижнього рівня, “. NET-Assembler”.


Всі ж інші мови, в тому числі і C #, – це мови верхнього рівня, платформно-незалежні. Можна було б легко включити MSIL в візуальне середовище Visual Studio. NET, але, мабуть, Microsoft вирішила не дражнити гусей, щоб мати можливість говорити про “рівних правах для всіх постачальників засобів програмування”.


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


Однак, на відміну від класичної схеми інтерпретатора, що використовується в тому числі і в Java, CLR виконує байт-код шляхом попередньої компіляції в машинний код окремих фрагментів програми або програми цілком (рис. 3).


Перший варіант є основним, при цьому застосовується так званий Just-In-Time – компілятор, який виконує перетворення MSIL в машинний код у міру звернення до відповідних процедур (т. е. невикористовувані фрагменти програми зовсім не компілюються). Даний підхід теж достатньо відомий, він, зокрема, вже кілька років використовується в платформі “1С: Підприємство”.


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


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


Програми на мові MSIL створюють так званий “керований код” (managed code). Це означає, що CLR не просто перетворює MSIL в машинні інструкції, а виконує ці дії з урахуванням зовнішніх установок.


Наприклад, Модуль1 може задати власний набір прав, що надаються викликуваному їм Модуля 2, заборонивши, зокрема, будь-які операції корекції файлів. Тобто в CLR ми бачимо реалізацію ідей Інтернет-браузерів, які надають проміжну середу виконання програм, але тільки з більш високим рівнем керованості правами в порівнянні із звичайною OC.


Microsoft пропонує три мови програмування в складі Visual Studio. NET для формування “керованого коду” (створення. NET-додатків) – VB, C # і спеціальний варіант С + + With Managed Extensions. Як видно з цього списку, Visual C + займає цілком особливу позицію в засобах розробки Microsoft: з його допомогою можна писати як традиційні Windows-програми з “некерованим кодом” (unmanaged code), так і. NET-додатки, виконувані в середовищі CLR.


Що стосується платформно незалежності, то начебто CLR має всі передумови для цього, адже потрібен лише JIT-компілятор (як це робиться для Java). Але я не поділяю оптимізму деяких експертів, які вважають можливою появу найближчим часом подібних засобів, наприклад, для Linux. По-перше, в CLR спочатку задіяні базові служби Windows.


По-друге, Microsoft зовсім інакше, ніж Java-спільнота, трактує поняття многоплатформная: JIT-компілятори з’являться для різних типів апаратури (кишенькові ПК, мобільні телефони тощо), але працювати вони будуть тільки в середовищі Windows. NET!


Що попереду


Сегодня. NET Framework – це якась додаткова операційна середу, що встановлюється в Windows як автономного програмного компонента. Немає сумнівів, що вона стане невід’ємною частиною майбутньої версії Windows (до випуску Windows XP її не встигли закінчити). Проте ще кілька років користувачі Windows будуть мати можливість працювати як в режимі “Win API + COM”, так і. NET.


Але потім їм доведеться забути про “старому, добром Windows” і працювати виключно в режимі “керованого коду” в середовищі CLR. Це відбудеться набагато швидше, ніж в період “від DOS до Windows”.


Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*