Next: About this document Up: Pastas de té Previous: Version 1

## Version 2

La gestión del peso de la caja la realiza la capsula Caja. Por tanto, el proceso Empaquetador no sabe nada del peso actual de la caja. La acción de almacenar una pasta en la caja se desdobla en dos:

- Notificación de la siguiente pasta que se quiere poner -- SiguientePasta. De esta forma, se informa a la Caja el incremento de peso que se puede producir al añadir la siguiente pasta. Si dicho incremento excede el peso actual, debe avisarse al Retirador.
- Operación AlmacenarPasta. Se incluye una pasta más en la caja. El valor del peso se incrementa con el peso de la pasta.

    -----------------------------------------------
    TASK Empaquetador;
    VAR
        pasta : TipoPasta;
    BEGIN
      LOOP
        Mostrador.TomarPasta (pasta);
        Caja.SiguientePasta (pasta);
        Caja.AlmacenarPasta (pasta);
      END (* LOOP *)
    END Empaquetador;
    --------------------------------------------------------------------------
    CAPSULA Caja;
       VAR reponer : BOOLEAN   (* valor inicial : FALSE *);
       VAR retirar : BOOLEAN   (* valor inicial : FALSE *);
    OPERACION SiguientePasta (pasta : TipoPasta);
       PRE: TRUE
       POST: reponer = (pesoActual + Peso(pasta) > PesoMaximo)
     OPERACION AlmacenarPasta (pasta : TipoPasta);
       PRE: NOT (reponer)
       POST: pesoActual = pesoActual' + Peso(pasta)
    OPERACION ReponerCaja ();
       PRE: reponer
       POST: NOT (reponer) AND pesoActual = 0
    OPERACION RetirarCaja ();
       PRE: retirar
       POST: NOT (retirar) AND reponer
    --------------------------------------------------------------------------