Архітектура. NET, HTML, XML, DHTML, Інтернет-технології, статті

Влітку на конференції Professional Developer "s Conference 2000 Microsoft представила світу платформу. NET, яка пропонує новий шлях розробки програмного забезпечення.. NET – це платформа для побудови інтегрованих, сервіс-орієнтованих програм, що відповідають сучасним потребам Інтернет комерції. Вона дозволяє швидко будувати Web сервіси і додатки, які оперують інформацією з багатьох джерел, і незалежні від платформ і мов програмування. Платформа. NET не прив'язана до операційної системи Windows і згодом може бути реалізована для інших операційних систем.


Введення


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









Архітектура. NET зображена на малюнку
[Малюнок взятий з сайту Microsoft.]


Common Language Runtime спирається на системні сервіси операційної системи і управляє виконанням коду, написаного на якому сучасному мовою програмування. Набір базових класів дає доступ до сервісів платформи, які розробники можуть використовувати з будь-якої мови програмування. Common Language Runtime і базові класи разом складають основу. NET платформи. Ця архітектура дуже схожа на архітектуру C runtime, Visual Basic runtime або віртуальної машини Java.


. NET пропонує також високорівневі сервіси:














ADO + – нове покоління ADO, яке використовує XML і SOAP для обміну даними

ASP + – нова версія ASP, що дозволяє використовувати будь-який (. NET сумісний) мова для програмування Web сторінок

Win Forms і Web Forms – набір класів для построеніенія користувальницького інтерфейсу локальних і Web-орієнтовані додатків. Окремо згадаємо C # (вимовляється "сі шарп") – новий об'єктно-орієнтована мову, націлений на створення додатків для платформи. NET.

Common Language Runtime (CLR)


CLR надає виконуваного коду певний набір сервісів. Наприклад, CLR підтримує створення і маніпулювання потоками. Тому будь-яка мова, який може використовувати CLR, зможе використовувати потоки.
Код, який потребує CLR під час виконання, називається "керований" (managed) код. Відповідальність за такі завдання як створення об'єктів і виклик методів покладається на CLR. Код, який не потребує в CLR, називається "некерований" (unmanaged) код.


Microsoft надає 4 компілятора, які генерують код для. NET CLR: C + +, C #, Visual Basic (включаючи VBScript і Visual Basic for Applications) і JScript. Visual C + + – це єдиний компілятор, який може генерувати некерований код. Решта компілятори можуть робити тільки керований код, і тому код, написаний на цих мовах, завжди потребує CLR. Кілька компаній також виробляють компілятори керованого коду. Наприклад, Rational планує створити такий компілятор для Java. Розглянемо основні поняття. NET та сервіси CLR


Автоматичне управління ресурсами


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


Виконання на багатьох платформах


Сьогодні є багато різних версій Windows. Написане і зібране кероване. NET додаток зможе виконуватися на будь-якій платформі, яка підтримує. NET CLR.


Узгоджується модель програмування


Модель програмування. NET спрощує конструкції Win32 і COM. Програмісти більше не повинні піклується про деталі реєстру, GUID, IUnknown, AddRef, Release, HRESULTS і тому подібного. . NET не просто інкапсулює ці поняття; на новій платформі вони зовсім відсутні.


Зазначимо також, що в. NET всі повідомлення про помилки передаються єдиним способом: через виключення.


Контроль типів


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


Інтеграція мов


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


Загальна система типів (Common Type System)


Формальна специфікація системи типів, реалізованої CLR, називається Common Type System (CTS). Основне завдання системи типів – забезпечення інтеграції мов.


Щоб писати керований код не потрібно знати правила CTS, оскільки обрана мова надасть власний синтаксис і правила типів і відобразить свій синтаксис в синтаксис CLR в процесі компіляції. Наприклад, CTS підтримує тільки одиночне спадкування, а Cи + + підтримує класи, які успадковують від декількох базових класів. Щоб допомогти розробникам, компілятор Visual C + + повідомить про помилку, якщо помітить, що ви намагаєтеся використовувати множинне спадкування в керованому коді.


Ще одне правило CTS свідчить, що всі базові класи повинні наслідувати класу System.Object. Object – це ім'я типу, визначеного в просторі імен System. (Детальніше базові класи описуються нижче).


Assemblies – керовані компоненти


[Assembly – новий термін, який раніше вживався лише стосовно мови асемблера. По суті це «пакет» або «комплект», але я думаю, що краще або залишити англійське написання, або перевести як асембл (за аналогією зі словом stub, яке зараз правильно перекладається як «стаб», а раніше намагалися перекладати як «заглушка»). Але managed я переклав як «керований», оскільки навряд чи приживеться слово «Менеджед». CLR теж складно перекладати.]


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


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


Система безпеки


CLR надає сервіси безпеки, контролюючі доступ користувачів до ресурсів і дії програм. Оскільки CLR використовується, щоб завантажувати код, створювати об'єкти і викликати методи, він може управляти безпекою і наказувати політики безпеки. Забезпечення безпеки в. NET можливо на двох рівнях: на рівні коду (code access security) і на рівні ролей користувачів (role-based security).


Програмісти визначають необхідні привілеї, які повинен мати код для виконання роботи. Наприклад, код потребує дозволу, щоб писати в файл або читати змінні середовища. Ця інформація зберігається в assembly, поряд з інформацією щодо справжності коду. Політики для надання дозволів встановлюються адміністраторами системи на підставі даних щодо походження коду та інших. Дозволи можуть видаватися також виходячи з даних користувача. Ролі є категорії користувачів і можуть бути визначені під час розробки або в процесі інсталяції.


Проміжний Мова і JIT компілятор


Коли файли з вихідними текстами готові, ви запускаєте компілятор і отримуєте EXE або DLL. Ці EXE або DLL файли дуже схожі на PE (Portable Executable – портіруемие виконуються) файли, по суті справи вони і є PE файли з деякими відмінностями.


Перша відмінність полягає в тому, що код в керованих PE файлах не є командами процесора x86 або іншим машинним кодом. Замість цього компілятор створює код на проміжному мовою Microsoft (Microsoft intermediate language – MSIL). PE файл, що містить MSIL може виконуватися на платформі якого процесора, якщо операційна система, надає. NET CLR.


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


Ще одна відмінність – те що отримані компоненти не просто EXE або DLL файли. Одиниця використання та розміщення в. NET – це assembly. Залежно від опцій компілятора можна отримати однофайлових assembly або модуль з керованим кодом, який поширюється як частина багатофайлова assembly. З точки зору клієнта, assembly – це іменована колекція експортованих типів і ресурсів. З точки ж зору розробника assembly, – це колекція PE файлів, файлів ресурсів, phtmlL сторінок, картинок і т.п.


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


Коли ви збираєте керовану програму, модуль імпортує функцію _CorExeMain з. NET CLR (MSCorEE.dll). Коли користувач запускає програму, завантажувач операційної системи переходить до точки входу всередині виконуваного блоку. Код за виконуваному блоці просто передає управління функції _CorExeMain, що міститься всередині MSCorEE.dll. CLR знаходить точку входу керованого модуля і потім починає виконувати керований код MSIL виконуваного блоку.


Перед тим, як виконувати керований код CLR повинен спочатку скомпілювати керовані MSIL інструкції в інструкції процесора. Тут виникає типова проблема: коли користувач запускає програму, він не має наміру чекати поки вся програма скомпілюйте, тим паче, що більшість функцій програми не будуть викликані. Тому CLR, компілює MSIL код в інструкції процесора, коли функції безпосередньо викликані. Всякий раз, коли така функція викликається в майбутньому, відразу виконується машинний код (а компілятор вже не втягується у процес). Оскільки MSIL компілюється тільки в потрібний момент (just-in-time – JIT), цей компонент CLR часто згадується як JIT компілятор (JIT compiler) або JITter.



(Картинка з сайту Microsoft)


(Переклад: вихідний код-> компілятор -> exe / dll (IL і метадані) -> завантажувач класу -> JIT компілятор з необов'язковою перевіркою -> машинні коди -> виконання -> перевірки безпеки; runtime engine; Бібліотеки класів (IL і метадані); безпечний прекомпілірованний код; виклик некомпілірованного методу)


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


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


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



Базові класи


Над CLR в архітектурі. NET знаходиться інфраструктура сервісів (services framework). Ця інфраструктура надає класи, які можуть бути використані з будь-якої мови програмування. Кожен клас дає доступ до деякого елементу основної платформи.


Для прикладу наведемо кілька просторів імен (namespaces) та їх класи.





































Простір імен

Призначення містяться класів

Приклад класів
System
 
Реалізація типів, що використовуються кожним додатком
 
Object, Byte, Array, Int32, Exception, String
 
System.Collections
 
Управління наборами даних
 
ArrayList, Dictionary, Hashtable, Queue
 
System.Data
 
Робота з базами даних
 
DataBinding, DataTable, DataSource
 
System.IO
 
Читання і запис
 
ByteStream, File, FileStream, MemoryStream
 
System.Net
 
Мережеві взаємодії
 
WebRequest, UdpClient, Sockets
 
System.Web.UI.WebControls
 
Побудова користувальницького інтерфейсу для програм, орієнтованих на Web
 
DataGrid, HyperLink, ListBox, RadioButton, Table
 
System.WinForms
 
Побудова користувальницького інтерфейсу для локальних програм
 
Button, CheckBox, DataGrid, FileDialog, ListBox, MainMenu
 

Є також класи для малювання (GDI +), роботи з потоками, національної підтримки, криптографії, серіалізациі, і т.д.


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


Методи класу можуть бути перевантажені, тому методи, що відрізняються лише трохи по поведінці, мають ідентичні імена і розрізняється тільки прототипами. Наприклад, клас може пропонувати три різних версії методу CreatePen з різними наборами параметрів.


. NET – повністю об'єктно-орієнтована платформа. Програмісти можуть створювати власні простору імен, що містять їх власні класи. Це значно спрощує розробку програмного забезпечення в порівнянні з класичними Windows парадигмами програмування. Так як всі послуги платформи пропонуються через об'єктно-орієнтовану парадигму, розробники повинні мати деяке розуміння об'єктно-орієнтованого програмування.


С #


С # увібрав в себе все краще з таких популярних мов як Сі + +, Visual Basic, Java і Object Pascal. С # забезпечує швидку розробку, в той же час дозволяє писати ефективний код. Перерахуємо особливості нової мови:



– Автоматична прибирання сміття
– Можливість маніпулювати покажчиками і мати безпосередній доступ до пам'яті
– Підтримка властивостей і подій (аналогічно VB)
– Підтримка атрибутів
– Вбудована підтримка основних типів (рядок, масив, …)
– Множинне спадкування можливо тільки від інтерфейсів (як в Java)
– Підтримка З API, Windows API і COM + на рівні мови
– Підтримка assembly
– Контроль типів
– Автоматична ініціалізація змінних


Атрибути є новим механізмом. З їх допомогою можна ввести нові типи описової інформації для класів і методів і отримувати цю інформацію під час виконання. Єдине чого не вистачає в новому мові – це шаблонів, так полюбилися програмістам на Сі + + за останні кілька років.
Наведемо код традиційної прграмми «Hello, world»



using System;
class Hello
{
static void Main()
{
Console.WriteLine(“Hello, world”);
}
}


Як можна помітити синтаксис визначення класів схожий на Java.
Microsoft зробила стандарт С # відкритим для широкого використання. Компілятор С # для платформи. NET буде доступний в наступній версії Visual Studio.
Схоже, що С # стане ідеальним мовою створення додатків для нової платформи.

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


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

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

Ваш отзыв

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

*

*