Diferencia entre revisiones de «Práctica de Modelo Conceptual (Ingeniería I)»
(No se muestra una edición intermedia del mismo usuario) | |||
Línea 2: | Línea 2: | ||
== Ejercicio 01 == | == Ejercicio 01 == | ||
<i> | |||
En un restaurante trabajan cocineros, mozos y empleados de limpieza. Para todos ellos | |||
se desean guardar los siguientes datos: nombre, documento, dirección y teléfono. El | |||
restaurante ofrece una variada cantidad de platos y los cocineros pueden | |||
especializarse en distintos de ellos, como por ejemplo: platos franceses, italianos, | |||
griegos, zulúes, etc. Además los platos se pueden separar en fríos o calientes. Los | |||
empleados de limpieza pueden estar encargados de la limpieza general del restaurante | |||
o ser lavadores de cacharros. Los primeros trabajan por horas y para los segundos es | |||
necesario guardar la cantidad de cacharros rotos para descontarlos luego de su sueldo. | |||
Los mozos están asignados a mesas determinadas. Esta asignación cambia todos los | |||
meses. Cada mesa puede pedir varios platos, bebidas y postres. | |||
Realice un modelo conceptual del anterior enunciado. | |||
</i> | |||
<br><br>'''Rta:'''<br> | |||
== Ejercicio 02 == | == Ejercicio 02 == | ||
== Ejercicio 03 == | == Ejercicio 03 == | ||
Línea 125: | Línea 140: | ||
[[Category:Prácticas]] | [[Category:Prácticas]] | ||
Revisión del 15:36 10 oct 2007
Ejercicio 01
En un restaurante trabajan cocineros, mozos y empleados de limpieza. Para todos ellos
se desean guardar los siguientes datos: nombre, documento, dirección y teléfono. El
restaurante ofrece una variada cantidad de platos y los cocineros pueden
especializarse en distintos de ellos, como por ejemplo: platos franceses, italianos,
griegos, zulúes, etc. Además los platos se pueden separar en fríos o calientes. Los
empleados de limpieza pueden estar encargados de la limpieza general del restaurante
o ser lavadores de cacharros. Los primeros trabajan por horas y para los segundos es
necesario guardar la cantidad de cacharros rotos para descontarlos luego de su sueldo.
Los mozos están asignados a mesas determinadas. Esta asignación cambia todos los
meses. Cada mesa puede pedir varios platos, bebidas y postres.
Realice un modelo conceptual del anterior enunciado.
Rta:
Ejercicio 02
Ejercicio 03
Ejercicio 04
Ejercicio 05
Ejercicio 06
Dado el modelo conceptual, modelar con OCL los siguientes puntos:
a)
- Un invariante que asegure que en ningún caso se vendan más litros que la capacidad máxima del tanque de combustible del automóvil (por razones de seguridad está prohibido vender combustible en bidones).
- Un invariante que garantice un tanque de combustible nunca tenga más combustible que su capacidad máxima.
- Un invariante que asegure que el importe de cada venta de combustible sea el correcto en función de los litros vendidos y según que tipo de surtidor lo haya expedido.
- Un invariante que asegure que el 60% de los automóviles que compran combustible en una estación de servicio, sean de un modelo superior al año 2000.
Modifique el diagrama presentado (agregando clases, agregando/cambiando relaciones, agregando/cambiando atributos, utilizando OCL, pero respetando las clases dadas) con el fin de que se adecue al siguiente enunciado:
Una estación de servicio puede tener dos tipos de surtidores, de nafta o diesel. Existen automóviles nafteros y de motor diesel. Según corresponda, cada automóvil utiliza el surtidor correspondiente. Los comprobantes de venta (ticket) siempre se hacen a nombre del dueño del automóvil, el cual puede o no ser socio del plan "clientes VIP" de la estación de servicio.
El plan "clientes VIP" es un plan que permite que durante un período de tiempo (seis meses), un cliente obtenga un 10% de descuento en todas sus compras de combustible.
Respuestas
Invariantes con OCL
context TicketVentaCombustible -- No se venden más litros que la capacidad máxima del tanque de combustible del automóvil. inv VentaEntraEnTanque: self.litrosVendidos < self.cliente.tieneUn.tanque.capacidadMaxima
context TanqueCombustible -- Un tanque de combustible nunca tenga más combustible que su capacidad máxima inv CantidadMenorACapacidad: self.cantidad <= self.capacidadMaxima
context TicketVentaCombustible -- El importe de cada venta de combustible es el correcto. inv ImporteCorrecto: self.importe = self.litrosVendidos * self.expedidoPor.precioXLitro
context EstacionServicio -- El 60% de los automóviles que compran combustible en una estación de servicio, sean de un modelo superior al año 2000. inv AutosNuevos: self.surtidores.ticketEmitidos.cliente.tieneUn->select(Automovil a | a.modelo > 2000).size / self.surtidores.ticketEmitidos->size >= 0.6
b)
Ejercicio 07
Dado el modelo conceptual, modelar con OCL los siguientes puntos:
- Un invariante que garantice que un mago sea más poderoso que otro, sólo si conoce algún hechizo tal que el otro mago no conoce su contrahechizo.
- Un invariante que garantice que ninguna pócima puede bloquear a un hechizo y a su contrahechizo.
- Un invariante que garantice que ningún mago puede elaborar una pócima que bloquee a todos los hechizos conocidos (lo cual no implica que dicha pócima no exista).
- El atributo derivado esJovenMaravilla. Se dice que un mago es un joven maravilla, cuando es el mago más joven que más hechizos conoce. Es decir, de aquellos magos que poseen la menor edad, el que conoce más hechizos.
Modificar el modelo (agregando / quitando entidades, relaciones y / o predicados en OCL) de manera tal de contemplar el siguiente texto:
El bloqueo de un hechizo por parte de una pócima, no es indefinido. Según cuál sea el hechizo, el efecto de bloqueo tiene una duración determinada.
Las pócimas están compuestas por ingredientes, que las componen con ciertas cantidades. Los ingredientes pueden ser de origen animal, vegetal o mineral. Aquellas pócimas que están compuestas sólo por ingredientes de origen mineral, no son capaces de bloquear a ningún hechizo.
Existen magos que no son capaces de elaborar ninguna pócima, y sólo son capaces de realizar hechizos. Estos magos son conocidos como hechiceros.
Respuestas
Invariantes y atributos derivados
context Mago --Un mago es más poderoso que otro, sólo si conoce algún hechizo tal que el otro mago no conoce su contrahechizo inv DebilSiNoSabeContrahechizo: self.masPoderosoQue->forAll(Mago m | self.conoce->exists(Hechizo h | not m.conoce->exists(Hechizo c | h.contraHechizo = c) ) )
context Hechizo --Ninguna pócima puede bloquear a un hechizo y a su contrahechizo inv PocimaNoBloqueaHechizoYContraHechizo: self.esBloqueadoPor->intersection(self.contraHechizo.esBloqueadoPor)->isEmpty
context Mago --Ningún mago puede elaborar una pócima que bloquee a todos los hechizos conocidos (lo cual no implica que dicha pócima no exista) inv NoElaboraSuperPocima: self.sabeElaborar->forAll(Pocima p | p.puedeBloquear->size < Hechizo.allInstances->size)
context Mago::esJovenMaravilla::Boolean --Un mago es un joven maravilla, cuando es el mago más joven que más hechizos conoce derive: Mago.allInstances->forAll(Mago m | (self = m) OR (self.edad < m.edad) OR (self.edad = m.edad AND self.conoce->size > m.conoce->size) )
Nuevas funcionalidades:
El bloqueo de un hechizo por parte de una pócima, no es indefinido. Según cuál sea el hechizo, el efecto de bloqueo tiene una duración determinada.
Agregar una clase de asociación para la asociacion entre Pocima y Hechizo para la asociación Bloqueo, con el atributo Duración de dominio tiempo o tipo Real.
Las pócimas están compuestas por ingredientes, que las componen con ciertas cantidades. Los ingredientes pueden ser de origen animal, vegetal o mineral. Aquellas pócimas que están compuestas sólo por ingredientes de origen mineral, no son capaces de bloquear a ningún hechizo.
Agregar una clase Ingrediente, con el atributo Tipo que se corresponda a un tipo enumerado TipoIngrediente, con los valores Animal, Vegetal y Mineral. Armar una clase de asociación entre Ingrediente y Pocima de 0..* a 1..* (toda pocima debe tener al menos un ingrediente), con el atributo Cantidad de tipo Integer. Además, incluir el siguiente invariante.
context: Pocima --Las pócimas compuestas sólo por ingredientes de origen mineral, no son capaces de bloquear a ningún hechizo. inv MineralesNoBloquean: self.compuestaPor->forAll(Ingrediente i | i.tipo = Mineral) implies self.puedeBloquear->isEmpty
Existen magos que no son capaces de elaborar ninguna pócima, y sólo son capaces de realizar hechizos. Estos magos son conocidos como hechiceros.
Agregar una clase Hechicero, que tenga las asociaciones masPoderosoQue/masDebilQue y conoce. Quitar esas asociaciones de la clase Mago, y hacer que Mago herede de Hechicero.