Skip to content

01. Clases de Evento

En el patrón MVC-E moderno, cada acción significativa del usuario se encapsula en su propia clase, promoviendo el principio de responsabilidad única.

1. Operaciones Matemáticas (Ejemplo: Suma)

Section titled “1. Operaciones Matemáticas (Ejemplo: Suma)”

La clase SumaEventButton coordina la lectura de la vista y la actualización del modelo.

sequenceDiagram
    autonumber
    actor Usuario
    participant V as CalculadoraVista
    participant C as SumaEventButton
    participant M as Operacion
    participant H as Historial

    Usuario->>V: Clic en "+"
    V->>C: actionPerformed(ActionEvent)
    C->>V: getNumero1()
    V-->>C: "10"
    C->>V: getNumero2()
    V-->>C: "5"
    Note over C,M: Crea nueva Operación
    C->>M: new Operacion(10, 5, "+")
    M-->>C: resultado = 15
    C->>V: setResultado("= 15.0")
    C->>H: agregar(Operacion)
    Note right of H: Persiste en memoria
package calculadora.Controladores.Eventos;
import calculadora.Modelos.Historial;
import calculadora.Modelos.Operacion;
import calculadora.Vistas.CalculadoraVista;
public class SumaEventButton implements ActionListener {
private CalculadoraVista v;
private Historial h;
public SumaEventButton(CalculadoraVista v, Historial h) {
this.v = v; this.h = h;
}
@Override
public void actionPerformed(ActionEvent e) {
double n1 = Double.parseDouble(v.getNumero1());
double n2 = Double.parseDouble(v.getNumero2());
Operacion op = new Operacion(n1, n2, "+");
v.setResultado("= " + op.resultado);
h.agregar(op);
}
}

Esta clase demuestra cómo iterar sobre el modelo para generar la vista del historial.

public class AbrirHistorialButton implements ActionListener {
private Historial h;
private HistorialVista hv;
public AbrirHistorialButton(Historial h, HistorialVista hv) {
this.h = h; this.hv = hv;
}
@Override
public void actionPerformed(ActionEvent e) {
Operacion[] datos = h.getDatos();
String textoAcumulado = "";
int i = 0;
while (i < datos.length) {
if (datos[i] != null) {
textoAcumulado = textoAcumulado + datos[i].toString() + "\n";
}
i++;
}
hv.setTexto(textoAcumulado);
}
}