Está en la página 1de 4

Diseo de Sistemas Solucin Punto 1 Ejercicio Manejo de Mercadera

Solucin al ejercicio - Clase 1 Una solucin posible (para tener como gua mientras lo resolvemos en el pizarrn):
cd Costo Costo::Pedido + + + costo() : BigDecimal itemsDelicados() : List productosDelicados() : List

-items

1..* Costo::Producto

Costo::Item + + + costo() : BigDecimal esDelicado() : boolean producto() : Producto -producto + + 1 + + + costo() : BigDecimal costoAlmacenamiento() : BigDecimal costoProduccion() : BigDecimal esDelicado() : boolean peso() : int

Costo::ProductoConserv ado + costoProduccion() : BigDecimal +

Costo::ProductoComprado costoProduccion() : BigDecimal

Costo::ProductoFabricado + costoProduccion() : BigDecimal

Otra opcin es que ProductoConservado herede de ProductoComprado, slo para reutilizar una variable (precioCompra). Podemos hablar de si se justifica heredar en ese caso, teniendo en cuenta que adems a los productos comprados hay que agregarle un 20% para el costo de almacenamiento y no hay que hacer eso para los productos conservados. Surgirn muchas preguntas (espero): hasta dnde conviene documentar, si realmente tiene sentido disear con los atributos o me sirve ms lo que puedo pedirle a un objeto y nada ms, si usar agregacin o asociacin cuando recin empiezo a disear, etc. Solucin en Smalltalk: #Pedido tiene slo una variable de instancia tems (OrderedCollection) costo ^items inject: 0 into: [ :acum :item | acum + item costo ] productosDelicados ^self itemsDelicados collect: [ :item | item producto ] itemsDelicados ^items select: [ :item | item esDelicado ] add: unaCantidad de: producto "Agrega al pedido un producto en una cantidad, p.ej. unPedido addCantidad: 8 de: quesoSardo" items add: (ItemPedido cantidad: unaCantidad de: producto) #Item tiene producto y cantidad costo ^producto costo * cantidad esDelicado ^producto esDelicado

Diseo de Sistemas Solucin Punto 1 Ejercicio Manejo de Mercadera cantidad: unaCantidad de: unProducto "Private - me inicializo con el producto y cantidad indicados" producto:= unProducto. cantidad:= unaCantidad. ^self MC cantidad: unaCantidad de: unProducto "Crea un ItemPedido para el producto y cantidad indicados" ^self new cantidad: unaCantidad de: unProducto #Producto tiene nombre, peso y valorAlmacenamiento como VI esDelicado ^peso < 5 costo <<TEMPLATE METHOD>> ^self costoProduccion + self costoAlmacenamiento costoAlmacenamiento ^peso * valorAlmacenamiento #ProductoComprado tiene precio de Compra como variable de instancia costoProduccion ^precioCompra costoAlmacenamiento ^(super costoAlmacenamiento) * 1.2 #ProductoConservado tiene diasConservacion, precioCompra como VI y costoConservacionDiario como variable de instancia de clase. diasConservacion ^diasConservacion costoProduccion ^precioCompra + (self diasConservacion * self peso * self class costoConservacionDiario) la opcin de Carloncho es que costoConservacionDiario sea un getter de instancia en lugar de clase, eso me permite que si el da de maana se transforma en un atributo de instancia tenga que tocar menos. costoProduccion ^precioCompra + (self diasConservacion * self peso * self costoConservacionDiario) #ProductoFabricado tiene cantidadHorasHombre como VI y costoHoraHombre como VIC costoProduccion ^cantidadHorasHombre * self class costoHoraHombre Dnde lo pruebo? Ambiente

ProductoConservado costoConservacionDiario: 0.1. ProductoFabricado costoHoraHombre: 12. "Productos" panBlanco := ProductoComprado nombre: ''Pan blanco'' peso: 0.6. panBlanco valorAlmacenamientoPorKg: 0.2. panBlanco precioDeCompra: 1.5. quesoSardo quesoSardo quesoSardo quesoSardo := ProductoConservado nombre: ''Queso sardo'' peso: 8. valorAlmacenamientoPorKg: 0.5. precioDeCompraOriginal: 30. diasConservacion: 45.

bondiola := ProductoConservado nombre: ''Bondiola'' peso: 2. bondiola valorAlmacenamientoPorKg: 1.

Diseo de Sistemas Solucin Punto 1 Ejercicio Manejo de Mercadera bondiola precioDeCompraOriginal: 60. bondiola diasConservacion: 90. mayonesa := ProductoFabricado nombre: ''Mayonesa'' peso: 1. mayonesa valorAlmacenamientoPorKg: 0.3. mayonesa cantidadHorasHombre: 6. "Un pedido" pedido := Pedido new. pedido add: 3 de: panBlanco. "1.644" pedido add: 2 de: quesoSardo. "70" pedido add: 1 de: bondiola. "80" pedido add: 4 de: mayonesa. "72.3" pedido costo "514.132 = (1.644*3) + 140 + 80 + (72.3 * 4)"

Diagrama de secuencia de costo de un pedido


sd Costo :Pedido :Reportes BigDecimal= costo() :Item :ProductoComprado :Item :ProductoFabricado

BigDecimal= costo()

BigDecimal= costo()

BigDecimal= costoAlmacenamiento()

BigDecimal= costoProduccion()

BigDecimal= costo() BigDecimal= costo()

...

Diseo de Sistemas Solucin Punto 1 Ejercicio Manejo de Mercadera Diagrama de secuencia de los productos delicados de un pedido
sd Productos delicados-con delegacin :Pedido :Reportes List= productosDelicados() item no delicado :Item :ProductoComprado item delicado :Item :ProductoFabricado

List= itemsDelicados()

boolean= esDelicado() boolean= esDelicado()

boolean= esDelicado() boolean= esDelicado()

Producto= producto()

También podría gustarte