- •Парадигми програмування
- •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. Основні парадигми теоретичного програмування
- •Основна література
- •Додаткова література
2.2 Чисто об'єктно-орієнтовані і гібридні мови програмування
Розрізняють чисті і гібридні об'єктно-орієнтовані мови програмування. Чисті — це ті, які дозволяють використовувати тільки одну модель програмування — об'єктно-орієнтовану. Ви можете оголошувати класи і методи, але не можете визначити глобальні змінні і звичайні функції або процедури.
Прикладами “чистих” мов ООП сьогодні є Java, C#.
C++, Object Pascal і VB, VBA - гібридні мови, які дозволяють використовувати, при необхідності, процедурний підхід.
Корисним результатом наслідування стала велика кількість повторно-використовуваних об'єктів, зібраних у бібліотеки класів. Такі бібліотеки включають практично весь програмний інтерфейс операційної системи і дозволяють задіяти при програмуванні засоби більш високого рівня, ніж просто виклики функцій. Базові конструкції і класи можуть багатократно використовуватися при створенні нової програми. При цьому скорочується час розробки програм. Як приклад подібної системи можна навести бібліотеку Microsoft Foundation Class (MFC) для компілятора MS Visual C++.
Подібні реалізації є і в інших компіляторах. Далі детальніше розглянемо реалізацію об’єктно-ораєнтованої парадигми у мові C# та платформі MS.NET.
2.3. Реалізація принципів ооп в мові c#
Мова C# є чисто об'єктною мовою програмування. Це означає, що всі визначення змінних і процедур (методів) повинні знаходитися в тілі класу.
Для того, щоб можна було створювати програми в C# клас грає дві різні ролі: модуля і типу даних.
1. Клас – це модуль, архітектурна одиниця побудови програмної системи. Модульність побудови – основна властивість програмних систем. У ООП програмна система, що будується за модульним принципом, складається з класів, що є основним видом модуля. Модуль може не бути змістовною одиницею, його розмір і вміст визначається архітектурними міркуваннями, а не семантичними.
У мові C# дозволяється оголосити клас, який не розглядається як тип даних, і в якого зберігається єдина роль – роль модуля. Такий клас оголошується з модифікатором static. В такому класі можуть бути задані константи, лише статичні поля і лише статичні методи. У нього немає конструкторів в звичайному сенсі цього слова, що дозволяють створювати об'єкти – екземпляри класу.
Статичний клас не може розглядатися як тип даних.
Приклад – клас Program консольної програми зі статичним методом main.
Приклад Генерація масиву чисел і його сортування
class Program
{ // генератор даних
static void ValsGenerator(int[] Vals)
{
// Random - клас для генерації випадкових чисел
Random aRand = new Random();
// заповнення масиву
for (int i = 0; i < Vals.Length; i++)
Vals[i] = aRand.Next(100);
}
static void Main(string[] args)
{
const int N = 10;
int[] Data = new int[N];
ValsGenerator(Data);
Array.Sort(Data);
Console.WriteLine("Друк відсортованих даних");
for (int i = 0; i < Data.Length; i++)
Console.WriteLine("Data[" + i + "] = " + Data[i]);
Console.ReadLine();
}
}
Практично велику систему, що створюється колективом розробником, без розділення системи на модулі побудувати неможливо.
Модульність побудови – основний засіб боротьби із складністю системи.
2. Друга роль класу. Клас – це тип даних, який задає реалізацію деякої абстракції даних, характерної для проблемної області, для якої створюється програмна система.
Склад класу як типу даних визначається не архітектурними міркуваннями, а тією абстракцією даних, яку повинен реалізувати клас. Якщо ви створюєте клас Account, що реалізовує таку абстракцію, як банківський рахунок, то в цей клас не можна додати поля з класу Car, задаючого автомобіль. З іншого боку в цьому класі мають бути всі поля і всі методи, необхідні клієнтам класу, що оперують з банківськими рахунками.
В С# оголошення класів вводяться ключовим словом class.
Клас є основою для створення об'єктів. В класі визначаються дані і код, який працює з цими даними.
Методи і змінні, що складають клас, називаються членами класу. При визначенні класу оголошуються змінні, які він містить і код, який працює з цими змінними. Безпосередньо ініціалізація змінних в об'єкті (змінних екземпляра) виконується в конструкторі.
Об'єкти є екземплярами класу. Це динамічні об'єкти, вони створюються при виконанні програми в області видимості і знищуються після виходу з неї.
Формально клас описується таким чином:
Синтаксис опису класу:
тип доступу class им’я_класу {
тип_доступу тип им’я змінної1;
тип_доступу тип им’я змінної2;
…
тип_доступу тип_результату
им’я _методу1(список_параметрів) {тіло_методу}
}
де тип_доступу визначає область видимості класу. Для класів визначено такі модифікатори доступу:
public - клас доступний для інших компонент;
internal - клас видимий в середині цього компонента (збірки).
Для членів класу (даних і методів) визначені такі модифікатори доступу:
рublic - члени класу доступні за межами даного класу;
internal - члени класу доступні в межах однієї збірки;
рrotected - члени класу доступні усередині даного класу;
private - члени класу доступні тільки для інших членів даного класу.
За замовчанням застосовується модифікатор internal.
Членами класу можуть бути:
• Константи (const)
• Поля (field)
• Конструктори (у тому числі без параметрів)
• Деструктори
• Методи
• Властивості (property)
• Індексатори (властивості з параметрами)
• Події (event)
• Вкладені типи.
Звернення до поля класу виконується за допомогою операції доступу (крапка). Праворуч від крапки задається ім'я поля, зліва — ім'я екземпляра для звичайних полів або ім'я класу для статичних. Створення об’єкту класу виконується оператором new.
Синтаксис оператора new:
Ім’я класу об’єкт = new Ім’я класу();
Приклад. Визначається простий клас Demo і два способи звернення до його полів.
using System;
namespace ConsoleApplication1
{
class Demo
{
public int a = 1; // поле даних
public const double c = 1.66; // константа
public static string s = "Demo"; // статичне поле класу
double y; // закрите поле даних
}
class Class1
{ static void Main()
{
Demo x = new Demo(); // створення екземпляра класу Demo
Console.WriteLine( x.a ); // x.a - звернення до поля класу
Console.WriteLine( Demo.c ); // Demo.c - звернення до константи
Console.WriteLine( Demo.s ); // звернення до статичного поля
}
}
}
Питання
1. Які основні принципи об’єктно-орієнтованої парадигми?
2. У чому полягає сутність механізму абстракції даних?
3. Які парадигми підтримуються у С++?
4. Які концепції покладено в основу об’єктно-орієнтованої парадигми?
5. Назвіть основні відміни об’єктно-орієнтованого програмуванні від структурного.
6. Що таке об’єкт у об’єктно-орієнтованому програмуванні і як він використовується?
7. Що таке “властивість” об’єкта?
8. Що таке “наслідування”. Навести приклад
9. Що таке “поліморфізм” і стосовно якої парадигми він використовується?
10. Що таке “інкапсуляція” і до якої парадигми належить це поняття?
11. Яка особливість реалізації принципів ООП в C# порівняно з C++?
12. Які дві ролі класу в C#?
