Первая версия польского калькулятора была описана тут. В ней мы изучили что такое стэк, как написать много if else
и как заменить их всех на словарь операций.
В этой практике наша цель уже другая. Мы хотим спроектировать такой калькулятор, в который пользователь сможет добавлять свои собственные операции, например, остаток от деления, возведение в степень и так далее. Самое важное, это чтобы для добавления операции ему не приходилось переписывать код ядра.
В этом задании мы концентрируемся на принципах "single responsibility" (единая ответсвенности) и "open-closed" (открытость/закрытость принцип). Особенно нас интересует open-closed - система открыта для расширения, но закрыта для модификации.
python3 calc/ "5 1 2 + 4 * + 3 -"
.Соответсвенно принципу open-closed 1, 2, 3 компоненты системы модифицировать запрещено. Расширение системы операциями идет только через добавление новых файлов в 4.
Каждый класс лежит в отдельном модуле(файле). Если написано, что нужно создать интерфейс, то создавайте его с помощью @abstractmethod
аннотации над методом, в теле которого стоит просто pass
. Потом в отдельном файле создаете конкретный класс реализацию интерфейса. Например class ListStack(Stack):...
. Каждый класс должен быть протестирован.
Обычный стек с операциями pop
и push
.