You are on page 1of 32

Ingeniería del Software

Ejemplo TPV: Diagrama de Casos de Uso TPV
Comprar productos

Registrar Productos

CLIENTE
Iniciar sesión

CAJERO

1

Ingeniería del Software

Ejemplo TPV: caso de uso real (1)
Caso de uso: Comprar productos v1 Actores: 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

2

Ingeniería del Software

Ejemplo TPV: caso de uso real (2)

Comprar Productos

Código Producto

Precio

Total

Monto

a b c d
Introducir Producto

Cantidad

Descuento

e f g
Efectuar Pago

A devolver

h

Terminar Venta

i

j

3

Cliente: Se marcha con los artículos comprados. 12. Cajero: Le indica el total de la venta al Cliente. Genera un recibo. Si hay más de un producto. Cajero: Gestiona el pago. es opcional añadir la cantidad en e. Cajero: Indica al TPV que se concluyó la captura de productos pulsando i. Cliente: Llega a un TPV con productos que desea comprar. Sistema: Calcula y presenta el total con impuestos de la venta en c. 2. Se añade el producto con h. 10. 5. Cajero: Da al Cliente el recibo impreso. y presenta el precio en b de la ventana-cp y la suma parcial en c. 9. Sistema: Registra la línea de la venta. 3. Cliente: Efectúa un pago. 8. 4. 6. Cajero: Teclea el código de producto en a de la ventana-cp. 4 . Cajero: Comienza una nueva venta. 7. 11. El Cajero repite los pasos 3 a 4 hasta terminar los artículos del Cliente.Ingeniería del Software Ejemplo TPV: caso de uso completo (2) Escenario principal (o curso normal de los eventos): 1. Sistema: Registra la venta.

Ingeniería del Software Diagrama de clases Gerente inicia TPV está Sólo hay una TPV! Tienda ofrece Catálogo Cajero gestiona registra contiene consta * referencia * Producto cp descripción precio Cliente inicia Venta fecha importe estaTerminada requiere Pago monto LineaVenta cantidad Sólo hay una venta! 5 .

c) TerminarVenta() : importe EfectuarPago(monto) : cambio 6 .Ingeniería del Software Ejemplo: Caso de uso Comprar productos :Cajero :Sistema IniciarVenta() * AñadirProducto(cp.

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  7 .

Ingeniería del Software Diagrama de secuencia: IniciarVenta :TPV iniciarVenta() crear() :Venta 8 .

import java. . private Venta venta.*. private boolean esNuevaVenta() { return (venta==null) || (venta..util. } } } 9 .Ingeniería del Software Código Java IniciarVenta: TPV package TPV.. class TPV { private Catalogo catalogo.estaTerminada())} public void IniciarVenta () { if (esNuevaVenta()) { venta = new Venta().

class Venta { private Vector lineaVenta = new Vector().Ingeniería del Software Código Java AñadirProducto: Venta package TPV.. private float importe = 0.*. import java. private boolean estaTerminada = false. } 10 .util.. . private Date fecha = new Date().

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  c >= 0  Existe una Venta v asociada a TPV Postconditions  Se dio de alta una instancia de LíneaVenta lv con lv.Ingeniería del Software Contrato AñadirProducto    Name:AñadirProducto(cp.cp = cp Salida  p. Preconditions  Existe un producto p con p.precio 11   . c) Responsabilities  Registrar una línea de venta.descripción y p.

c) :Gestor Rol (actor) CU o transacción 12 .c) :Tienda Fachada sistema Fachada negocio :Cajero AñadirProducto(cp.c) AñadirProducto(cp.c) AñadirProducto(cp.Ingeniería del Software Diagrama de secuencia: AñadirProducto  Selección de la clase controlador :TPV AñadirProducto(cp.

c) p.Ingeniería del Software Diagrama de secuencia: AñadirProducto :TPV añadirProducto(cp.precio p. c) :LineaVenta 13 . c) :Catálogo :Producto producto(cp) p obtener(cp) :Venta agregarLV(p.descripción crear(p.

cantidad) Catálogo producto(cp):producto Producto cp:int precio:real descipcion:string obtener(cp):producto 14 .Ingeniería del Software Diagrama de clases: AñadirProducto TPV iniciaVenta(): añadirProducto(cp. cantidad) terminarVenta():real efectuarPago(real):real Venta fecha:date importe: float estaTerminada: boolean agregarLV(producto.

. class TPV { private Catalogo catalogo. venta. cantidad). import java. int cantidad) { Producto p = catalogo.. public void añadirProducto (int cp.agregarLV(p. private Venta venta. } } 15 .*.Ingeniería del Software Código Java AñadirProducto: TPV package TPV.producto(cp).util. .

cp = cp Salida  p.descripción y p.Ingeniería del Software Contrato AñadirProducto    Name:AñadirProducto(cp. c) Quién es el responsable de Responsabilities comprobar esto?  Registrar una línea de venta. Preconditions  Existe un producto p con p.precio 16   .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  c >= 0  Existe una Venta v asociada a TPV Postconditions  Se dio de alta una instancia de LíneaVenta lv con lv.

catalogo. 2.*.put(new Integer(200). catalogo.Ingeniería del Software Código Java AñadirProducto: Catalogo package TPV. public class Catalogo { private Hashtable catalogo = new Hashtable(). } } 17 . c). 1. import java. } public producto producto (int cp) { return (producto) catalogo. “ producto 200” ).util. “ producto 100” ). c).put(new Integer(100). public Catalogo() { catalogo c = new producto(100. catalogo c = new producto(200.get(new Integer (cp)).

} .. String descripcion) { this.cp = cp. this..descripcion = descripcion. public class Producto { private int cp = 0.Ingeniería del Software Código Java AñadirProducto: Producto package TPV. } 18 . this. public producto (int cp. private String descripcion = “ ” . private float precio = 0. float precio.precio = precio.

int c){ lineaVenta. public void agregarLV (producto p.. class Venta { private Vector lineaVenta = new Vector(). c)). private Date fecha = new Date().*. private float importe = 0.Ingeniería del Software Código Java AñadirProducto: Venta package TPV..addElement(new LineaVenta(p. } } 19 . import java. . private boolean estaTerminada = false.util.

cantidad = cantidad.producto = p.. . } } 20 . int cantidad) { this. private Producto producto.Ingeniería del Software Código Java AñadirProducto: LineaVenta package TPV. class LineaVenta { private int cantidad.. public LineaVenta (producto p. this.

importe  21 .importe = suma de los subtotales de todas las lineas de venta asociadas a la Venta v  v.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.terminada = verdadero Salida  importe = v.

Ingeniería del Software Diagrama de secuencia: TerminarVenta :TPV terminarVenta() terminar() total() :Venta :LineaVenta :Producto * subtotal() precio() importe 22 .

cantidad) terminarVenta():real efectuarPago(real):real Venta agregarLV(producto.Ingeniería del Software Diagrama de clases: TerminarVenta TPV iniciaVenta(): añadirProducto(cp. cantidad) terminar():real Catálogo producto(cp):producto LineaVenta subtotal():real Producto obtener(cp):producto precio() 23 .

import java.Ingeniería del Software Código Java TerminarVenta: TPV package TPV..terminar(). } } 24 . .util. class TPV { private Catalogo catalogo.. return (float) venta. private Venta venta.*. public float terminarVenta () { venta.total().

. private float importe = 0. private Date fecha = new Date(). return total. enumeration e = lineaVenta. } importe = total. import java.hasMoreElements()) { total += ( (LineaVenta) e. . } } 25 .subtotal().*. class Venta { private Vector lineaVenta = new Vector(). public void terminar () { estaTerminada = true.util.nextElement() )..elements(). } public float total() { float total = 0. while (e. private boolean estaTerminada = false.Ingeniería del Software Código Java TerminarVenta: Venta package TPV.

. public float subtotal () { return cantidad * producto. class LineaVenta { private int cantidad.precio(). private Producto producto. } } 26 .Ingeniería del Software Código Java TerminarVenta: LineaVenta package TPV.. .

public float precio () { return precio. public class Producto { private int cp = 0.. private String descripcion = “ ” . private float precio = 0.} .. } 27 .Ingeniería del Software Código Java TerminarVenta: Producto package TPV.

Ingeniería del Software Diagrama de secuencia: EfectuarPago :TPV efectuarPago(monto) efectuarPago(monto) :Venta crear(monto) :Pago cambio cambio 28 .

Ingeniería del Software Diagrama de clases: EfectuarPago TPV iniciaVenta(): añadirProducto(cp. cantidad) terminarVenta():real efectuarPago(real):real Venta agregarLV(producto. cantidad) terminar() importe() efectuarPago(real):real Catálogo producto(cp):producto Producto obtener(cp):producto 29 .

public float efectuarPago (float monto) { return venta.Ingeniería del Software Código Java EfectuarPago: TPV package TPV. private Venta venta..util. import java.efectuarPago(monto). .. class TPV { private Catalogo catalogo.*. } } 30 .

Ingeniería del Software Código Java EfectuarPago: Venta package TPV.util. private Date fecha = new Date().importe } } 31 . public void efectuarPago (float monto) { pago = new Pago(monto) return pago.monto . import java. private boolean estaTerminada = false. private Pago pago. class Venta { private Vector lineaVenta = new Vector().*. private float importe = 0.

monto = monto. } } 32 . public Pago (float monto) { this.Ingeniería del Software Código Java EfectuarPago: Pago package TPV. public class Pago { private float monto.