32
1 Ingeniería del Software Ejemplo TPV: Diagrama de Casos de Uso CLIENTE Comprar productos Registrar Productos Iniciar sesión TPV CAJERO

Ejemplo TPV: Diagrama de Casos de Uso TPVadimen.si.ehu.es/~rigau/teaching/EHU/ISO/Curs2009-2010/A... · 2009. 10. 8. · Ejemplo TPV: caso de uso real (1) Caso de uso: Comprar productos

  • Upload
    others

  • View
    12

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Ejemplo TPV: Diagrama de Casos de Uso TPVadimen.si.ehu.es/~rigau/teaching/EHU/ISO/Curs2009-2010/A... · 2009. 10. 8. · Ejemplo TPV: caso de uso real (1) Caso de uso: Comprar productos

1

Ingeniería del Software

Ejemplo TPV: Diagrama de Casos de Uso

CLIENTE

Comprar productos

Registrar Productos

Iniciar sesión

TPV

CAJERO

Page 2: Ejemplo TPV: Diagrama de Casos de Uso TPVadimen.si.ehu.es/~rigau/teaching/EHU/ISO/Curs2009-2010/A... · 2009. 10. 8. · Ejemplo TPV: caso de uso real (1) Caso de uso: Comprar productos

2

Ingeniería del Software

Ejemplo TPV: caso de uso real (1)

Caso de uso: Comprar productos v1Actores: Cliente, Cajero (principal)Resumen: Un Cliente llega a la caja registradora con

los artículos que desea comprar. El Cajero registra los artículos y recibe un pago. Al terminar la operación, el Cliente se marcha con los productos comprados.

Precondiciones: El Cajero está identificado.Postcondiciones: Se registra la venta completa, su importe

y los impuestos. Se actualiza el inventario.Referencias: R1.1, R1.2, R1.3, R1.4, R1.5, R1.7

Page 3: Ejemplo TPV: Diagrama de Casos de Uso TPVadimen.si.ehu.es/~rigau/teaching/EHU/ISO/Curs2009-2010/A... · 2009. 10. 8. · Ejemplo TPV: caso de uso real (1) Caso de uso: Comprar productos

3

Comprar Productos

IntroducirProducto

TerminarVenta

EfectuarPago

Código Producto

Precio

Total

Cantidad

Descuento

A devolverMonto

a

b

c

d

e

f

g

h i j

Ingeniería del Software

Ejemplo TPV: caso de uso real (2)

Page 4: Ejemplo TPV: Diagrama de Casos de Uso TPVadimen.si.ehu.es/~rigau/teaching/EHU/ISO/Curs2009-2010/A... · 2009. 10. 8. · Ejemplo TPV: caso de uso real (1) Caso de uso: Comprar productos

4

Ingeniería del Software

Ejemplo TPV: caso de uso completo (2)

Escenario principal (o curso normal de los eventos):1. Cliente: Llega a un TPV con productos que desea comprar.2. Cajero: Comienza una nueva venta.3. Cajero: Teclea el código de producto en a de la ventana-cp. Si hay

más de un producto, es opcional añadir la cantidad en e. Se añade el producto con h.

4. Sistema: Registra la línea de la venta, y presenta el precio en b de la ventana-cp y la suma parcial en c.

El Cajero repite los pasos 3 a 4 hasta terminar los artículos del Cliente. 5. Cajero: Indica al TPV que se concluyó la captura de productos

pulsando i.6. Sistema: Calcula y presenta el total con impuestos de la venta en c.7. Cajero: Le indica el total de la venta al Cliente.8. Cliente: Efectúa un pago.9. Cajero: Gestiona el pago.10. Sistema: Registra la venta. Genera un recibo. 11. Cajero: Da al Cliente el recibo impreso.12. Cliente: Se marcha con los artículos comprados.

Page 5: Ejemplo TPV: Diagrama de Casos de Uso TPVadimen.si.ehu.es/~rigau/teaching/EHU/ISO/Curs2009-2010/A... · 2009. 10. 8. · Ejemplo TPV: caso de uso real (1) Caso de uso: Comprar productos

5

Ingeniería del Software

Diagrama de clases

TPV

Venta

fechaimporteestaTerminada

Pago

monto

Cliente

Cajero

Gerente

LineaVenta

cantidad

Tienda Catálogo

Producto

cpdescripciónprecio

contiene

*consta referencia

ofreceestáinicia

inicia

requiere

*

gestiona registra

Sólo hay una venta!

Sólo hay una TPV!

Page 6: Ejemplo TPV: Diagrama de Casos de Uso TPVadimen.si.ehu.es/~rigau/teaching/EHU/ISO/Curs2009-2010/A... · 2009. 10. 8. · Ejemplo TPV: caso de uso real (1) Caso de uso: Comprar productos

6

Ingeniería del Software

Ejemplo: Caso de uso Comprar productos

:Cajero :Sistema

IniciarVenta()

AñadirProducto(cp, c)

TerminarVenta() : importe

*

EfectuarPago(monto) : cambio

Page 7: Ejemplo TPV: Diagrama de Casos de Uso TPVadimen.si.ehu.es/~rigau/teaching/EHU/ISO/Curs2009-2010/A... · 2009. 10. 8. · Ejemplo TPV: caso de uso real (1) Caso de uso: Comprar productos

7

Ingeniería del Software

Contrato IniciarVenta

Name: IniciarVenta() Responsabilities

Iniciar el registro de una venta Preconditions

No existe una venta ya iniciada Postconditions

Se dio de alta una instancia v de Venta con fecha actual Se dio de alta una instancia de la asociación ‘tiene’

entre v y la instancia de TPV Salida

Page 8: Ejemplo TPV: Diagrama de Casos de Uso TPVadimen.si.ehu.es/~rigau/teaching/EHU/ISO/Curs2009-2010/A... · 2009. 10. 8. · Ejemplo TPV: caso de uso real (1) Caso de uso: Comprar productos

8

Ingeniería del Software

Diagrama de secuencia: IniciarVenta

:TPV

iniciarVenta()

:Ventacrear()

Page 9: Ejemplo TPV: Diagrama de Casos de Uso TPVadimen.si.ehu.es/~rigau/teaching/EHU/ISO/Curs2009-2010/A... · 2009. 10. 8. · Ejemplo TPV: caso de uso real (1) Caso de uso: Comprar productos

9

Ingeniería del Software

Código Java IniciarVenta: TPV

package TPV; import java.util.*;

class TPV {private Catalogo catalogo;private Venta venta;...

private boolean esNuevaVenta() { return (venta==null) || (venta.estaTerminada())}public void IniciarVenta () {

if (esNuevaVenta()) {venta = new Venta();

}}

}

Page 10: Ejemplo TPV: Diagrama de Casos de Uso TPVadimen.si.ehu.es/~rigau/teaching/EHU/ISO/Curs2009-2010/A... · 2009. 10. 8. · Ejemplo TPV: caso de uso real (1) Caso de uso: Comprar productos

10

Ingeniería del Software

Código Java AñadirProducto: Venta

package TPV; import java.util.*;

class Venta {private Vector lineaVenta = new Vector();private Date fecha = new Date();private float importe = 0;private boolean estaTerminada = false;...

}

Page 11: Ejemplo TPV: Diagrama de Casos de Uso TPVadimen.si.ehu.es/~rigau/teaching/EHU/ISO/Curs2009-2010/A... · 2009. 10. 8. · Ejemplo TPV: caso de uso real (1) Caso de uso: Comprar productos

11

Ingeniería del Software

Contrato AñadirProducto

Name:AñadirProducto(cp, c) Responsabilities

Registrar una línea de venta. Preconditions

Existe un producto p con p.cp = cp c >= 0 Existe una Venta v asociada a TPV

Postconditions Se dio de alta una instancia de LíneaVenta lv con

lv.cantidad = c Se dio de alta una instancia de la asociación ‘consta’

entre lv y la Venta v Se dio de alta una instancia de la asociación ‘referencia’

que asocia lv y el producto p con p.cp = cp Salida

p.descripción y p.precio

Page 12: Ejemplo TPV: Diagrama de Casos de Uso TPVadimen.si.ehu.es/~rigau/teaching/EHU/ISO/Curs2009-2010/A... · 2009. 10. 8. · Ejemplo TPV: caso de uso real (1) Caso de uso: Comprar productos

12

Ingeniería del Software

Diagrama de secuencia: AñadirProducto

Selección de la clase controlador

:TPV

AñadirProducto(cp,c)

:Tienda

AñadirProducto(cp,c)

:Cajero

AñadirProducto(cp,c)

:Gestor

AñadirProducto(cp,c)

CU o transacción

Fachada negocioFachada sistema

Rol (actor)

Page 13: Ejemplo TPV: Diagrama de Casos de Uso TPVadimen.si.ehu.es/~rigau/teaching/EHU/ISO/Curs2009-2010/A... · 2009. 10. 8. · Ejemplo TPV: caso de uso real (1) Caso de uso: Comprar productos

13

Ingeniería del Software

Diagrama de secuencia: AñadirProducto

:TPV

añadirProducto(cp, c)

:Venta

agregarLV(p, c)

:LineaVentacrear(p, c)

:Catálogo

producto(cp)

:Producto

obtener(cp)p

p.precio

p.descripción

Page 14: Ejemplo TPV: Diagrama de Casos de Uso TPVadimen.si.ehu.es/~rigau/teaching/EHU/ISO/Curs2009-2010/A... · 2009. 10. 8. · Ejemplo TPV: caso de uso real (1) Caso de uso: Comprar productos

14

Ingeniería del Software

Diagrama de clases: AñadirProducto

TPV

iniciaVenta():añadirProducto(cp, cantidad)terminarVenta():realefectuarPago(real):real

Catálogo

producto(cp):producto

Producto

cp:intprecio:realdescipcion:string

obtener(cp):producto

Venta

fecha:dateimporte: floatestaTerminada: boolean

agregarLV(producto, cantidad)

Page 15: Ejemplo TPV: Diagrama de Casos de Uso TPVadimen.si.ehu.es/~rigau/teaching/EHU/ISO/Curs2009-2010/A... · 2009. 10. 8. · Ejemplo TPV: caso de uso real (1) Caso de uso: Comprar productos

15

Ingeniería del Software

Código Java AñadirProducto: TPV

package TPV; import java.util.*;

class TPV {private Catalogo catalogo;private Venta venta;...

public void añadirProducto (int cp, int cantidad) {Producto p = catalogo.producto(cp);venta.agregarLV(p, cantidad);

}}

Page 16: Ejemplo TPV: Diagrama de Casos de Uso TPVadimen.si.ehu.es/~rigau/teaching/EHU/ISO/Curs2009-2010/A... · 2009. 10. 8. · Ejemplo TPV: caso de uso real (1) Caso de uso: Comprar productos

16

Ingeniería del Software

Contrato AñadirProducto

Name:AñadirProducto(cp, c) Responsabilities

Registrar una línea de venta. Preconditions

Existe un producto p con p.cp = cp c >= 0 Existe una Venta v asociada a TPV

Postconditions Se dio de alta una instancia de LíneaVenta lv con

lv.cantidad = c Se dio de alta una instancia de la asociación ‘consta’

entre lv y la Venta v Se dio de alta una instancia de la asociación ‘referencia’

que asocia lv y el producto p con p.cp = cp Salida

p.descripción y p.precio

Quién es el responsable de comprobar esto?

Page 17: Ejemplo TPV: Diagrama de Casos de Uso TPVadimen.si.ehu.es/~rigau/teaching/EHU/ISO/Curs2009-2010/A... · 2009. 10. 8. · Ejemplo TPV: caso de uso real (1) Caso de uso: Comprar productos

17

Ingeniería del Software

Código Java AñadirProducto: Catalogo

package TPV; import java.util.*;

public class Catalogo {private Hashtable catalogo = new Hashtable();

public Catalogo() {catalogo c = new producto(100, 2, “producto 100”); catalogo.put(new Integer(100), c);catalogo c = new producto(200, 1, “producto 200”); catalogo.put(new Integer(200), c);

}

public producto producto (int cp) {return (producto) catalogo.get(new Integer (cp));

}}

Page 18: Ejemplo TPV: Diagrama de Casos de Uso TPVadimen.si.ehu.es/~rigau/teaching/EHU/ISO/Curs2009-2010/A... · 2009. 10. 8. · Ejemplo TPV: caso de uso real (1) Caso de uso: Comprar productos

18

Ingeniería del Software

Código Java AñadirProducto: Producto

package TPV;

public class Producto {private int cp = 0;private float precio = 0;private String descripcion = “”;

public producto (int cp, float precio, String descripcion) {this.cp = cp; this.precio = precio; this.descripcion = descripcion;

}...

}

Page 19: Ejemplo TPV: Diagrama de Casos de Uso TPVadimen.si.ehu.es/~rigau/teaching/EHU/ISO/Curs2009-2010/A... · 2009. 10. 8. · Ejemplo TPV: caso de uso real (1) Caso de uso: Comprar productos

19

Ingeniería del Software

Código Java AñadirProducto: Venta

package TPV; import java.util.*;

class Venta {private Vector lineaVenta = new Vector();private Date fecha = new Date();private float importe = 0;private boolean estaTerminada = false;...public void agregarLV (producto p, int c){

lineaVenta.addElement(new LineaVenta(p, c));}

}

Page 20: Ejemplo TPV: Diagrama de Casos de Uso TPVadimen.si.ehu.es/~rigau/teaching/EHU/ISO/Curs2009-2010/A... · 2009. 10. 8. · Ejemplo TPV: caso de uso real (1) Caso de uso: Comprar productos

20

Ingeniería del Software

Código Java AñadirProducto: LineaVenta

package TPV;

class LineaVenta {private int cantidad;private Producto producto;...public LineaVenta (producto p, int cantidad) {

this.producto = p;this.cantidad = cantidad;

}}

Page 21: Ejemplo TPV: Diagrama de Casos de Uso TPVadimen.si.ehu.es/~rigau/teaching/EHU/ISO/Curs2009-2010/A... · 2009. 10. 8. · Ejemplo TPV: caso de uso real (1) Caso de uso: Comprar productos

21

Ingeniería del Software

Contrato TerminarVenta

Name:TerminarVenta() : importe Responsabilities

Finalizar el registro de una venta y mostrar el importe pagado

Preconditions Existe una Venta v asociada a TPV

Postconditions v.importe = suma de los subtotales de todas las lineas

de venta asociadas a la Venta v v.terminada = verdadero

Salida importe = v.importe

Page 22: Ejemplo TPV: Diagrama de Casos de Uso TPVadimen.si.ehu.es/~rigau/teaching/EHU/ISO/Curs2009-2010/A... · 2009. 10. 8. · Ejemplo TPV: caso de uso real (1) Caso de uso: Comprar productos

22

Ingeniería del Software

Diagrama de secuencia: TerminarVenta

:TPV

terminarVenta()

:Venta

terminar()

importe

total()

:Producto

subtotal()precio()

*

:LineaVenta

Page 23: Ejemplo TPV: Diagrama de Casos de Uso TPVadimen.si.ehu.es/~rigau/teaching/EHU/ISO/Curs2009-2010/A... · 2009. 10. 8. · Ejemplo TPV: caso de uso real (1) Caso de uso: Comprar productos

23

Ingeniería del Software

Diagrama de clases: TerminarVenta

TPV

iniciaVenta():añadirProducto(cp, cantidad)terminarVenta():realefectuarPago(real):real

Catálogo

producto(cp):producto

Producto

obtener(cp):productoprecio()

Venta

agregarLV(producto, cantidad)terminar():real

LineaVenta

subtotal():real

Page 24: Ejemplo TPV: Diagrama de Casos de Uso TPVadimen.si.ehu.es/~rigau/teaching/EHU/ISO/Curs2009-2010/A... · 2009. 10. 8. · Ejemplo TPV: caso de uso real (1) Caso de uso: Comprar productos

24

Ingeniería del Software

Código Java TerminarVenta: TPV

package TPV; import java.util.*;

class TPV {private Catalogo catalogo;private Venta venta;...

public float terminarVenta () {venta.terminar();return (float) venta.total();

}}

Page 25: Ejemplo TPV: Diagrama de Casos de Uso TPVadimen.si.ehu.es/~rigau/teaching/EHU/ISO/Curs2009-2010/A... · 2009. 10. 8. · Ejemplo TPV: caso de uso real (1) Caso de uso: Comprar productos

25

Ingeniería del Software

Código Java TerminarVenta: Venta

package TPV; import java.util.*;

class Venta {private Vector lineaVenta = new Vector();private Date fecha = new Date();private float importe = 0;private boolean estaTerminada = false;

...public void terminar () { estaTerminada = true; }public float total() {

float total = 0;enumeration e = lineaVenta.elements();while (e.hasMoreElements()) {

total += ( (LineaVenta) e.nextElement() ).subtotal();}importe = total;return total;

}}

Page 26: Ejemplo TPV: Diagrama de Casos de Uso TPVadimen.si.ehu.es/~rigau/teaching/EHU/ISO/Curs2009-2010/A... · 2009. 10. 8. · Ejemplo TPV: caso de uso real (1) Caso de uso: Comprar productos

26

Ingeniería del Software

Código Java TerminarVenta: LineaVenta

package TPV;

class LineaVenta {private int cantidad;private Producto producto;...public float subtotal () {

return cantidad * producto.precio();}

}

Page 27: Ejemplo TPV: Diagrama de Casos de Uso TPVadimen.si.ehu.es/~rigau/teaching/EHU/ISO/Curs2009-2010/A... · 2009. 10. 8. · Ejemplo TPV: caso de uso real (1) Caso de uso: Comprar productos

27

Ingeniería del Software

Código Java TerminarVenta: Producto

package TPV;

public class Producto {private int cp = 0;private float precio = 0;private String descripcion = “”;

public float precio () { return precio;}...

}

Page 28: Ejemplo TPV: Diagrama de Casos de Uso TPVadimen.si.ehu.es/~rigau/teaching/EHU/ISO/Curs2009-2010/A... · 2009. 10. 8. · Ejemplo TPV: caso de uso real (1) Caso de uso: Comprar productos

28

Ingeniería del Software

Diagrama de secuencia: EfectuarPago

:TPV

efectuarPago(monto)

:Venta

efectuarPago(monto)

cambio

:Pagocrear(monto)

cambio

Page 29: Ejemplo TPV: Diagrama de Casos de Uso TPVadimen.si.ehu.es/~rigau/teaching/EHU/ISO/Curs2009-2010/A... · 2009. 10. 8. · Ejemplo TPV: caso de uso real (1) Caso de uso: Comprar productos

29

Ingeniería del Software

Diagrama de clases: EfectuarPago

TPV

iniciaVenta():añadirProducto(cp, cantidad)terminarVenta():realefectuarPago(real):real

Catálogo

producto(cp):producto

Producto

obtener(cp):producto

Venta

agregarLV(producto, cantidad)terminar()importe()efectuarPago(real):real

Page 30: Ejemplo TPV: Diagrama de Casos de Uso TPVadimen.si.ehu.es/~rigau/teaching/EHU/ISO/Curs2009-2010/A... · 2009. 10. 8. · Ejemplo TPV: caso de uso real (1) Caso de uso: Comprar productos

30

Ingeniería del Software

Código Java EfectuarPago: TPV

package TPV; import java.util.*;

class TPV {private Catalogo catalogo;private Venta venta;...

public float efectuarPago (float monto) {return venta.efectuarPago(monto);

}}

Page 31: Ejemplo TPV: Diagrama de Casos de Uso TPVadimen.si.ehu.es/~rigau/teaching/EHU/ISO/Curs2009-2010/A... · 2009. 10. 8. · Ejemplo TPV: caso de uso real (1) Caso de uso: Comprar productos

31

Ingeniería del Software

Código Java EfectuarPago: Venta

package TPV; import java.util.*;

class Venta {private Vector lineaVenta = new Vector();private Date fecha = new Date();private float importe = 0;private boolean estaTerminada = false;private Pago pago;

public void efectuarPago (float monto) {pago = new Pago(monto)return pago.monto - importe

}

}

Page 32: Ejemplo TPV: Diagrama de Casos de Uso TPVadimen.si.ehu.es/~rigau/teaching/EHU/ISO/Curs2009-2010/A... · 2009. 10. 8. · Ejemplo TPV: caso de uso real (1) Caso de uso: Comprar productos

32

Ingeniería del Software

Código Java EfectuarPago: Pago

package TPV;

public class Pago {private float monto;

public Pago (float monto) {this.monto = monto;

}

}