
- •Тема 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. |