Next: Version 2 Up: Pastas de té Previous: Sección común

## Version 1

La gestión del peso de la caja se realiza en el proceso Empaquetador. Se utiliza una variable pesoActual para controlar el peso de la caja. Toma una pasta del Mostrador, determina cual seía el pesoActual resultante al sumar el peso de la pasta. Se dan dos casos:

- ``no excede'' el PesoMaximo, inserta la pasta en la caja --operación AlmacenarPasta y recalcula el peso actual.

- ``excede'' el PesoMaximo lo notifica a la Caja --operación ExcedePeso-- para que sea retirada la caja y repuesta por una vacía. Después, inserta la pasta --operación AlmacenarPasta y recalcula el peso actual.

    -----------------------------------------
    TASK Empaquetador;
    VAR
        pasta : TipoPasta;
        pesoActual : CARDINAL;
    BEGIN
      pesoActual := 0;
      LOOP
        Mostrador.TomarPasta (pasta);
        INC(pesoActual, Peso(pasta));
        IF pesoActual  > PesoMaximo
          THEN
             CAJA.ExcedePeso;
             CAJA.AlmacenarPasta (pasta);
             pesoActual := Peso(pasta);
          ELSE
             CAJA.AlmacenarPasta (pasta);
        END (* IF *)
      END (* LOOP *)
    END Empaquetador;
    --------------------------------------------------------------------------
    CAPSULA Caja;
      VAR pesoActual : CARDINAL  (* valor inicial : 0     *);
      VAR reponer : BOOLEAN      (* valor inicial : FALSE *);
      VAR retirar : BOOLEAN      (* valor inicial : FALSE *);
    OPERACION ExcedePeso;
      PRE: TRUE
      POST: retirar
    OPERACION AlmacenarPasta (pasta : TipoPasta);
      PRE: NOT (retirar) AND NOT (reponer)
      POST: << Pone "pasta" en la caja >>
    OPERACION ReponerCaja ();
      PRE: reponer
      POST: NOT (reponer)
    OPERACION RetirarCaja ();
      PRE: retirar
      POST: NOT (retirar) AND reponer
    --------------------------------------------------------------------------