Тольяттинский государственный университет (Росдистант), ТГУ. Программирование на .Net (ДотНет) 2 (11215). Практические задания 1-6. Решение.
Для Росдистант имеются и другие готовые работы. Пишем уникальные работы под заказ. Помогаем с прохождением онлайн-тестов. Пишите в ЛС (Ксения).
Проверяемое задание № 1
Тема 1. Обработка исключений
Лекция 1.1. Обработка исключений
Цель работы
Сформировать навыки использования конструкций try/catch/finally, позволяющих реализовать в приложениях структурированную обработку исключений, и научиться разбираться в ключевых концепциях, которые позволяют создавать и вызывать исключения.
«Задание
- Разработать тип для работы с матрицами.
- Реализовать методы, позволяющие выполнять операции сложения, вычитания и умножения матриц, предусмотрев возможность их выпол-нения, в противном случае должно генерироваться исключение.
- Реализовать метод GetEmpty(…), который возвращает нулевую мат-рицу заданного размера.
- Объявить и применить свой тип исключения:
- в сообщении исключения должна быть информация о размерах матриц;
- размеры матриц должны быть в полях исключения;
- должны быть созданы разные виды конструкторов по примеру ба-зового исключения System.Exception.
- В качестве UI-интерфейса использовать консольное приложение с интерфейсом командной строки, WinForms или WPF-приложение.
- Создать unit-тесты для тестирования методов разработанного типа».
Проверяемое задание № 2
Тема 2. Управление ресурсами в .NET. Сборка мусора
Лекция 2.1. Управление ресурсами в .NET. Сборка мусора
Цель работы
Сформировать понимание принципа работы сборщика мусора и практические навыки использования класса GC. Научиться определять фи-нализатор и понимать необходимость управления ресурсами в управляе-мом коде, а также использовать паттерн dispose.
Задание
«Создать новый класс, который будет работать с текстовым файлом как «с массивом символов».
a) Создать конструктор, который принимает путь файла и длину «после-довательности символов», создает новый файл с «совместным доступом» к чтению и записи, а также в режиме чтения/записи и подготавливает файл: устанавливает длину и заполняет пробелами.
- Для создания потока файла использовать класс FileStream.
b) Сделать индексатор, который пишет/читает символ по указанному чис-ловому индексу.
- Для записи в файл использовать класс StreamWriter.
- Для чтения из файла использовать класс StreamReader.
c) Файл должен быть в ANSI-кодировке, которая используется по умолча-нию в операционной системе.
- Нужно найти подходящее свойство в классе System.Text.Encoding.
d) Реализовать метод Close() для освобождения ресурсов.
- В качестве примера реализации можно рассмотреть реализацию FileStream.Close().
e) Класс должен реализовывать интерфейс IDisposable.
f) Создать свойство Length, возвращающее длину «массива».
g) Доработать класс:
- «Создание нового файла»: в данный момент есть конструктор для со-здания файла, который нужно сделать «закрытым», чтобы нельзя было со-здать объект класса извне. Необходим открытый статический метод Create(…), который будет создавать через конструктор объект и возвра-щать созданный объект.
- «Чтение существующего файла»: нужно создать новый закрытый кон-структор, который будет открывать существующий файл и работать с ним. Следует сделать открытый статический метод Read(…), который будет со-здавать через соответствующий конструктор объект и возвращать создан-ный объект.
Приложение должно:
a) сохранить в файл строку вида «[01] Привет мир!» с использова-нием созданного класса; освободить ресурсы с применением try/finally;
b) с помощью созданного класса открыть созданный файл (пункт а) и изменить в нём один символ, чтобы в файле получилось «[02] Привет мир!»; освободить ресурсы с применением using».
Проверяемое задание № 3
Тема 3. Работа с файловой системой
Лекция 3.1. Работа с файловой системой
Цель работы
Сформировать навыки применения классов, обеспечивающих взаи-модействие с файлами и каталогами, потоковых классов .NET Framework, позволяющих работать с различными данными и источниками данных, а также навыки использования общих диалоговых окон файловой системы.
Задание
1. Разработать WPF-приложение, которое может использоваться для от-крытия, отображения, редактирования и, если это необходимо, сохра-нения измененного содержимого текстовых файлов. Приложение долж-но быть простым в использовании и включать в себя полную обработку исключений.
2. Создать unit-тесты для тестирования разработанного приложения.
Проверяемое задание № 4
Тема 4. Делегаты и события
Лекция 4.1. Делегаты и события
Цель работы
Сформировать понимание назначения делегатов и навыки их исполь-зования для отделения операций от метода реализации. Научиться исполь-зовать лямбда-выражения для определения анонимного метода, объяснять назначение событий и уметь их использовать в приложениях.
«Задание
1. Разработать класс для имитации часов с обратным отсчетом (таймер), реализующий возможность по истечении назначенного времени (коли-чество секунд ожидания проставляется пользователем) передавать со-общение любому подписавшемуся на событие типу.
2. Для создания эффекта ожидания использовать метод Thread.Sleep про-странства имен System.Threading.
3. Добавить возможность для пользователя задавать имя таймера.
4. Доработать тип делегата, чтобы получатель события мог определить «источник события» и вывести «имя таймера».
5. Добавить событие с отсчётом времени, в котором будет передаваться «сколько секунд осталось».
6. Предусмотреть возможность подписки на событие в нескольких клас-сах.
7. Создать три пользовательских класса, явно реализующих интерфейс ICutDownNotifier с методами Init() (подписывается на событие «тайме-ра») и Run (запускает «таймер»):
o первый обрабатывает события с помощью методов;
o второй обрабатывает события с помощью анонимных делегатов;
o третий обрабатывает события с помощью лямбда-выражений». [1]
8. «В итого каждый из пользовательских классов должен обрабатывать три события:
o «старт обратного отсчёта»;
o «осталось N секунд»;
o «обратный отсчёт завершён».
9. Каждый обработчик должен выводить «имя таймера» в обработчиках события.
10. Создать делегат «Началось время выполнения задания» с параметрами «Название задачи», «Сколько было отведено времени».
11. Конструктор каждого из пользовательских классов, реализующих ICutDownNotifier, должен принимать два параметра:
o созданный делегат «Началось время выполнения задания»;
o делегат «Закончилось время выполнения задания» на основе стандартного типа Action<T> с параметрами «Название задачи», «Сколько было отведено времени».
Эти делегаты нужно вызывать в соответствующее время». [1]
12. «Создать в приложении метод, который будет информировать о начале и завершении времени выполнения заданий, и передать их в конструкторы «пользовательских классов».
13. Приложение должно одновременно настроить и запустить все три таймера с названиями «Чтение задание», «Выполнение задания» и «Проверка задания перед отправкой».
o При этом надо работать с массивом объектов типа ICutDownNoti-fier.
14. В качестве UI-интерфейса использовать консольное приложение с ин-терфейсом командной строки, WinForms или WPF-приложение».
Проверяемое задание № 5
Тема 5. Коллекции и обобщенные типы
Лекция 5.2. Использование обобщенных методов и делегатов. Реализация пользовательского класса коллекции
Цель работы
Сформировать понимание и навыки использования базовых и обоб-щенных интерфейсов и классов коллекции .NET Framework. Научиться разрабатывать пользовательские классы коллекции, поддерживающие пе-речисление и инициализацию.
Задание
«Бинарное дерево поиска
1. Разработать тип «бинарное дерево поиска» для хранения результатов тестов, выполненных студентами, и их предоставления в упорядочен-ном виде.
2. Предусмотреть возможность хранения данных любого типа, поддержи-вающего сравнения.
3. Информация о студенте может содержать поля, хранящие имя студента, название теста, дату его прохождения и оценку теста для данного сту-дента.
- Необходимо реализовать обобщенный стандартный интерфейс, чтобы информацию об одном студенте можно было сравнить с информацией о другом студенте.
4. Предусмотреть следующие конструкторы «дерева»:
- принимающий объект стандартного обобщённого типа для сравнения двух объектов одного типа и применяющий его для сравнения добавляемых в дерево элементов;
- принимающий объект типа стандартной обобщенной коллек-ции (не список!) и добавляющий элементы коллекции в дерево (пример смотрите в «исходниках» конструкторов типа List<T>);
- принимающий и коллекцию элементов для добавления в дере-во, и объект, с помощью которого будут выполняться сравне-ния.
Итого: если указан «компаратор», то он используется для сравнения элементов, в противном случае используется «срав-нение, реализованное внутри элемента».
5. Созданный класс «дерево» должен реализовывать обобщённый интер-фейс перечислителя. При реализации нужно применить «итератор» (ре-ализовать с помощью yield).
6. В «дереве» реализовать метод, который возвращает объект для итера-ции по дереву в обратном порядке.
Например, GetReversedEnumarator() (реализовать с помощью yield).
7. В качестве UI-интерфейса использовать консольное приложение с ин-терфейсом командной строки, WinForms или WPF-приложение. В при-ложении нужно:
- Применить созданное «дерево» для хранения чисел из целочис-ленного массива, при этом в дереве они должны храниться в порядке убывания.
- Добавить ещё несколько чисел в дерево.
- Вывести все числа «дерева» в том порядке, в котором они храняться в дереве.
- Применить созданное «дерево» для хранения результатов про-хождения тестов студентами, при этом элементы в дереве должны храниться в порядке убывания «оценок (баллов)» по тесту.
- Вывести информацию о студентах в том порядке, в котором они хранятся в дереве.
- Применить созданное «дерево» для хранения строк:
- Строки добавить из списка строк.
- Вывести строки в обратном порядке, используя метод «де-рева», который возвращает «перечислитель» для прохода «дерева» в обратном порядке».
Проверяемое задание № 6
Тема 6. Введение в LINQ
Лекция 6.2. Построение динамических запросов и выражений LINQ
Цель работы
Сформировать понимание фундаментальных концепций и возможно-стей LINQ .NET Framework и научиться, используя LINQ, абстрагировать механизм, используемый приложением для запроса данных, от кода при-ложения и строить динамические запросы LINQ с помощью типов про-странства имен System.Linq.Expressions .NET Framework.
Задание
1. Написать расширяющий метод, который определяет сумму элементов массива.
2. Написать расширяющий метод, который определяет, является ли строка положительным целым числом. Методы Parse и TryParse не использовать.
3. Написать методы поиска элемента в массиве (например, поиск всех по-ложительных элементов в массиве) в виде:
- метода, реализующего поиск напрямую;
- метода, которому условие поиска передается через делегат;
- метода, которому условие поиска передается через делегат в виде анонимного метода;
- метода, которому условие поиска передается через делегат в виде лямбда-выражения;
- LINQ-выражения.
Сравнить скорость выполнения вычислений.