- •Парадигми програмування
- •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.3.5. З'єднання
- •12.3.6. Вибір (Проектування)
- •12.4. Перетворення даних з linq
- •12.4.1. З'єднання декількох вхідних послідовностей в одну вихідну
- •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. Основні парадигми теоретичного програмування
- •Основна література
- •Додаткова література
12.3. Основні операції запиту
12.3.1. Визначення джерела даних
В першу чергу в запиті LINQ потрібно вказати джерело даних. У C#, як і в більшості мов програмування, змінна має бути оголошена до її використання. У запиті LINQ першим йде слово from для вказівки джерела даних (customers) і змінна діапазону (cust):
//queryAllCustomers – це IEnumerable<Customer>
var queryAllCustomers = from cust in customers
select cust;
Змінна діапазону схожа із змінною ітерації в циклі foreach за винятком того, що у виразі запиту не відбувається фактичної ітерації. При виконанні запиту змінна діапазону використовуватиметься як посилання на кожен подальший елемент в customers. Оскільки компілятор може визначити тип cust, немає необхідності вказувати його в явному вигляді. Додаткові змінні діапазону можуть бути введені словом let.
12.3.2. Фільтрація
Можливо, найбільш поширеною операцією запиту є використання фільтру у вигляді логічного виразу. Результат створюється за допомогою ключового слова where. Фільтр фактично вказує елементи для виключення з вихідної послідовності. У наступному прикладі повертаються лише customers, що знаходяться в Москві:
var queryMoscowCustomers = from cust in customers
where cust.City == "Москва"
select cust;
Для використання потрібного числа виразів фільтру в where можна використовувати знайомі логічні оператори C# AND і OR. Наприклад, для отримання лише замовників з Москви і з ім'ям Іван слід написати наступний код:
where cust.City=="Москва" && cust.Name == "Іван"
Для отримання замовників з Москви або Смоленську слід написати наступний код:
where cust.City == "Москва" || cust.City == "Смоленськ"
12.3.3. Впорядкування
Часто доцільно відсортувати повернені дані. Пропозиція orderby сортує елементи послідовності залежно від компаратора за умовчанням для сортованого типа. Наприклад, наступний запит може бути розширений для сортування результатів на основі властивості Name. Оскільки Name є рядком, порівняння за умовчанням виконується в алфавітному порядку від А до Я:
var queryMoscowCustomers3 =
from cust in customers
where cust.City == "Москва"
orderby cust.Name ascending
select cust;
Для впорядкування результатів в зворотному порядку від Я до А використовується пропозиція orderby.descending.
12.3.4. Угрупування
Пропозиція group дозволяє групувати результати на основі вказаного ключа. Наприклад, можна вказати, що результати мають бути згруповані по City так, щоб всі замовники з Москви або Смоленську виявилися в окремих групах. В цьому випадку ключем є cust.City.
Примітка. Для демонстрації даного принципу в наступних прикладах використовуються явні типи. Також можна використовувати неявну типізацію для custQuery, group і customer, дозволяючи компілятору визначити точний тип:
// queryCustomersByCity – це IEnumerable<IGrouping<string, Customer>>
var queryCustomersByCity =
from cust in customers
group cust by cust.City;
// customerGroup – це IGrouping<string, Customer>
foreach (var customerGroup in queryCustomersByCity)
{
Console.WriteLine(customerGroup.Key);
foreach (Customer customer in customerGroup)
{
Console.WriteLine(" {0}", customer.Name);
}
}
Коли запит завершується пропозицією group, результати представляються у вигляді списку із списків. Кожен елемент в списку є об'єктом, що має член Кеу і список елементів, згрупованих по цьому ключу. При ітерації запиту, що створює послідовність груп, необхідно використовувати вкладений цикл foreach. Зовнішній цикл виконує ітерацію кожної групи, а внутрішній цикл – ітерацію членів кожної групи.
Якщо необхідно посилатися на результати операції угрупування, можна використовувати ключове слово into для створення ідентифікатора, який можна буде запитувати. Наступний запит повертає лише ті групи, які містять більше двох замовників:
// custQuery – це IEnumerable<IGrouping<string, Customer>>
var custQuery =
from cust in customers
group cust by cust.City into custGroup
where custGroup.Count() > 2
orderby custGroup.Key
select custGroup;
