Académique Documents
Professionnel Documents
Culture Documents
NOTA: La solución del siguiente ejercicio ha sido desarrollado y explicado por un colega y amigo Isidro
Hernanz. Desarrollado cuando dictábamos un asignatura de UML. Este ejercicio esta resuelto con una
versión anterior de UML, pero los conceptos e interpretaciones dan una idea clara del modelo conceptual.
También tener cuidado con las multiplicidades que al copiarlo del graficador fueron alteradas.
Comento algunas palabras usadas que podrían mal interpretarse:
Carrera=diploma
Curso=año académico, no asignatura
Academia=instituto superior
Convocatoria=la vez en que se lleva una asignatura,etc.
Enunciado
1
La información de la historia clínica del paciente incluye nombre, apellidos, domicilio, teléfono, número de la
seguridad social, fecha de nacimiento del paciente, peso, talla, las incompatibilidades que presenta, sus alergias, los
antecedentes familiares con los que cuenta y referencias a sus enfermedades.
Se pide
Representar en un diagrama de clases el vocabulario del problema (clases; asociaciones, agregaciones y
composiciones; jerarquías y atributos).
2
Solución
Para construir el diagrama de clases del problema vamos a ir realizando las diferentes partes del
mismo en diferentes diagramas parciales que finalmente ensamblaremos en un diagrama final.
El primer diagrama que vamos a construir es el que representa la parte del enunciado que habla de
los alimentos y nutrientes.
En este diagrama aparecen las clases Alimento y Nutriente, que están relacionadas por una
agregación (Alimento es un agregado de Nutriente), y se describen a su vez las subclases que le
corresponden a este último: Macronutriente y Micronutriente.
Aparece una clase asociación “Compone” entre Alimento y Nutriente, que almacena la informacíón
de la proporción con que cada nutriente aparece en cada alimento en su atributo “proporción”. A través de
esta información el atributo “funcionalidad principal” de Alimento se puede calcular en función del atributo
“funcionalidad principal” de Nutriente, siendo el primero, pues, un atributo derivado.
Continuando con la lectura del enunciado nos describen ahora los macro y micronutrientes. Los
últimos se pueden representar así:
3
En este diagrama se describen las jerarquías que existen entre las clases Micronutriente, Vitamina,
Mineral, (vitamina) Liposoluble y (vitamina) Hidrosoluble.
Pasando a la parte del enunciado que describe los macronutrientes, el diagrama correspondiente
quedaría de la siguiente forma:
Vemos que, como se describe en el enunciado, los macronutrientes pueden ser de tres tipos,
carbohidratos, grasas y proteínas, que éstas a su vez están fomadas por aminoácidos (relación de
agregación con la multiplicidad “1..22” en el lado de los aminoácidos (una proteína puede estar formada por,
desde un aminoácido hasta por los 22). Se trata de una agregación porque un mismo aminoácido puede
formar parte de diferentes proteínas. Evidentemente las instancias de estas clases son “objetos abstractos”,
no entidades físicas. Cada instancia de la clase proteína no es una cadena órganica física, sino el concepto
de todas aquellas que tienen la misma composición y estructura.
La clase Aminoácido, a su vez tiene una subclase que es la clase Esencial. Esto último se podría
haber representado también de la siguiente forma:
4
Lo único destacable en este caso es que hay que describir ahora la clase Aminoácido como clase
abstracta.
En el siguiente bloque de información, el enunciado nos da las pautas para dibujar otra parte del
diagrama:
5
En nuestro caso, diferentes dietas están formadas por combinaciones diferentes de alimentos, cada
uno de los cuales formará parte de una o varias dietas (o quizá de ninguna). Una relación de esta naturaleza
no es una composición por lo que debemos representarla como una simple agregación.
Otra clase nueva que aparece, continuando con la lectura del enunciado, es la clase Enfermedad.
Dicha clase aparece relacionada con otras dos clases: por una parte con la clase Dieta, asociación a la que
hemos puesto como nombre “cura”, siendo el sujeto de dicha frase la clase Dieta y predicado la clase
Enfermedad. Por otra parte, está asociada a la clase Nutriente, con una asociación que hemos llamado
“produce (por falta)”, siendo el sujeto en este caso la clase Nutriente y el predicado la clase Enfermedad. En
ambas asociaciones hemos seguido la recomendación de utilizar verbos para nombrar a las asociaciones.
Con respecto a la clase Dieta, quizá puede surgir la duda de por qué no se han incluido entre sus
atributos dos conceptos que aparecen en el texto como información propia de ella, como
“objetivos/indicaciones” y “componentes básicos”. La razón de ello está basada en el principio constructivo
de los diagramas de UML, que recomienda no repetir la misma información como atributo y como
asociación. Los componentes básicos, por ejemplo, los obtenemos para una dieta a partir de la asociación
entre la clase Dieta y la clase Alimento, por lo que si lo ponemos además como atributo de la primera,
estamos repitiendo la infomación.
Exactamente lo mismo ocurre con los conceptos “causas”, “tratamiento” y “objetivo” de la clase
Enfermedad. Las causas, como hemos visto, son la ausencia de los diferentes nutrientes, el tratamiento
será la correspondiente dieta o dietas asociadas y el objetivo será la reposición o suministro al organismo
del nutriente cuya ausencia ha provocado la enfermedad. Dichos conceptos están pues presentes en las
asociaciones entre las tres clases, por lo que no son atributos de Enfermedad.
Finalizamos el comentario sobre esta parte del diagrama explicando las multiplicidades de las
relaciones representadas. La agregación Alimento-Nutriente ha sido ya comentada. La agregación Dieta-
Alimento tiene multiplicidad “1..*” en el lado de Alimento ya que una dieta debe estar al menos formada por
un alimento (aunque pueden ser muchos); y en el lado de Dieta “0..*” , o sea, desde cero hasta un número
indefinido de ellas (cero si aún no se ha definido una dieta que incluya un determinado alimento, pero puede
definirse en el futuro). La relación “cura” tiene multiplicidad “0..*” en el lado de dieta porque puede haber
enfermedades que no tengan ninguna dieta que la cure (si el nutriente que la causa no se encuentra en
ninguna todavía) o que tengan varias; y en el lado de Enfermedad, “ 1..*” porque una dieta debe al menos
curar una enfermedad (si no, no tiene razón de ser), pero puede curar varias. Finalmente, en la asociación
“produce (por falta)”, la multiplicidad es “1..*” en ambos lados porque la falta de un nutriente produce al
menos una enfermedad, pero puede ser causa de varias, y por otro lado, una enfermedad es consecuencia
de la ausencia de al menos un nutriente (tratándose como dice el enunciado de un departamento de
nutrición, lo lógico es que la información que manejen esté relacionada sólo con la nutrición, por lo que
enfermedades relacionadas con otros problemas no figuren en el sistema), pero puede ser por la ausencia
de varios.
Para finalizar nuestro diagrama, vamos a incluir en él la información que se nos da en el último
párrafo del enunciado, la correspondiente a los pacientes. Evidentemente, hay que definir la clase Paciente
a la que asignamos los atributos que nos dan en el texto. En este punto surge la duda de cómo se relaciona
esta información con la de el resto del sistema y de si la naturaleza de estas relaciones puede hacer que lo
que pensábamos que es atributo, sea en realidad una asociación con otra clase.
La primera consideración que vamos a hacer es sobre la naturaleza de lo que el enunciado define
como “alergias” e “incompatibilidades”. A falta de conocimientos médicos suficientes parece que ambos
conceptos pueden tener el mismo significado, esto es, sustancias que el paciente no puede ingerir porque a
él particularmente le producen trastornos. En una primera interpretación simplista de este enunciado, sería
válido admitir que dichas sustancias no son alimentos o nutrientes, es decir, que no se encuentran en las
posibles dietas a administrar a un paciente (por ejemplo, que el paciente fuera alérgico a medicamentos
suplementarios del tratamiento dietético). Bajo dicha interpretación, podemos considerar que cada
enfermedad se trata con unas u otras dietas independientemente del paciente que las sufre, en cuyo caso
tendremos un diagrama con el siguiente aspecto
6
En este caso también entendemos que cada enfermedad causada por la falta de un determinado
nutriente. La multiplicidad de la asociación “afecta a” (con sujeto la clase·Enfermedad y predicado la clase
Paciente) es “1..*” en el lado de Enfermedad, pues un paciente al menos tiene que tener una enfermedad,
pero puede tener varias (varias carencias de nutrientes simultáneas); y “0..*” en el lado de Paciente, porque
una enfermedad puede estar en el sistema sin estar afectando a ningún paciente en ese momento, pero
puede afectar a muchos.
Sin embargo, esta simplificación se podría considerar poco realista, por cuanto que una lectura del
texto con cierto sentido común da a entender que se alude a alergias e incompatibilidades (a los que sí que
vamos a seguir considerando sinónimos) como producidas por un determinado nutriente en un determinado
paciente. Esto implicaría que habría una serie de dietas indicadas para alguna enfermedad, que no se
pueden asignar a un cliente alérgico a alguno de los nutrientes que forman parte de los alimentos incluidos
en la misma. Desde este punto de vista, el diagrama de clases quedaría de la siguiente manera:
7
Como vemos, aparecen una nueva asociación que recoge la semántica expresada en el párrafo
anterior. La primera, la hemos llamado “produce alergia a” y tiene multiplicidad “0..*” en ambos extremos: en
el de la clase Nutriente porque un paciente puede tener alergia a ninguno o a muchos nutrientes y en el de
la clase Paciente porque un nutriente puede producir alergia en ninguno o en muchos pacientes. Ha
desaparecido ahora el atributo “incompatibilidades y alergias” porque la información que aportaban antes,
ahora se representa en la asociación que acabamos de introducir.
Finalmente, sólo queda un comentario con respecto a los últimos diagramas. Aunque no lo pone
explícitamente en el enunciado, y por tanto no lo vamos a considerar dentro de la solución recomendada,
parece lógico que el sistema registre qué dieta está asignada a qué paciente. Esto nos obligaría a modificar
el diagrama añadiendo la asociación “asignada a” que mostramos en el diagrama siguiente:
8
9
Hechas estas consideraciones, sólo queda mostrar el diagrama de clases completo de todo el
problema. Lo representamos según la interpretación de alergias e incompatibilidades que hemos descrito en
segundo lugar (la visión más realista) y sin considerar que el sistema lleva el registro de qué dieta está
asignada a qué paciente:
10