Вы находитесь на странице: 1из 2

C# и .

Net Framework – Часть 1 – Основы программирования и проектирования

Урок 8. Интерфейсы в шаблонах


проектирования
О чем урок
В уроке рассмотрены примеры использования интерфейсов и полиморфизма в задачах
проектирования классов.

Вы узнаете, как работает цикл foreach изнутри и что такое итератор. Вы сможете
усовершенствовать свои классы списков и реализовать для них этот механизм.

При рассмотрении темы итераторов вы узнаете о дружбе классов, вложенных классах и


ковариантных generic интерфейсах. Это тонкие моменты языка, о которых знают немногие
разработчики.

На примере сортировки вы научитесь выделять семейство алгоритмов и делать их


взаимозаменяемыми для класса-клиента.

После прохождения урока вы сможете взять на вооружение еще два шаблона проектирования:
«Итератор» и «Стратегия».

Самоконтроль
 цикл foreach
 интерфейсы для foreach
 итератор
 обход контейнеров с помощью итераторов
 ковариантный generic интерфейс
 объявление свойства для доступа по индексу
 быстрая реализация интерфейса в Visual Studio
 дружба классов (C++)
 вложенные классы (C#)
 реализация итератора
 инициализация итератора
 паттерн «Итератор»
 паттерн «Стратегия»
 инкапсуляция алгоритма
 интерфейс стратегии
 реализация стратегии
 сортировка пузырьком
 техника сравнения элементов
 стратегия по умолчанию
 подмена стратегии

Школа Программирования, Ляпин Дмитрий, 2011 г. Страница 1


C# и .Net Framework – Часть 1 – Основы программирования и проектирования

 программирование в соответствии с интерфейсом, а не реализацией

Домашнее задание
Продолжаем работу с собственными коллекциями.

1. Требуется подготовить списки для обхода циклом foreach. Интерфейс IMyList должен
наследовать IEnumerable<T> (generic интерфейс), а списки реализовывать его. Классы
итераторов следует сделать вложенными в классы вектора и связного списка.

2. Необходимо добавить в класс тестирования списков метод, выполняющий обход


элементов с помощью цикла foreach. Сравните время выполнения для вектора и связного
списка.

3. Требуется пополнить интерфейс списка возможностью сортировки. Сортировка должна


быть реализована с помощью паттерна «Стратегия». Классы списков должны
использовать по умолчанию некую реализацию сортировки, но должна быть возможность
ее заменить.

Списки не должны «знать» о конкретных реализациях сортировки, кроме той, которая


используется по умолчанию. Стратегии сортировки не должны «знать» о конкретных
реализациях списка.

4. Необходимо реализовать любой алгоритм сортировки, который будет работать быстрее,


чем сортировка пузырьком. Требуется провести сравнительное тестирование на векторе и
связном списке.

Школа Программирования, Ляпин Дмитрий, 2011 г. Страница 2