С точки зрения парадигмы ООП какие объекты следует выделить в программе калькулятор?

Самый обычный калькулятор: плюс, минус, умножение.
  • Вопрос задан
  • 3116 просмотров
Пригласить эксперта
Ответы на вопрос 5
muhammad_97
@muhammad_97
PHP-разработчик
Один класс: Calculator.
Ответ написан
zagayevskiy
@zagayevskiy
Android developer at Yandex
Я бы предложил такое:
* Лексический анализатор - читает текст, по запросу отдаёт следующую лексему(число, операция, скобка и тд), знает, где сейчас находится относительно текста;
* Синтаксический анализатор - берёт из лексического лексемы, хранит в себе состояние относительно выражения(не текста), строит некое представление (например, полиз);
* Возможно, собственно это представление, если стандартными контейнерами не обойтись;
* Интерпретатор - по представлению вычисляет конечное значение (результат выражения);
* Ну, и возможно, пресловутый калькулятор, чтобы всё это красиво объединить и вычисление выглядело так: подал на вход строку, получил на выходе результат.

P.S. Это всё нужно, если вы не пользоваться просто eval'ом собираетесь, а хотите реально написать сами.

P.P.S. почитал остальных отвечающих, и уточню - то, что я описал, это просто "сферический калькулятор в вакууме", не зависящий от UI, ни от чего не зависящий, фактически.
Ответ написан
edli007
@edli007
full stack, team lead
Это вопрос больше философский и зависит от виденья структуры вашей программы.
Можно сделать например только каркас MVC, где будет два M,
- Где первый будет валидировать данные
- а второй производить базовые арифметические расчеты.
C будет осуществлять общую логику приложения а V итак понятно.
Итого 4 класса.

А можно например еще завернуть каждое вводимое число в класс, и напихать туда различных методов и свойств, где может быть все что угодно, от истории изменений, до количества разрядов числа.

И при этом, эти классы могут содержать другие классы, например история изменений может быть отдельным классом.

Добавить сюда также абстрактные классы.

Исходя со всего этого, выходит что классы могут встречаться на не ограничено малой величине логики, а классы отвечающие за "большие структуры", зависят от виденья структуры приложения самим программистом.
Ответ написан
Keanor
@Keanor
Ведущий разработчик
Основной класс один: калькулятор. Далее зависит от степени изощренности автора. От менее изощренного: методы add, sub, div, mul до самого изощренного, классов Operation, Number, Operand с разнообразными св-вами типа value, priority, системами счисления ...
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Если вкратце: единственный класс - класс-вычислитель (calculator).
Если создавать Грамотный калькулятор с использованием ООП, тогда:
1. Нужно уметь хранить все предыдущие операции и состояния переменных
2. Нужно уметь перемещаться в любое место предыдущих вычислений и вносить правки в виде версии (новое "ответвление" от места правки в истории вычислений)
3. Нужно использовать поддержку ввода выражений алгебры прямой логики и вычисление выражений с применением польской обратной записи.
Например: 1+3*(4-cos(0))
4. Нужно уметь работать с конечными и бесконечными множествами с заданной точностью.
5. Нужно уметь расписывать в истории весь порядок внутренних преобразования и вычислений по требованию пользователя.
6. Нужно создать систему работы с преобразованием и упрощением выражений.
7. Уметь работать с вещественными числами
и т.д.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы