субота, 1 вересня 2012 р.

C#. Концепція та синтаксис. Частина 1


Вступ

Технологія .NET - порівняно нова технологія для розробки Web-застосувань і програмного забезпечення, орієнтованого на операційну систему Windows. За допомогою .NET можна також розробляти програмне забезпечення для портативних комп'ютерів і мобільних телефонів.
Microsoft - безумовний лідер у розвитку операційних систем і технологій програмування - відзначає .NET як головну платформу розробки програмного забезпечення на найближчі роки. Цей факт зумовлює для сучасного програміста необхідність володіти архітектурою та алгоритмічними мовами .NET.
Мова C# - нова алгоритмічна мова, розроблена для написання програм у середовищі .NET. Основою C# є мови Java та C++. За детальнішого ознайомлення з C# бачимо, що вона успішно акумулювала кращі особливості Java, C++ та інших сучасних мов. Водночас C# не є надлишковою мовою. Вона містить лише необхідні конструкції.
C# поза технологією .NET не існує. Мова ґрунтується на типах даних базової бібліотеки .NET. Для виконання C#-програм необхідне загальномовне середовище виконання (CLR).
Статті місять, окрім опису конструкцій мови, вибіркову інформацію про архітектуру .NET та базову бібліотеку класів. Детальний опис цих елементів можна зробити лише в багатотомному виданні. Значний обсяг інформації та обмежений розмір статтей зумовили деяку конспективність викладок. Отож наступні статті присвячені ознайомленню з мовою C#, але не призначено для вивчення її як першої алгоритмічної мови.
Читачеві необхідно володіти навичками програмування на платформі операційної системи Windows, а також мати досвід використання однієї з сучасних мов програмування: C++, Java, Object Pascal, Visual Basic.


Дані статті мають вузьке спрямування: вступ до алгоритмічної мови C# та опис необхідних елементів .NET для написання простих Windows-проектів у середовищі Visual Studio .NET. Вони не містять таких складових .NET-технологій, як ADO.NET, ASP.NET, Web- сервіси, XML та інших.
Базова бібліотека .NET містить тисячі класів та десятки тисяч методів, більшість з яких мають декілька реалізацій. Цю інформацію неможливо запам'ятати. Отож при розробці проектів під .NET необхідний доступ до довідкової системи MSDN Library.

БАЗОВІ ПОНЯТТЯ ТЕХНОЛОГІЇ .NET

CLR (Common Language Runtime) - середовище виконання .NET. Можна розглядати як код, який завантажує програму, виконує та надає їй усі необхідні служби.
Керований код (Managed Code) - довільний код, розроблений для виконання в середовищі CLR. Код, який виконується безпосередньо під операційною системою і не потребує .NET платформи, називають некерованим.
IL (Intermediate Language, MSIL) - проміжна мова, на якій написано код, якщо він призначений для завантаження та виконання середовищем .NET. При обробці керованого коду компілятор генерує код на IL, а CLR виконує завершальну стадію компіляції в машинні коди безпосередньо перед виконанням.
CTS (Common Type System) - спільна система типів даних .NET. Розроблена для забезпечення сумісності адаптованих до .NET алгоритмічних мов. CTS надає також правила для означення нових типів даних.
CLS (Common Language Specification) - загальна специфікація алгоритмічних мов. CLS є підмножиною CTS і мінімальним набором стандартів, який повинні підтримувати усі компілятори для .NET.
Простір імен - логічна схема групування типів відповідної функціональності. Простори імен мають ієрархічну структуру.
Складений модуль (Assembly) - модуль, який містить компільований керований код. На відміну від виконуваних EXE чи DLL файлів, складені модулі містять також метадані: інформацію про модуль та всі визначені в ньому типи, методи та інше. Складений модуль може бути приватним (доступним для використання однією аплікацією) або розподіленим (доступним для використання багатьма аплікаціями).
Глобальний кеш складених модулів (Global Assembly Cashe, GAC) - місце на диску, де зберігаються розподілені складені модулі.
Відображення (Reflection) - технологія, яка передбачає програмний доступ до метаданих складеного модуля.
Компіляція Just-In-Time (JIT) - процес виконання завершальної стадії компіляції з IL у машинний код. Передбачає компіляцію не коду загалом, а лише його частин за необхідністю.
Маніфест - область складеного модуля, що містить метадані.
Область застосування (AppDomain) - спосіб, за якого CLR дає змогу різним програмам виконуватися в одному і тому ж просторі процесів.
Прибирання сміття (Garbage collection) - механізм чищення пам'яті, реалізований у .NET.
Скомпільований код програми не містить інструкцій асемблера, а лише інструкції на IL. Ці інструкції розташовані у складеному модулі. Сюди ж долучають метадані:
        опис типів даних;
        методи всередині складеного модуля;
        простий кеш (будується на основі вмісту складеного модуля та може бути використаний для перевірки його цілісності);
        інформація про версії складеного модуля;
        інформація про необхідні зовнішні складені модулі;
        інформація про привілеї, необхідні для виконання коду складеного модуля.
Пакет програм збирається зі складених модулів. Один з цих модулів є виконуваним і містить точку входу основної програми, а інші є бібліотеками. .NET завантажує виконуваний модуль, перевіряє його цілісність та метадані, а також рівень привілеїв користувача на відповідність потребам складеного модуля.
На цьому ж етапі CLR також робить перевірку безпеки коду за типом пам'яті (memory type safety). Код вважають безпечним за типом пам'яті лише тоді, коли він звертається до пам'яті
способами, які може контролювати середовище CLR. Якщо CLR не впевнене у безпеці коду за типом пам' яті, то (залежно від локальної політики безпеки) може відмовити у виконанні коду.
Для виконання коду CLR утворює процес операційної системи Windows і зазначає область застосування, в якій розташовано головний потік програми. CLR вибирає першу частину коду, який необхідно виконати, компілює її з мови IL на мову асемблера та виконує з відповідного потоку програми. Коли під час виконання трапляється новий метод, він компілюється у виконуваний код. Процес компіляції цього методу відбувається лише один раз. У процесі виконання коду CLR відстежує стан па­м'яті та періодично запускає процедуру прибирання „сміття", тобто звільнення пам'яті від об'єктів, на які відсутні вказівники у коді..

ПРОГРАМУВАННЯ В СЕРЕДОВИЩІ VS.NET

У цьому розділі коротко розглянемо елементи середовища програмування Microsoft Visual Studio .NET 2005 (далі VS).
Новий проект можна створити з допомогою меню File I New І Project (або натисненням кнопки New Project). У діалоговому вікні потрібно вибрати тип проекту та мову програмування. Для C# означені такі типи проектів (конкретний набір проектів залежить від вибору, здійсненого в процесі налаштування середовища):
Empty Project - Проект Windows Application без стартового коду.
Crystal Reports  - Порожня форма проекту для генератора звітів Crystal
Windows Application Reports Office - Проекти для Microsoft Excel
Word Smart Device - Проекти для Pocket PC, Smartphone та Windows CE Database
Проект для SQL Server Web Site ASP.NET Web Site - Web-сайт на основі ASP.NET ASP.NET Web Service Клас Web-служби
Empty Web Project - Проект ASP.NET Web Site без стартового коду. Project From Existing Code
Project From Existing - Нові файли для порожнього проекту. Використовують Code         для конвертування існуючого коду C# у проект VS.NET.


Файли проекту
При створенні нового проекту VS утворює папку проекту наступної структури:
Каталоги bin та obj призначені для розташування компільованих і тимчасових файлів.
Основний каталог WindowsApplication1 (назва каталогу відповідатиме назві проекту) призначений винятково для VS.NET і містить інформацію щодо проекту. У процесі розробки в проект можна додавати нові каталоги.
Рішення (Solution) - це набір усіх проектів, який утворює програмне забезпечення для поставленої задачі.
Проект (Project) - це набір усіх файлів вихідного коду та ресурсів, які компілюються в один складений модуль (assembly). У простіших проектах складений модуль - це один модуль.
Структура рішення відображається у вікні провідника по рішенню (Solution Explorer)
Якщо утворити два проекти (наприклад, консольний та для Windows), то Solution Explorer матиме приблизно таку структуру:
Поточний (активний) проект виокремлено жирним шрифтом. Установити поточний проект можна з допомогою контекстного меню на назві проекту: Set As Startup Project.
Рішення може містити проекти на різних алгоритмічних мовах, адаптованих до .NET.
Натиснення правої клавіші миші на довільному вузлі активізує контекстне меню, орієнтоване на особливості обраного вузла.
VS містить великий набір інструментів для розробки проектів. Ці інструменти - вікна - мають декілька режимів розташування та встановлення розмірів:
Режим вікна                                                Розташування та розміри
Плаваючий (Floating)                       Окреме вікно із заданими користувачем розмірами. 
Прикріплений (Dockable)                 Вікно розташовується усередині деякого іншого вікна-        контейнера. Контейнери можна міняти, перетягуючи вікно за його заголовок. Для прикріпленого вікна контейнер утворює сторінку табуляції. Вікно займає усю вільну область контейнера.
Табульований Вікно розташоване усередині вікна Редактора, утворює документ відповідну закладку. Займає всю вільну область контейнера або (Tabbed ділить область Редактора навпіл (по горизонталі або по Document)
вертикалі).
Вікно можна зробити невидимим (Hide), що є аналогом закритого. Для активізації невидимого вікна його потрібно знайти у списку меню View.
Контейнер можна зробити прихованим (Auto hide). У цьому випадку вікно ховається за одним із країв екрана і з'являється при наближенні курсора миші.
Редактор VS містить усі стандартні можливості редакторів тексту, форм, ресурсів та інших елементів проекту.
Блоки коду (класи, члени класу, цикли, набори однотипних стрічок та ін.) розглядаються як елементи дерева. Їх можна згорнути або розгорнути, акцентуючи увагу лише на необхідному коді.
З допомогою директив #region та #endregion можна формувати свої гілки дерева перегляду коду.
Редактор коду використовує технологію IntelliSense. Зокрема, виводиться контекстний список можливих елементів після крапки наприкінці назви класу. Цей список можна також активізувати
комбінацією клавіш Ctrl+Space. Ctrl+Shift+Space активізує список та опис параметрів методів.
Редактор проводить часткову синтаксичну перевірку коду. Синтаксичні помилки підкреслюються хвилястою лінією. При наведенні курсора миші на підкреслене слово VS виводить віконце з описом помилки.
Вікно інструментів (ToolBox) містить згруповані за категоріями компоненти .NET, які використовують при розробці застосувань. Компоненти перетягують у програму з допомогою миші.
Можна додавати власні категорії елементів (контекстне меню Add Tab). Елементи ActiveX та компоненти COM долучають опцією меню Customize ToolBox.
Вікно властивостей (Properties) відображає та дає змогу редагувати значення властивостей і подій (events) активного (виокремленого) керуючого елемента (компонента). Властивості та події можна впорядкувати за категоріями чи алфавітом. Виокремлений елемент супроводжується коротким описом.
Вікно класів (Class View) дає ієрархічний список просторів імен, класів та об'єктів проекту. Список можна сортувати та групувати за категоріями.
Контекстне меню для активного елемента списку містить опцію Go To Definition (F12) - перехід до означення активного елемента в коді програми.
Браузер об' єктів (Object Browser) містить ієрархічний список класів проекту. Причому, на відміну від вікна Class View, передбачає перегляд просторів імен та класів у всіх складених модулях, які використовує проект.
Вікно реалізоване подібно до файлового провідника: ліва панель показує дерево класів, а права - члени класу та опис синтаксису.
Для перегляду COM-об'єктів доцільно використовувати програму OLEVIEW або інтерфейси .NET обгортки над COM- об' єктом, автоматично згенерованої середовищем розробки.
Серверний провідник (Server Explorer) надає інформацію про
комп'ютер: з'єднання з базами даних, служби, Web-служби, запущені процеси, журнали подій та інше. Server Explorer з'єднаний з вікном властивостей Properties: вибір елемента ініціює налаштування вікна Properties на показ властивостей цього елемента.
При створенні проекту VS.NET автоматично генерує дві конфігурації: Debug та Release. Головною відмінністю конфігурації Debug від Release є те, що оптимізація коду не проводиться, а у виконавчі файли додається інформація відлагодження. Очевидно, що відлагоджений продукт повинен розповсюджуватися у конфігурації Release.
Visual Studio дає змогу також утворювати власні конфігурації. Для вибору конфігурації використовують опцію меню Debug I Set Active Configuration, а для редагування - Project | Properties.
Процес розробки проекту загалом містить етапи проектування, кодування (написання програм) та відлагодження (пошук і виправлення помилок).
Одним з головних інструментів відлагодження є точки переривання (Break Points) процесу виконання програми. У VS для точок переривання можна задавати умови (опція меню Debug | Break Points), зокрема:
          задати лічильник, за умови досягнення яким заданого значення здійснити переривання;
          здійснити переривання через заданих n проходів;
         додати точку переривання для змінної (спрацьовує за умови зміни значення).
Важливим є також дослідження стану об' єктів у довільній точці виконання програми. З цією метою використовують такі вікна:
         Autos - відстежує декілька останніх змінних, доступ до яких здійснювався в процесі виконання програми;
         Locals - локальні змінні методу, який виконується;
          Watchl, Watch 2, ... - явно задані змінні.
У процесі відлагодження корисним може бути вікно Call Stack (стек викликів), яке містить упорядкований перелік методів, які виконуються в поточний момент часу, а також значення аргументів цих методів.
Вікно Exceptions (винятки) дає змогу зазначити, які дії виконати при генеруванні обраного винятку. Можна обрати і варіант продовження виконання, і варіант переходу до відлагодження. В останньому випадку виконання програми призупиняється, а відлагоджувач переходить до відповідного оператора throw.
Меню Debug містить значну кількість опцій активізації інших корисних інструментів відлагодження програми.



Немає коментарів:

Дописати коментар