1. El costo total del cultivo de una parcela determinada (costo x hectárea por tamaño de la parcela). >>Parcela (VI: hectareasCultivadas, totalHectareas, costo, cultivo, cantidadEnSilo) costoTotal ^cultivo costoTotalPara: self >>Cultivo costoTotalPara: unaParcela ^(self costoBaseXHectareaPara: unaParcela) * unaParcela hectareasCultivadas >>Soja hereda de Cultivo costoBaseXHectareaPara: unaParcela ^10 >>SojaTransgenica hereda de Soja, no define costo >>Trigo costoTotalPara: unaParcela ^(super costoXHectareaSegun: unaParcela) min: 500 >>Sorgo costoBaseXHectareaPara: unaParcela ^(unaParcela cantidadCultivada < 50) ifTrue: [ 3 ] ifFalse: [ 2 ] 2. El precio de venta del cultivo de una parcela determinada (precio venta x hectárea por cantidad a vender, siempre que no exceda la cantidad cultivada de la parcela). >>Soja precioVentaPorKiloDe: unaParcela | precioBase | precioBase := (self costoBaseXHectareaPara: unaParcela) * 10. (unaParcela totalHectareas > 1000) ifTrue: [ precioBase := precioBase * 0.9 ]. ^precioBase >>SojaTransgenica (VI: puedeOcasionarMutaciones) precioVentaPorKiloDe: unaParcela | precioBase | precioBase := super precioVentaPorKiloDe: unaParcela. puedeOcasionarMutaciones ifTrue: [ precioBase := precioBase * 0.5 ]. ^precioBase >>Trigo (VI: conservantes) precioVentaPorKiloDe: unaParcela ^20 - self precioConservantes otra opción es que cada parcela conozca los conservantes que usó para el cultivo: >>Trigo (VI: conservantes) precioVentaPorKiloDe: unaParcela ^20 - unaParcela precioConservantes precioConservantes ^conservantes inject: 0 into: [ :acum :conservante | acum + conservante costo ] >>Sorgo precioVentaPorKiloDe: unaParcela ^20 3. El monto de una venta. >>Venta (VI: cantidadAVender, cultivo, comprador) montoPara: unaParcela ^(cultivo precioVentaDe: unaParcela) * cantidadAVender * (comprador coeficienteAjustePara: self) >>CompradorNacional coeficienteAjustePara: unaVenta ^(unaVenta cantidadAVender > 500) ifTrue: [ 1.1 ] ifFalse: [ 1 ] >>CompradorExtranjero (VC: CoeficienteAjuste) coeficienteAjustePara: unaVenta ^CoeficienteAjuste >>CompradorEspecial (VI: cultivosSinRecargo) coeficienteAjustePara: unaVenta ^(cultivosSinRecargo includes: unaVenta cultivo) ifTrue: [ 1 ] ifFalse: [ 1.05 ] Se puede mejorar delegando: a) la pregunta a hacer b) el monto por recargo pero lo dejamos acá 4. Cuáles son los cultivos de un agricultor, sin repetidos. >>Agricultor (VI: parcelas) cultivos ^(parcelas collect: [ :parcela | parcela cultivo ]) asSet 5. La facturación de una parcela en un rango de fechas >>Parcela (VI: ventas) facturacionDesde: unaFecha hasta: otraFecha ^(self ventasDesde: unaFecha hasta: otraFecha) inject: 0 into: [ :acum :venta | acum + venta montoPara: self ] ventasDesde: unaFecha hasta: otraFecha ^ventas select: [ :venta | venta seRealizoEntre: unaFecha y: otraFecha ] >>Venta seRealizoEntre: unaFecha y: otraFecha ^fecha between: unaFecha and: otraFecha 6. Cuál fue la parcela que más facturó en un rango de fechas. >>Agricultor parcelaConMasFacturacionEntre: unaFecha y: otraFecha ^(parcelas asSortedCollection: [ :parcela1 :parcela2 | (parcela1 facturacionDesde: unaFecha hasta: otraFecha) > (parcela2 facturacionDesde: unaFecha hasta: otraFecha) ]) first 7. Saber si un agricultor tiene alguna parcela subutilizada >>Agricultor tieneAlgunaParcelaSubutilizada ^parcelas anySatisfy: [ :parcela | parcela estaSubutilizada ] >>Parcela estaSubutilizada ^(hectareasCultivadas / totalHectareas) < 0.5 8. Registrar una venta de la cantidad de kilos de un cultivo para una parcela a un comprador x >>Parcela vender: unaCantidad a: unComprador (cantidadEnSilo < unaCantidad) ifTrue: [ self error: 'No hay suficiente cantidad en el silo' ]. ventas add: (Venta new fecha: Date today; cantidadAVender: unaCantidad; cultivo: cultivo; comprador: unComprador). cantidadEnSilo := cantidadEnSilo - unaCantidad. 9. Plantar en una parcela una cantidad de hectáreas de un cultivo nuevo. >>Agricultor cosechar parcelas do: [ :parcela | parcela cosechar ] >>Parcela cosechar cantidadEnSilo := cantidadEnSilo + cultivo cantidadKilosAObtener. hectareasCultivadas := 0. Para el diagrama de clases: http://www.diagramadeclases.com.ar/ Parcela hectareasCultivadas totalHectareas costo cantidadEnSilo -------- costoTotal (1) estaSubutilizada (8) vender:a: (7) cosechar (9) Cultivo costoBaseXHectareaSegun: (1) precioVentaPorKiloDe: (2) Trigo costoBaseXHectareaSegun: precioVentaPorKiloDe: Sorgo costoBaseXHectareaSegun: precioVentaPorKiloDe: Soja costoBaseXHectareaSegun: precioVentaPorKiloDe: SojaTransgenica puedeOcasionarMutaciones precioVentaPorKiloDe: Venta ------ montoPara: (3) Comprador coeficienteAjustePara: (3) CompradorExtranjero CoeficienteAjuste (VC) -------- coeficienteAjustePara: CompradorNacional coeficienteAjustePara: CompradorEspecial cultivosSinRecargo ------- coeficienteAjustePara: Agricultor ------ cultivos (4) parcelaConMasFacturacionEntre:y: (6) tieneAlgunaParcelaSubutilizada (7) cosechar (9) Agricultor parcelas * parcelas Parcela cultivo 1 cultivo Venta cultivo 1 cultivo Venta comprador 1 comprador