13292

ТЕХНОЛОГІЇ ПРОГРАМУВАННЯ. МЕТОДИЧНІ ВКАЗІВКИ ДО КУРСОВОГО ПРОЕКТУВАННЯ

Лабораторная работа

Информатика, кибернетика и программирование

МЕТОДИЧНІ ВКАЗІВКИ ДО КУРСОВОГО ПРОЕКТУВАННЯ З ДИСЦИПЛІНИ ТЕХНОЛОГІЇ ПРОГРАМУВАННЯ Методичні вказівки до курсового проектування з дисципліни Технології програмування для студентів напряму 6.040302 Інформатика /Упоряд.: Кобилін О.А. Руденко Д.О. Харкiв: ХНУРЕ ...

Украинкский

2013-05-11

666 KB

20 чел.

МЕТОДИЧНІ ВКАЗІВКИ

ДО КУРСОВОГО ПРОЕКТУВАННЯ

З ДИСЦИПЛІНИ

ТЕХНОЛОГІЇ ПРОГРАМУВАННЯ

Методичні вказівки до курсового проектування з дисципліни Технології програмування для студентів напряму 6.040302  «Інформатика» /Упоряд.: Кобилін О.А., Руденко Д.О.,   Харкiв: ХНУРЕ, 2008.  30 с.

ЗМІСТ

[1] ЗАГАЛЬНІ ПОЛОЖЕННЯ

[2] 1 МЕТА ТА ЗАДАЧІ КУРСОВОГО ПРОЕКТУ

[2.1] 1.1 Методичні вказівки по організації взаємодії з успадкованим кодом

[2.2] 1.2 Головні питання сумісності

[2.3] 1.3 Простір імен System. Runtime. InteropServices

[2.4] 1.4 Взаємодія з модулями DLL, створеними на мовою C

[2.5] 1.5 Взаємодія .NET і СОМ

[2.6] 1.6 Подання типів СОМ як типів .NET

[2.7] 1.7 Керування посиланнями на об'єкти сокласса

[2.8] 1.8 Приховування низькорівневих інтерфейсів СОМ

[2.9] 1.9 Імпорт бібліотеки типів

[2.10] 1.10 Імпорт типу за допомогою Visual Studio .NET

[2.11] 1.11 Використання TlbImp.exe для імпорту типу

[2.12] 1.12 Інструменти для COM Interop

[2.13] 1.13 Використання в коді COM-об’єктів

[2.14] 1.14 Обробка виняткових ситуацій в COM Interop

[2.15] 1.15 Практичний приклад. Робота з COM-додатком в .NET

[3] 2 СТРУКТУРА I ЗМІСТ КУРСОВОГО ПРОЕКТУ

[4] 3 МЕТОДИЧНІ ВКАЗІВКИ З ВИКОНАННЯ КУРСОВОГО ПРОЕКТУ

[5] 4 ВИМОГИ ДО ОФОРМЛЕННЯ КУРСОВОГО ПРОЕКТУ

[6] 5 ОРГАНІЗАЦІЯ ПРОЕКТУВАННЯ I ЗАХИСТ ПРОЕКТУ

[7] 6 ТЕМАТИКА КУРСОВИХ ПРОЕКТІВ

[8] 7 ПЕРЕЛІК ПОСИЛАНЬ

[9]
Додаток А  Бланк титульного аркушу курсового проекту

[10]
Додаток Б Бланк завдання на курсовій проект

[11] Додаток В  Зразок реферату


ЗАГАЛЬНІ ПОЛОЖЕННЯ 

Під технологією програмування розуміється сукупність узагальнених і систематизованих знань, або наука, про оптимальні способи (прийомах і процедурах) проведення процесу програмування, що забезпечує в заданих умовах одержання програмної продукції із заданими властивостями. Сучасні технології програмування припускають удосконалювання професійної культури програмування, організації і упорядкування праці самого програміста, незалежно від конкретної мови програмування, розв'язуваного завдання і ЕОМ.

Це новий напрямок у програмуванні, який швидко розвивається. Інтерес до інженерних питань програмування, деталям процесу виготовлення програмного продукту, до формування промислової культури програмування обумовлений збільшенням трудомісткості й вартості програмного продукту, що у наш час у кілька разів перевершує вартість ЕОМ. Причиною такого росту витрат з'явилося те, що програмування складалася як важко дисциплінуємо, творча діяльність, що офіційно була названа мистецтвом. Кожний програміст писав програми, не дотримуючись яких-небудь чітких стандартів і правил. Стало майже неможливо розібратися до кінця, що робить програма, написана іншою людиною, і практично неможливо її налагодити або модифікувати. Виникла ситуація, коли стало простіше переписати програму заново, чим її трохи змінити. Надії на те, що нові універсальні мови програмування в корені змінять ситуацію, не виправдалися.

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

Основною метою методичних вказівок є надання допомоги студентам при виконанні курсового проекту з дисципліни "Технології програмування".

Методичні вказівки складаються з таких розділів: мета, тематика курсового проекту, структура та зміст проекту, методичні вказівки з виконання та організації роботи, вимоги до оформлення і захист курсового проекту.

У  методичних вказівках викладаються загальні рекомендації щодо виконання курсового проекту та конкретні  рекомендації щодо використання тієї чи технології програмування.

Під час виконання курсового проекту кожний студент виконує індивідуальне завдання.

1 МЕТА ТА ЗАДАЧІ КУРСОВОГО ПРОЕКТУ

Основною метою  курсового проекту є втілення отриманих теоретичних знань в області сучасних технологій програмування, а також розвиток навичок самостійної роботи при розробці проектів у сучасних візуальних середовищах  Delphi, Builder C++, Visual Studio .NET та ін.

У процесі виконання проекту студент повинен навчитися :

ставити  задачу для  реалізації її у вигляді програмного проекту на  персональному комп’ютері (ПК);

вибирати або розробляти  відповідний алгоритм розв'язання задачі;

вибирати і обґрунтовувати застосування відповідної технології програмування;

складати, відлагоджувати  та тестувати  програмні проекти  в  рамках застосованої технології програмування;

користуватися довідковою літературою при вивченні нових програмних продуктів та технологій програмування;

— закріплювати практичні навички в оформленні документації на кожному етапі розробки;

— закріплювати практичні навички використання ПК.

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

Особливу увагу при виконанні курсового проекту треба приділяти розвитку у студентів навичок самостійного розв’язування поставлених задач, вмінню виділяти головні чинники  проблеми, абстрагуватися від другорядних, виконувати теоретичні  обґрунтування поставленої задачі та набуття знань для її реалізації,  реальне використання сучасних програмних технологій.

1.1 Методичні вказівки по організації взаємодії з успадкованим кодом

В процесі вивчення дисципліни ви неодноразово порівнювали можливості .NET і традиційних технологій створення додатків — COM, MFC, ATL і т.п. Швидше за все, ви переконалися, що  .NET має серйозні переваги перед кожною із цих технологій. Однак, на даний час, мало хто із програмістів може повністю забути про COM, ATL, MFC, Visual Basic 6.0, Windows DNA і створювати додатки винятково в середовищі .NET. Як правило, їм доводиться забезпечувати взаємодію з багатьма тисячами рядків успадкованого програмного коду. І в .NET передбачені потужні й витончені засоби реалізації такої взаємодії.

1.2 Головні питання сумісності

При створенні зборок в .NET-сумісному компіляторі наш кінцевий продукт — це «керований код» (managed code), що призначений для виконання в середовищі CLR (Common Language Runtime). Керований код має ряд переваг у порівнянні із традиційним двійковим кодом, такі як автоматичне керування пам'яттю, єдина система типів, самодокументування зборок і т.п. Для зборок в .NET передбачена специфічна й дуже чітка внутрішня структура: крім самих інструкцій мовою IL (Intermediate Language, проміжна мова) і метаданих типів, зборки містять також маніфест, у якому описуються всі внутрішні типи цієї зборки й фіксуються всі необхідні зовнішні зборки.

Дуже часто зборки .NET повинні успішно працювати у світі складних додатків, де значну частину коду становлять класичні COM-сервери. Код COM-серверів схожий на код зборок .NET тільки типами імен файлів. Природно, код модулів СОМ - двійковий, платформенно-залежний (на відміну від повністю платформенно-незалежного коду IL). COM-сервери працюють із унікальним набором типів даних (BSTR, VARIANT і т.п.), зміст яких у різних мовах програмування дуже розрізняється. Крім того, що в кожному програмному модулі СОМ повинні бути реалізовані досить складні елементи (такі як фабрики класів, код IDL, запису до реєстру), варто враховувати, що у світі СОМ необхідно відслідковувати кожне посилання на об'єкт. Якщо ми помилимося в посиланнях, то це цілком може привести до таких неприємних наслідків, як витік пам'яті.

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

 виклики з типів .NET прямо до модулів DLL, створеним на мові C (тобто звертання до Win32 API або користувальницьких модулів DLL);

• виклики з типів .NET до типів СОМ;

 виклики з типів СОМ до типів .NET;

 виклики з типів .NET до служб СОМ.

До складу .NET SDK входить безліч засобів, які дозволяють “побудувати міст” між .NET і іншими архітектурами. Крім того, у бібліотеці базових класів .NET також передбачено чимало типів, які призначені винятково для організації взаємодії з успадкованим кодом.

1.3 Простір імен System. Runtime. InteropServices

При використанні служб .NET для взаємодії з успадкованим кодом ми будемо явно або опосередковано працювати з типами, визначеними в просторі імен System.Runtime.InteropServices. (Назва технології від слова Interoperation – взаємодія – Interop). Під цим розуміють будь які операції, які виконуються  керованим кодом над не керованим.  Найбільш важливі типи цього простору імен представлені в табл. 1.

Всі перераховані в табл. 1 типи — це атрибути, які використовуються для керування процесами передачі даних від типів .NET типам СОМ (і навпаки). Звичайно, у просторі імен System.Runtime.InteropServices визначений також безліч інтерфейсів, перерахувань і структур. Але ми будемо розглядати їх не списком, а в момент їхнього застосування. Перше, із чого ми почнемо, - з Platform Invocation Services (PInvoke).

Таблиця 1. Деякі типи простору імен System.Runtime.InteropService

Тип

Опис

ClassInterfaceAttribute

Використовується для керування тим, як тип .NET буде надавати свої відкриті члени клієнтам COM

ComRegisterFunctionAttribute

ComUnregisterFunctionAttribute

Можуть бути зв’язані з користувальницькими методами. Визначають, що цій метод  повинен бути викликатися при реєстрації (або видалені реєстрації) зборки при використанні в середовищі COM

ComSourceInterfacesAttribute

Визначає список інтерфейсів, які є джерелами подій для класів

DispIdAttribute

Користувальницький атрибут, який визначає COM DISPID метода, відкритої змінної або властивості

DllImportAttribute

Використовується PInvoke (Platform Invocation Service – службами активації платформ)

GuidAttribute

Використовується для визначення GUID для класу, інтерфейсу або бібліотеці типів

IDispatchImplAttribute

Визначає, яку реалізацію IDispatch повинно використовувати  середовище CLR при виявлені подвійних інтерфейсів

InterfaceTypeAttribute

Визначає, як саме інтерфейс .NET буде відкритий для клієнтів COM (в якості похідного від IDispatch або в похідного від IUnknown)

OutAttribute InAttribute

Використовується для параметра або поля. Визначає, в якому напрямку повинні бути передані данні – від викликуваної до викликающої або від викликающого до викликуваної

ProgIdAttribute

Користувальницький атрибут, який дозволяє задавати ProgID для типа .NET

1.4 Взаємодія з модулями DLL, створеними на мовою C

Служби активізації платформ (Platform Invocation Services, PInvoke) забезпечують можливість викликати з коду .NET функції, реалізовані в традиційних двійкових модулях DLL, написаних на C (не в COM-серверах). За допомогою PInvoke програміст .NET позбувається від маси проблем, пов'язаних з реалізацією виклику функцій і експорту даних, що повертаються ними, вручну. PInvoke передає також параметри при виклику функцій, транслюючи типи даних .NET у їхні аналоги в традиційному двійковому коді.

Одна з головних цілей, що переслідувалася при створенні бібліотеки базових класів .NET-сховати від програміста низко рівневі виклики до Win32 API, Однак якщо нам все-таки треба було реалізувати подібні виклики - то PInvoke до наших послуг. Крім того, служби PInvoke можуть бути використані, звичайно, і для доступу до функцій, визначеним у користувальницьких модулях DLL. Таким чином, якщо в нашому розпорядженні залишилися бібліотеки успадкованого коду, написаного на C, за допомогою PInvoke ми можемо без яких-небудь проблем до них звертатися.

Проілюструємо це прикладом. Приклад буде виглядати  як клас С#, із якого буде виконуватись виклик до  функції Win32 API MessgeBox().

namespace PInvokeExample

using System;

  // Потрібно для одержання доступу до типів PInvoke

{

      using System.Runtime.InteropServices;

   public class PInvokeClient

    {

     // Функція Win32 MessageBox) живе в user32.dll

     [DllImport("user32")]

     public static extern int MessageBoxdnt hWnd, String pText,

         String pCaption, int uType):

     public static int Main(stririg[] args)

      {

       // Створюємо декілька змінних  .NET для   передачі

       // функції Win32 MessageBox()

       String pText = "Hello World!";

       String pCaption - "PInvoke Test";

       MessageBox(0,  pText,   pCaption,   0):

       return 0;

       }

     }

}

Процес звертання до зовнішнього традиційного модуля DLL (тобто модулю DLL, написаному на мові С без усяких СОМ-елементів) починається з оголошення функції із ключовими словами static і extern. (Це обов'язково.) Зверніть увагу, що при оголошенні прототипу функції C ми повинні, звичайно, користуватися типами даних .NET. Наприклад, не можна використовувати типи даних char* і wchar_t* - замість цього, як ми бачимо, використовується тип System.String.

Окрім того, ми повинні позначити цей прототип функції за допомогою атрибута [DllImport]. Як мінімум, у значенні цього атрибута ми повинні вказати ім'я модуля DLL, функцію з якого ми будемо викликати, як це в нас і зроблене:

[DllImport ("User32")]

public static extern int MessageBox(. . .);

Тип DllImportAttribute визначає значну кількість відкритих змінних (полів), які можна використовувати для настроювання процесу виклику зовнішньої функції. Ці поля представлені в табл. 2.

Щоб задати ці значення для поточного об'єкта DllImportAttribute, просто вкажемо кожну пару ім'я - значення в конструкторі класу. Конструктор Dll ImportAtribute приймає єдиний параметр типу System.String:

class DllImportAttribute

{

// Конструктор приймає змінну типу string,

//у якій будуть утримуватися всі пари ім’я поля - значення

public DllImportAttribute (string val);

}

Зрозуміло, що при такому підході DllImportAttribute абсолютно байдуже, у якому наборі і у якій послідовності ми вкажемо ці пари ім'я - значення.

Строкове значення буде переглянуто цілком, і з нього будуть витягнуті необхідні параметри.

Таблиця 2. Поля типу DLLImportAttribute

Поле

Опис

CallingConvention

Використовується для визначення погодження про виклики (calling convention), яке використовується при передачі аргументів метода

CharSet

Визначає, як саме будуть передаватись строкові дані  функції, яка викликається

EntryPoint

Визначає ім’я або номер функції, яка викликається

ExactSpelling

Якщо це поле буде мати значення true, то ніякі  спроби служб PIvoke “здогадатися, яке саме ім’я викликуваної функції мається на увазі, допускатися не будуть: буде вимагатися точний збіг  імені викликувної функції з ім’ям, яке передається 

PreserveSlg

Якщо це поле буде мати значення true (це значення використовується за умовчанням), сигнатура методу традиційної DLL не буде перетворена в сигнатуру метода .NET при поверненні HRESULT і додаткових аргументів [out, retval]

SetLastError

Якщо це поле має значення true, це значить, що викликающій може визвати метод Win32 GetLastError() для визначення того чи виникла помилка при виконанні метода. За умовчанням для цього поля використовується значення false

Поле ExactSpelling

Перше поле DllImport, що заслуговує особливого розгляду, — це поле ExactSpelling. Як нам уже відомо (див. табл. 2), це поле визначає, чи буде вимагатися точна відповідність між ім'ям функції в.NET і ім'ям функції в традиційному модулі DLL. Наприклад, якщо сказати по правді, то функції з ім'ям MessageBox() в Win32 API немає. Замість її є дві функції - версія ANSI (MessageBoxA() ) і функція Unicode (MessageBoxW). Тому, аналізуючи наш приклад, можна дійти висновку, що раз він працює, ExactSpelling має значення  false, і це - значення цього поля за замовчуванням (що цілком правильно). Якщо ви встановите для цього поля значення true:

[D11Import("user32", ExactSpelling - true)]

public static extern  int MessageBox(...);  

те нічого гарного не відбудеться. Точніше, буде згенеровано виключення ЕпtryPointNotFoundException з поясненням, що точка входу MessageBox у модулі user32.dll не виявлена.

Таким чином, при значенні false поля ExactSpelling частина роботи з розшуку потрібної функції служби PInvoke беруть на себе. Наприклад, у нашій ситуації суфікс А буде автоматично доданий при роботі в середовищі ANSI, а суфікс W — при роботі в середовищі Unicode.

Поле CharSet

Щоб явно вказати кодування для символьних даних при виклику зовнішньої функції з коду традиційного модуля DLL, ми повинні задати значення в поле CharSet типу DllImportAttribute. Для цього поля використовуються значення із перелічення CharSet, які представлені в табл. 3.

Таблиця 3. Значення перелічення CharSet

Значення

Опис

ANSI

Визначає, що строкові значення повинні бути передані в однобайтовому кодуванні ANSI

Auto

Визначає, що служби PInvoke самі повинні визначити , як передавати строкові значення (Unicode в WinNT/Win2000 і ANSI в Win 9x

None

Це значення застосовується за замовченням. Воно значить, що не визначено використовуване кодування і середовище виконання повинна зробити це автоматично

Unicode

Визначає, що строкові значення повинні передаватися в двобайтовому кодуванні Unicode  

Щоб примусово передавати всі строкові значення як Unicode (і піддати свій додаток ризику неправильної роботи в Win95/98/ME), можна використати такий код:

// Примусово використаємо точне ім’я і кодування Unicode 

[DllImport("user32". ExactSpelling=true, CharSet=CharSet.Unicode)]

public static extern int MessageBox(...);

У більшості випадків набагато зручніше й безпечніше задати для поля CharSet значення CharSet.Auto або просто залишити значення за замовчуванням (None). У цій ситуації код буде коректно виконуватися на різних платформах і, таким чином, стане більш переносним.

Поля CallingConvention і EntryPoint

Останні два поля DllImportAttribute, які ми розглянемо, - це поля Cal1ingConvention і EntryPoint. Як ви, напевно, знаєте, для функцій Win32 API можна використати безліч спеціальних параметрів (typedef), які визначають яким чином параметри будуть передані функції: оголошення C (C declaration), швидкий виклик, стандартний виклик і т.п. Ці значення для виклику через PInvoke можна визначити за допомогою поля CallingConvention, для якого використовуються значення з однойменного перелічення. У цьому переліченні передбачені такі значення, як Cdecl, Winapi, StdCal1 і т.п. За замовчуванням використовується значення StdCal1, і, як правило, у більшості ситуацій цього цілком достатньо (оскільки це відповідає найпоширенішій угоді про виклики, використовувані в Win32).

Останнє поле  - це поле EntryPoint. За замовчуванням значення цього поля збігається з ім'ям прототипу у С#. Таким чином, у нашім прикладі значення цього поля буде автоматично встановлене в MessageBox:

//Значення поля EntryPoint буде автоматично встановлене в 'MessageBox'

[DllImport{"user32", ExactSpelling=true, CharSet=CharSet.Unicode)]

public static extern  int MessageBox(...);

Однак не завжди в коді .NET можна використовувати те ж ім'я, яке потрібно використовувати для виклику функції із зовнішньої традиційної бібліотеки DLL  (найпростіша ситуація - функція з тією же назвою вже визначена в коді .NET). У цій ситуації ми можемо явно вказати ім'я викликуваної зовнішньої функції як значення поля EntryPoint:

public class PInvokeClient

{

//Функція .NET DisplayMessage буде викликати функцію MessageBox()

// із традиційної DLL

[DllImport("user32", ExactSpelling=true, CharSet=CharSet.Unicode,  EntryPoint="MessageBox")]

public static extern int DisplayMessage(int hWnd,  String pText,    

             String pCaption, int uType):

public static int Main(string[] args)

 {

   String pText = "Hello World!";

   String pCaption = "PInvoke Test";

   // Реально буде викликана функція MessageBox()

   DisplayMessage(O,  pText,   pCaption,  0);

   return 0;

 }}

1.5 Взаємодія .NET і СОМ

Наступний тип взаємодії з успадкованим кодом - це взаємодія з модулями СОМ. Дуже часто при створенні додатків .NET виявляється, що їм доводиться взаємодіяти з існуючими COM-серверами. Природно, для рішення цього завдання необхідно забезпечити якийсь проміжний рівень, що транслював би виклики .NET у виклики СОМ (представляючи типи СОМ у вигляді типів .NET). В ідеальній ситуації процес подібного перетворення повинен бути зовсім прозорий для типів .NET, щоб вони могли звертатися до типів СОМ точно так само, як і до інших типів .NET.

Роль подібного проміжного рівня в .NET виконують служби RCW(Run-time Callable Wrapper, викликувана оболонка часу виконання). Кожному класу СОМ (соклассу), до якого здійснюються виклики із клієнта .NET, необхідна своя оболонка - свій RCW. Таким чином, якщо ми працюємо з одним додатком .NET, що звертається до трьох соклассам СОМ, нам будуть потрібні три окремих RCW, які будуть перетворювати виклики .NET у виклики СОМ. Загальна схема цього процесу представлена на мал. 1.

. Рис. 1. RCW функціонує як проміжний рівень між клієнтом .NET і COM-сервером

RCW створювати вручну не потрібно — це здійснюється автоматично за допомогою утиліти tlbimp.exe (від type library importer — імпортер бібліотеки типів). Ще одна новина полягає в тому, що для нормальної взаємодії із клієнтами .NET в успадковані COM-класи не треба вносити ніяких змін. Всю необхідну роботу беруть на себе модулі RCW.

1.6 Подання типів СОМ як типів .NET

За те, щоб типи СОМ представлялися типам .NET як такі ж модулі .NET, відповідають програмні модулі RCW. Припустимо, що в модулі СОМ визначений метод ( що входить в інтерфейс), який  описаний в IDL:

// Визначення метода СОМ в IDL

HRESULT DisplayThisString([in] BSTR msg);

Модуль RCW представляє цей метод клієнтові .NET у такий спосіб:

// Подання метода СОМ у С#

void DisplayThisString(String msg);

У переважної більшості типів СОМ (включаючи [oleautomation]-cумісні типи) є відповідні їм типи в.NET. Ці відповідності наведені в табл. 4.

Природно, при роботі з покажчиком в IDL (наприклад, int* замість int) цей покажчик буде відображатися у відповідний базовий клас (System. Int32/int).

1.7 Керування посиланнями на об'єкти сокласса

Ще одна важлива «зона відповідальності» RCW полягає у відстеженні посилань на сокласс СОМ. При звичайному використанні сокласов у середовищі СОМ у цей процес залучені і клієнти сокласса, і сам сокласс, а керування посиланнями виконується за допомогою викликів методів AddRef() і Release(). Класи СОМ саморуйнуються, коли більше немає зовнішніх посилань на них.

Таблиця 4. Відповідність убудованих типів COM з типами .NET

Тип COM (IDL)

Тип .NET

Псевдонім в C#

char, boolean, small

System.SByte

Sbyte

wchar_t, short

System.Int16

Short

Long, int

System.Int32

Int

hyper

System.Int64

Long

unsigned char, byte

System.Byte

Byte

unsigned short

System.UInt16

Ushort

unsigned hyper

System.UInt64

Ulong

single

System.Single

Float

double

System.Double

Double

VARIANT_BOOL

Ні

Bool

HRESULT

System.Int32

Int

BSTR

System.String

String

LPSTR або char*

System.String

String

LPWSTR або wchar_t

System.String

String

VARIANT

System.Object

Object

DECIMAL

System.Decimal

Нема

DATE

System.DateTime

Нема

GUID

System.Guid

Нема

CURRENCY

System.Decimal

Нема

IUnknown*

System.Object

Object

IDispatch*

System.Object

Object

Однак у світі .NET така схема не використовується, тому для забезпечення нормальної взаємодії з COM-сервером клієнт .NET повинен був би в потрібний момент часу робити виклик методу Release(). На щастя, цього не потрібно: як звичайно, всю чорнову роботу бере на себе модуль RCW. Він робить кэшування всіх посилань на інтерфейси і у потрібний момент робить виклик методу Release() для сервера СОМ, на який більше немає активних посилань із боку клієнтів .NET. У результаті клієнтам .NET немає необхідності явно робити виклики методів AddRef(), Release() або QueryInterface().

1.8 Приховування низькорівневих інтерфейсів СОМ

Оскільки модуль RCW повинен представити типи СОМ для клієнта .NET точно також, начебто це звичайні типи .NET, він повинен уміти також приховувати низькорівневі інтерфейси СОМ.

Наприклад, коли ми створюємо клас СОМ, що підтримує інтерфейс IConnectionPointContaiпег (і підтримує підлеглий об'єкт або два допоміжних інтерфейси IConnectionPoint), сокласс має можливість пересилати повідомлення про події назад клієнтові СОМ. При використанні клієнта СОМ, створеного на C++, нам буде потрібно створити приймач події, що реалізує інтерфейс [source], одержати посилання на інтерфейс IConnectionPoint, викликати метод Advise() і проробити ще безліч кроків по встановленню з'єднання.

При створенні клієнта СОМ на Visual Basic 6.0 більша частина цього процесу повністю прихована (досить використати ключове слово WithEvents). Модуль RCW точно так само ховає всю рутину СОМ при створенні клієнта .NET. Всі низькорівневі інтерфейси COM-сервера повністю приховані від клієнта СОМ, тому він бачить (і, відповідно, може з ними працювати) тільки користувальницькі інтерфейси, реалізовані в сокласі. Деякі з інтерфейсів СОМ, які приховує модуль RCW, представлені в табл. 5.

Таблиця 5. Сховані інтерфейси СОМ

Інтерфейс   

Опис

IClassFactory

Забезпечує     незалежний від мови й місцезнаходження метод активації класу СОМ

IConnectionPointContainer

IConnectionPoint

Забезпечує можливість відправлення сокласом подій назад клієнтові

IDispatch

IDispatchEx

IprovideClassInfo

Використовується для реалізації пізнього зв'язування

IEnumVariant

Забезпечує можливість подання сокласом власного набору внутрішніх типів

IErrorInfo

ISupportErrorInfo

ICreateErrorInfo

Забезпечують можливість для клієнтів і сокласов СОМ генерації повідомлень про помилки й реагування на такі повідомленні

IUnknown

Управляє лічильником посилань і дозволяє клієнтові одержувати посилання на конкретний інтерфейс сокласа

1.9 Імпорт бібліотеки типів

Інфраструктура .NET надає всю необхідну підтримку COM-взаємодії, в тому числі можливість імпорту бібліотек типів. Для того щоб виконуюче середовище .NET могло “спілкуватися” с COM-компонентом, в якості проксі використовується механізм, відомий як викликувана оболонка часу виконання (Runtime Callable Wrapper, RCW). На її покладена більша частина навантаження по забезпеченню взаємодії .NET і COM, в тому числі маршалінг типів даних, обробка подій і робота з інтерфейсами.

На відміну від “чистокровних” .NET-компонентів, COM-компоненти перед використанням треба зареєструвати. Для реєстрації бібліотеки DLL COM в реєстрі Windows треба скористатися командою Regsvr32 в вікні командної строки. Наприклад, для реєстрації COM-компонента, в вигляді файлу DLL з ім’ям Person.dll, треба відрити вікно командної строки (“Пуск | Выполнить”) і виконати команду Regsvr32 Person.dll.  Після того, як компонент зареєстрований,  перш ніж звертатися до COM-сервера з .NET треба створити проміжний клас, який буде містити в собі всю необхідну інформацію для передачі запиту COM-серверу. Це можна зробити за допомогою Visual Studio .NET або програми імпорту бібліотеки типів Type Library Importer (TlbImp.exe).

1.10 Імпорт типу за допомогою Visual Studio .NET

За одним незначним винятком імпорт бібліотеки COM практично нічим не відрізняється від імпорту любого іншого типу. Виняток в тому, що більшість DLL, на які встановлюється посилання, перелічені на вкладці COM діалогового вікна Add Reference. На цій вкладці присутні всі зареєстровані COM-компоненти. Тому, для імпорту типів виконайте наступні дії:

  •  Створіть пусте рішення, наприклад ComDemos.
  •  Створіть проект Visual Basic 2005 або C# і назвіть його TypeDemoVB або TypeDemoCS відповідно вибраній мові програмування.
  •  Розверніть список Project в Solution Explorer і клацніть правою кнопкою вузол References.
  •  Виберіть Add Reference і перейдіть на вкладку COM.
  •  Найдіть компонент, який треба зареєструвати, і клацніть OK.

1.11 Використання TlbImp.exe для імпорту типу

Використання TlbImp.exe складніше, але не дуже. Щоб імпортувати бібліотеку за допомогою TlbImp.exe виконайте наступні кроки:

  •  Відкрийте командну строку Visual Studio .NET.
  •  Перейдіть в каталог з DLL, призначений для імпорту.
  •  Виконайте команду tlbimp <ім’я_dll>.dll

Ця команда імпортує DLL і створить однойменну .NET зборку. Наприклад, Person.dll буде імпортована як Person.dll, MyObject – як MyObject.dll.

  •  Для того, щоб ім’я зборки відрізнялось від вихідного імені DLL,  треба виконати команду tlbimp <ім’я_dll>.dll /out:<Нове_Ім’я>.dll.

На отриману зборку можна посилатися, як на любу іншу .NET-зборку. Важливо розуміти, що програма TlbImp.exe створила із COM-бібліотеки нову зборку, яка тепер з’явиться тільки на вкладці .NET діалогового вікна Add Reference.

Деякі моменти здатні доставити масу проблем, головним чином із-за “природжених” розбіжностей між Visual Basic .NET і C#. На відміну від Visual Basic .NET, C# не підтримує необов’язкові параметри. COM-компоненти не підтримують перевантажені методи, тому для кожного параметра при виклику метода, треба передати значення, навіть якщо цей параметр не є потрібним. До того ж COM-параметри завжди передаються за посиланням,  отже, передати в них null-значення неможливо.

При роботі з Visual Basic .NET це не є проблемою, так як більшість таких параметрів є необов’язковими, і їх можна просто опустити в міру необхідності. C#, однак, не дає такої можливості, тому треба створити змінну типу object і передати їх при виклику. Такий підхід незручний за наступними обставинами:

  •  Він потребує надлишкового коду, який тільки заплутує логіку додатка;
  •  Часто це призводить до того, що код стає нечитаємим (чи зрозумілим буде список із 15 параметрів?).

Спеціально для усунення цієї проблеми в клас Type було добавлено поле Type.Missing. Розглянемо наступні приклади:

‘ VB

Imports Microsoft.Office.Core

Imports Microsoft.Office.Interop.Excel   ‘ Для цього прикладу ‘Office повинно буде встановлений

Dim NewExcelApp As New Microsoft.Office.Interop.Excel.Application

‘ Це працює чудово

NewExcelApp.Worksheets.Add( )

// C#

Using Microsoft.Office.Core;

Using Microsoft.Office>Interop.Excel; // Для цього прикладу

//  Office повинен бути встановлений

Application NewExcelApp = new Application( );

// А цей код не компілюється

NewExcelApp.Worksheets.Add();

Замість створення “фіктивних” змінних  можна скористатися полем Type.Missing. Достатньо передати його при виклику в C#, і додаток буде працювати коректно. В Visual Basic .NET такий прийом можна не використовувати, оскільки там підтримується необов’язкові параметри, але багато хто вважають застосування необов’язкових параметрів небажаним прийомом і радять цього уникати.

Є багато причин, за якими слід уникати застосування необов’язкових параметрів Visual Basic .NET хоч дискусії по цьому питанню ведуться доволі часто. Основна причина полягає в тому, що вони підтримуються не всіма .NET мовами. Розробники, які не знають Visual Basic .NET, при спробі відкомпілювати такий код стикаються з труднощами – їм буде складно зрозуміти, чому конструкція з необов’язковими параметрами працює в одному контексті і не працює в іншому. До того ж багато хто стверджує, що необов’язкові параметри – пережиток пришлого, і від них треба відмовлятися.

Нижче наводяться приклади роботи з полем Type.Missing:

‘ VB

Module Module1

Privite OptionalParamHandler As Object= Type.Missing

Sub Main( )

Dim NewExcelApp As New Microsoft.Office.Interop.Excel.Application

NewExcelApp.Worksheets.Add(OptionalParamHandler, _

       OptionalParamHandler, OptionalParamHandler, _

       OptionalParamHandler)

End Sub

End Module

// C#

Class Program

{

   private static Object OptionalParamHandler = Type.Missing;

   static void Main(string[ ] args)

    {

      Application NewExcelApp = new Application( );

      NewExcelApp.Worksheets.Add(ref OptionalParamHandler,

             ref OptionalParamHandler, ref OptionalParamHandler,

             ref OptionalParamHandler, ref OptionalParamHandler);

    }

 }

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

1.12 Інструменти для COM Interop

.NET Framework 2.0 і Visual Studio 2005 надають декілька інструментів для COM Interop. Інструменти і їх призначення розглядаються в таблиці 6.

Таблиця 6. Інструменти .NET для COM Interop

Інструмент

Опис

Ім’я додатка

Type Library Importer

Імпортує COM-компонент в нову .NET-зборку

TlbImp.exe

Type Library Exporter

Створює бібліотеку COM-типів, яку можна використовувати .NET-додатках

TlbExp.exe

Registry Editor

Для усіх COM-компонентів в реєстрі Windows повинні бути присутні відповідні записи. Редактор реєстру призначений не тільки для роботи з COM Interop, він дозволяє знаходити існуючи елементи реєстру і маніпулювати ними

Regedit.exe

Intermediate Language Disassembler

Дізассемблер, призначений для вирішення різноманітних задач. Дозволяє IL-код

Ildasm.exc

Assembly Registration Tool

Дозволяє додавати і видаляти .NET-зборки із системної бази

Regasm.exe

Платформи (окрім Windows), які підтримує .NET Framework (наприклад, Linux і Macintosh), не мають реєстру. Інструменти для роботи з реєстром доступні тільки на платформі Windows.

1.13 Використання в коді COM-об’єктів

Після імпорту бібліотеки типів робота з об’єктом з такої бібліотеки практично не відрізняється від роботи з “рідним”  об’єктом .NET. В наступному прикладі для відкриття і читання PDF-файла буде використаю COM-компонент “Adobe Acrobat Reader 7.0 Browser Document”. Якщо у вас  не встановлений Adobe Acrobat Reader 7.0, ви можете скачати його безкоштовно з сайту

http:// www.adobe.com/products/acrobat/readstep2_allversions.html.

Для використання вказаного COM-компонента перш за все його треба додати на панель інструментів і потім перетягти на форму і з відповідними кнопками зв’язати наступний код:

‘VB

AxAcroPDF1.LoadFile(“SamplePDFDocument.pdf”)

AxAcroPDF1.Print()

// C#

axAcroPDF1.LoadFile(@“SamplePDFDocument.pdf”);

axAcroPDF1.Print();

Зверніть увагу, що до імені компонента додається префікс “ax”.

Подробиці буде розглянуто в практичному прикладі.

1.14 Обробка виняткових ситуацій в COM Interop

При використанні COM-об’єктів в середовищі .NET обробка виняткових ситуацій різко відрізняється. В попередніх версіях .NET Framework на вершині ієрархії об’єктів Exception розташовувався клас System.Exception. Це означало, що будь яку помилку додатку моно було відловити, передбачивши перехоплювання об’єкта System.Exception. Так думають багато хто, але вони помиляються. System.Exception дійсно надає всі виняткові ситуації, сумісні з загальномовною специфікацією (Common Language Specification, CLS). Але помилки COM не сумісні з CLS, і тому перехоплюванні не будуть. Із-за невірних уявлень про роботу System.Exception написано багато ненадійного і небезпечного коду.

В .NET Framework 2.0 простір імен System.Runtime.CompilerServices має клас RuntimeWrappedException. В таблиці 7 перелічені властивості класу RuntimeWrappedException згідно документації MSDN.

Таблиця 7. Властивості RuntimeWrappedException

Ім’я

Опис

Data

Повертає набір пар “ключ - значення, які представляють користувальницьку інформацію про виняткові ситуацію

HelpLink

Повертає або встановлює посилання на файл довідки по винятковій ситуації

InnerException

Повертає екземпляр Exception, який визвав дану виняткову ситуацію

Message

Повертає повідомлення, яке описує дану виняткову ситуацію

Source

Повертає або встановлює ім’я додатка або об’єкта – джерела даної виняткової ситуації

StackTrace

Повертає строкове подання фреймів стеків виклику на момент генерації даної виняткової ситуації

TargetSite

Повертає метод, який згенерував дану виняткову ситуацію

WrappedException

Повертає об’єкт, для якого об’єкт RuntimeWrappedException є оболонкою

Всі ці властивості (окрім WrappedException) успадковані від класу System.Exception. Тому головна відміна станове властивість типу Object, яке має об’єкт WrwppedException. Чому це так важливо? Коли .NET Framework 2.0 генерує не сумісне з CLS виняткову ситуацію, CLR створює екземпляр RuntimeWrappedExceptioin і заносить в його властивість WrappedException об’єкт виняткової ситуації. Все це відбувається непомітно для розробника, але важно розуміти сутність цих процесів. Наступний приклад ілюструє сказане.

VB

Private Sub IllustrateExceptions()

       Try

‘ Код, який генерує виняткову ситуацію

  Catch ex As Exception 

‘В попередніх версіях перехоплювались тільки CLS-сумісні виключення

‘В поточній версії в цьому блоці перехоплюються як CLS-сумісні,‘ так і несумісні виключення

Try     ‘ Еквіваленту для Catch без виключення нема

          ‘ так як виконання до цього коду не дійде

// C#

Private static void IllustrateExceptions()

{

 try

  {

    // який-небудь код, який генерує виключення

  }

  Catch (Exception ex)

  {

 //  В попередніх версіях перехоплювались тільки CLS-сумісні виключення

 //В поточній версії в цьому блоці перехоплюються як CLS-сумісні,

 // так і несумісні виключення

 }

  Catch

   {

      Перехоплюються всі виключення, як CLS-сумісні, так и несумісні

   }

}

Для того щоб змінити це, можна скористатися атрибутом RuntimeCompatibility.

‘ VB

Imports System.Runtime.CompilerServices

<Assembly: RuntimeCompatibility(WrapNonExceptionThrows:=False)>

// C#

using System.Runtime.CompilerServices;

[assembly: RuntimeCompatibility(WrapNonExceptionThrows:=False)]

1.15 Практичний приклад. Робота з COM-додатком в .NET

В даному прикладе буде створений додаток, який  включає COM-компонент VCI First Impression Chart.

1. Відкрийте Visual Studio 2005 або Visual Studio 2008 і створіть новий проект Windows Forms Application на С#.

2. Дайте ім’я проекту DemoActiveX.

3. В головному меню виберіть Tools\Choose Toolbox Items. Відкриється діалогове вікно з двома вкладками: .NET Framework Components і COM Components (Ріс. 1). 

4. На вкладці COM Components виберіть елемент VCI First Impression Chart і клацніть  OK.

Ріс.1. Вкладка COM діалогового вікна Choose Toolbox Items

5. Перетягніть на форму новий компонент і розташуйте його  приблизно так, як показано на рис.2. За умовчанням він отримає ім’я  axVtChart1.

Ріс. 2. Вигляд вікна з компонентом  VCI First Impression Chart

6. Виконати  команду Build -> Build DemoActiveX. В разі відсутності помилок запустити на виконання додаток, натиснувши кнопку Start Debugging. В вікні додатку визвіть контекстне меню і випробуйте усі команди контекстного меню і зробить для себе висновки, як можливо досить легко створювати додатки з використанням COM-компонентів. (ріс.3).

Ріс. 3. Вікно додатку DemoActiveX з контекстним меню

2 СТРУКТУРА I ЗМІСТ КУРСОВОГО ПРОЕКТУ

Курсовий проект виконується студентом самостійно відповідно до індивідуального завдання в терміни, встановлені календарним планом. Підсумком виконання проекту є сукупність файлів проекту та пояснювальна записка. Студент повинен захистити проект перед комісією, до якої входять 3 викладачі.

Пояснювальна записка до курсового проекту містить  складові елементи:

1) титульний аркуш;

2) завдання до курсового проекту;

3) реферат;

4) зміст;

5) вступ;

6) теоретичну частину;

7) опис програми (загальна характеристика, необхідні технічні засоби, опис процедур та обробників, керівництво користувача та системного програміста);

8) висновки;

9) перелік посилань;

10) додатки.

Титульний аркуш оформляється відповідно до загальних університетських  вимог і містить назви міністерства, університету, кафедри, тему проекту, групу і прізвище студента, посаду і прізвище керівника, рік виконання проекту.

Завдання оформляється на стандартному бланку або друкується за тією ж формою (див. додаток Б).

Реферат містить коротку характеристику обсягу проекту (кількість сторінок, таблиць, рисунків, літературних джерел, додатків), перелік ключових слів (великими літерами) і анотацію до проекту (див. додаток В).

Зміст вступу характеризує актуальність теми, сучасний стан області знань, що досліджується,  коротку характеристику проекту (1-2 с.).

Теоретична частина містить літературний огляд за темою завдання, вибір і обґрунтування методу, мови і технології програмування, опис використаних математичних моделей, застосованих програмних компонентів, аналіз їх переваг та недоліків (5-10с.).

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

Висновок містить аналіз труднощів, що зустрілися при виконанні проекту, а також  можливих шляхів удосконалення розробленої програми (1 -2 с.).

Перелік посилань  виконується у відповідності з ДСТУ 3008-95 і містить список використаних  літературних джерел.

Додатки ( нумеруються починаючи з літери А) містять текст програми та копії екранів, що пояснюють інтерфейс та підтверджують робочий стан програми.

Загальний обсяг пояснювальної записки не повинен перевищувати 20-30 с. за копм’ютерним набором через 1,5 інтервали.

3 МЕТОДИЧНІ ВКАЗІВКИ З ВИКОНАННЯ КУРСОВОГО ПРОЕКТУ

Виконувати курсовий проект рекомендується у такій послідовності:

- вивчити літературні джерела за темою завдання, виконати аналіз існуючих методів рішення поставленої задачі, обґрунтувати та вибрати метод та технологію програмування, найбільш відповідні до поставленої задачі;

- розробити програму, відлагодити та протестувати її;

- отримати лістинг тексту програми i результатів її роботи, що доводять придатність програми та її відповідність поставленому завданню;

- оформити інші розділи пояснювальної записки, в яких дати опис програми, умов її використання, вимоги до обчислювальних засобів;

- здати пояснювальну записку і носій з програмою (і текстом пояснювальної  записки, що підготовлений на комп'ютері) на перевірку викладачеві;

-  захистити проект в призначений час.

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

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

4 ВИМОГИ ДО ОФОРМЛЕННЯ КУРСОВОГО ПРОЕКТУ

Пояснювальна записка повинна бути оформлена у відповідності з ДСТУ 3008-95. Текст пояснювальної записки друкується через 1,5-2 інтервали на аркушах формату А4 на принтері або, у крайньому випадку, написаний від руки чітким розбірливим почерком. Неохайно оформлені записки до розгляду не приймаються.

Потрібно залишати вільні поля на аркушах записки у відповідності з такими вимогами: ліве не менше за 30 мм, праві не менше за 10 мм, верхнє не менше за 15 мм, нижнє не менше за 20 мм.

Сторінки нумеруються арабськими цифрами в правому верхньому куті. Нумерація починається з титульного аркуша, але номери сторінок проставляються тільки після  реферату.

Текст записки може бути розбитий на розділи, підрозділи і пункти з відповідною нумерацією однією, двома або трьома цифрами через крапку (наприклад, пункт 1.2.3). У кінці номера крапка не ставиться. Крапка не ставиться й у кінці заголовка. Назви розділів пишуться великими літерами по центру рядка. Назви підрозділів і пунктів пишуться з великої літери, починаючи з абзацу. Перенесення слів у заголовках не допускаються.

Такі розділи, як РЕФЕРАТ, 3MICT, ВСТУП, ВИСНОВОК, ПЕРЕЛІК ПОСИЛАНЬ не нумеруються.

Кожний розділ повинен починатися з нової сторінки.

Додатки мають свою власну  нумерацію, починаючи з А (наприклад, ДОДАТОК А) по центру сторінки. Нижче повинна розташовуватися тематична назва додатка (великими літерами). Якщо додаток єдиний, то він не має номера.

5 ОРГАНІЗАЦІЯ ПРОЕКТУВАННЯ I ЗАХИСТ ПРОЕКТУ

Курсовий проект належіть до форми самостійної роботи студентів. Видача завдань здійснюється у перші два тижні семестру. Кожний студент складає календарний план роботи над темою і затверджує його у викладача. Час консультацій узгоджується з викладачем. Студенти консультуються у керівника індивідуально. Основні етапи роботи:

  •  ознайомлення з літературними джерелами за тематикою поставленої задачі;
  •  розробка алгоритмів та вивчення засобів вирішення задачі курсового проекту;
  •   написання програми і налагоджування на персональному комп’ютері;
  •   з’ясування одержаних проміжних теоретичних і практичних  результатів з керівником проекту.

Після показу керівникові готового проекту та його затвердження студент починає писати пояснювальну записку.

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

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

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

6 ТЕМАТИКА КУРСОВИХ ПРОЕКТІВ

Курсові проекти з дисципліні  „Технології програмування” виконуються відповідно до таких типових тематичних напрямків:

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

розробка програмних проектів,  пов’язаних з науково – дослідною тематикою кафедри інформатики університету;

створення  демонстраційних  програм для впровадження  їх в системи розробки комп'ютерних навчальних посібників. Студент може спробувати свої сили у складанні цікавих комп'ютерних  уроків, проектуванні та програмуванні комп’ютерних  навчальних  ігор.

Цей далеко не повний перелік тематичних напрямків курсових проектів постійно розширюється і доповнюється. Далі пропонуються  деякі приклади тем курсових проектів. Студент може вибрати одну із наведених тем  або запропонувати свою тему, погодивши її з викладачем. Для створення проектів слід використовувати  мову C#, С++ у середовищах  платформи Visual Studio .NET або C++ Builder . У деяких задачах за вказівкою викладача обов’язковим є використання комп’ютерної графіки та роботи з файлами. Обов’язковим є також використання при створені  програми однієї з технологій програмування, що вивчаються у курсі.

  1.  Створити COM-об’єкт для реалізації декількох методів обробки та розпізнавання образів і розробки програми в одному з середовищ програмування, де будуть використовуватися методи створеного COM-об’єкта.
  2.  Розробка програми для вирішення задачі по прийняттю рішення,  в якій реалізовані декілька критеріїв. При розробці програми використати обов’язково елементи керування ActiveX: F1Book і ChartFX. Назву критеріїв і кількість узгодити з викладачем.
  3.  Розробити програму, яка реалізує сумісну роботу текстового редактора MS Word, електронних таблиць MS Excel при підготовці звітів по базам даних.
  4.  Створити COM-об’єкт для реалізації основних арифметичних операцій і функцій тригонометричних, обернених тригонометричних, показових, степеневих, логарифмічних, гіперболічних. Розробити програму калькулятора в одному з середовищ програмування, де будуть використовуватися методи створеного COM-об’єкта.  
  5.  Створення COM-об’єкта для реалізації основних арифметичних операцій і операцій інтервальної математики. Розробити програму калькулятора в одному з середовищ програмування, де будуть використовуватися методи створеного COM-об’єкта. Інтерфейс калькулятора повинен передбачати відображення на формі тільки елементи керування в разі використання тільки основних операцій і появу елементів керування в разі виконання операцій інтервальної математики.
  6.  Розробити програму, яка буде використовувати прямі і обернені вейвлет-перетворення при обробці і розпізнаванні образів.
  7.  Розробити  на мові програмування C# додаток Windows Forms – калькулятор, який повинен працювати в режимі оберненої польської нотації і виконувати основні арифметичні операції.
  8.  Створити додаток, який буде включати Web-форми для розрахунків фінансових функцій. Передбачити аутентифікацію користувачів.
  9.  Розробити сайт, який буде надавати Web-сервіси по методам обробки і розпізнавання образів.
  10.   Розробити сайт, який буде надавати Web-сервіси по використанню прямих і обернених вейвлет-перетворень при обробці і розпізнаванню образів.
  11.  Реалізація алгоритмів комп’ютерної графіки : зафарбовування областей, проведення відрізків, відсічення та ін.
  12.  Реалізація різноманітних алгоритмів фільтрації зображень з використанням скануючого вікна.
  13.   Алгоритми геометричних перетворень зображень об’єктів (включаючи однорідні координати).
  14.   Алгоритми моделювання задач комп’ютерного зору (сегментації, нормалізації зображень, виділення та розпізнання об’єктів та ін.).


7 ПЕРЕЛІК ПОСИЛАНЬ

1. Дэвид Чеппел. Технологии ActiveX и OLE/Пер. с англ. - М: Издательский отдел “Русская Редакция” ТОО “Channel Trading Ltd.”, 1997. - 320 с.: ил.

2. Дуйл Роджерсон. Основы СОМ/ Пер. с англ. - М: Издательский отдел “Русская Редакция” ТОО “Channel Trading Ltd.”, 1997. - 376 с.: ил.

3. Аргангельский А.Я. Программирование в С++Builder. – М.: ЗАО  “Издательство БИНОМ”, 2001. - 1152 с.: ил.

4. Холигвэрт, Баттерфилд, Сворт, и др. С++Builder 5.  Руководство разработчика, том 2. Сложные вопросы программирования : Пер. с англ. – М.: Издательский дом “Вильямс”, 2001. - 832 с.: ил. – Парал. тит. англ.

5. Архангельский А.Я. Приемы программирования в Delphi. Изд. 2-е, пере раб. и доп. – М.: ООО «Бином-Пресс», 2004 г. – 848 с.: ил.

6. Сайлер, Брайн, Споттс, Джефф. Использование Visual Basic 6. Специальное издание. Пер. с англ. - М.; СПб.; К.; Издательский дом «Вильямс»,  1999 - 832 с.: ил.

7. Гарнаев А.Ю. Microsoft Excel 2000: разработка приложений. – Спб.: БХВ. – Санкт-Петербург, 2000. - 576 с.: ил.

8. Елманова Н., Трепалин С., Тенцер А. Delphi 6 и технология COM. – СПб.: Питер, 2002. – 640 с.: - (Серия «Мастер-класс»).

9. Архангельский А.Я. Программирование в Delphi.Учебник по классическим версиям Delphi. – М.: ООО «Бином-Пресс», 2006 г. – 1152 с.:ил.

10. Троелсен Эндрю. C# и платформа .NET. Библиотека программиста – СПб.: Питер, 2006. – 796 с.: ил.

11. Шеферд Джордж. Программирование на Microsoft Visual C++ .NET. Мастер-класс./Пер. с англ. – 2-е изд. – М.: Издательско-торговый дом «Русская редакция»; СПб.: Питер, 2005. – 928 стр.: ил.997. - 376 с.: ил.

  1.  Пирогов В. Ю. Программирование на Visual C++ .NET..- СПб.:БХВ- Петербург, 2003.- 800 с., ил.

13. Шилдт Г. C#: учебный курс. - СПб: Питер; К.: Издательская группа BHV, 2003..- 512с.: ил.

  1.  Микелсен Клаус. Язык программирования C#. Лекции и упражнения. Учебник: Пер. с англ./Клаус Микелсен – СПб.: ООО «ДиаСофтЮП». – 2002. - 656c.
  2.  Джеф Просиз. Программирование для Microsoft .NET /Пер. с англ. – М.: Издательско-торговый дом «Русская редакция», 2003. – 704 стр.: ил.
  3.  Экспозито Д. Microsoft ASP.NET 2.0. Базовый курс. Мастер класс / Пер. с ангд. – М.: Издательство «Русская редакция» ; СПб. : Питер , 2007. – 688 стр. : ил.

17. Нейгел Кристиан, Ивбен Билл, Глин Джей, Скиннер Морган, Уотсон Карли. Н45 C# 2005 и платформа .NET 3.0 для профессионалов. : Пер. с анг. – М. : ООО  И.Д. “Вильямс”, 2008. – 1376+416 (на CD) с. : Парал. Тит. Анг.


Додаток А  Бланк титульного аркушу курсового проекту

Міністерство освіти і науки України

Харківський національний університет радіоелектроніки

Факультет   прикладної математики і менеджменту

Кафедра  інформатики

КУРСОВИЙ ПРОЕКТ

Пояснювальна записка

Тема: “ ……………………………………………………………………………......

………………………………………………………………………...............”

дисципліна

"Технологія програмування"

Керівник___________________________________________________

    ( підпис, дата, посада, прізвище, ініціали)

Студент ___________________________________________________

(група, підпис, дата, прізвище, ініціали)

Харків   2008


Додаток Б Бланк завдання на курсовій проект

Харківський національний університет

радіоелектроніки

Кафедра_____________________________________________________    

Дисципліна__________________________________________________

Спеціальність________________________________________________

Курс_____________Група___________________Семестр_____________

Завдання

на курсовий проект

студентові

______________________________________________________________________

(прізвище, ім’я , по батькові)

  1.  Тема  проекту _______________________________________________________
  2.  Термін здачі студентом закінченого  проекту ___________________________._

  1.  Вихідні дані до проекту ______________________________________________________________________

______________________________________________________________________

  1.  Зміст пояснювальної записки (перелік питань, що підлягають розробці)____________________________________________________________

  1.  Перелік графічного матеріалу з точним зазначенням обов’язкових креслеників____________________________________________________________

КАЛЕНДАРНИЙ     ПЛАН

Назва етапів курсового проекту

Термін виконання етапів проекту

Примітки

1.

2.

3.

4.

5.

. Студент____________________________     __________________________

                                 (підпис)                                     (прізвище,ініціали)

                                                                                   

Керівник ___________________________     __________________________

                                 (підпис)                                       (прізвище, ініціали)

Завдання прийняв до виконання                                   (підпис студента)

“______”______________200_ p.

Додаток В  Зразок реферату

РЕФЕРАТ

Пояснювальна записка     32 с., 2 табл.,   З рис.,

З додатки,  5 джерел.

Курсовий проект виконаний із застосування мови програмування C# на платформі Visual Studio .NET. Метою даного курсового проекту є набуття практичних навичок розробки додатків для обробки зображень в середовищі візуального програмування Microsoft Visual Studio 2008. Для реалізації даної задачі розроблена програма, яка дозволяє застосовувати різноманітні фільтри до зображень.

обробка зображень, фільтр, яскравість,  контрасність,  монохромність, піксел.

 

Клиент .NET

OM

RCW

COM

RCW

COM

RCW


 

А также другие работы, которые могут Вас заинтересовать

72649. Понятие массива 18.25 KB
  Каждый массив должен быть описан в начале программы с помощью оператора размерности DIMENSION с указанием предельных значений каждого индекса, которые задаются целыми константами. Это необходимо для того, чтобы зарезервировать соответствующий объем памяти для хранения элементов массива.
72650. Формы представления данных в памяти ЭВМ 12.71 KB
  Под кодированием понимается переход от исходного представления информации, удобного для восприятия информации человеком, к представлению, удобному для хранения, передачи и обработки. Информация в памяти ЭВМ записывается в виде цифрового двоичного кода.
72651. Запись операторов в свободном и фиксированном форматах 12.37 KB
  Для записи комментариев ставится символ С в первой позиции строки далее до конца строки любой текст считается комментарием и игнорируется компилятором. Допускается запись нескольких операторов на одной строке разделителем является символ...
72652. Константы. Типы констант 13.61 KB
  Константа — это величина, которая не изменяется в программе в процессе программирования, то есть её значение не изменяется. Типы констант Существуют константы следующих типов: Целые — это простые целые числа любого знака. Например: 3; 157.
72653. Алфавит и имена переменных 13.42 KB
  Все другие ASCII символы могут применяться только в символьных константах. Пробелы используются для удобочитаемости программ. Они игнорируются компилятором, если не находятся внутри символьной константы.
72654. Алгоритм 16.96 KB
  Часто в качестве исполнителя выступает некоторый механизм компьютер токарный станок швейная машина но понятие алгоритма необязательно относится к компьютерным программам так например чётко описанный рецепт приготовления блюда также является алгоритмом в таком случае исполнителем является человек.
72655. Операционная система 22.05 KB
  Программы составляющие ПО можно разделить на три группы: системное ПО системы программирования прикладное ПО. Структуру ОС составляют следующие модули: базовый модуль ядро ОС управляет работой программы и файловой системой обеспечивает доступ к ней и обмен файлами между периферийными устройствами...
72656. Способы описания алгоритмов 14.12 KB
  Алгоритм может быть следующим: задать два числа; если числа равны то взять любое из них в качестве ответа и остановиться в противном случае продолжить выполнение алгоритма; определить большее из чисел; заменить большее из чисел разностью большего и меньшего из чисел...