| Общая информация » Каталог студенческих работ » ТЕХНИЧЕСКИЕ ДИСЦИПЛИНЫ » Информатика, программирование, базы данных |
| 28.01.2026, 23:54 | |
Проверяемое задание № 1 Тема 1. Обработка исключений Лекция 1.1. Обработка исключений Цель работы Сформировать навыки использования конструкций try/catch/finally, позволяющих реализовать в приложениях структурированную обработку исключений, и научиться разбираться в ключевых концепциях, которые позволяют создавать и вызывать исключения. Задание · Разработать тип для работы с матрицами. · Реализовать методы, позволяющие выполнять операции сложения, вычитания и умножения матриц, предусмотрев возможность их выполнения, в противном случае должно генерироваться исключение. · Реализовать метод GetEmpty(…), который возвращает нулевую матрицу заданного размера. · Объявить и применить свой тип исключения: - в сообщении исключения должна быть информация о размерах матриц; - размеры матриц должны быть в полях исключения; - должны быть созданы разные виды конструкторов по примеру базового исключения System.Exception. · В качестве UI-интерфейса использовать консольное приложение с интерфейсом командной строки, WinForms или WPF-приложение. · Создать unit-тесты для тестирования методов разработанного типа». [2] Рекомендации по выполнению Старайтесь обрабатывать только известные вам исключения. Если вы все же обрабатываете все исключения, то или, проведя необходимую обработку, генерируйте исключение повторно, чтобы его могли обработать последующие фильтры, или выводите пользователю максимально полную информацию об ошибке. Если целью перехвата исключений является очистка ресурсов после сбоя, лучше воспользоваться секцией finally. · Доступ к чтению и записи данных матриц должен осуществляться только через индексатор. Не должно быть доступа к данным матрицы в обход индексатора. · Ввод и вывод элементов матрицы должен выполняться без дублирования кода. · Тип «матрица» не должен ничего выводить на «экран» и ничего считывать с «экрана». · Нельзя изменять размеры матрицы после её создания. Важные материалы для выполнения задания (!) 1. Handling and Throwing Exceptions – http://msdn.microsoft.com/en-us/library/5b2yeyab.aspx 2. Обработка и создание исключений – http://msdn.microsoft.com/ru-ru/library/5b2yeyab.aspx 3. Exception Class and Properties – http://msdn.microsoft.com/en-us/library/z4c5tckx.aspx 4. How to: Use Specific Exceptions in a Catch Block – http://msdn.microsoft.com/en-us/library/3tca6706.aspx 5. How to: Explicitly Throw Exceptions – http://msdn.microsoft.com/en-us/library/xhcbs8fz.aspx 6. How to: Create User-Defined Exceptions – http://msdn.microsoft.com/en-us/library/87cdya3t.aspx 7. Remarks and Examples for Exception Class – http://msdn.microsoft.com/en-us/library/system.exception.aspx 8. .NET Framework Development Guide: Best Practices for Handling Exceptions http://msdn.microsoft.com/en-us/library/seyhszts.aspx 9. Design Guidelines for Exceptions (!) – http://msdn.microsoft.com/en-us/library/ms229014.aspx Требования к предоставлению результатов (!) К отчету следует приложить: · листинг программ, написанных на языке программирования C#; · скриншоты и краткое описание работы классов и методов приложений.
Проверяемое задание № 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». [2] Рекомендации по выполнению 1. Необходимо вовремя сбрасывать буфер объектов работы с файлов на диск. 2. Следует правильно устанавливать длину «массива» и заполнять «файл» при создании «объекта». 3. Должен быть общий метод для открытия и подготовки потока (создающий объекты классов FileStream, StreamWriter, StreamReader). 4. Следует добавить проверку того, чтобы при чтении из файла был действительно прочитан новый символ. - В противном случае нужно выбрасывать исключение подходящего типа. - Воспроизвести под отладкой такую ситуацию и проверить, чтобы исключение действительно сгенерировалось. 5. Приложение должно корректно обрабатывать ошибки работы с файлами. - Обработку ошибок нужно делать в «пользовательском» классе, а не в созданном «файловом массиве». Важные материалы для выполнения задания (!) 1. Framework Design Guidelines: Dispose Pattern – http://msdn.microsoft.com/en-us/library/b1yfkh5e.aspx 2. .NET Framework Development Guide: Implementing a Dispose Method – http://msdn.microsoft.com/en-us/library/fs2xkftw.aspx 3. IDisposable.Dispose Method – http://msdn.microsoft.com/en-us/library/system.idisposable.dispose.aspx 4. Object.Finalize Method – http://msdn.microsoft.com/en-us/library/system.object.finalize.aspx 5. NET Framework Development Guide: Using Objects That Encapsulate Resources – http://msdn.microsoft.com/en-us/library/3bwa4xa9.aspx 6. Using Statement (C# Reference) – http://msdn.microsoft.com/en-us/library/yh598w02(v=vs.80).aspx 7. Composing Streams – http://msdn.microsoft.com/en-us/library/e4y2dch9.aspx Требования к предоставлению результатов (!) К отчету следует приложить: · листинг программ, написанных на языке программирования C#; · скриншоты и краткое описание работы классов и методов приложений.
Проверяемое задание № 3 Тема 3. Работа с файловой системой Лекция 3.1. Работа с файловой системой Цель работы Сформировать навыки применения классов, обеспечивающих взаимодействие с файлами и каталогами, потоковых классов .NET Framework, позволяющих работать с различными данными и источниками данных, а также навыки использования общих диалоговых окон файловой системы. Задание 1. Разработать WPF-приложение, которое может использоваться для открытия, отображения, редактирования и, если это необходимо, сохранения измененного содержимого текстовых файлов. Приложение должно быть простым в использовании и включать в себя полную обработку исключений. 2. Создать unit-тесты для тестирования разработанного приложения. Рекомендации по выполнению · Название проекта, название классов и название файлов (с кодом, тестовыми данными командного файла) должны соответствовать терминам в тексте задания и быть простыми для чтения и понимания. · Правила оформления классов: http://www.rsdn.ru/article/mag/200401/codestyle.xml#E3FAC · Правила оформления методов: http://www.rsdn.ru/article/mag/200401/codestyle.xml#EIMAC Требования к предоставлению результатов (!) К отчету следует приложить: · скриншоты и краткое описание этапов работы; · листинг программ, написанных на языке программирования C#.
Проверяемое задание № 4 Тема 4. Делегаты и события Лекция 4.1. Делегаты и события Цель работы Сформировать понимание назначения делегатов и навыки их использования для отделения операций от метода реализации. Научиться использовать лямбда-выражения для определения анонимного метода, объяснять назначение событий и уметь их использовать в приложениях. «Задание 1. Разработать класс для имитации часов с обратным отсчетом (таймер), реализующий возможность по истечении назначенного времени (количество секунд ожидания проставляется пользователем) передавать сообщение любому подписавшемуся на событие типу. 2. Для создания эффекта ожидания использовать метод Thread.Sleep пространства имен System.Threading. 3. Добавить возможность для пользователя задавать имя таймера. 4. Доработать тип делегата, чтобы получатель события мог определить «источник события» и вывести «имя таймера». 5. Добавить событие с отсчётом времени, в котором будет передаваться «сколько секунд осталось». 6. Предусмотреть возможность подписки на событие в нескольких классах. 7. Создать три пользовательских класса, явно реализующих интерфейс ICutDownNotifier с методами Init() (подписывается на событие «таймера») и Run (запускает «таймер»): · первый обрабатывает события с помощью методов; · второй обрабатывает события с помощью анонимных делегатов; · третий обрабатывает события с помощью лямбда-выражений». [1] 8. «В итого каждый из пользовательских классов должен обрабатывать три события: · «старт обратного отсчёта»; · «осталось N секунд»; · «обратный отсчёт завершён». 9. Каждый обработчик должен выводить «имя таймера» в обработчиках события. 10. Создать делегат «Началось время выполнения задания» с параметрами «Название задачи», «Сколько было отведено времени». 11. Конструктор каждого из пользовательских классов, реализующих ICutDownNotifier, должен принимать два параметра: · созданный делегат «Началось время выполнения задания»; · делегат «Закончилось время выполнения задания» на основе стандартного типа Action<T> с параметрами «Название задачи», «Сколько было отведено времени». Эти делегаты нужно вызывать в соответствующее время». [1] 12. «Создать в приложении метод, который будет информировать о начале и завершении времени выполнения заданий, и передать их в конструкторы «пользовательских классов». 13. Приложение должно одновременно настроить и запустить все три таймера с названиями «Чтение задание», «Выполнение задания» и «Проверка задания перед отправкой». · При этом надо работать с массивом объектов типа ICutDownNotifier. 14. В качестве UI-интерфейса использовать консольное приложение с интерфейсом командной строки, WinForms или WPF-приложение». [1] Важные материалы для выполнения задания (!) · Правила оформления событий – http://www.rsdn.ru/article/mag/200401/codestyle.xml#EVOAC · How to: Publish Events that Conform to .NET Framework Guidelines (C# Programming Guide) – http://msdn.microsoft.com/en-us/library/w369ty8x.aspx · Framework Design Guidelines: Events and Callbacks – http://msdn.microsoft.com/en-us/library/ms229041.aspx · Action<T> Delegate – http://msdn.microsoft.com/ru-ru/library/018hxwa8.aspx Требования к предоставлению результатов (!) К отчету следует приложить: · скриншоты и краткое описание этапов работы; · листинг программ, написанных на языке программирования C#.
Проверяемое задание № 5 Тема 5. Коллекции и обобщенные типы Лекция 5.2. Использование обобщенных методов и делегатов. Реализация пользовательского класса коллекции Цель работы Сформировать понимание и навыки использования базовых и обобщенных интерфейсов и классов коллекции .NET Framework. Научиться разрабатывать пользовательские классы коллекции, поддерживающие перечисление и инициализацию. Задание 1 «Бинарное дерево поиска 1. Разработать тип «бинарное дерево поиска» для хранения результатов тестов, выполненных студентами, и их предоставления в упорядоченном виде. 2. Предусмотреть возможность хранения данных любого типа, поддерживающего сравнения. 3. Информация о студенте может содержать поля, хранящие имя студента, название теста, дату его прохождения и оценку теста для данного студента. · Необходимо реализовать обобщенный стандартный интерфейс, чтобы информацию об одном студенте можно было сравнить с информацией о другом студенте. 4. Предусмотреть следующие конструкторы «дерева»: · принимающий объект стандартного обобщённого типа для сравнения двух объектов одного типа и применяющий его для сравнения добавляемых в дерево элементов; · принимающий объект типа стандартной обобщенной коллекции (не список!) и добавляющий элементы коллекции в дерево (пример смотрите в «исходниках» конструкторов типа List<T>); · принимающий и коллекцию элементов для добавления в дерево, и объект, с помощью которого будут выполняться сравнения. Итого: если указан «компаратор», то он используется для сравнения элементов, в противном случае используется «сравнение, реализованное внутри элемента». 5. Созданный класс «дерево» должен реализовывать обобщённый интерфейс перечислителя. При реализации нужно применить «итератор» (реализовать с помощью yield). 6. В «дереве» реализовать метод, который возвращает объект для итерации по дереву в обратном порядке. Например, GetReversedEnumarator() (реализовать с помощью yield). 7. В качестве UI-интерфейса использовать консольное приложение с интерфейсом командной строки, WinForms или WPF-приложение. В приложении нужно: · Применить созданное «дерево» для хранения чисел из целочисленного массива, при этом в дереве они должны храниться в порядке убывания. - Добавить ещё несколько чисел в дерево. - Вывести все числа «дерева» в том порядке, в котором они хранятся в дереве. · Применить созданное «дерево» для хранения результатов прохождения тестов студентами, при этом элементы в дереве должны храниться в порядке убывания «оценок (баллов)» по тесту. - Вывести информацию о студентах в том порядке, в котором они хранятся в дереве. · Применить созданное «дерево» для хранения строк: - Строки добавить из списка строк. - Вывести строки в обратном порядке, используя метод «дерева», который возвращает «перечислитель» для прохода «дерева» в обратном порядке». [1] Дополнительное задание (!) · Создать класс для итерации по дереву в обратном порядке (реализовать IEnumerator<T>). · Изменить в «дереве» метод, который возвращает объект для итерации по «дереву» в обратном порядке. Рекомендации по выполнению 1. Само «дерево» не должно ничего выводить на «экран» (UI). 2. Если в дереве нельзя хранить элемент (значения) null, то нужно выбрасывать соответствующее исключение при попытке добавить элемент null. 3. yield (C# Reference): http://msdn.microsoft.com/en-us/library/9k7k7cf0.aspx 4. IEnumerator<T> Interface: http://msdn.microsoft.com/en-us/library/78dfe2yb(v=vs.110).aspx
Задание 2 «Абстрактная фабрика» · Разработать иерархию классов для произвольной предметной области на основе представленной UML-диаграммы классов (рис. 1). Изучить отношения между классами и экземплярами классов.
Рис. 1. UML-диаграмма · У интерфейса IFactory должны быть методы CreateProductA(), возвращающий объект типа IProductA, и CreateProductB(), возвращающий объект типа IProductB. · Рекомендации по выполнению Названия классов и методов должны соответствовать выбранной предметной области. Примеры: · Мебель: стол, стул, диван, шкаф. - Плетёная мебель, офисная мебель, мебель для столовых. · Организация: рабочий, начальник, директор. - Завод, торговый ларёк, оптовый склад. · Работа с БД: соединение с БД, выполнение запроса в БД, параметр запроса БД. - MS SQL Server, Oracle, SQLite. · Важно (!) Обратите внимание на конструкторы и модификаторы доступа методов, конструкторов, свойств и полей, которые указаны на UML-диаграмме. · В коде должно быть «один тип – один файл». Подробнее: http://www.rsdn.ru/article/mag/200401/codestyle.xml#EIFAC · Для структурирования «классов» примените пространство имён. Подробнее: http://www.rsdn.ru/article/mag/200401/codestyle.xml#E1DAC Framework Design Guidelines: Names of Namespaces – http://msdn.microsoft.com/en-us/library/vstudio/ms229026.aspx · Должно быть общее пространство имён. В нём должны быть базовые интерфейсы. Пример: System.Data. (!) · Также должны быть «вложенные» пространства имён для конкретных объектов. Примеры: System.Data.SqlClient, System.Data.OracleClient. · В качестве UI-интерфейса рекомендуется использовать консольное приложение с интерфейсом командной строки, WinForms или WPF-приложение. Требования к предоставлению результатов (!) К отчету следует приложить: · скриншоты и краткое описание этапов работы; · листинг программ, написанных на языке программирования C#.
Проверяемое задание № 6 Тема 6. Введение в LINQ Лекция 6.2. Построение динамических запросов и выражений LINQ Цель работы Сформировать понимание фундаментальных концепций и возможностей LINQ .NET Framework и научиться, используя LINQ, абстрагировать механизм, используемый приложением для запроса данных, от кода приложения и строить динамические запросы LINQ с помощью типов пространства имен System.Linq.Expressions .NET Framework. Задание 1. Написать расширяющий метод, который определяет сумму элементов массива. 2. Написать расширяющий метод, который определяет, является ли строка положительным целым числом. Методы Parse и TryParse не использовать. 3. Написать методы поиска элемента в массиве (например, поиск всех положительных элементов в массиве) в виде: · метода, реализующего поиск напрямую; · метода, которому условие поиска передается через делегат; · метода, которому условие поиска передается через делегат в виде анонимного метода; · метода, которому условие поиска передается через делегат в виде лямбда-выражения; · LINQ-выражения. Сравнить скорость выполнения вычислений. Рекомендации по выполнению 1. Не забывайте, что LINQ-выражения выполняются в отложенном режиме. Если вы получили 0, значит, вы не то измеряете. 2. Для выполнения временных замеров рекомендуется использовать класс Stopwatch. 3. Выберите размер поискового массива с запасом. Лучше поставить размер в несколько сотен элементов. 4. Выполните каждое измерение в цикле несколько десятков раз. Определите медиану измерений (значение, расположенное посередине, если результаты измерений отсортировать по возрастанию или убыванию). 5. Проект должен быть отправлен в zip-архиве. Рекомендуется сделать ввод/вывод дружественным по отношению к пользователю. Программы, выводящие мигающий курсор на черном фоне, сразу получают «ноль». Требования к предоставлению результатов (!) К отчету следует приложить: · скриншоты и краткое описание этапов работы; · листинг программ, написанных на языке программирования C#. | |

