 
        
        - •Тема 1 Колекції Структури даних
- •Неузагальнені колекції
- •Деякі інтерфейси неузагальнених колекцій
- •Деякі класи неузагальнених колекцій
- •Узагальнені колекції
- •Тема 2 Файловий ввід-вивід Організація файлового вводу-виводу
- •Байтовий ввід-вивід у файл
- •Двійковий ввід-вивід у файл
- •Символьний ввід-вивід у файл
- •Організація роботи із файлами даних стандарту xml
- •Простір імен System.Xml
- •Класи XmlNode та XmlLinkedNode
- •Клас XmlDeclaration
- •Класи XmlComment та XmlAttribute
- •Клас XmlElement
- •Клас XmlDocument
- •Приклад
- •Тема 3 Делегати та події Клас delegate
- •Делегати в якості параметрів
- •Анонімні методи та узагальнені делегати System.Action, System.Func
- •Комбіновані делегати та шаблон «спостерігач»
- •Події: створення та обробка
МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ
ДЕРЖАВНИЙ ВИЩИЙ НАВЧАЛЬНИЙ ЗАКЛАД
«УЖГОРОДСЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ»
МАТЕМАТИЧНИЙ ФАКУЛЬТЕТ
Матеріали лекцій
з дисципліни «Програмування»
для студентів ІІ курсу спеціальності «Прикладна математика»
Модуль 3
Організація об’єктно-орієнтованих програм у мові С# та організація даних із використанням класів BCL.
Ужгород-2012
Програма модуля
| № | Тема | Кількість годин | 
| 1 | Колекції Організація абстрактних структур даних (простір імен System.Collections). Деякі інтерфейси неузагальнених колекцій (ICollection, IList, IDictionary). Деякі класи неузагальнених колекцій (Stack, Queue, ArrayList, Hashtable). Узагальнені колекції. | 2 | 
| 2 | Файловий ввід-вивід Організація файлового вводу-виводу (простір імен System.IO, клас Stream). Байтовий ввід-вивід у файл (клас FileStream). Двійковий ввід-вивід у файл (класи BinaryReader та BinaryWriter). Символьний ввід-вивід у файл (класи StreamReader та StreamWriter). Організація роботи із файлами даних стандарту XML (простір імен System.Xml, класи XMLElement та XMLDocument, класи XMLTextReader та XMLTextWriter). | 3 | 
| 3 | Делегати та події Клас delegate. Делегати в якості параметрів. Анонімні методи та узагальнені делегати System.Action, System.Func. Організація об’єктно-орієнтованих програм (комбіновані делегати та шаблон «спостерігач», визначення та реалізація подій). | 4 | 
Тема 1 Колекції Структури даних
Структура даних − програмна одиниця, яка дозволяє зберігати та обробляти множину (сукупність) однотипних або логічно-зв’язаних даних. Структура даних є програмною реалізацією деякої абстрактної структури даних. Найбільш поширені абстрактні структури даних − масив, список, стек, черга, бінарне дерево, хеш-таблиця, множина. Більшість із цих абстрактних структур даних передбачає динамічну зміну свого розміру − при необхідності у структуру даних можна додати новий елемент або видалити існуючий. Відповідні структури даних називають динамічними структурами даних.
Будь-яка програма призначена для обробки даних. Для різних задач необхідні різні способи збереження та обробки даних, а тому вибір структур даних повинен передувати створенню алгоритмів та ґрунтуватися на вимогах до функціональності та швидкодії програми. Вибір тієї чи іншої структури залежить від того, що потрібно робити з даними у програмі. Наприклад при необхідності часто вставляти та видаляти елементи із середини послідовності варто використовувати список, а не масив. Якщо ж включення елементів здійснюється здебільшого на початок послідовності − використовується стек. Тому вивчення та грамотне застосування структур даних є необхідними умовами створення ефективних програм.
Саме тому у бібліотеках більшості сучасних об’єктно-орієнтованих мов програмування присутні стандартні класи, які реалізують основні абстрактні структури даних. У мові C# такі класи називаються колекціями або контейнерами. Використання колекцій дозволяє скоротити строки розробки програм та підвищити їх надійність.
У бібліотеці .NET визначено багато стандартних класів, які реалізують більшість згаданих абстрактних структур даних. Основні простори імен, в яких реалізовані ці класи, − System.Collections, System.Collections.Specialized та System.Collections.Generic.
Неузагальнені колекції
У просторі імен System.Collections визначено неузагальнені колекції, які є структурами даних загального призначення − дозволяють маніпулювати сукупністю різнотипних об’єктів. Також у просторі імен System.Collections визначено ряд інтерфейсів (зокрема, тут визначені у же відомі нам інтерфейси IComparable, IComparer та IEnumerable, а також похідні від них інтерфейси) неузагальнених колекцій. Розгляд неузагальнених колекцій варто розпочати саме з деяких із цих інтерфейсів, оскільки вони визначають функціональні можливості, які є спільними для всіх класів неузагальнених колекцій.
Деякі інтерфейси неузагальнених колекцій
Інтерфейс ICollection. На цьому інтерфейсі побудовані всі неузагальнені колекції. У ньому оголошено основні методи та властивості для всіх неузагальнених колекцій. Він також є похідним від інтерфейсу IEnumerable (Що це нам дає?). Серед чотирьох членів, які визначені у інтерфейсі IСollection, відмітимо наступні:
| Елемент інтерфейсу ICollection | Призначення | 
| int Count { get; } | Повертає фактичну кількість елементів, які зберігаються в колекції на даний момент. Якщо значення властивості Count дорівнює нулю, то колекція вважається порожньою. | 
| void CopyTo(Array array, int index); | Копіює вміст колекції в масив array, починаючи із вказаного індекса index. Таким чином метод СоруTо() забезпечує у С# приведення колекції до стандартного масиву. | 
Інтерфейс IList. В інтерфейсі IList оголошується така поведінка неузагальненої колекції, яка дозволяє здійснювати доступ до її елементів за індексом (індексація елементів починається з нуля). Цей інтерфейс є похідним від інтерфейсів ICollection та IEnumerable. Крім методів, визначених у цих інтерфейсах, в інтерфейсі IList визначається ряд власних методів.
| Елемент інтерфейсу IList | Призначення | 
| object this[int index] { get; set; } | Цей індексатор служить для доступу до значення елемента колекції. Але його не можна використовувати для додавання в колекцію нового елемента. | 
| int Add(object value); | Додає об’єкт value у колекцію. Повертає позицію (індекс), у яку цей об’єкт було додано та -1 − у випадку, якщо елемент не було додано у колекцію. | 
| void Clear(); | Видаляє всі елементи із колекції. | 
| bool Contains(object value); | Повертає логічне значення true, якщо колекція містить об’єкт value, та логічне значення false − інакше. | 
| int IndexOf(object value); | Повертає індекс об’єкта value, якщо цей об’єкт міститься у колекції та повертає -1 − інакше. | 
| void Insert(int index, object value); | Вставляє у колекцію об’єкт value за індексом index. При цьому всі елементи, з цього індексу index і далі, зміщуються вперед. | 
| void Remove(object value); | Видаляє перше входження об’єкта value у колекції. Елементи, що перебували до цього за вилученим елементом, зміщуються назад на одну позицію. | 
| void RemoveAt(int index); | Видаляє із колекції об’єкт, розташований на позиції, що задається індексом index. Елементи, що перебували до цього за вилученим елементом, зміщуються назад на одну позицію. | 
Інтерфейс IDictionary. В інтерфейсі IDictionary визначається така поведінка неузагальненої колекції, яка дозволяє здійснювати доступ до її елементів за ключем. У колекції, що реалізує інтерфейс IDictionary, кожен елемент є парою “ключ-значення”. Як тільки подібна пара буде збережена, доступитися до неї можна за допомогою ключа. Інтерфейс IDictionary є похідним від інтерфейсів ICollection та IEnumerable.
| Елемент інтерфейсу IDictionary | Призначення | 
| object this[object key] { get; set; } | Цей індексатор служить для доступу до значення елемента колекції за ключем. | 
| void Add(object key, object value) | Додає у колекцію пару “ключ-значення”, що задаються параметрами key і value. Може генерувати помилку часу виконання класу System.ArgumentException. | 
| void Clear(); | Видаляє всі пари “ключ-значення” із колекції. | 
| bool Contains(object key); | Повертає логічне значення true, якщо колекція містить об’єкт key у якості ключа, а якщо ні, то − логічне значення false. | 
| void Remove(object key); | Видаляє з колекції елемент, ключ якого рівний значенню параметра key. | 
