Скачать презентацию I NET Framework Порівняльний аналіз мов C Скачать презентацию I NET Framework Порівняльний аналіз мов C

1 NET Framework.pptx

  • Количество слайдов: 50

I . NET Framework Порівняльний аналіз мов C++ та C# ПРОГРАМУВАННЯ 2 курс, ф-т I . NET Framework Порівняльний аналіз мов C++ та C# ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 1

. NET Framework В 2000 році компанія Microsoft анонсувала платформу. NET, яка була випущена . NET Framework В 2000 році компанія Microsoft анонсувала платформу. NET, яка була випущена компанією Microsoft в 2002 році. Програмна платформа. NET Framework є однією з компонент системи Windows. Платформа. NET Framework призначена для створення цілісного об’єктно-орієнтованого середовища програмування, що допускає різні варіанти реалізації: код може зберігатися та виконуватися локально, або розповсюджуватися через Інтернет, а виконуватися локально, або віддалено. Платформа. NET Framework забезпечує безпеку виконання коду в середовищі (в тому числі коду, створеного невідомим розробником чи розробником з частковою довірою). Ця платформа уніфікує роботу розробників застосувань Windows та веб- застосувань. . NET Framework надає середовище виконання коду, яке дозволяє звести до мінімуму кількість конфліктів пов’язаних з розгортанням ПЗ та керуванням версіями. Платформа. NET Framework складається з двох основних компонент: середовища CLR (Common Language Runtime загальне середовище виконання мов) та Framework Class Library (FCL) бібліотеки класів. NET Framework. ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 2

Середовище CLR (Common Language Runtime загальне середовище виконання мов) – це компонент пакету. NET Середовище CLR (Common Language Runtime загальне середовище виконання мов) – це компонент пакету. NET Framework, «віртуальна машина» , на якій виконуються всі мови платформи. NET Framework. Код, створений для середовища, називається керуємим кодом. Будь який інший код називається некеруємим. CLR керує кодом під час його виконання, надає ключові служби, пов’язані з такими процесами, як керування пам’яттю, потоками та віддаленими операціями, контролює правильність коду, забезпечує безпеку типів, гарантує безпеку та стабільність застосувань, виконує, так званий, збір сміття (позбавляє програміста від турбот про звільнення та виділення пам’яті, що часто є причиною помилок). Ці функції включені в керуємий код, виконуваний в середовищі CLR. ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 3

Середовище CLR (продовження) Інструкції CLR визначаються об‘єктно-орієнтованою мовою CIL (Common Intermediate Language, загальна проміжна Середовище CLR (продовження) Інструкції CLR визначаються об‘єктно-орієнтованою мовою CIL (Common Intermediate Language, загальна проміжна мова). Код у мові CIL – це незалежний від процесора набір інструкцій, які, надають можливість використовувати традиційні машинні команди, пов’язані з виконанням арифметичних та логічних операцій, обробкою виключень, тощо. Цей код можна ефективно перетворювати в машинний код і в цей же час він забезпечує об’єктну підтримку, зокрема виклики методів об’єктів. Платформа. NET Framework може міститися на некеруємій компоненті, яка завантажує середовище CLR в свої процеси та ініціює виконання керує мого коду. Таким чином, створюючи середовище застосувань, в якому може виконуватися як керуємий так і некеруємий код. ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 4

Бібліотека класів Другою основною компонентою платформи. NET Framework є бібліотека класів Framework Class Library Бібліотека класів Другою основною компонентою платформи. NET Framework є бібліотека класів Framework Class Library (FCL). Ця бібліотека являє собою об’єктно-орієнтований набір типів, тісно пов’язаних з середовищем CLR, які можна використовувати для розробки застосувань. В цій бібліотеці містяться типи, базуючись на яких, ваш керуємий код може виводити потрібні функції. Оскільки бібліотека класів є об’єктно-орієнтованою, типи в. NET Framework дозволяють виконувати низку стандартних операцій програмування: керування рядками, збір даних, підключення до БД, доступ до файлів. В бібліотеці також є типи, що підтримують різноманітні спеціалізовані ситуації. Платформу. NET Framework можна використовувати для створення наступних застосувань та служб: • консольні застосування; • застосування з графічним інтерфейсом користувача для системи Windows (Windows Forms); • застосування ASP. NET; • мобільних застосувань; • веб-служб XML; • служб Windows. ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 5

Загальний огляд мови C# В 2000 році компанія Microsoft анонсувала платформу. NET та нову Загальний огляд мови C# В 2000 році компанія Microsoft анонсувала платформу. NET та нову мову програмування, яка отримала назву C# (CSharp) C# була розроблена в 1998 -2001 роках групою інженерів під керівництвом Андерса Гейлсберга в компанії Microsoft як мова розробки застосувань для платформи Microsoft. NET Framework. C# це строго типізована об’єктно-орїєнтована мова. Її синтаксис близький до C++ та Java, але має і низку особливостей. Програми на C# пишуться виключно для Microsoft. NET Framework. Це, зокрема, ознає, щоб на машині, де виконуватиметься код була встановлена версія Microsoft. NET Framework на якій було скомпільовано програму. Результатом компіляції програми написаної мовою C# є не бінарний код, а набір інструкцій на MSIL (Microsoft Intermediate Language), що виконується середовищем CLR. ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 6

Загальний огляд мови C# Якщо порівнювати C# з C чи C++, то результатом компіляції Загальний огляд мови C# Якщо порівнювати C# з C чи C++, то результатом компіляції останніх є набір бінарних інструкцій для мікропроцесора (CPU). Код C чи C++ має доступ до низькорівневих ресурсів. Це надає більше можливостей програмістам, але і накладає на них більшу відповідальність (код C# також може явно використовувати роботу з показчиками, але це вимагає зазначення спеціальних ключового слова unsafe, або спеціальних налаштувань компілятора). Виходячи з вищесказаного, зрозуміло що мови C++ та C# мають дещо різні галузі застосування. Зокрема, мовою C# не можна зовсім зручно писати такі програми, як драйвер пристрою. Але C# дозволяє більш економічно реалізувати прикладні клієнтські програми. Подібно до C++, C# є строго типізованою мовою. В C++ типи, спільні для декількох модулів, розміщуються в файлах заголовків. В C# таких файлів немає, а для отримання таких відомостей служать метадані. ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 7

Метадані — це дані в двійковому форматі з описом програми, що зберігаються, або в Метадані — це дані в двійковому форматі з описом програми, що зберігаються, або в виконуваному (PE) файлі середовища CLR, або в пам’яті. При компіляції коду в PE-файл, метадані розміщуються в одну частину файла, а код перетворюється в проміжну мову MSIL (Microsoft Intermediate Language) і розміщується в іншу частину файла. В метаданих дається опис кожного члена та типа, які визначені в модулі чи зборці та на які в них є посилання. При виконанні коду середовище виконання завантажує метадані в пам’ять та звертається до них для отримання відомостей про класи та інші елементи коду. ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 8

Загальна структура C#-програми Програма мовою C# може складатися з одного чи декількох файлів. Кожен Загальна структура C#-програми Програма мовою C# може складатися з одного чи декількох файлів. Кожен файл може містити нуль або більше просторів імен (namespace). Простір імен може включати такі елементи, як класи, структури, інтерфейси, порядкові типи і делегати, а також інші простори імен. Далі наведено скелетну структуру C#-програми. Складові C#-програми буде розглянуто далі. ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 9

Приклад 1. // структура C#-програми using System; namespace Your. Namespace { class Your. Class Приклад 1. // структура C#-програми using System; namespace Your. Namespace { class Your. Class { } struct Your. Struct { } interface IYour. Interface { } delegate int Your. Delegate(); ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ enum Your. Enum Омельчук Л. Л. { } namespace Your. Nested. Namespace { struct Your. Struct { } } class Your. Main. Class { static void Main(string[] args) { //Точка входу. . . } } } 10

Вирази в C# практично ідентичні виразам в C++. Зазначимо деякі операції C# (переважно відмінні Вирази в C# практично ідентичні виразам в C++. Зазначимо деякі операції C# (переважно відмінні від операцій C та C++) з їх пріоритетами (пріоритет всередині однієї групи зверху вниз, в одному рядку операції з однаковим пріоритетом). Операції C++, переважно, зберігаються. Група операцій Операції Первинні new T(…), new T[…] typeof(T) Опис Створення об’єкту і масиву. Отримання об’єкта System. Type для T. checked(x), unchecked(x) Унарні (T) x Відношення та x is T перевірки типа x as T Обчислення виразу в керуємому та некеруємому середовищі. Операція приведення true, якщо x може бути перетворено в T, інакше – false. Повертає x, перетворене в T, або null, якщо перетворення неможливе. Умовні Повертає y, якщо x істинне, інакше – z. x? y: z ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 11

Точка входу Метод Main в C# є точкою входа EXE-програми, в якій починається і Точка входу Метод Main в C# є точкою входа EXE-програми, в якій починається і завершується виконання програми. Як і в C++ для бібліотек та служб цей метод в якості точки входу не потрібен. Він оголошується не так, як функція main в C++. В C# при оголошенні ім’я метода пишеться з великої літери і цей метод є static. Крім того, в C# більш надійно реалізована попередня обробка аргументів командного рядка. Main оголошується всередині класа чи структури, повинен бути статичним. Main не обов’язково має бути відкритим (public), по замовчуванню він private. Клас чи структура, що його включає не обов’язково повинна бути статичною (static). Як і функція main в C++ метод Main в C# може повертати тип void, або int. Метод Main може бути оголошеним з параметром string[], що містить аргументи командного рядка чи без нього. ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 12

Приклад 2. class Test. Class { static void Main(string[] args) { //кількість рядків вхідного Приклад 2. class Test. Class { static void Main(string[] args) { //кількість рядків вхідного командного рядка System. Console. Write. Line(args. Length); } } ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 13

Типи і змінні Кожна сутність в програмі C# є об’єктом, що знаходиться або в Типи і змінні Кожна сутність в програмі C# є об’єктом, що знаходиться або в стеці, або в керує мій кучі. Кожен метод визначено в оголошеннях класа чи структури. Навіть вбудовані типи такі як int, long double мають методи. Ключові слова вбудованих типів в C# відображаються на типи з простору імен System, що їх представляють. Наведемо перелік деяких вбудованих типів та відповідних їм типів в просторі імен System. ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 14

Типи і змінні (продовження) Тип C# sbyte short int long byte ushort uint ulong Типи і змінні (продовження) Тип C# sbyte short int long byte ushort uint ulong char bool float double decimal string object Розмір в бітах 8 16 32 64 (в С++ було 32) 9 16 32 64 16 8 32 64 128 - ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 15 Тип System. SByte System. Int 16 System. Int 32 System. Int 64 System. Byte System. Uint 16 System. Uint 32 System. Uint 64 System. Char System. Boolean System. Single System. Double System. Decimal System. String System. Object

Види типів В C# підтримується два види типів: типи значення та типи посилань. Типи Види типів В C# підтримується два види типів: типи значення та типи посилань. Типи значення. Вони характеризуються значенням. Екземпляри типів значень – єдиний вид екземплярів, які можуть розміщуватися в стеці. В кучі вони знаходяться, якщо є членами типів посилань. По замовчуванню вони копіюються за значенням при передачі у вигляді параметрів методам чи присвоюванні іншим змінним. До таких типів відносяться: вбудовані типи значень, порядковий тип (enum), структури (struct). До вбудованих типів значень відносяться: int, long, sbyte, short, byte, uint, ulong, ushort, bool, char, decimal, float, double. В C++ тип bool по суті являє собою ціле число. В C# тип bool не представляється іншими типами. ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 16

Види типів Типи посилань. Ці типи характеризуються посиланням. Вони визначаються в C# із застосуванням Види типів Типи посилань. Ці типи характеризуються посиланням. Вони визначаються в C# із застосуванням ключового слова class. Змінні, що використовуються ними, насправді є посиланнями на об’єкти з керуємої кучі. Можна сприймати їх як вказівники, які не потрібно розіменовувати. До типів посилань відносяться: вбудовані типи посилань, масиви, делегати, інтерфейси, класи. До вбудованих типів посилань відносяться object (базовий тип для всіх інших типів, синтаксично аналогічний object в C++), string (використовується для представлення рядкових значень). ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 17

Типи значень. enum Розглянемо деякі типи значень, відмінні від аналогічних типів в С++. Порядковий Типи значень. enum Розглянемо деякі типи значень, відмінні від аналогічних типів в С++. Порядковий тип (enum). Синтаксис його визначення аналогічний до C++, але в точці використання, потрібно повністю кваліфікувати значення з переліку, використовуючи ім’я типу цього переліку. Якщо не зазначено інакше, то всі порядкові типи базуються на типі int. Але в будь-якому разі в основі enum тип повинен бути цілочисельним, тобто одним з наступних: byte, short, ushort, int, uint, long, ulong. ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 18

Типи значень. Enum (продовження) Приклад 3. public enum Wage : long { Small, Medium=50, Типи значень. Enum (продовження) Приклад 3. public enum Wage : long { Small, Medium=50, Pretty_med, Large=90 } Константи Small, Medium, Pretty_med та Large мають значення відповідно 0, 51 та 90 ■ Для використання цього порядкового типу можна написати наступний код: Приклад 4. static void Main() { Wage wage = Wage. Small; System. Console. Write. Line(“Wage is {0}”, wage. To. String()); } ■ ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ 19 Омельчук Л. Л.

Типи значень. struct На відміну від C++, де структури і класи практично ідентичні між Типи значень. struct На відміну від C++, де структури і класи практично ідентичні між собою, в C# вони мають достатньо відмінностей. Так, структури в C# можуть реалізовувати інтерфейс, але вони не можуть наслідувати від іншої структури. З цієї причини члени структури неможна оголосити як protected. Крім того, структури не підтримують явні конструктори по замовчуванню (такі конструктори надаються по замовчуванню). Структури можуть містити конструктори, константи, поля, методи, властивості, індексатори, оператори, події та вкладені типи, однак, якщо потрібно кілька таких членів, то рекомендується використовувати тип class. ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 20

Типи значень. struct (продовження) Приклад 5. public struct My. Date { public int day; Типи значень. struct (продовження) Приклад 5. public struct My. Date { public int day; public int month; public int year; } ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 21

Типи посилань. string Розглянемо деякі типи посилань, відмінні від аналогічних типів в С++. В Типи посилань. string Розглянемо деякі типи посилань, відмінні від аналогічних типів в С++. В C# рядки – це об’єкти з підтримкою потужних методів пошуку. Об’єкт string являється впорядкованою колекцією об’єктів System. Char. Значенням об’єкту string є вміст цієї колекції. Об’єкт string є незмінним (доступним лише для читання). Методи, що використовуються для зміни цього об’єкта string насправді повертають новий об’єкт string, що містить змінені дані. На платформі. NET Framework об’єкт string може містити значення null, які вважаються елементом рядка, при визначенні його довжини. В C++ null є індикатором закінчення рядка. ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 22

Типи посилань. string (продовження) Для об’єктів класу string визначені такі операції: Операція = + Типи посилань. string (продовження) Для об’єктів класу string визначені такі операції: Операція = + == != [] += Дія Присвоювання. Конкатенація Рівність Нерівність Індексація Додавання Розглянемо деякі функціональні можливості класу string. Метод Compare Призначення Порівняння двох рядків. Метод перевантажено. Реалізації метода дозволяють порівнювати як рядки, так і підрядки. При цьому можна враховувати чи не враховувати регістр, особливості національного форматування дат, чисел, тощо. ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 23

Типи посилань. string (продовження) Compare. Ordinal Порівняння двох рядків. Метод перевантажено. Реалізації метода дозволяють Типи посилань. string (продовження) Compare. Ordinal Порівняння двох рядків. Метод перевантажено. Реалізації метода дозволяють порівнювати як рядки, так і підрядки. Порявнюються коди символів. Compare. To Порівнює даний екземпляр з заданим об’єктом чи рядком string та повертає ціле число, яке показує, чи розміщений заданий екземпляр перед, після чи на тій же позиції в порядку сортування, що і заданий об’єкт чи рядок string. Equals Визначає, чи дорівнюють значення двох об’єктів string. Ends. With Повертає true чи false в залежності від того, чи закінчується рядок заданою послідовністю. Starts. With Повертає true чи false в залежності від того, чи починається рядок заданою послідовністю. ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 24

Типи посилань. string (продовження) Index. Of Повертає індекс першого входження вказаного підрядка чи символа Типи посилань. string (продовження) Index. Of Повертає індекс першого входження вказаного підрядка чи символа в даний рядок. Index. Of. Any Повертає індекс першого входження в рядок символа з переліку. Last. Index. Of Повертає індекс останнього входження вказаного підрядка чи символа в даний рядок. Last. Index. Of. Any Повертає індекс останнього входження в рядок символа з переліку. Copy Створюється копія рядка. Copy. To Створює копію заданої кількості знаків починаючи з зазначеної позиції в цьому екземплярі до зазначеної позиції. Substrig Split Concat Join Виділяє підрядок в заданій позиції. Динамічний метод. Використовуючи роздільники, здійснює розділення рядку на елементи (підрядки). Конкатенація рядків Метод перевантажено, допускається конкатенація довільної кількості рядків. Конкатенація масиву рядків в один рядок. При конкатенації між елементами масиву вставляються роздільники. Операція, задана методом Join, є оберненою до операції, заданої методом Split. ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ 25 Омельчук Л. Л.

Типи посилань. string (продовження) Insert Replace Вставляє підрядок в задану позицію. Заміняє підрядок в Типи посилань. string (продовження) Insert Replace Вставляє підрядок в задану позицію. Заміняє підрядок в заданій позиції на новий підрядок. Remove Pad. Left Видаляє підрядок в заданій позиції. Виконує заповнення потрібною кількістю рогаликів на початку рядка. Виконує заповнення потрібною кількістю рогаликів в кінці рядка. Видалення рогаликів на початку і в кінці рядка. Pad. Right Trim. End Trim. Start To. Lower Видалення рогаликів в кінці рядка. Видалення рогаликів на початку рядка. Повертає копію цього об’єкта string, переведену в нижній регістр, з урахуванням регістра поточної мови та регіональних параметрів. To. Lower. Invariant Повертає копію цього об’єкта string, переведену в нижній регістр, з урахуванням регістра інваріантної мови та регіональних параметрів. ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 26

Типи посилань. string (продовження) To. Upper Повертає копію цього об’єкта string, переведену в верхній Типи посилань. string (продовження) To. Upper Повертає копію цього об’єкта string, переведену в верхній регістр, з урахуванням регістра поточної мови та регіональних параметрів. To. Upper. Invariant Повертає копію цього об’єкта string, переведену в верхній регістр, з урахуванням регістра інваріантної мови та регіональних параметрів. Format Виконується форматування у відповідності заданими специфікаціями формату. Lenght Визначення кількості об’єктів Char в рядку. Chars Надання доступу до об’єктів Char Is. Normalized Перевіряє чи знаходиться заданий нормалізованій формі Юнікода. Normalize рядок з в Повертає новий рядок, текстове значення якого співпадає з даним рядком, а двійкове представлення ПРОГРАМУВАННЯ 2 курс, ф-т знаходиться в нормалізованій формі Юнікода. КІБЕРНЕТИКИ 27 Омельчук Л. Л.

Типи посилань. string (продовження) УВАГА! Рядки string в C# статичні (сталої довжини) при конкатенації Типи посилань. string (продовження) УВАГА! Рядки string в C# статичні (сталої довжини) при конкатенації рядків відбувається створення нового рядка з новим вмістом. Для роботи з динамічними рядками (рядками змінної довжини) краще користуватися класом String. Builder. ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 28

Типи посилань. string (продовження) Деякі методи консольного введення/виведення. Метод Console. Read читає наступний символ Типи посилань. string (продовження) Деякі методи консольного введення/виведення. Метод Console. Read читає наступний символ зі стандартного вхідного потоку. Приклад 6 int x; x = Console. Read(); ■ Метод Console. Read. Line зчитує рядок символів зі стандартного вхідного потоку. Приклад 7 string line; line = Console. Read. Line(); ■ Метод Console. Read. Key отримує наступний натиснутий користувачем символ чи функціональну клавішу. Console. Key. Info cki Console. Read. Key(); ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 29

Типи посилань. string (продовження) Console. Write. Line. Цей метод призначений для запису зазначених даних Типи посилань. string (продовження) Console. Write. Line. Цей метод призначений для запису зазначених даних з поточною прикметою кінця рядка в стандартний вихідний потік. Метод Console. Write. Line перевантажений. Крім того, існує метод Console. Write, який аналогічний до Console. Write. Line лише не завершує виведений рядок прикметою кінця рядка. Приклад 8 Console. Write (“Hello!!!”); Console. Write (); ■ ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 30

Console. Write. Line Ці методи перевантажені, наведемо перелік перевантажень, на прикладі методу Console. Write. Console. Write. Line Ці методи перевантажені, наведемо перелік перевантажень, на прикладі методу Console. Write. Line (для Console. Write маємо аналогічні перевантаження. ) public static void Write. Line(bool); public static void Write. Line(char[]); public static void Write. Line(decimal); public static void Write. Line(double); public static void Write. Line(int); public static void Write. Line(long); public static void Write. Line(object); public static void Write. Line(float); public static void Write. Line(string); public static void Write. Line(uint); public static void Write. Line(ulong); public static void Write. Line(string, object); ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 31

Console. Write. Line public static void Write. Line(string, params object[]); public static void Write. Console. Write. Line public static void Write. Line(string, params object[]); public static void Write. Line(char[], int); public static void Write. Line(string, object, object); Розглянемо форматування, в останніх двох функціях (найскладніші та водночас найбільш вживані випадки застосування методу Console. Write. Line). Console. Write. Line("{0} + {1} = {2}", 1, 4, 1 + 4); При виконанні цього рядка коду екран буде виведено рядок: 1+4=5 Для підстановки в рядок значень деяких змінних необхідно прописати всередині рядка в фігурних дужках порядковий номер елемента (відлік починається з нуля). ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 32

Console. Write. Line Можна використовувати додаткові можливості форматування. Наведемо рідні специфікації формату: Тип форматування Console. Write. Line Можна використовувати додаткові можливості форматування. Наведемо рідні специфікації формату: Тип форматування Код формату Currency (грошовий) C (приклад {0: C}) Currency (грошовий) C 1 (приклад {0: C 1}) Currency грошовий) C 8 (приклад {0: C 8}) Decimal (десятковий) D (приклад {0: D}) Decimal (десятковий) D 4 (приклад {0: D 4}) Decimal (десятковий) D 8 (приклад {0: D 8}) Exponential E (приклад {0: E}) (експоненційний) Exponential E 4 (приклад {0: E 4}) (експоненційний) Exponential E 9 (приклад {0: E 9}) (експоненційний) Fixed point (з F (приклад {0: F}) фіксованою точкою) Fixed point (з F 3 (приклад {0: F 3}) ПРОГРАМУВАННЯ курс, ф-т КІБЕРНЕТИКИ фіксованою2 точкою) 33 Омельчук Л. Л. Результат 1 234 567, 00 грн. 1 234 567, 0000 грн. 1234567 01234567 1, 234567 E+006 1, 2346 E+006 1, 234567000 E+006 1234567, 000

Console. Write. Line General (загальний) Number (числовий) G (приклад {0: G}) G 2 (приклад Console. Write. Line General (загальний) Number (числовий) G (приклад {0: G}) G 2 (приклад {0: G 2}) G 8 (приклад {0: G 8}) N (приклад {0: N}) N 0 (приклад {0: N 0}) Number (числовий) N 8 (приклад {0: N 8}) Percent (процент) Hexadecimal (шіснадцятковий) P (приклад {0: P}) P 1 (приклад {0: P 1}) 1234567 1, 2 E+06 1234567 1 234 567, 0000 123 456 700, 00% 123 456 700, 0% X (приклад {0: X}) 12 D 687 X 5 (приклад {0: X 5}) 12 D 687 X 8 (приклад {0: X 8}) 0012 D 687 ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 34

Масиви Зберігання групи зв’язаних елементів даних є необхідним для більшості програм. Для цього існує Масиви Зберігання групи зв’язаних елементів даних є необхідним для більшості програм. Для цього існує два основних способи: масиви та колекції. В C++ масив – це просто вказівник. В C# масиви – це колекції об’єктів одного типу, що включають методи та властивості. Тип масива є похідним від абстрактного базового типа Array. Можна запросити розмір довільного масиву за допомогою властивості Length. В C# використовуються індексатори, які перевіряють усі індекси, що використовуються для доступу до масиву. Синтаксис оголошення масиву в C# також відрізняється від C++: квадратні дужки в C#ставляться після типа масиву, а не змінної. Оскільки довжина масиву практично необмежена, вони можуть зберігати тисячі чи, навіть, мільйони об’єктів, але розмір масиву повинен бути заданий при його створенні. Масиви можуть бути одномірними, багатомірними та масивами масивів. Реалізує IEnumerable та IEnumerable, а отже, в C# в усіх масивах можна використовувати ітерацію foreach. ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 35

Масиви. Приклади оголошення Приклад //одномірні масиви int[] array. Name 1 = new int[5]; int[] Масиви. Приклади оголошення Приклад //одномірні масиви int[] array. Name 1 = new int[5]; int[] array. Name 2 = new int[] {1, 4, 3, 5, 9}; int[] array. Name 3 = {1, 4, 3, 5, 9}; //двомірні масиви int[, ] array. Name 4 = new int[2, 3]; int[, ] array. Name 5 = {{1, 2, 3}, {4, 5, 6}}; // масивів int[][] array. Name 6 = new int[2][]; ■ ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 36

Колекції Колекція – це довільний тип, який може містити набори елементів та реалізує інтерфейс Колекції Колекція – це довільний тип, який може містити набори елементів та реалізує інтерфейс IEnumerable чи IEnumerable. Для збереження набору даних C# надає багато можливостей. Кожен тип колекції призначений для певної мети. Наприклад, список List працює швидше за масив при додаванні елементів на початок чи в середину колекції. На відміну від масивів в колекціях група об’єктів може динамічно зростати та скорочуватися, що відповідає потребам програми. Колекція є класом, тому перед використанням нової колекції її потрібно оголосити. Якщо колекція містить елементи лише одного типа, то можна використовувати один з класів в просторі імен System. Collections. Generic. ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 37

Колекції (продовжнення) Якщо колекція містить елементи лише одного типа, то можна використовувати один з Колекції (продовжнення) Якщо колекція містить елементи лише одного типа, то можна використовувати один з класів в просторі імен System. Collections. Generic. Деякі класи простору імен System. Collections. Generic: Клас Опис Колекція пар ключ/значення, які Dictionary впорядковані за ключем. Список об’єктів, доступних за індексом. List Черга. Queue Колекція пар ключ/значення, які Sorted. List впорядковані за ключем на основі реалізації IComparer. Stack ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. Стек. 38

Колекції (продовжнення) Класи простору імен System. Collections. Concurrent слід використовувати якщо кілька потоків паралельно Колекції (продовжнення) Класи простору імен System. Collections. Concurrent слід використовувати якщо кілька потоків паралельно звертаються до колекції. Деякі класи простору імен System. Collections. Concurrent: Клас Опис Blocking. Collection, Потокобезпечна колекція, яка надає можливості блокування. Concurrent. Dictionary Потокобезпечна колекція пар ключ/значення. Concurrent. Queue Потокобезпечна черга. Concurrent. Stack Потокобезпечний стек. ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 39

Колекції (продовжнення) Класи в просторі імен System. Collections не зберігають елементи у вигляді типізованих Колекції (продовжнення) Класи в просторі імен System. Collections не зберігають елементи у вигляді типізованих об’єктів, а як об’єкти Object. Деякі класи простору імен System. Collections: Клас Array. List Hashtable Опис Динамічний масив об’єктів. Колекція пар ключ/значення, впорядковані за хеш-кодом ключа. Queue Stack Черга. Стек. ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 40 які

Колекції (продовжнення) Всюди, де це можливо слід використовувати універсальні колекції простору імен System. Collections. Колекції (продовжнення) Всюди, де це можливо слід використовувати універсальні колекції простору імен System. Collections. Generic чи колекції простору імен System. Collections. Concurrent. Універсальна колекція забезпечує безпеку типів, так, що дані інших типів не можуть бути в неї добавлені. А при отриманні елемента з такої колекції немає потреби визначати чи перетворювати їх тип. ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 41

Колекції (продовжнення) } Приклад } public class Test. Collections } { public static void Колекції (продовжнення) } Приклад } public class Test. Collections } { public static void Test. List() /*Надруковано: { Ivanov var students = new List(); Sidorov Petrov */ students. Add("Ivanov"); ■ students. Add("Petrov"); students. Insert(1, "Sidorov"); foreach (string name in students) { Console. Write. Line(name); ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 42

Колекції (продовжнення) Якщо вміст колекції відомий, можна використовувати ініціалі затор колекції. Приклад public class Колекції (продовжнення) Якщо вміст колекції відомий, можна використовувати ініціалі затор колекції. Приклад public class Test. Collections { public static void Test. List() { var students = new List{"Ivanov”, "Petrov", "Sidorov"}; foreach (string name in students) { Console. Write. Line(name); } } } /*Надруковано: Ivanov Petrov Sidorov ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ 43 */ Омельчук Л. Л.

Колекції (продовжнення) Для видалення елемента з колекції слід використовувати метод Remove. Приклад public class Колекції (продовжнення) Для видалення елемента з колекції слід використовувати метод Remove. Приклад public class Test. Collections { public static void Test. List() { var students = new List{"Ivanov”, "Petrov", "Sidorov"}; students. Remove("Petrov"); foreach (string name in students) { Console. Write. Line(name); } } } /*Надруковано: Ivanov Sidorov */ ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 44

Колекції (продовжнення) Видалення за умовою та сортування в лексикографічному порядку. Приклад public class Test. Колекції (продовжнення) Видалення за умовою та сортування в лексикографічному порядку. Приклад public class Test. Collections { public static void Test. List() { var test. List = new List{3, 4, 2, 1}; /*використовувати foreach тут НЕ МОЖНА. Слід використовувати for*/ for(var i = test. List. Count -1; i >= 0; i--) { if(test. List[i]>2) test. List. Remove. At(i); /*видалення за індексом*/ ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. } 45

Колекції (продовжнення) /*сортування в лексикографічному порядку*/ test. List. Sort(); foreach (int el in test. Колекції (продовжнення) /*сортування в лексикографічному порядку*/ test. List. Sort(); foreach (int el in test. List) { Console. Write. Line(el); } } } /*Надруковано: 1 2 */ ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 46

Ітератори Ітератор – це фрагмент кода, який повертає впорядковану послідовність значень одного типу. C# Ітератори Ітератор – це фрагмент кода, який повертає впорядковану послідовність значень одного типу. C# пропонує конструкцію, блок літератора, для полегшення задачі переліку колекції. Можна створити ітератор для класу, що повертає елементи в оберненому порядку, або виконує деяку операцію над кожним елементром перед тим, як літератор його поверне. При створенні ітератора для класау чи структури реалізація всього інтерфейса IEnumerator не вимагається. Коли компілятор знаходить ітератор, він автоматично створює методи Current, Move. Next та Dispose інтерфейса Ienumerator чи IEnumerator. ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 47

Ітератори (продовження) В коді ітератора використовується оператор yield return для повернення кожного елемента по Ітератори (продовження) В коді ітератора використовується оператор yield return для повернення кожного елемента по черзі. Ключеве слово yield break завершує ітерацію. В класі можна реалізувати декілька літераторів, кожен з яких повинен мати унікальне ім’я та може викликатися в клієнтському коді в операторі foreach: foreach(int x in Sample. Class. Iterator 2){}. Тип значення, що повертається повинен бути IEnumerable, IEnumerator, IEnumerable чи IEnumerator. В наступному прикладі клас Days. Of. The. Week є класом колекцій, який містить місяці року у вигляді рядків. Після кожної ітерації циклу foreach повертається наступний рядок в колекції. ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 48

Ітератори (продовження) Приклад public class Months. Of. Year : System. Collections. Ienumerable { string[] Ітератори (продовження) Приклад public class Months. Of. Year : System. Collections. Ienumerable { string[] months = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", " December"}; public System. Collections. IEnumerator Get. Enumerator() { for (int i = 0; i < months. Length; i++) { yield return months[i]; } } } ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 49

Ітератори (продовження) class Test. Months. Of. Year { static void Main() { // Create Ітератори (продовження) class Test. Months. Of. Year { static void Main() { // Create an instance of the collection class Months. Of. Year year = new Months. Of. Year(); // Iterate with foreach (string month in year) { System. Console. Write. Line(month + " "); } } }// На виході назви місяців на окремих рядках ПРОГРАМУВАННЯ 2 курс, ф-т КІБЕРНЕТИКИ Омельчук Л. Л. 50