- •Парадигми програмування
- •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.5. З'єднання
Операції з'єднання створюють зв'язки між послідовностями, неявно змодельованими в джерелах даних. Наприклад, можна виконати з'єднання для пошуку всіх замовників в Москві, що замовили продукти у постачальників в Парижі. У LINQ пропозиція join завжди працює з колекціями об'єктів, а не безпосередньо з таблицями бази даних. У LINQ немає необхідності використовувати join так часто, як в SQL, оскільки зовнішні ключі в LINQ представлені в об'єктній моделі властивостями, що містять колекцію елементів. Наприклад, об'єкт Customer містить колекцію об'єктів Order. Замість виконання з'єднання, доступ до замовлень можна отримати за допомогою точкової нотації:
from order in Customer.Orders...
12.3.6. Вибір (Проектування)
Пропозиція select створює результати запиту і задає форму або тип кожного елементу, що повертається. Наприклад, можна вказати, чи будуть результати складатися з повних об'єктів Customer, лише з одного члена, підмножини членів або деяких абсолютно інших типів, на основі обчислень або створення нових об'єктів. Коли пропозиція select створює що-небудь відмінне від копії вихідного елементу, операція називається проекцією. Використання проекцій для перетворення даних є потужною можливістю виразів запитів LINQ.
12.4. Перетворення даних з linq
LINQ використовується не лише для відбіру даних. Це також потужний засіб для перетворення даних. За допомогою запиту LINQ можна використовувати вихідну послідовність як вхідні дані і змінювати її різними способами для створення нової вихідної послідовності. Можна змінити саму послідовність, не змінюючи елементів, за допомогою сортування і угрупування. Але, можливо, найбільш потужною функцією запитів LINQ є можливість створення нових типів. Це виконується в пропозиції select. Наприклад, можна виконати наступні завдання:
Об'єднати декілька вхідних послідовностей в одну вихідну послідовність, яка має новий тип.
Створити вихідні послідовності, елементи яких складаються лише з одного або декількох властивостей кожного елементу у вихідній послідовності.
Створити вихідні послідовності, елементи яких складаються з результатів операцій, що виконуються над вихідними даними.
Створити вихідні послідовності в іншому форматі. Наприклад, можна перетворити дані з рядків SQL або текстових файлів в XML.
Це лише декілька прикладів. Зрозуміло, ці перетворення можуть об'єднуватися різними способами в одному запиті. Більш того, вихідні послідовності одного запиту можуть використовуватися як вхідні послідовності для нового запиту.
12.4.1. З'єднання декількох вхідних послідовностей в одну вихідну
Запит LINQ можна використовувати для створення вихідної послідовності, що містить елементи з декількох вхідних послідовностей. У наступному прикладі показано об'єднання двох структур даних, що знаходяться в пам'яті, але ті саміпринципи можуть застосовуватися для з'єднання даних з джерел XML, SQL або DataSet. Передбачимо, що існують два наступні типи класів:
class Student
{
public string First { get; set; }
public string Last {get; set;}
public int ID { get; set; }
public string City { get; set; }
public List<int> Scores;
}
class Teacher
{
public string First { get; set; }
public string Last { get; set; }
public int ID { get; set; }
public string City { get; set; }
}
У наступному прикладі показаний запит:
class DataTransformations
{
static void Main()
{
// Створення першого джерела даних
List<Student> students = new List<Student>()
{
new Student {First="Светлана"
Last="Омельченко"
ID=111
City="Москва"
Scores= new List<int> {5, 4, 5, 3}},
new Student {First="Кристина"
Last="Лаврова"
ID=112
City="Тюмень"
Scores= new List<int> {5, 3, 3, 4}},
new Student {First="Иван"
Last="Моргунов"
ID=113
City="Новосибирск"
Scores= new List<int> {5, 5, 5, 4}},
};
// Створення другого джерела даних
List<Teacher> teachers = new List<Teacher>()
{
new Teacher {First="Анна", Last="Виннер", ID=945, City = "Москва"}
new Teacher {First="Алексей", Last="Иващенко", ID=956, City = "Санкт-Петербург"}
new Teacher {First="Михаил", Last="Антонов", ID=972, City = "Смоленськ"}
};
// Створення запиту
var peopleInMoscow = (from student in students
where student.City == "Москва"
select student.Last)
Concat(from teacher in teachers
where teacher.City == "Москва"
select teacher.Last);
Console.WriteLine("Наступні студенти і вчителі живуть в Москві:");
// Виконання запиту
foreach (var person in peopleInMoscow)
{
Console.WriteLine(person);
}
Console.WriteLine("Натискуйте будь-яку кнопку для виходу!");
Console.ReadKey();
}
}
/* На виході буде отримано:
Наступні студенти і вчителі живуть в Москві:
Омельченко
Віннер
*/
Повний текст програми
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Link1
{
class Student
{
public string First { get; set; }
public string Last { get; set; }
public int ID { get; set; }
public string City { get; set; }
public List<int> Scores;
}
class Teacher
{
public string First { get; set; }
public string Last { get; set; }
public int ID { get; set; }
public string City { get; set; }
}
class Program
{
static void Main(string[] args)
{
// Створення першого джерела даних
List<Student> students = new List<Student>()
{
new Student {First="Светлана"
Last="Омельченко"
ID=111
City="Москва"
Scores= new List<int> {5, 4, 5, 3}},
new Student {First="Кристина"
Last="Лаврова"
ID=112
City="Тюмень"
Scores= new List<int> {5, 3, 3, 4}},
new Student {First="Иван"
Last="Моргунов"
ID=113
City="Новосибирск"
Scores= new List<int> {5, 5, 5, 4}},
};
// Створення другого джерела даних
List<Teacher> teachers = new List<Teacher>()
{
new Teacher {First="Анна", Last="Виннер", ID=945, City = "Москва"}
new Teacher {First="Алексей", Last="Иващенко", ID=956, City = "Санкт-Петербург"}
new Teacher {First="Михаил", Last="Антонов", ID=972, City = "Смоленськ"}
};
// Створення запиту
var peopleInMoscow = (from student in students
where student.City == "Москва"
select student.Last)
.Concat(from teacher in teachers
where teacher.City == "Москва"
select teacher.Last);
Console.WriteLine("Наступні студенти і вчителі живуть в Москві:");
// Виконання запиту
foreach (var person in peopleInMoscow)
{
Console.WriteLine(person);
}
Console.WriteLine("Натискуйте будь-яку кнопку для виходу!");
Console.ReadKey();
}
}
}
