xnordman | Дата: Пятница, 21.03.2014, 01:17 | Сообщение # 1 |
Сержант
Группа: Администраторы
Сообщений: 29
Статус: Offline
| Шаблон проектирования «фабричный метод», logging, тестирование (unittesting).
Часть 1. Написать стековый калькулятор, который принимает в качестве аргумента командой строки имя файла, содержащего команды. Если аргумента нет, то использовать стандартный поток ввода для чтения команд. Использовать вещественные числа. Реализовать следующий набор команд: · # -строка с комментарием. · POP, PUSH — снять/положить число со/настек(а). · + , - , *, /, SQRT – арифметические операции. Используют один или два верхнихэлемента стека, изымают их из стека, помещая результат назад · PRINT— печать верхнего элемента стека (без удаления). · DEFINE— задать значение параметра. В дальнейшем везде использовать вместо параметра это значение.
Пример (должно вывести 2): DEFINE a 4 PUSH a SQRT PRINT Часть2. 1. Реализоватьнабор модульных тестов, покрывающих функционал калькулятора. 2. Реализоватьжурналирование процесса работы калькулятора. Методическиеуказания:· Созданиекоманд рекомендуется реализовать посредством шаблона проектирования «фабричный метод» ([url=http://ru.wikipedia.org/wiki/Фабричный_метод_(шаблон_проектирования]http://ru.wikipedia.org/wiki/Фабричный_метод_(шаблон_проектирования[/url][url=http://ru.wikipedia.org/wiki/Фабричный_метод_(шаблон_проектирования)])[/url]). · Загрузкуклассов команд при создании в фабрике осуществлять по полному квалифицированному имени класса (включая имя пакета) посредством Class.forName() с последующим созданием объектов команд методом Class.newInstance(). Фабрика конфигурируется с помощью файла содержащего соответствия между именами команд и классами, реализующими эти команды. Зависимости фабрики от конкретных классов команд (кроме корневого-абстрактного) быть не должно. Файл конфигурации должен храниться рядом с файлом класса-фабрики, и загружаться в фабрику с помощью Class.getResourceAsStream() · Аргументыкоманде (тем у которых есть аргументы) на исполнение можно передавать в виде массива либо списка объектов, команда сама должна уметь интерпретировать свои аргументы · Содержимоестека и список (лучше ассоциативный контейнер Map<String, Double>) определенных именованных параметров передавать команде в виде специального объекта — контекста исполнения · Разработатьиерархию исключений, которые будут выбрасывать команды при исполнении. В случае возникновения исключения — выводить информацию об ошибке и продолжать исполнение программы (из файла или команд вводимых с консоли) · Дляреализации модульных тестов обычно используют готовые библиотеки:
· Для реализациижурналирования обычно используют одну из библиотек: o Java Logging API (http://download.oracle.com/javase....ew.html). oLog4j (http://logging.apache.org/log4j/1.2/).
|
|
| |