
- •Д. Е. Турчин
- •Лабораторный практикум
- •Кемерово 2014
- •Предисловие
- •Xslt-процессоры.
- •1.2.2. Структура и основные элементы таблицы стилей xslt. Редакторы xslt Структура таблицы стилей xslt. Шаблоны преобразования.
- •Принятие решений и сортировка данных.
- •Выбор методов вывода. Связывание xml-документа с таблицей стилей xslt.
- •Работа с xslt в ms Visual Studio. Отладчик xslt.
- •1.2.3. Работа с xslt на платформе .Net Framework. Класс XmlCompiledTransform Работа с xslt на платформе .Net Framework. Класс XmlCompiledTransform.
- •1.3. Порядок выполнения работы
- •1.4. Контрольные вопросы
- •2.2.2. Понятие события. Объявление и обработка событий. Стандартные обработчики событий Понятие события. Объявление и обработка событий.
- •Стандартные обработчики событий в .Net Framework.
- •2.3. Порядок выполнения работы
- •2.4. Контрольные вопросы
- •3. Работа с интерфейсами в приложениях на языке c#
- •3.1. Цель и задачи работы
- •3.2. Основные теоретические сведения
- •3.2.1. Объявление и реализация интерфейсов Объявление интерфейса в c#. Сравнение интерфейсов и абстрактных классов.
- •Реализация интерфейса. Интерфейсные свойства и индексаторы.
- •Интерфейсы на диаграммах uml. Интерфейсы и отношение реализации.
- •3.2.2. Стандартные интерфейсы .Net Framework. Интерфейсы iComparable, iEnumerable и iEnumertor Стандартные интерфейсы .Net Framework. Интерфейс iComparable.
- •Интерфейсы iEnumerable и iEnumerator. Итераторы
- •Операции is и as.
- •3.3. Порядок выполнения работы
- •3.4. Контрольные вопросы
- •4. Основы работы с шаблонами grasp в приложениях на языке c#
- •4.1. Цель и задачи работы
- •4.2. Основные теоретические сведения
- •4.2.1. Проектирование классов на основе обязанностей. Основные шаблоны grasp Проектирование классов на основе обязанностей.
- •Шаблоны Information Expert и Creator.
- •Шаблоны Low Coupling и High Cohesion.
- •4.2.2. Работа с uml-моделями в Visual Studio Создание проектов моделирования в Visual Studio.
- •Разработка uml-схем классов.
- •Создание кода из uml-схем классов.
- •4.3. Порядок выполнения работы
- •4.4. Контрольные вопросы
- •5. Работа со структурными шаблонами GoF в приложениях на языке c#
- •5.1. Цель и задачи работы
- •5.2. Основные теоретические сведения
- •5.2.1. Понятие и виды структурных шаблонов GoF. Шаблон Адаптер Понятие и виды структурных шаблонов GoF. Шаблон Адаптер.
- •Реализация шаблона Адаптер на языке c#.
- •5.2.2. Шаблон Фасад Шаблон Фасад.
- •Реализация шаблона Фасад на языке c#.
- •5.3. Порядок выполнения работы
- •5.4. Контрольные вопросы
- •6. Работа с поведенческими шаблонами GoF на языке c#
- •6.1. Цель и задачи работы
- •6.2. Основные теоретические сведения
- •6.2.2. Поведенческие шаблоны проектирования. Диаграммы конечных автоматов. Шаблон Состояние Поведенческие шаблоны проектирования. Диаграммы конечных автоматов uml.
- •Шаблон Состояние.
- •6.2.1. Шаблоны Стратегия и Шаблонный метод Шаблон Стратегия.
- •Шаблонный метод.
- •6.3. Порядок выполнения работы
- •Операции запросов linq.
- •7.2.2. Анонимные типы. Расширяющие методы Анонимные типы. Расширяющие методы.
- •7.2.3. Понятие лямбда-выражения. Использование лямбда-выражений в запросах linq Понятие лямбда-выражения. Деревья выражений.
- •Применение лямбда-выражений в запросах linq.
- •7.3. Порядок выполнения работы
- •7.4. Контрольные вопросы
- •8.2.2. Осевые методы linq to xml. Модификация xml-документов с помощью linq to xml Осевые методы linq to xml. Использование xPath.
- •8.3. Порядок выполнения работы
- •8.4. Контрольные вопросы
- •9. Основы создания приложений wpf с использованием языка xaml
- •9.1. Цель и задачи работы
- •9.2. Основные теоретические сведения
- •9.2.1. Назначение и возможности wpf. Создание приложений wpf в Visual Studio
- •9.2.2. Особенности языка разметки xaml. Основные элементы xaml. Свойства и события в xaml
- •9.2.3. Основные элементы управления wpf. Размещение элементов управления. Панель Grid
- •9.2.4. Страничная навигация в приложениях wpf
- •9.3. Порядок выполнения работы
- •9.4. Контрольные вопросы
- •10. Основы привязки и форматирования данных в приложениях wpf
- •10.1. Цель и задачи работы
- •10.2. Основные теоретические сведения
- •10.2.1. Привязка данных wpf. Основные поставщики данных Общие сведения о привязке данных wpf.
- •10.2.2. Шаблоны данных Шаблоны данных.
- •10.3. Порядок выполнения работы
- •10.4. Контрольные вопросы
- •Список литературы Печатные издания.
- •Интернет-ресурсы.
- •Приложение п.1. Пример разработки xml-документа
- •П.2. Некоторые физические формулы и константы
3.2.2. Стандартные интерфейсы .Net Framework. Интерфейсы iComparable, iEnumerable и iEnumertor Стандартные интерфейсы .Net Framework. Интерфейс iComparable.
В библиотеке классов .NET определено множество стандартных интерфейсов, задающих желаемое поведение объектов. Например, интерфейс IComparable задаёт метод сравнения объектов по критерию больше или меньше, что позволяет выполнять их сортировку. Интерфейсы IEnumerable и IEnumerator дают возможность просматривать содержимое объекта с помощью цикла foreach. Реализация интерфейса ICloneable позволяет клонировать объекты.
В интерфейсе IComparable определен единственный метод CompareTo(object obj), возвращающий результат сравнения двух объектов – текущего и переданного ему в качестве параметра obj.
Метод должен возвращать:
• 0, если текущий объект и параметр равны;
• отрицательное число, если текущий объект меньше параметра;
• положительное число, если текущий объект больше параметра.
Интерфейсы iEnumerable и iEnumerator. Итераторы
Интерфейс IEnumerable определяет метод GetEnumerator, возвращающий объект типа IEnumerator, который можно использовать для просмотра элементов объекта.
Интерфейс IEnumerator задаёт три функциональных элемента:
• свойство Current, возвращающее текущий элемент объекта;
• метод MoveNext, передвигающий к следующему элементу объекта;
• метод Reset, устанавливающий в начало просмотра.
Для упрощения перебора в объекте используются средства, называемые итераторами.
Итератор представляет собой блок кода, задающий последовательность перебора элементов объекта.
Преимущество использования итераторов заключается в том, что для одного и того же класса можно задать различный порядок перебора элементов.
В теле итератора должен присутствовать оператор yield, имеющий следующий синтаксис:
return yield выражение; |
При выполнении итератора автоматически создаётся контейнер, в который добавляется элемент при каждом выполнении оператора yield. Порядок выполнения оператора yield определяет порядок перечислимости элементов контейнера.
Операции is и as.
При работе с объектом часто требуется проверить, поддерживает ли объект определённый интерфейс. Проверка может быть выполнена с помощью бинарной операции is.
Операция is определяет, совместим ли тип объекта, находящегося слева от ключевого слова is, с типом, заданным справа. Результат операции равен true, если объект можно преобразовать к заданному типу, и false в противном случае.
Недостатком использования операции is является то, что преобразование фактически выполняется дважды: при проверке и при собственно преобразовании.
Операция as выполняет преобразование к заданному типу, а если это невозможно, то формирует результат null.
❒ Пример 3.2. Работа со стандартными интерфейсами .NET Framework.
Требуется разработать проект библиотеки классов, содержащий следующие классы:
Car – представляет автомобили; реализует интерфейс IComparable;
Garage – представляет автомобильные гаражи; реализует интерфейс INumerable.
Сравнение экземпляров класса Car с помощью метода CompareTo() будем производить по значению свойства Probeg (пробег автомобиля, км).
В классе Garage должен быть реализован метод GetEnumerator(), возвращающий интерфейсный объект типа IEnumerator, который позволяет просматривать элементы массива carLot (состоит из экземпляров класса Car).
Дополнительно добавим в класс Garage метод CarsIterator(bool reverse), который возвращает элементы массива в прямом или обратном порядке в зависимости от значения параметра reverse.
Исходный код класса Car представлен в листингах 3.8 и 3.9, а код класса Garage – в листинге 3.10.
Листинг 3.8. Исходный код класса Car (часть 1) |
|
Листинг 3.9. Исходный код класса Car (часть 2) |
|
Листинг 3.10. Исходный код класса Garage |
|
Схема классов для полученной библиотеки классов показана на рис. 3.6.
Рис. 3.6. Схема классов для библиотеки классов
Для демонстрации работы с классами, реализующими стандартные интерфейсы, добавим в решение проект консольного приложения.
Исходный код класса Program консольного приложения показан в листинге 3.11.
Листинг 3.11. Исходный код класса Program |
|
Результат работы консольного приложения показан на рис. 3.7. ❒
Рис. 3.7. Работа консольного приложения