Calculadora modular que aplica los patrones Strategy (operaciones) y Factory (creación por símbolo), con validación de dominio, servicio de aplicación y un CLI simple.
- Requisitos: Python 3.11+ y Tkinter (suele venir con Python estándar).
- Ejecutar:
- Activar entorno:
conda activate <ENV_NAME> - Lanzar:
python ui/app.py
- Activar entorno:
Arquitectura UI:
- UI:
ui/app.py(ventana Tkinter con display y keypad). - Evaluador:
domain/evaluator.pyparsea expresiones simples y delega a operaciones medianteOperationFactory. - Operaciones de dominio:
domain/operations/*(Addition,Substraction,Multiplication,Division) implementanexecute(*operands).
domain/operations/: interfazOperationy estrategias (Addition,Substraction,Multiplication,Division).validation/: errores de dominio y validadores reutilizables.factory/:OperationFactoryque crea operaciones a partir de símbolos (+ - * /).
application/services/:CalculatorService, orquesta el cálculo con la fábrica.cli.py: CLI conargparse.
tests/: pruebas de smoke para service/factory y CLI.
conda create -n calc-env python=3.11 -y
conda activate calc-env
pip install -e .Herramientas opcionales (recomendadas):
pip install pytest ruff mypyTras pip install -e ., se instala el comando calc.
# suma
calc + 1 2 3 # => 6.0
# multiplicación (escapar *)
calc '*' 4 5 # => 20.0
# o
calc \* 4 5
# división con error
calc / 5 0 # => exit code 1, "Division by zero"También puedes invocarlo por módulo sin instalar el script:
python -m application.cli + 1 2 3
python -m application.cli '*' 4 5from application.services.calculator_service import CalculatorService
svc = CalculatorService()
print(svc.calculate("+", 1, 2, 3)) # 6.0
print(svc.calculate("/", 20, 2, 2)) # 5.0pytestruff check . && ruff format .
mypy .- Añadir más operaciones (potencia, módulo, media) y registrarlas en la factory.
- CLI interactivo (REPL) o interfaz gráfica opcional.
- Abrir Pull Request desde
feature/uihaciamaincuando la UI esté validada. - Ejemplos avanzados y casos de uso en el README.