Diferencia entre revisiones de «Práctica de Modelo Conceptual (Ingeniería I)»

De Cuba-Wiki
 
Línea 18: Línea 18:


== Ejercicio 02 ==
== Ejercicio 02 ==
<i>
En una droguería se fabrican medicamentos. Cada medicamento se obtiene a partir de la combinación de distintas drogas, las cuáles están descriptas en su fórmula.
Las drogas son suministradas por proveedores. Las drogas se compran de a lotes.
Cuando un nuevo lote de una droga (siempre los lotes son de una sola droga) ingresa
a la droguería, éste permanece en cuarentena hasta tanto se certifique mediante
distintos análisis que su calidad es satisfactoria. Los resultados de los análisis pueden ser consultados en cualquier momento. Tras superar los análisis, el lote deja de estar en cuarentena y pasa a estar en producción.
A partir de los lotes de drogas en producción se fabrican los lotes de medicamentos
que finalmente se venderán. Los lotes de medicamentos poseen un tratamiento similar
a los de drogas: inicialmente se encuentran en cuarentena hasta tanto un conjunto de
análisis certifican su buen estado. Es importante saber, dado un lote de medicamentos,
de cuáles lotes de drogas provienen sus componentes.
Realice un modelo conceptual que permita modelar lo mencionado en el enunciado. Justifique las entidades, relaciones y cardinalidades utilizadas. ¿Existen restricciones que no ha podido modelar con su modelo?. Justifique
utilizando ejemplos instanciados en el problema.</i>
<br><br>'''Rta:'''<br>
== Ejercicio 03 ==
== Ejercicio 03 ==
== Ejercicio 04 ==
== Ejercicio 04 ==

Revisión del 15:38 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

En una droguería se fabrican medicamentos. Cada medicamento se obtiene a partir de la combinación de distintas drogas, las cuáles están descriptas en su fórmula. Las drogas son suministradas por proveedores. Las drogas se compran de a lotes. Cuando un nuevo lote de una droga (siempre los lotes son de una sola droga) ingresa a la droguería, éste permanece en cuarentena hasta tanto se certifique mediante distintos análisis que su calidad es satisfactoria. Los resultados de los análisis pueden ser consultados en cualquier momento. Tras superar los análisis, el lote deja de estar en cuarentena y pasa a estar en producción. A partir de los lotes de drogas en producción se fabrican los lotes de medicamentos que finalmente se venderán. Los lotes de medicamentos poseen un tratamiento similar a los de drogas: inicialmente se encuentran en cuarentena hasta tanto un conjunto de análisis certifican su buen estado. Es importante saber, dado un lote de medicamentos, de cuáles lotes de drogas provienen sus componentes. Realice un modelo conceptual que permita modelar lo mencionado en el enunciado. Justifique las entidades, relaciones y cardinalidades utilizadas. ¿Existen restricciones que no ha podido modelar con su modelo?. Justifique utilizando ejemplos instanciados en el problema.

Rta:

Ejercicio 03

Ejercicio 04

Ejercicio 05

Ejercicio 06

Dado el modelo conceptual, modelar con OCL los siguientes puntos:

a)

  1. 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).
  2. Un invariante que garantice un tanque de combustible nunca tenga más combustible que su capacidad máxima.
  3. 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.
  4. 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:

  1. 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.
  2. Un invariante que garantice que ninguna pócima puede bloquear a un hechizo y a su contrahechizo.
  3. 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).
  4. 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.

Ejercicio 08

Ejercicio 09

Ejercicio 10

Ejercicio 11