При выполнении задания используйте технику разработки посредством тестирования (TDD), которая демонстрировалась на лекции. Соблюдайте порядок шагов в цикле:
- Написание нового падающего теста.
- Написание минимального количества кода для прохождения всех тестов.
- Выполнение рефакторинга кода и тестов.
Реализуйте абстрактный тип данных Range, представляющий замкнутый целочисленный интервал.
Range должен поддерживать следующие операции.
-
Конструирование:
- Создание пустого интервала.
- Создание интервала [min; max] по концевым точкам.
-
Бинарные операции:
- Пересечение интервалов.
- Объединение пересекающихся интервалов.
-
Унарные предикаты:
- Проверка интервала на пустоту.
- Проверка точки на вхождение в интервал.
-
Бинарные предикаты:
- Проверка двух интервалов на равенство.
- Проверка двух интервалов на пересечение.
- Проверка интервала на вхождение в другой.
-
Прочее:
- Перечисление всех точек интервала в порядке возрастания.
- Вычисление минимума интервала.
- Вычисление максимума интервала.
- Вычисление строкового представления интервала, например, в формате [-3; 7].
Реализуйте абстрактный тип данных Account, представляющий модель банковского расчетного счета. Счет ведется в условных единицах и не допускает достижения отрицательного баланса. Account должен поддерживать следующие операции:
- Внести средства на счет.
- Снять средства со счета.
- Сформировать выписку по счету.
Пример формата выписки:
Time Amount Balance
28.09.2021 13:37:00 +500 500
28.09.2021 13:37:01 -100 400
Обратите внимание, что задания намеренно сформулированы недостаточно подробно и предоставляют определенное пространство для интерпретаций, подобно тем задачам, с которыми сталкиваются разработчики программных продуктов в своей практике каждый день. Мы ожидаем, однако, что вы поймете все правильно и предложите наилучшее решение из возможных.
В случае наличия каких-либо вопросов или сомнений, пожалуйста, обращайтесь к вашему семинаристу за разъяснениями.