Beruflich Dokumente
Kultur Dokumente
Ejemplo (incompleto) de desarrollo de una Las O/D son documentos que contienen un nmero identificador, los
datos del cliente al cual van dirigidas y una lista de productos con sus
aplicacin en Java cantidades y precios a despachar.
Total: $ 159.500
Notamos relacin TODO-PARTE entre O/D y Producto en Notamos que una actualizacin en los precios de producto,
O/D modificara la informacin de O/D registradas. Luego es
O/D necesario registrar el precio unitario en el Producto en O/D:
Cliente
0..* 1..1
nmero rut
precio total razn social O/D Cliente
impuesto direccin nmero
0..* 1..1
rut
telfono precio total razn social
impuesto direccin
telfono
0..*
Producto en O/D Producto
0..* 1..1 Producto
cdigo 0..*
cantidad nombre Producto en O/D cdigo
0..* 1..1 nombre
unidad
cantidad unidad
precio unitario
precio unitario precio unitario
Franco Guidi Polanco 5 Franco Guidi Polanco 6
cantidad=2 cdigo=P1189
precio unitario=7000 nombre=Pintura invisible
unidad=galn
precio unitario=7000
Franco Guidi Polanco 7 Franco Guidi Polanco 8
Modelo de Diseo: consideraciones a la primera
Modelo de Diseo: primera aproximacin
aproximacin
El precio total de la O/D ser almacenado en una variable de instancia El modelo establece que una O/D debe estar asociada siempre a un
o calculado sumando los precios unitarios de los Productos en O/D?... Cliente Podemos forzar esto?
No importa, encapsulemos el proceso de obtencin dentro de un S:
mtodo. Incluyendo como parmetro del constructor de O/D una referencia a
Cliente. Podemos, incluso, generar una excepcin en la instanciacin de
OrdenDespacho Cliente O/D si la referencia a cliente pasada por parmetro tiene valor null.
0..* 1..1 Si admitimos un mtodo setCliente, verificando que este mtodo no
nmero rut
contenga una referencia null.
impuesto raznSocial
direccin
getPrecioTotal() OrdenDespacho Cliente
telfono 0..* 1..1
nmero rut
impuesto raznSocial
Producto direccin
0..* setCliente(c:Cliente) telfono
cdigo getPrecioTotal()
Producto en OD setCliente(c:Cliente){
0..* 1..1 nombre OD(cliente:Cliente) if(c != null)
cantidad unidad cliente = c;
precioUnitario precioUnitario }
Cmo implementamos las asociaciones en Java? Cmo implementamos las asociaciones en Java?
OrdenDespacho
Cliente
OrdenDespacho Implementaciones alternativas
-nmero: String -rut:String -nmero: String de la asociacin de O/D y
-impuesto: float -raznSocial:String -impuesto: float Producto en O/D (entre otras)
-direccin:String
setCliente(c:Cliente) 0..* 1..1 setCliente(c:Cliente)
-telfono:String public class OrdenDespacho{
getCliente(): Cliente getCliente(): Cliente
getNumero(): int getRut():String getNumero(): int private String nmero;
getPrecioTotal(): int getRaznSocial():String getPrecioTotal(): int private float impuesto;
addProducto(p:Producto,cant:int) getDireccin():String addProducto(p:Producto,cant:int) private Cliente cliente;
OD(nmero:int, cliente:Cliente getTelfono():String OD(nmero:int, cliente:Cliente private ProductoEnOD[] productoEnOD;
impuesto:float) Cliente(rut:String,rs:String, impuesto:float)
dir:String,tel:String)
}
0..* import java.util.Vector;
public class OrdenDespacho{
public class OrdenDespacho{
private String nmero; Implementacin de la ProductoEnOD
private String nmero;
private float impuesto; -cantidad:int
private Cliente cliente;
asociacin O/D con -precioUnitario:int private float impuesto;
private Cliente cliente;
Cliente setCantidad(c:int)
getCantidad():int private Vector productoEnOD;
} setPrecioUnitario(p:int)
getPrecioUnitario():int }
Franco Guidi Polanco 15 Franco Guidi Polanco 16
Cmo implementamos las asociaciones en Java? Modelo de Diseo: qu falta?
Producto
ProductoEnOD Implementacin Cmo mantenemos los datos de O/D,
-cdigo:String
-cantidad:int -nombre:String de asociacin Clientes y Productos en la aplicacin?
-precioUnitario:int 0..* 1..1
setCantidad(c:int)
-unidad:String entre Podramos manejarlos en arreglos o
-precioUnitario:int
getCantidad():int getCdigo():String ProductoEnOD y Vectores:
setPrecioUnitario(p:int)
getPrecioUnitario():int
getNombre():String Producto
getUnidad():String
setPrecioUnitario(p:int)
public class SistemaOrdenes{
getPrecioUnitario()String
Producto(cod:String, public static void main(String[] arg){
nom:string, un:string,
pu:int) Cliente[] cliente = new Cliente[10000];
OD[] od = new OD[10000];
public class ProductoEnOD{ Producto[] = new Producto[10000];
private int cantidad;
private int precioUnitario; }
private Producto producto; }
}
Franco Guidi Polanco 17 Franco Guidi Polanco 18
// agregar un Producto
ListaOD ListaClientes ListaProductos listaProducto.agregar( nuevoProducto );
}
buscar(clave:String):Object buscar(clave:String):Object buscar(clave:String):Object }
Lista
{abstract}
Podramos definir un nico tipo de lista para
manipular todas las colecciones?
Respuesta: S.
ListaOD ListaClientes ListaProductos
Pregunta Cmo? Con uso adecuado de abstracciones
(ver principio de inversin de dependencia). Tarea.
0..* 0..*
0..* 1..1 Adems podramos utilizar Generics de Java.
OrdenDespacho Cliente
Se sugiere revisar adems el Java Collections
0..*
0..* Framework.
0..* 1..1
ProductoEnOD Producto