Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Calculadora SoLiD (Refactorización SRP y Paquetes)

Este proyecto implementa una calculadora por consola que evalúa operaciones aritméticas binarias y unarias. Inicialmente concebida como un ejercicio de "una sola clase", ahora ha sido refactorizada para aplicar rigurosamente el Principio de Responsabilidad Única (SRP) mediante el aislamiento estricto de las clases a través de paquetes.

Arquitectura y Estructura de Paquetes

La aplicación está segmentada semánticamente en los siguientes paquetes bajo com.example.calculadora:

  • interfaces/: Contiene los contratos abstractos.
    • OperacionBinaria: Contrato para operaciones de 2 parámetros.
    • OperacionUnaria: Contrato para operaciones de 1 parámetro.
  • operaciones.binarias/: Implementaciones concretas de sumas, restas, multiplicaciones y divisiones. Cada clase es responsable de una única operación aritmética.
  • operaciones.unarias/: Implementaciones concretas de la raíz cuadrada y el logaritmo natural.
  • core/: Contiene la lógica central independiente del flujo de consola.
    • MotorCalculadora: Responsable exclusivamente de registrar y evaluar las operaciones, delegando la ejecución a las interfaces sin acoplarse a clases concretas.
  • app/:
    • Main: Es el punto de entrada. Se encarga únicamente de configurar/iniciar el MotorCalculadora, inyectar las dependencias (las operaciones concretas) y manejar el ciclo interactivo (I/O) de la consola.

Análisis SoLiD

  1. SRP (Responsabilidad Única): Ahora sí, cada clase hace exactamente una cosa. Por ejemplo, la clase Division sólo se preocupa de dividir y validar sus propios errores (división por cero). Main maneja la interfaz de usuario, y el MotorCalculadora maneja el registro y enrutamiento.
  2. OCP (Abierto/Cerrado): Podemos añadir Potencia.java implementando OperacionBinaria y registrarla en el Main, sin tocar ni recompilar el MotorCalculadora.
  3. LSP (Sustitución de Liskov): Cualquier operación implementada es inyectada polimórficamente en el MotorCalculadora comportándose según el contrato.
  4. ISP (Segregación de Interfaces): Evitamos una interfaz universal, forzando contratos específicos de uno (OperacionUnaria) o dos (OperacionBinaria) parámetros.
  5. DIP (Inversión de Dependencias): El motor (MotorCalculadora) depende de interfaces (OperacionBinaria, OperacionUnaria), no de las clases Suma o RaizCuadrada creadas en los subpaquetes.

Ejecución del Programa

Para correr esta aplicación refactorizada por consola, desde la raíz del proyecto ejecuta:

# Compilar todo el proyecto
javac -sourcepath src/main/java src/main/java/com/example/calculadora/app/Main.java

# Ejecutar el punto de entrada principal
java -cp src/main/java com.example.calculadora.app.Main

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages