Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Практична робота №5





Тема: Реалізація класів для збереження колекцій об’єктів ПО.

Мета заняття: Поглибити знання і закріпити практичні навички з реалізації колекцій об’єктів. Навчитись вибирати вид колекції у залежності від особливостей реалізації класу, навчитись реалізувати стандартні інтерфейси для класів з метою забезпечення можливості впорядкування об’єктів класів у колекціях.

Теоретичні відомості

Колекції

.NET представляє множину класів колекцій. Що собою представляє колекція? Це група елементів. У.NET колекції містять об'єкти, в тому числі і упаковані типи значень. Кожен об'єкт, що міститься в колекції, називається її елементом.

Розрізняють неузагальнені та узагальнені класи колекцій.

Основні неузагальнені класи колекцій знаходяться в просторі імен System.Collections.

У неузагальнених колекціях зберігаються дані типу object. Це зроблено для того щоб в цю колекцію можна було помістити змінні будь-якого типу. Така гнучкість в деяких випадках зручна, однак найчастіше в колекції зберігаються змінні одного і того ж типу. Через те що дані мають тип object, при отриманні даних з колекції треба вказуватися явне приведення типу. Можна легко допустити помилку приведення при витяганні даних з колекції, тобто помістити в колекцію змінну одного типу, а при витяганні виконати приведення до іншого типу. Така помилка не буде виявлена на етапі компіляції, а проявиться тільки при роботі програми.

У. Net Framework, починаючи з версії 2.0, також з'явилася можливість використовувати в якості параметрів типи даних. Ця можливість реалізується за допомогою generics.

З появою концепції generics в FCL практично для всіх класів неузагальнених колекцій з'явилися відповідні узагальнені. Ці класи, а також узагальнені інтерфейси знаходяться в просторі імен System.Collections.Generic.

Відмінність generic колекцією від неузагальнених колекцій полягає в тому, що замість типу даних object в generic колекціях використовується узагальнений параметр типу. При спеціалізації generic колекції вказується, який тип даних буде в цій колекції міститися. При першому виклику методу класу колекції ЛТ компілює реалізацію цього методу для конкретного параметра типу. У результаті ті методи і властивості, які в неузагальнених колекції використали тип даних object, в generic колекції використовують конкретний тип даних.

 

Класи узагальнених колекцій

 

Класи узагальнених колекцій визначаються в просторі імен System.Collections.Generic:

 

Dictionary <Tkey, TValue>

Зберігає пари "ключ-значення". Забезпечує такі ж функціональні можливості, як і неузагальнених клас Hashtable

 

HashSet <T>

Зберігає ряд унікальних значень, використовуючи хеш-таблицю

 

LinkedList <T>

Зберігає елементи в двонаправленому списку

 

List <T>

Створює динамічний масив. Забезпечує такі ж функціональні можливості, як і неузагальнених клас ArrayList

 

Queue <T>

Створює чергу. Забезпечує такі ж функціональні можливості, як і неузагальнених клас Queue

 

SortedDictionary <TKey, TValue>

Створює відсортований список з пар "ключ-значення"

 

SortedList <TKey, TValue>

Створює відсортований список з пар "ключ-значення". Забезпечує такі ж функціональні можливості, як і неузагальнених клас SortedList

 

SortedSet <T>

Створює відсортовану множину

 

Stack <T>

Створює стек. Забезпечує такі ж функціональні можливості, як і неузагальнених клас Stack

 

Реалізація інтерфейсу IComparable

 

Якщо потрібно впорядкувати колекцію, що складається з об'єктів визначається користувачем класу, за умови, що вони не зберігаються в колекції класу SortedList, де елементи розташовуються в відсортованому порядку, то в такої колекції повинен бути відомий спосіб сортування містяться в ній об'єктів. З цією метою можна, зокрема, реалізувати інтерфейс IComparable для об'єктів зберігається типу. Інтерфейс IComparable доступний у двох формах: узагальненої і неузагальнених.

Якщо потрібно впорядкувати об'єкти, що зберігаються в узагальненій колекції, то для цієї мети доведеться реалізувати узагальнений варіант інтерфейсу IComparable <T>. У цьому варіанті інтерфейсу IComparable визначається наведена нижче узагальнена форма методу CompareTo ():

int CompareTo (Т other)

У методі CompareTo() об'єкт, що викликає, порівнюється з іншим об'єктом other. Для сортування об'єктів по наростаючій конкретна реалізація даного методу повинна повертати нульове значення, якщо значення порівнюваних об'єктів рівні; додатне - якщо значення викликає об'єкта більше, ніж в об'єкта іншого other; і від’ємне - якщо значення об'єкта, що викликає, менше, ніж у іншого об'єкта other. А для сортування за спадною можна розвернути результат порівняння об'єктів. При реалізації узагальненого інтерфейсу IComparable <T> ім'я типу класу, що реалізує інтерфейс, зазвичай передається як аргумент типу.

 

Реалізація інтерфейсу IComparer

 

Цей інтерфейс визначає метод, який реалізується типом для порівняння двох об'єктів. Він використовується разом з методами List <T>.Sort і List <T>.BinarySearch. Він дозволяє настроїти порядок сортування колекції. У число класів, що реалізують цей інтерфейс, входять універсальні класи SortedDictionary <TKey, TValue> і SortedList <TKey, TValue>.

Реалізацією цього інтерфейсу за замовчуванням є клас Comparer <T>. Клас StringComparer реалізує цей інтерфейс для типу String.

Цей інтерфейс підтримує порівняння, виконувані при упорядкуванні. Тобто, коли метод Compare повертає 0, це означає, що два об'єкти упорядковано однаково. Реалізація порівнянь, виконуваних для встановлення точного рівності, забезпечується універсальним інтерфейсом IEqualityComparer <T>.

Рекомендується створювати похідні від класу Comparer <T>, а не реалізовувати інтерфейс IComparer <T>, тому що клас Comparer <T> надає явно реалізує інтерфейс метод IComparer.Compare і властивість Default, яке отримує компаратор за замовчуванням для об'єкта.

 

Date: 2015-09-02; view: 445; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.005 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию