- •Парадигми програмування
- •8.080401: Інформаційні управляючі системи та технології
- •Тема 1. Парадигма імперативного програмування Лекція 1. Огляд парадигм програмування
- •1.1 Базові поняття і визначення
- •1.2 Класифікація парадигм програмування
- •Парадигми
- •Объектно-ориентированные возможности
- •Функциональные возможности
- •1.3 Огляд парадигми імперативного програмування
- •1.4 Програмування, кероване подіями
- •1.5 Узгоджене програмування і паралельні обчислення
- •1.6. Підтримка різних парадигм програмування в ms.Net
- •Тема 2. Парадигма об’єктно-орієнтованого програмування Лекція 2. Об'єктно-орієнтоване програмування та його реалізація в c# на платформі ms.Net
- •2.1 Основні принципи об’єктно-орієнтованого програмування
- •2.2 Чисто об'єктно-орієнтовані і гібридні мови програмування
- •2.3. Реалізація принципів ооп в мові c#
- •Тема 3. Програмування за прототипом і сценарне програмування Лекція 3. Програмування за прототипом і сценарне програмування
- •3.1 Програмування за прототипом
- •3.2 Сценарне програмування
- •Тема 4. Парадигма компонентного програмування Лекція 4. Компонентне програмування як розвиток об’єктного
- •4.1 Основні ідеї компонентної розробки
- •4.2 Компонентна об'єктна модель com (Component Object Model).
- •4.3. Технологія ActiveX – основні можливості
- •Лекція 5. Компонентне програмування в .Net
- •5.1 Основні концепції платформи ms.Net
- •5.1.1 Структура fcl
- •5.1.2 Загально мовне середовище виконання – clr – динамічна складова ms.Net Framework
- •5.1.3. Система типів даних в Microsoft .Net
- •Управління типами в cts
- •5.2. Розробка компонентів на платформі .Net
- •5.3. Поняття збірки і маніфесту в .Net
- •1. Створення dll-бібліотеки
- •2. Створення консольного проекту для тестування функції з бібліотеки.
- •3. Підключення проекту бібліотеки до консольного проекту.
- •4. Встановлення стартового проекту.
- •5. Створення Windows-проекту в тому самому рішенні.
- •6. Робимо проект стартовим і запускаємо на виконання. Результат:
- •7. Документування коду
- •Лекція 6. Візуальне програмування
- •6.1. Парадигма візуального програмування
- •1. Підключення до сервера бд
- •2. Створення власної бд і таблиць
- •3. Заповнення таблиці тестовими даними
- •4. Створення Windows-застосунку (форми)
- •5. Зв'язування елементів форми з джерелом даних
- •7. Створення запитів до даних і їх відображення на формі у вигляді таблиці (Grid)
- •Тема 5. Парадигма декларативного програмування Лекція 7. Основи парадигми декларативного програмування
- •7.1 Основи парадигми декларативного програмування
- •7.2 Основи функціонального програмування
- •Основи Лісп
- •7.3 Основи логічного програмування
- •7.4 Основи Пролог
- •Лекція 8. Основи xml
- •8.1. Визначення і структура xml-документа
- •8.2. Створення xml-документа
- •8.2.1. Структура xml-документа
- •8.3. Способи відображення xml-документа
- •8.4. Правила створення коректного xml-документа
- •8.4.1. Визначення коректного документа
- •8.4.2. Складові частини коректно сформованого хмl-документа
- •8.4.3. Додавання елементів в документ
- •8.4.4. Типи вмісту елементу
- •Лекція 9. Робота з xml в .Net
- •9.1. Класи для роботи з xml .Net
- •9.2. Читання і запис потоків даних Xml
- •9.2.1. Використання класу XmlReader
- •9.2.2. Методи читання даних
- •9.2.3. Контроль типів даних при читанні Xml-документа
- •9.3. Створення xml-документа в Visual Studio
- •Лекція 10. Створення xml-документів в .Net
- •10.1. Використання класу XmlWriter - запис потоків даних Xml
- •10.2. Використання dom в .Net
- •10.2.1. Читання xml-документа за допомогою XmlNodeList
- •10.2.2. Вставка елементів (вузлів) в xml- документ
- •10.3. Обробка атрибутів
- •10.3.1. Витягання атрибутів за допомогою XmlReader
- •10.3.2. Вставка атрибутів в документ за допомогою XmlWriter
- •Лекція 11. Елементи функціонального програмування в c#
- •11.1. Елементи функціонального програмування в c#
- •11.2. Делегати
- •11.3. Лямбда-вирази і лямбда-функції
- •Приклади
- •Лекція 12. Мова linq
- •2. Linq: узагальнення і інтерфейси
- •3. Основні операції запиту
- •4. Перетворення даних з linq
- •12.1. Основи мови linq
- •1.1 Джерело даних
- •1.2. Запит
- •1.3. Виконання запиту
- •12.2. Linq: узагальнення і інтерфейси
- •12.2.1. Змінні iEnumerable в запитах linq
- •12.3. Основні операції запиту
- •12.3.1. Визначення джерела даних
- •12.3.2. Фільтрація
- •12.3.3. Впорядкування
- •12.3.4. Угрупування
- •12.4. Перетворення даних з linq
- •12.4.1. З'єднання декількох вхідних послідовностей в одну вихідну
- •12.3.5. З'єднання
- •12.3.6. Вибір (Проектування)
- •12.4.2. Вибір підмножини кожного вихідного елементу
- •12.4.3. Перетворення об'єктів, що знаходяться в пам'яті, в xml
- •12.4.4. Виконання операцій над вихідними елементами
- •12.5. Зв'язки типів в операціях запиту
- •12.5.1. Запити, що не виконують перетворення вихідних даних
- •12.5.2. Запити, що виконують перетворення вихідних даних
- •12.5. 3. Дозвіл компілятору визначати відомості про типа
- •12.6. Синтаксис запиту або синтаксис методу
- •12.6.1. Методи розширення стандартних операторів запитів
- •12.6.2. Лямбда-вирази
- •Тема 7. Парадигма агентно-орієнтованого програмування Лекція 13. Агентно-орієнтоване програмування
- •13.1 Основні поняття агентно-орієнтованої парадигми програмування
- •1. За архітектурою побудови агентів і їх властивостями:
- •За функціональним призначенням:
- •3. За здатністю до мобільності:
- •3Адачні агенти
- •13.2 Мультиагентні інформаційні системи
- •1. Формальна мова опису системи моделей (ментальної, соціальної):
- •2. Інструменти перетворення звичайних програм у відповідні агентні програми.
- •13.3. Приклади практичного застосування агентної парадигми
- •3Асоби пошуку в Інтернет
- •Тема 8. Парадигма теоретичного програмування Лекція 14. Основні парадигми теоретичного програмування
- •Основна література
- •Додаткова література
1.4 Програмування, кероване подіями
Перш ніж перейти до розгляду парадигми об'єктно-орієнтованого програмування, розглянемо стисло основні принципи програмування, керованого подіями, яке тісно з ним зв'язано.
Як ми з'ясували, стилі програмування, засновані на імперативній парадигмі, ґрунтуються на послідовній організації «внутрішнього» потоку управління виконанням інструкцій програми, не пов'язаного з настанням подій поза нею. Проте існує багато задач, вирішуваних в реальному часі, а також задач, вирішуваних в інтерактивному режимі, які очікують, приймають і оброблюють команди і набори даних. Для ефективної реалізації таких задач використовуються стилі програмування, засновані на концепції організації циклу обробки зовнішніх подій (повідомлень).
Замість того щоб чекати повного завершення введення і обробки одного набору даних, і лише потім послідовно переходити до очікування наступного, в системі організується цикл постійного опитування черги подій, що поступають ззовні.
Таким чином, програма в стилі програмування керованого подіями складається з ряду невеликих прикладних програм, так званих обробників подій, які запускаються у відповідь на появу цих подій, і диспетчера, що використовує чергу необроблених подій, викликає обробники подій і імітує середовище, кероване перериваннями.
Під подією в мові програмування звичайно розуміють спосіб включення фрагмента в програмний код з метою зміни поведінки програми.
Як тільки відбувається зміна середовища обчислень, які цікавлять розробника або користувача програмного забезпечення, активізується подія і виконується відповідний фрагмент коду.
В цілому, з погляду прикладного програмування, обробка події подібна виклику процедури, причому в ролі параметрів виступають ті або інші характеристики середовища обчислень.
Будь-який сучасний інтерфейс користувача побудований на основі обробки подій (onClick, onMouseMove, onMouseOver і т.д.).
Приклад (C#)
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
double x = double.Parse(txt_x.Text);
int n = int.Parse(txt_n.Text);
//вызов метода вычисления sin(x) из библиотеки
double my_sinus = MySin.MySin.Sin(x, n);
//вызов метода из класса Math
double sinus = Math.Sin(x);
txt_y1.Text = my_sinus.ToString();
txt_y2.Text = sinus.ToString();
}
private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
}
В цьому фрагменті є два методи обробки подій: button1_Click і button2_Click, які викликаються при натисненні програмних кнопкок.
Базовим поняттям програмування керованого подіями, що відрізняє його від імперативного є поняття процесу.
Процес - це абстракція достатньо високого рівня. В якій обчислювальній моделі працює кожний окремий процес - не принципово. Важливо, що вони можуть працювати паралельно, і можуть обмінюватися між собою результатами своїх обчислень через "канали зв'язку".
Семантично взаємодію паралельних процесів краще всього представляти як роботу мережі деяких пристроїв, з’єднаних "каналами" передачі даних.
Кожний обчислювач виробляє типові для його обчислювальної моделі операції (наприклад, імперативний обчислювач буде переходити із стану в стан). Коли процес зустрічає інструкцію "Прийняти значення (з каналу)", він входить у стан очікування, поки канал порожній. Як тільки в каналі з'являється значення, процес його прочитує і продовжує роботу.
Поширеним є також і таке розуміння паралелізму: в системі паралельних процесів кожний окремий процес оброблює події. Ці події можуть бути як спільними для всієї системи, так і окремими для одного або декількох процесів. В таких термінах достатньо зручно описувати, наприклад, елементи графічного інтерфейсу користувача, або моделювання яких-небудь реальних процесів - оскільки поняття події є для таких задач природнім.
В програмуванні керованому подіями окремі процеси максимально автономні, єдиний спосіб спілкування між ними - обмін повідомленнями.
Програмування кероване подіями – найбільш поширена сучасна парадигма прикладного програмування, підтримувана операційними системами (ОС) і реалізована в мовах програмування (С++, Visual Basic, C#) та інших.
До стилю програмування, керованого подіями, відносять і паралельне програмування. Ця парадигма, звичайно, потребує окремого вивчення і відповідної техніки. Ми лише стисло оглянемо основні положення цієї теми.
