- •Парадигми програмування
- •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. Основні парадигми теоретичного програмування
- •Основна література
- •Додаткова література
1.1 Джерело даних
У попередньому прикладі джерелом даних був масив, тому він неявно підтримує універсальний інтерфейс IEnumerable<(Of <(T>)>). Це означає, що до нього можна виконувати запити з LINQ. Запит виконується в операторі foreach, і оператору foreach потрібний інтерфейс IEnumerable або IEnumerable<(Of <(T>)>). Типи, які підтримують IEnumerable<(Of <(T>)>) або похідні інтерфейси, такі як універсальний інтерфейс IQueryable<(Of <(T>)>), називаються запрошуваними типами.
Інтерфейс це повністю абстрактний клас, всі методи якого абстрактні (не містять реалізації).
Якщо клас можна розглядати як деякий контейнер об'єктів перечислення, то для того, щоб клас міг повертати ці об'єкти в циклі for each, клас має бути спадкоємцем інтерфейсу IEnumerable або мати в своєму складі ітератори - методи, які повертають результат типа IEnumerable.
Для запрошуваного типа, як джерело даних LINQ, не потрібні зміни або спеціальна обробка. Якщо джерело даних ще не знаходиться в пам'яті у вигляді запрошуваного типа, постачальник LINQ повинен представити його як такий. Наприклад, LINQ to XML завантажує XML-документ в запрошуваний тип XElement:
// Створення джерела даних з XML-документа, використовуючи System.Xml.Linq
XElement contacts = XElement.Load(@"c:\myContactList.xml");
Використовуючи LINQ to SQL, спочатку вручну або за допомогою конструктора об'єктів створюється об'єктно-реляційне зіставлення в режимі розробки. Потім можна написати запити до об'єктів, а під час виконання LINQ to SQL здійснюватиме взаємодію з базою даних. У наступному прикладі Customer представляє певну таблицю в базі даних, а Table<Customer> підтримує універсальний інтерфейс IQueryable<(Of <(T>)>), похідний від IEnumerable<(Of <(T>)>):
// Створення джерела даних з бази даних SQL Server, використовуючи System.Data.Linq
DataContext db = new DataContext(@"c:\northwind\northwnd.mdf");
1.2. Запит
Запит вказує, яку інформацію потрібно витягувати з джерела або джерел даних. При необхідності, запит також вказує спосіб сортування, групування і формування цих відомостей перед поверненням. Запит зберігається в змінній запиту і ініціалізується виразом запиту. Аби спростити написання запитів, в C# з'явився новий синтаксис запиту.
Запит з попереднього прикладу повертає всі парні числа з масиву цілих чисел. Вираз запиту містить три ключові слова: from, where і select. Слово from вказує джерело даних, where застосовує фільтр, а select вказує тип результату. Важливо, що в LINQ сама змінна запиту не виконує дій і не повертає жодних даних. Вона просто зберігає відомості, необхідні для надання результатів при подальшому виконанні запиту.
1.3. Виконання запиту
Виконання запиту розділяють на відкладене і примусове (негайне).
Як вже говорилося раніше, сама змінна запиту лише зберігає команди запиту. Фактичне виконання запиту відкладається до виконання ітерації змінної запиту в операторі foreach. Цю концепцію називають відкладеним виконанням, вона показана в наступному прикладі:
// Виконання запиту
foreach (int num in numQuery)
{
Console.Write("{0,1} ", num);
}
Оператор foreach є також місцем, де витягуються результати запиту. Наприклад, в попередньому запиті змінна ітерації num містить кожне (по черзі) значення в послідовності, що повертається.
Запити, що виконують статистичні функції над діапазоном вихідних елементів, повинні спочатку виконати ітерацію цих елементів. Прикладами таких запитів є Count, Мах, Average і First. Вони виконуються без явного оператора foreach, оскільки сам запит повинен використовувати foreach для повернення результату. Зверніть увагу, що такий тип запитів повертає одне значення, а не колекцію IEnumerable. Наступний запит повертає кількість парних чисел у вихідному масиві:
var evenNumQuery =
from num in numbers
where (num % 2) == 0
select num;
int evenNumCount = evenNumQuery.Count();
Аби примусово викликати негайне виконання будь-якого запиту і кешувати його результати, можна викликати метод ToList<(Of <(TSource>)>) або ToArray<(Of <(TSource>)>):
List<int> numQuery2 =
(from num in numbers
where (num % 2) == 0
select num).ToList();
// або так:
// numQuery3 – це було int[]
var numQuery3 =
(from num in numbers
where (num % 2) == 0
select num.ToArray();
Можна також примусово виконати запит, помістивши цикл foreach відразу після вираження запиту. Проте виклик ToList або ToArray також кэширует всі дані в одній колекції об'єктів.
