Технологии программирования. Учебное пособие
.pdfлинии, x, y, w, h для эллипса.
Второй файл содержит команды для редактора: translate rect[1] 50 70
scale line[1] 1 1.5 rotate ellipse[1] 90 undo
Команда translate() смещает указанный объект (задаются dx и dy). Команда scale() изменяет масштаб (задаются коэффициенты масштаба sx и sy). Команда rotate() поворачивает объект вокруг его центра на заданное количество градусов (также можно реализовать более сложную версию с поворотом вокруг заданной точки). После имени команды идет идентификатор объекта. Если он не указан, то операция применяется ко всем объектам. Команда undo() отменяет последнюю операцию (у нее нет аргументов). Векторный редактор должен прочитать файл с исходной сценой, файл команд, применить команды к сцене и записать сцену в новый файл.
Вариант 4. Используя паттерн «Фабричный метод» (Factory Method), реализовать проект системы хранения информации о футбольном чемпионате. Информация опирается на следующие основные классы: «Team» (команда), «Player» (игрок), «Match» (матч). Эти классы связаны друг с другом посредством агрегации, ассоциации и проч.
Имя класса |
Атрибуты классов |
Team |
id - уникальный численный идентификатор; |
|
name - имя; |
|
players - игроки, играющие за данную команду в |
|
рамках чемпионата. |
Player |
id - уникальный численный идентификатор; |
|
name - имя; |
|
team - команда. |
61
Match |
id - уникальный численный идентификатор; |
|
date - дата; |
|
location - место; |
|
result - счет; |
|
team1 - первая команда; |
|
team2 - вторая команда; |
|
players - игроки, участвовавшие в матче. |
Обеспечить загрузку и сохранение этой базы данных в текстовый файл. Каждая строка в этом файле должна начинаться со слов team, player, match. Далее будут идти необходимые атрибуты.
Для сохранения и восстановления связей между различными объектами использовать поля id. Например, в строке с записью о матче можно сохранить team1_id и team2_id, а после загрузки всего файл создать связь с реальным объектом.
Вариант 5. Используя паттерн «Стратегия» (Strategy), реализовать проект «Принтеры», где должны быть реализованы разные модели принтеров, которые выполняют разные виды печати.
Вариант 6. Используя паттерн «Наблюдатель» (Observer), реализовать проект «Оповещение постов ГИБДД» В проекте должна быть реализована отправка сообщений всем постам ГИБДД.
Вариант 7. Используя паттерн «Шаблонный метод» (Template method), реализовать два алгоритма обхода графа (поиск в глубину и поиск в ширину).
Для переопределения должны быть доступны следующие методы:
StartOfTheCrawl() - начало обхода; EndOfTheTour() - конец обхода;
VisitNodeV() - посещение узла V; VisitRibE() - посещение ребра E.
Абстракцию графа желательно вынести в отдельный класс,
62
сделав его либо параметром шаблона, либо передавая в алгоритм указатель/ссылку на объект базового класса представления графа.
Вариант 8. Используя паттерн «Фабричный метод» (Factory Method), реализовать проект «Фабрика смартфонов». В проекте должно быть реализовано создание смартфонов с различными характеристиками.
Вариант 9. Используя паттерн «Абстрактная фабрика». реализовать проект «Заводы по производству автомобилей». В проекте должно быть реализована возможность создавать автомобили различных типов на разных заводах.
Вариант 10. Используя паттерн «Шаблонный метод» (Template method), реализовать проект «Решение численных уравнений», который позволит применять различные сходящиеся итерационные алгоритмы, имеющие схожий алгоритм:
Проверить некоторое условие с некоторой точностью. Если верно ‒ вернуть текущий результат Xk
Если нет ‒ вычислить следующий член последовательности предполагаемых результатов Xk+1 = g(Xk) и т. д.
В этой задаче необходимо численно решить методом хорд и методом Ньютона одномерное уравнение f(x)=0 на интервале [a, b] (в предположении, что на заданном интервале есть только один корень).
Обратите внимание, что метод Ньютона кроме основной функции f(x) требует задания ее производной f(x). Следует учесть этот факт при разработке интерфейса классов.
Вариант 11. Используя паттерн «Мост» (Bridge), реализовать
проект «Геометрические фигуры». |
Абстрактный |
клас |
«Фигуры» |
||
имеет подклассы «Круг» и «Квадрат». |
|
|
|
||
Необходимо |
расширить |
иерархию |
фигур |
по |
|
цвету: «Красные» фигуры и «Синие» фигуры (т. |
е. |
создать |
4 |
||
63
комбинации подклассов: «СиниеКруги», «КрасныеКруги», «СиниеКвадраты» и «КрасныеКвадраты»).
Вариант 12. Используя паттерн «Команда» (Command), реализовать примитивный текстовый редактор. Текстовый редактор работает с двумя текстовыми файлами. В первом находится строка, над которой он проводит все операции. Во втором – последовательность команд, которые нужно выполнить. Необходимо реализовать:
1. Поддержку следующих команд (методов):
-copy(idx1, idx2) ‒ скопировать в буфер обмена символы с позиции idx1 до позиции idx2;
-paste(idx) ‒ вставить содержимое буфера обмена в позицию
idx;
-insert(idx) ‒ вставить строку «string» в позицию idx;
-delete(idx1, idx2) ‒ удалить все символы с позиции idx1 до позиции idx2;
-undo() ‒ отменить предыдущую команду;
-redo() ‒ выполнить отмененную команду заново.
2.Класс текстового процессора, хранящий строку и способный выполнять все необходимые операции над ней.
3.Класс-парсер, считывающий последовательность команд из файла и интерпретирующий их.
Вариант 13. Используя паттерн «Команда» (Command), реализовать клавиатуру настраиваемого калькулятора. Цифровые и арифметические кнопки имеют фиксированную функцию, а остальные могут менять свое назначение.
Вариант 14. Используя паттерн «Адаптер» (Adapter), реализовать проект «Часы». В проекте должен быть реализован адаптер, который дает возможность пользоваться часами со
64
стрелками так же, как и цифровыми часами. В классе «Часы со стрелками» хранятся повороты стрелок.
Вариант 15. Используя паттерн «Фасад» (Facade), реализовать проект «Компьютер». В проекте должены быть реализованы основные функции, выполняемые компьютером, к примеру, включение, выключение, запуск операционной системы, запуск программы, и т. д, не раскрывая клиенту деталей выполнения этой операции.
Вариант 16. Используя паттерн «Цепочка обязанностей» (Chain of responsibility), реализовать проект «Оплата покупки в интернете». Имеется 3 способа оплаты: A, B и C. Каждый из них располагает суммами в $100, $300 и $1000 соответственно, приоритетность способов оплаты снижается от A к C. Если вы хотите приобрести товар стоимостью $210, сначала будет проверен баланс A. Если нет достаточной суммы, запрос перемещается к балансу B, и т. д., пока не будет найдена необходимая сумма.
Вариант 17. Используя паттерн «Фабричный метод» (Factory Method), реализовать проект «Почта». Имеется класс «Почта» с подклассами «АвиаПочта» и «НаземнаяПочта», а также классы продуктов «Самолет», «Грузовик» и «Поезд». «АвиаПочта» соответствует «Самолетам», а для «НаземнойПочты» есть сразу два продукта «Грузовик» и «Поезд».
65
ЛАБОРАТОРНАЯ РАБОТА № 4. МОДУЛЬНОЕ ТЕСТИРОВАНИЕ
Цель работы: Научиться разрабатывать модульные тесты для кода, написанного на языке C#
Порядок выполнения работы:
1.Создать с помощью Visual Studio консольный проект C# (Console Application).
2.Создать класс (согласно своему варианту), который будет имитировать тестируемую логику.
3.Создать в проекте тестовый класс.
4.Разработать не менее пяти тестирующих функций. При разработке этих функций следует активно применять функции класса «Assert»
5.Разработать тестовые методы со спецификацией ожидаемых исключений.
6.Запустить проверку разработанного тестового класса. Скомпилировать и запустить проект. Посмотреть на результат теста.
7.Внести в тестируемые классы изменения, приводящие к ошибкам.
Скомпилировать и запустить проект.
8.Посмотреть, пойманы ли ошибки модульным тестом.
Варианты заданий:
Вычислить и вывести на экран значения функции F в соответствии с вариантом задания. Через a, b, c, x – обозначены действительные числа.
66
Вариант 1. |
|
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
при |
|
и |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
при |
|
и |
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
в остальны |
|
случая |
||||
|
|
|
|
|
|
|
|
|
|
|
||||||
Вариант 2. |
|
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
при |
|
и с |
|||
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
при |
|
и |
||||
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
в остальны |
|
случая |
||||
|
|
|
|
|
|
|
|
|
|
|
||||||
Вариант 3. |
|
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
при |
|
и |
|
|
|
|
|
|
|
|
|
|
|
|
|
при |
и |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
в остальны |
случая |
||
Вариант 4. |
|
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
при |
|
и |
|
|
|
|
|
|
|
|
|
|
|
|
|
при |
и |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
в остальны |
|
случая |
||||
|
|
|
|
|
|
|
|
|
|
|
||||||
Вариант 5. |
|
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
при |
|
и |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
при |
|
и |
|||||
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
в остальны |
случая |
||||
|
|
|
|
|
|
|
|
|
|
|
||||||
Вариант 6.
|
|
|
при |
и |
|
|
|
при |
и |
|
|
|
||
|
|
в остальны |
случая |
|
|
|
|||
67
Вариант 7.
|
|
|
при |
и |
|
|
|
при |
и |
|
|
|
||
|
|
в остальны |
случая |
|
|
|
|||
Вариант 8.
при |
и |
при |
и |
в остальны случая
Вариант 9.
при |
и |
при |
и |
в остальны случая
Вариант 10.
при и
при и
в остальны случая
Вариант 11.
при и
при и
в остальны случая
68
Вариант 12.
|
|
|
|
|
при |
и |
|
|
|
|
при |
и |
|
|
|
|
|
|||
|
|
|
|
|
в остальны |
случая |
|
|
|
|
|
||
Вариант 13.
|
|
|
при |
и |
|
|
при |
и |
|
|
|
|||
|
|
|
в остальны |
случая |
|
|
|
||
Вариант 14.
|
|
|
|
|
при |
и |
|
|
|
|
при |
и |
|
|
|
|
|
|||
|
|
|
|
|
в остальны |
случая |
|
|
|
|
|
||
Вариант 15.
при |
и |
при |
и |
в остальны |
случая |
Вариант 16.
при и
при и
в остальны случая
69
Вариант 17. |
|
||||
|
|
|
|
при |
и |
|
|
|
|
при |
и |
|
|
|
|
||
|
|
|
в остальны |
случая |
|
|
|
|
|||
Вариант 18. |
|
||||
|
|
|
|
при |
и |
|
|
|
|
при |
и |
|
|
|
|
||
в остальны случая
70
