Використання інтерфейсів

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

Розмір файлу: 56.59 KB

Роботу скачали: 2 чол.

Якщо ця робота Вам не підійшла внизу сторінки є список схожих робіт. Так само Ви можете скористатися кнопкою пошук

Лекція 11 ВИКОРИСТАННЯ ІНТЕРФЕЙСІВ

11.1 Поняття інтерфейсу

Слово "інтерфейс" - багатозначне, і в різних контекстах воно має різний зміст. Існує поняття програмного або апаратного інтерфейсу, але в більшості випадків слово інтерфейс асоціюється з деякою зв'язком між об'єктами або процесами. У даній лекції мова йде про поняття інтерфейсу, що стоїть за ключовим словом interface. В такому розумінні інтерфейс - це окремий випадок класу.

Інтерфейс являє собою повністю абстрактний клас, всі методи якого абстрактні.

Від абстрактного класу інтерфейс відрізняється деякими деталями в синтаксисі і поведінці.

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

Відмінність в поведінці полягає в більш жорстких вимогах до нащадків. Клас, що успадковує інтерфейс (інтерфейсний клас), зобов'язаний повністю реалізувати всі методи інтерфейсу. У цьому відмінність від класу, що посяде абстрактний клас, де нащадок може реалізувати лише деякі методи батьківського абстрактного класу, залишаючись абстрактним класом.

Важлива відмінність интерфейсного класу від звичайного класу полягає в тому, що він може успадковувати кілька батьківських інтерфейсів. Таким чином, в С # дозволено множинне спадкування, але тільки в інтерфейсних класах.

Батьківські інтерфейси перераховуються в списку за ім'ям класу і двокрапкою:

public interface INewClass: IInt1, IInt2. IIntN

Такого роду інтерфейсні класи зобов'язані утримувати реалізації всіх методів всіх батьківських інтерфейсів.

Зауважу, що інтерфейсний клас може успадковувати не тільки від інтерфейсів, але і від одного (і тільки одного!) Звичайного класу, по відношенню до якого він веде себе як звичайний спадкоємець, тобто може перевизначати його методи, додавати поля і т. Д.

Множинне спадщина потенційно пов'язане з можливістю конфлікту імен та наявністю загального батька. Конфлікт імен проявляється в тому, що різні батьківські інтерфейси можуть містити однойменні методи з однаковим синтаксисом.

Оскільки інтерфейсний клас зобов'язаний реалізовувати всі методи своїх батьківських інтерфейсів, виникає колізія, яку можна вирішити одним із таких способів.

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

Перейменування методів. Якщо реалізація однойменних методів повинна бути різною, методи перейменовуються.

Відзначимо ще одне важливе призначення інтерфейсів, що відрізняє їх від абстрактних класів. Абстрактний клас являє собою початковий етап проектування класу, який в майбутньому отримає конкретну реалізацію. Інтерфейси задають додаткові властивості класу. Кожен інтерфейс наділяє клас тих чи інших новою властивістю.

11.2 Синтаксис інтерфейсу

Загальний опис інтерфейсу, що включає необов'язкові елементи (вони виділені квадратними дужками), має наступний формат запису:

[Атрибути] [специфікатор] interface ім'я_класу [. батьки]

атрибути # 150; задають додаткову інформацію про клас;

специфікатор # 150; зазвичай визначають умова доступу до складових класу;

батьки # 150; батьківські інтерфейсні класи, які успадковує наш клас:

тіло класу # 150; визначає склад интерфейсного класу.

Якщо уважно подивитися на формат записи інтерфейсу, то можна помітити, що його формат дуже схожий на формат запису звичайного класу. Це пояснюється тим, що інтерфейс # 150; окремий випадок класу.

У бібліотеці платформи. NET є велика кількість інтерфейсів, наслідуючи які, класи отримують додаткові властивості.

Наприклад, інтерфейс IComparable задає метод порівняння об'єктів за принципом більше або менше, що дозволяє виконувати їх сортування.

Реалізація інтерфейсів IEnumerable і IEnumerator дає можливість переглядати (перебирати) вміст об'єкта за допомогою конструкції foreach, а реалізація інтерфейсу ICloneable # 151; клонувати об'єкти.

Кожен інтерфейс наділяє клас тими чи іншими новими можливостями. У цьому сенсі поле для розробки нових інтерфейсів практично нескінченно.

Наприклад, можна розробити інтерфейс для продажу # 150; покупки валюти відповідно до поточного курсу, інтерфейси для різних нарахувань комунальних послуг з урахуванням пільг і т.д.

В якості навчального прикладу опишемо інтерфейс, реалізація методів якого дозволить класу проводити деякі перетворення над музичною записом # 150; перетворюючи 7 нот і паузу в цифри від 0 до 7 і виконувати зворотні перетворення.

Як і будь-який навчальний приклад, він трохи штучний, оскільки наша головна задача зараз полягає в тому, щоб розглянути технологію створення і використання інтерфейсів.

Оголошуємо інтерфейс ItextNoti, що містить два методу # 150; кодування (словесний текст нот замінюється цифрами від 0 до 7) і декодування (текст, представлений цифрами від 0 до 7, замінюється словесним текстом нот).

Робота програми зображена на малюнку 11.1.

Використання інтерфейсів

малюнок 11.1 # 150; Використання интерфейсного класу

У наведеному прикладі показана технологія створення та використання інтерфейсу і інтерфейсного класу.

11.3 Використання стандартного інтерфейсу IEnumerable

На перший погляд переваг у вступі интерфейсного класу немає # 150; методи кодування і декодування можна розмістити безпосередньо в класі MyzikText.

Таким чином, наш клас повинен бути спадкоємцем інтерфейсів IEnumerable і IEnumerator.

Інтерфейсу IEnumerator включає одну властивість Object Current, яке повертає черговий перераховується об'єкт, і два методу # 150; bool MoveNext (), передвигающий Нумератор на наступний перераховується об'єкт, і метод void Reset (), який встановлює Нумератор на перший перераховується об'єкт.

Якщо в класі необхідно виконувати порівняння об'єктів, наприклад, при їх сортуванні, то такий клас слід оголосити спадкоємцем інтерфейсу IComparable. Цей інтерфейс має всього один метод CompareTo (object obj), який повертає цілочисельне значення, позитивне, негативне або рівне нулю, в залежності від виконання відносини "більше", "менше" або "так само".

public string Naz; // Назва і ціна товару

public int Cena;

public Tovar (string n, int c) // Конструкор товару

Схожі статті