Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Casos de Uso - Solución Ejercicio
Casos de Uso - Solución Ejercicio
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
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.
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)"
BigDecimal= costo()
BigDecimal= costo()
BigDecimal= costoAlmacenamiento()
BigDecimal= costoProduccion()
...
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()
Producto= producto()