Académique Documents
Professionnel Documents
Culture Documents
Anuncios
REPORT THIS AD
PUBLICADO EN UML
19 Votes
Introducción
En el ejercicio anterior se expuso un supuesto práctico sobre el que se tenía que realizar el diseño de un diagrama de
clases. Dicho supuesto recorría casi todas las posibilidades de relación entre clases. En la entrada de hoy se expone
un segundo ejercicio se va a ir un poco más allá, involucrando al interfaz como garante de la realización de
especificaciones funcionales.
Enunciado
Crear un proyecto UML llamado Torneo en el que se diseñe un diagrama de clases que modele la estructura necesaria
para manejar los datos de los encuentros de un torneo de tenis de mesa en la modalidad de sorteo y eliminatoria.
Del torneo interesa conocer la fecha del torneo, los encuentros celebrados y el ganador. De cada jugador, que debe de
conocer perfectamente las reglas, interesa saber el número de federado de la federación de la que es miembro.
De cada persona interesa saber sus datos básicos: NIF, nombre completo y fecha de nacimiento. La clase Fecha se
modela con tres campos (día, mes y año) de tipo entero. La clase Nif se modela con un campo de tipo entero llamado
dni y un campo de tipo carácter llamado letra.
De cada encuentro interesa conocer los oponentes, el ganador y el resultado final del marcador de cada una de las
tres partidas que se juegan a 21 puntos.
El primer paso a realizar consiste en leer detenidamente el enunciado y de él extraer toda la información posible. A
veces es cuestión de aplicar el sentido común, a veces es cuestión de unir cabos sueltos, a veces es cuestión de
simple lógica y a veces es cuestión de pura deducción, pero siempre siempre es cuestión de razonar por
aproximaciones sucesivas y de experiencia.
Bien, parece que el enunciado refiere únicamente un modelado de datos, no de comportamiento, por lo que se
procederá a realizar una lista de los elementos más significativos para el proyecto que se puedan extraer del
enunciado.
Diseño de clases
Recuérdese que las clases son entidades que encapsulan información, se trata por tanto de ver qué información de la
lista anterior está relacionada entre sí y ver la forma de encapsularla en sus respectivas clases.
Se procederá a identificar las clases a partir del enunciado y de encapsular en ellas la información relacionada. Este
paso se realizará considerando de forma aislada unas clases de otras. Posteriormente, cuando se vean las relaciones,
se depurará su composición.
En esta fase del modelado se procede siempre desde las clases más triviales a las más complejas.
Clase Nif
Clase Fecha
Clase Nombre
Clase Marcador
Clase Persona
Clase Jugador
Clase Partida
Clase Encuentro
Clase Torneo
Relaciones
En esta fase se va a evaluar qué clases tienen que ver con qué otras, es decir sus relaciones. Para que el
procedimiento resulte lo más sencillo posible se estudiarán las relaciones dos a dos.
Herencia
Primero se abordan las relaciones de herencia empezando por aquellas que resulten triviales o más evidentes.
Aunque no es muy ortodoxo, la regla para detectar una relación de herencia es fijarse en el catálogo de clases
diseñadas en la fase anterior, y ver si existe alguna clase cuyos atributos sean un subconjunto de alguna otra.
Persona – Jugador
En este caso resulta que los atributos de la clase Persona son un subconjunto de los de la clase Jugador y
semánticamente tiene sentido decir que la clase Jugador es una especialización de la clase Persona.
Obsérvese que los atributos que hereda la clase Jugador, que es la clase especializada, no se representan. Obsérvese
también que la flecha que representa esta relación va desde la clase hija a la clase madre, tiene línea continua, punta
de flecha cerrada, no tiene cardinalidad y no está etiquetada por ningún rol.
Asociación
Una vez se han resuelto las relaciones de herencia le toca el turno a las relaciones de asociación. Se procederá
siempre abordando primero las triviales o más simples y continuando por las demás. Para que resulte más claro, el
análisis se realizará considerando las clases de dos en dos.
Persona – Fecha
Aun a riesgo de resultar tedioso pero con el objetivo de que resulte lo más clarificador posible, el análisis de la relación
entre estas dos clases se realizará paso a paso.
Esta asociación es trivial. La clase Persona tiene un atributo de tipo Fecha, dicho de otra manera, la clase Persona
tiene una referencia a un objeto de la clase Fecha.
Las asociaciones se representan con una línea de trazo continuo que une las clases vinculadas.
Roles
Así considerado, el atributo fechaNac de la clase Persona pasa a ser el rol de la relación que vincula a ambas clases.
Por lo tanto, desaparece de la clase Persona y aparece en la línea de vinculación junto a la clase de su tipo.
Navegabilidad
Ahora hay que abordar la navegabilidad tratando de ver si desde una clase se puede ir a la otra. Es evidente que la
clase Fecha no tiene información de la clase Persona por lo que la navegabilidad desde la clase Fecha no es posible.
Sin embargo, la clase Persona tiene una referencia a la clase Fecha por lo que sí es viable la navegabilidad desde la
clase Persona hacia la clase Fecha. La navegabilidad se expresa con una punta de flecha abierta puesta en el lado de
la clase a la que se llega.
Cardinalidades
El siguiente paso es abordar las cardinalidades o multiplicidades, es decir el número de instancias de cada clase que
intervienen en la relación. Para resolver este paso hay que preguntar:
“¿Por cada instancia de una de las dos clases cuántas instancias de la otra clase pueden en extremo intervenir como
mínimo (Cardinalidad mínima) y como máximo (Cardinalidad máxima)?”
Obsérvese que cuando la cardinalidad mínima y máxima coinciden sólo se representa una de ellas. Obsérvese
también que cuando la cardinalidad máxima es múltiple y la cardinalidad mínima es cero refiere una cardinalidad
múltiple opcional y se representa con un asterisco.
Todo – Parte
El siguiente paso consiste en considerar qué clase es la parte [PARTE] y qué clase es la parte [TODO]. Dicho de otro
modo quién contiene a quién. En este caso la discriminación es trivial: la clase Persona es la parte [TODO] porque
tiene una referencia a la clase Fecha que es la parte [PARTE].
Agregación – Composición
El siguiente paso consiste en determinar si la relación de asociación entre las clases es de agregación o de
composición. Para que la relación sea de composición es condición necesaria que la cardinalidad de la parte [TODO]
sea 1. Como este no es el caso la relación es de agregación.
Obsérvese que la parte [TODO] se identifica dibujando un rombo acostado en la línea de la relación. Obsérvese también
que el se ha representado el rombo en blanco para identificar una relación de agregación.
Y este es básicamente el proceso a seguir para analizar las relaciones de asociación entre las clases de un diagrama
de clases UML. En situaciones más complejas habrá que reconsiderar este método para introducir los nuevos
elementos involucrados.
Persona – Nif
El análisis de la relación entre estas dos clases determina que cada objeto de la clase Nif está unívocamente unido a
un solo objeto de la clase Persona, y viceversa, por lo que la cardinalidad en ambos lados es la unidad. tanto mínima
como máxima.
Además semánticamente si desaparece la parte [TODO], el objeto de la clase Persona, la existencia de la parte
[PARTE], el objeto de la clase Nif, ya no puede ser utilizado y debería desaparecer también. Esta dependencia
existencial apunta a una relación de tipo Composición.
Obsérvese que la parte [TODO] se identifica dibujando un rombo acostado en la línea de la relación. Obsérvese también
que el se ha representado el rombo en negro para identificar una relación de composición.
Persona – Nombre
La relación entre la clase Persona y la clase Nombre es muy parecida a la relación existente entre la clase Persona y la
clase Fecha.
Obsérvese que al ir expresando los atributos de la clase Persona como roles de sus respectivas relaciones, en el
contexto de este supuesto, el diagrama que representa la clase Persona ya no contiene ningún atributo.
Encuentro – Jugador
La relación entre la clase Encuentro y la clase Jugador es muy interesante. Como se puede apreciar hay tres
relaciones diferentes con sus respectivos roles.
Obsérvese que si se decidiera no discriminar los roles jugador1 y jugador2, sus respectivas relaciones se podrían
fusionar en una sola que se podría codificar utilizando alguna colección de dos elementos.
Respecto a las cardinalidades, obsérvese que todos los jugadores que participen en un encuentro tienen que hacerlo
en alguno de dos roles: jugador1 o jugador2 pero no en los dos al mismo tiempo. Asimismo, aquellos jugadores que
participen en varios encuentros pueden ostentar diferentes roles en cada uno de ellos, o no. Finalmente, el ganador de
un encuentro debe ser uno de los dos participantes del mismo. Estas restricciones se podrían expresar en los
correspondientes diagramas de comportamiento.
Encuentro – Marcador
En el contexto del supuesto de este ejercicio, en un encuentro se celebran tres partidas, el primer jugador que llegue a
21 puntos gana la partida. El jugador que gane más partidas de un encuentro gana el encuentro. Obsérvese que no
puede haber empate ni en las partidas ni en el encuentro.
La clase Marcador encapsula el resultado de una partida mediante dos números de tipo entero, el primer número
corresponde a los puntos de primer jugador y el segundo número a los puntos del segundo jugador. Uno de ellos debe
contener el número 21 y corresponderá al ganador de la partida y el otro valor debe estar situado entre 0 y 20.
Obsérvese que se ha modelizado una relación de Composición porque, a pesar de que en partidas diferentes puedan
darse resultados iguales, los objetos instanciados de la clase Marcador que encapsulan estos resultados no se
comparten, ergo si desaparece el encuentro desaparecen sus resultados.
Torneo – Fecha
La relación entre la clase Torneo y la clase Fecha es muy parecida a la relación existente entre la clase Persona y la
clase Fecha.
Torneo – Encuentro
Torneo – Jugador
El objetivo de un torneo es tener siempre un ganador. Esa figura la tiene que ostentar alguno de los jugadores que han
participado en él.
Clase Partida
Llegados a este punto todas las relaciones entre clases están establecidas. A pesar de que inicialmente se modeló la
clase Partida para recoger los datos de los participantes de cada partida y de su resultado, desde el punto de vista al
que se ha llegado siguiendo el razonamiento argumentado hasta ahora resulta que esta clase no es necesaria ni
conveniente, por lo que se prescindirá de ella.
Esta decisión no es una vuelta atrás ni mucho menos. En el diseño de diagramas de clases es muy normal y
conveniente realizar continuos replanteos en la medida que el avance en el razonamiento clarifica progresivamente la
situación.
Interfaces
Terminado el diseño de los datos encapsulados en las relaciones entre las diferentes clases el siguiente paso es
detectar las posibles capacidades funcionales que deben reunir dichas clases expresadas en forma de realización de
interfaces.
Interfaz IJugador
Si se conviene en que la capacidad de jugar al tenis de mesa viene proporcionada por el contenido de un determinado
método, toda clase que represente a una persona que sabe jugar a este deporte incorporará este método en su
código.
Sin embargo, ¿Cómo reconocer a un jugador de tenis de mesa sin verlo jugar? La respuesta viene a través de los
interfaces. Un interfaz es como un título que faculta a su poseedor en una determinada habilidad. Así se reconoce a
un jugador por su título, como se conoce a un médico por su título universitario, un extintor eficaz por su certificado de
industria, la reparación de un coche por su factura, etc.
En este caso se convendrá en que el interfaz que inviste a una persona como un jugador de tenis de mesa se
llama IJugador y que el método que corresponde a esa capacidad se llama jugarTenisMesa.
Realizaciones
En esta fase se va a señalar qué clases deben implementar las capacidades funcionales definidas a través de los
interfaces, es decir sus realizaciones.
Jugador – IJugador
Para expresar que la clase Jugador realiza el interfaz IJugador se utiliza la siguiente representación.
Adviértase que la clase y el interfaz están vinculados por una línea de trazo discontinuo, con una punta de flecha
cerrada en el lado del interfaz y que en ningún lado se expresa el contenido del método impuesto por el interfaz.
Diagrama complet o
En la siguiente entrega se abordará un ejercicio un poco más complejo de diseño de Diagrama de clases UML.
Saludos.
Anuncios
REPORT THIS AD
07/24/2013 4 Respuestas
20 Votes
Enunciado
Crear un proyecto UML llamado Asociacion en el que se diseñe un diagrama de clases que modele el proceso de dar
de alta a cada una de las personas que se apuntan a una asociación.
De cada persona interesa saber sus datos básicos: NIF, nombre completo y fecha de nacimiento. Cuando cada nuevo
socio se da de alta, se le asigna un código de asociado alfanumérico y se anota la fecha de alta.
La clase Fecha se modela con tres campos (día, mes y año) de tipo entero. La clase Nif se modela con un campo
de tipo entero llamado dni y un campo de tipo carácter llamado letra.
El primer paso a realizar consiste en leer detenidamente el enunciado y extraer de él toda la información posible. A
veces es cuestión de aplicar el sentido común, a veces es cuestión de unir piezas, a veces es cuestión de lógica y a
veces es cuestión de pura deducción, pero siempre siempre es cuestión de razonar por aproximaciones sucesivas y de
experiencia.
Bien, parece que el enunciado refiere únicamente un modelado de datos, no de comportamiento, por lo que se
procederá a realizar una lista de los elementos más significativos para el proyecto que se puedan extraer del
enunciado.
Diseño de clases
Recuérdese que las clases son entidades que encapsulan información, se trata por tanto de ver qué información de la
lista anterior está relacionada entre sí y ver la forma de encapsularla en sus respectivas clases.
Se procederá a identificar las clases a partir del enunciado y de encapsular en ellas la información relacionada. Este
paso se realizará considerando las clases de forma aislada las unas de las otras. Posteriormente, cuando se vean las
relaciones, se depurará su composición.
En esta fase del modelado se procede siempre desde las clases más triviales a las más complejas.
Clase Nif
Clase Fecha
Clase Nombre
Clase Persona
Clase Socio
Relaciones
En esta fase se va a evaluar qué clases tienen que ver con qué otras, es decir sus relaciones. Para que el procedimiento
resulte lo más sencillo posible se iniciará el estudio por las relaciones dos a dos.
Herencia
Primero se abordan las relaciones de herencia empezando por aquellas que resulten triviales o más evidentes.
Aunque estrictamente hablando no es así del todo, la regla para detectarlas es ver si entre las clases definidas en el
diseño existe alguna cuyos atributos sean un subconjunto de alguna otra.
Persona – Socio
En este caso resulta que los atributos de la clase Persona son un subconjunto de los de la clase Socio y
semánticamente tiene sentido que la clase Socio sea una especialización de la clase Persona.
Obsérvese que los atributos que hereda la clase especializada no se representan. Obsérvese también que la flecha que
representa esta relación va desde la clase hija a la clase madre, tiene linea continua, punta de flecha cerrada, no tiene
cardinalidad y no está etiquetada por ningún rol.
Asociación
Una vez se han resuelto las relaciones de herencia le toca el turno a los demás tipos de relaciones que son
asociaciones. Se procederá siempre abordando primero las triviales o más simples y continuando por las demás. Para
que resulte más claro, el análisis se realizará considerando primero las relaciones dos a dos.
Socio – Fecha
Aun a riesgo de resultar tedioso pero con el objetivo de que resulte lo más clarificador posible, el análisis de la relación
entre estas dos clases se realizará paso a paso.
Roles
Esta asociación es evidente. La clase Socio tiene un campo de tipo Fecha, dicho de otra manera, la clase Socio tiene
una referencia a un objeto de la clase Fecha. Así considerado este campo pasa a ser el rol de la relación que vincula a
ambas clases. Por lo tanto, desaparece de la clase Socio y aparece en la linea de vinculación junto a la clase de su
tipo.
Navegabilidad
Ahora hay que abordar la navegabilidad tratando de ver si desde una clase se puede ir a la otra. Es evidente que la
clase Fecha no tiene información de la clase Socio por lo que la navegabilidad desde la clase Fecha no es posible. Sin
embargo, la clase Socio tiene una referencia a la clase Fecha por lo que si es viable la navegabilidad en este sentido.
La navegabilidad se expresa con una punta de flecha abierta puesta en el lado de la clase a la que se llega.
Cardinalidades
El siguiente paso es abordar las cardinalidades o multiplicidades, es decir el número de instancias de cada clase que
intervienen en la relación. Para resolver este paso hay que preguntar: “¿Por cada instancia de una de las dos clases
cuantas instancias de la otra clase pueden en extremo intervenir como mínimo (Cardinalidad mínima) y como máximo
(Cardinalidad máxima)?”. Y luego hacer las preguntas al revés.
Todo – Parte
El siguiente paso consiste en considerar qué clase es PARTE y qué clase es TODO. Dicho de otro modo quién contiene
a quién. En este caso la discriminación es trivial: la clase Socio es la parte TODO porque tiene una referencia a la clase
Fecha que es la parte PARTE.
Agregación – Composición
El siguiente paso consiste en determinar si la relación entre las clases es de agregación o de composición. Para que la
relación sea de composición es condición necesaria que la cardinalidad de la parte TODO sea 1. Como este no es el
caso la relación es de agregación.
Persona – Fecha
El mismo razonamiento empleado para relacionar las clases Socio y Fecha se puede emplear para relacionar las
clases Persona y Fecha.
Esta vez el rol de la clase Fecha en la relación cambia. Obsérvese como ha desaparecido el campo correspondiente a
la fecha de nacimiento de la clase Persona.
Persona – Nif
El análisis de la relación entre estas dos clases determina que cada objeto de la clase Nif está unívocamente unido a
un solo objeto de la clase Persona, y viceversa, por lo que la cardinalidad en ambos lados es la unidad, tanto mínima
como máxima.
Además, semánticamente hablando, si desaparece la parte TODO (el objeto de la clase Persona), la existencia de la
parte PARTE (el objeto de la clase Nif), carece de sentido y debería desaparecer también. Esta dependencia existencial
apunta a una relación de tipo Composición.
Obsérvese que el rombo se ha representado relleno en negro. Obsérvese también que el campo correspondiente al Nif
ha desaparecido de la clase persona pasando a ser el rol de la relación.
Persona – Nombre
La relación entre la clase Persona y la clase Nombre es muy parecida a la relación existente entre la clase Persona y la
clase Fecha.
Obsérvese que al trasladar el campo nombre al rol de la relación, el diagrama que representa la clase Persona ya no
contiene ningún atributo.
En la siguiente entrega se abordará un ejercicio un poco más complejo de diseño de Diagrama de clases UML que
involucre, además de los conceptos vistos en esta entrega, el concepto de realización de interfaces.
Saludos.
07/01/2013 22 Respuestas
1 Vote
Si tuviera que dar un buen consejo éste seria: usa protector solar. Pero si me pidieran otro más diría: lleva siempre
papel y lápiz encima, o bolígrafo en su defecto.
A pesar de que lo llevo viendo año tras año, no me acostumbro. Me quedo perplejo cuando veo a algún alumno que,
agazapado detrás del ordenador, pretende tomar notas tecleando en el Notepad, un fichero que se perderá en la selva
de Mis Documentos.
No valen los consejos, la LME es más fuerte y más pronto que tarde, ese alumno desconecta y le cede el mando al
puntero del ratón que recorre raudo y veloz los enlaces de YouTube. Esa clase ya se ha perdido.
Usar el papel y el lápiz para apuntar las cosas no sólo es muy sufrido si no que, aunque no lo parezca, se hace con toda
el alma, con todos los sentidos, completamente involucrado. Y cuando se hace y rehace, hasta que queda bien, es tan
clarificador y persiste tanto en el tiempo… A riesgo de parecer dramático, con estos instrumentos las ideas
transcienden a las palabras y las frases, y se expresan en su verdadera naturaleza.
Aunque, con todos estos beneficios, es bien cierto que las notas que toma uno son sólo para uno. Otra persona no las
entenderá tan bien como su autor, seguramente porque esa otra persona es ajena a su realización.
Creo profundamente en la vigencia de ese dicho que dice que vale más un lápiz corto que una memoria larga, aunque
sea una memoria USB. Quiero decir que toda idea, sobre todo si es buena, suele empezar rayando vaguedades sobre el
papel. Escribir, rayar y borrar y volver a empezar hasta que las cosas surgen. Esta es la génesis de muchas buenas
ideas que en el mundo han sido, son y serán.
En el caso de UML no podía ser menos por cuanto toca al uso del papel y el lápiz Un equipo de personas tiene que
ponerse de acuerdo sobre el diseño de un sistema desde puntos de partida diversos. El papel y el lápiz sobre la mesa,
o también la pizarra y la tiza son tan importantes como los gadgets a la última o la conectividad a Internet.
Los diagramas de UML deben de formar parte de la documentación de un sistema. Y esa documentación tiene que
poder ser interpretada por varias personas, más allá de los autores de los diagramas. Es por ello que los diagramas
deben de tener una representación normalizada.
A partir de aquí, cuando los diagramas definitivos ya se encuentran en papel es muy conveniente digitalizarlos,
y aquí es donde entra el Software de Diagramación UML. Y aquí hay software de diagramación de pago y software de
diagramación gratuito.
El software de diagramación de pago está muy bien, pero suele estar asociado a paquetes de
análisis/diseño/construcción/desarrollo de sistemas y el precio de la licencia parece escandalosamente elevado para
su uso formativo. Aunque en algún caso tienen una versión de demostración por un mes o así, la verdad es que no
suele venir bien para la docencia porque a la limitación temporal se le suele sumar alguna limitación funcional. Las
opciones como guardar, imprimir, exportar, generar código, etc. suelen estar desactivadas. En algún caso hay una
versión académica que no resulta gratuita o bien a la que es difícil adherirse porque está circunscrita a
determinadas áreas geográficas o determinadas entidades.
El software de diagramación gratuito esta dividido en dos grupos. Las versiones recortadas de versiones de pago y las
versiones no recortadas. Por lo que he probado, las versiones recortadas no suelen ser muy interesantes, si no se tiene
la intención de comprar el paquete completo que hay detrás. Respecto de las versiones no recortadas, que no están
vinculadas a ningún interés pecuniario, se pueden encontrar pifias llenas de errores, monumentos a la cutrez, cosas
que quisieron ser y no fueron, alguna cosa más o menos interesante abandonada por el camino y mucha falta de
cariño.
No obstante, si te sientes armado de paciencia y determinación puedes dar un vistazo a esta extensa lista de
herramientas UML. Como en botica hay de todo. Espero que te resulte de utilidad.
Saludos.
06/08/2013 Responder
6 Votes
Introducción
Siguiendo con la letra R, en la entrada anterior se introdujo el concepto de realización referido a los Diagramas de
Clases, que son herramientas de documentación de la estructura estática de una aplicación informática, según los
principios de UML. En esta entrada se introducirá el concepto de relación de UML.
Las relaciones son el tercer pilar fundamental en el que se basan los Diagramas de Clases, después de las clases
mismas y los interfaces. Las relaciones se aplican exclusivamente entre clases y pueden ser binarias o de orden
superior.
Decir que dos clases están relacionadas entre si viene a significar que esas clases tienen algo que ver entre sí. De
cómo sea la naturaleza de la relación definirá un tipo u otro de vinculación. De lo que se trata aquí es de identificar,
caracterizar y ejemplarizar cada una de ellas.
Asociación
La forma más sencilla de relación es aquella denominada asociación. La asociación se utiliza para expresar
simplemente que dos clases están vinculadas entre sí. En ella se expresa la navegabilidad entre la clase origen y la
clase destino, y la cardinalidad de la clase destino en la asociación.
El Diagrama de Clases del ejemplo anterior permite representar, en el contexto de UML, el hecho de que una mesa
tiene 4 sillas a juego. Obsérvese que en el diagrama no se expresa más vinculación que la navegabilidad que expresan
que las sillas van con la mesa, ni más restricción que la cardinalidad que expresa que con la mesa van cuatro sillas.
En la figura se observa como aparece el rol silla para vincular la clase Silla a la clase Mesa. Esta vinculación se
sustanciará convirtiendo el rol del la relación en un atributo de la clase origen que referencia la clase destino.
Estrictamente hablando una asociación no tiene que ser únicamente de navegabilidad en un solo sentido, Puede ser en
ambos con los que ambas clases son origen y destino a la vez. Un tipo especial de esta situación acontece cuando la
asociación involucra más de dos clases. En ese caso todas las clases asociadas son origen y destino a la vez.
Cada aula alberga uno o más grupos a los que se imparten una o más asignaturas, a su vez cada grupo tiene asignada
una o más aulas en donde recibe docencia de una o más asignaturas, y además cada asignatura se imparte en una o
más aulas a uno o más grupos.
En las asociaciones, el peso de la definición de la relación recae enteramente sobre la parte [TODO]:
El concepto de asociación entre clases permite representar la semántica de muchas situaciones. Sin embargo la
realidad ofrece situaciones mucho más complejas cuyo modelizado exige evolucionar este concepto de
asociación introduciendo el concepto de pertenencia y el concepto de autonomía.
Pertenencia
Para explicar la semántica de pertenencia de una relación ayuda el plantearla desde un punto de vista de binomio
[PARTE] – [TODO]. Desde esta perspectiva una relación, básicamente binaria, está constituida por un componente
[PARTE] y un componente [TODO].
El componente [PARTE] se caracteriza porque es una pieza, en el sentido constructivo, del componente [TODO]. El
componente [TODO] tiene la capacidad de albergar al componente [PARTE] integrándolo dentro de sí mismo.
Antes de seguir un buen ejemplo ayudaría a fijar los conceptos de [PARTE] y [TODO] en una relación entre clases.
Bien, considérese el ejemplo de la relación de un matrimonio respecto de sus cónyuges. En esa relación el matrimonio
seria la parte [TODO], mientras que los cónyuges serian la parte [PARTE] de la relación. Trasladandando el ejemplo al
contexto UML, si se considera la clase Matrimonio y la clase Conyuge, y dejando para más adelante la explicación de
los detalles involucrados en la relación, el Diagrama de Clases que representaría esta relación podría ser el siguiente:
Otro ejemplo. Considérese la relación que existe entre los operarios de una fábrica y las secciones de trabajo de la
misma. En este caso cada operario trabaja en un momento dado en una sección de la fábrica, aunque después puede
trabajar en otra. Así pues, cada sección de la fabrica alberga un número determinado de operarios.
Autonomía
De lo que se trata de dilucidar en este apartado es, qué ciclo de vida tienen los objetos de la clase [TODO] y qué ciclo
de vida tienen los objetos de la clase [PARTE]. Dependiendo de cómo se concreta esta cuestión la semántica de la
situación define un tipo de asociación u otro entre las respectivas clases.
En concreto, la regla para determina el tipo de asociación es fijarse en el ciclo de vida de los objetos de la clase
[TODO], en concreto en el momento en que se destruye. La pregunta que hay que hacerse es ¿Qué ocurre con los
objetos de la clase [PARTE] cuando se destruye la parte [TODO]?. La respuesta a esta pregunta determina dos tipos de
asociaciones:
Agregación. Cuando el objeto [TODO] se destruye, los objetos [PARTE] pueden seguir existiendo autónomamente.
Composición. Cuando el objeto [TODO] se destruye también desaparecen los objetos [PARTE], cuya existencia ya
no tiene sentido.
Agregación
Es un tipo de asociación en donde el ciclo de vida de la parte [TODO] está desvinculado del ciclo de vida de la parte
[PARTE], de tal manera que cuando desaparece la parte [TODO] la parte [PARTE] puede seguir existiendo. A este tipo de
vinculación se la denomina también asociación débil o asociación funcional.
Para ejemplarizar este tipo de relación considérese el caso expuesto anteriormente respecto de los operarios y las
secciones de una fábrica.
En el ejemplo, la clase Seccion referencia las instancias de la clase Operario, que se corresponden con los operarios
que están trabajando en ella.
Tomando como referencia el ejemplo anterior, se inferirán las correspondientes reglas respecto a las agregaciones en
los diagramas de clases:
La codificación del Diagrama de Clases del ejemplo anterior en Java podría corresponderse con el siguiente código:
1 class Operario {
2 ...
3 }
4 class Seccion {
5 ...
6 ArrayList<Operario> listaOperarios = new ArrayList<Operario>();
7 ...
8 }
Como se puede observar en el código anterior la multiplicidad de la clase [TODO] no se expresa porque depende de la
restricciones funcionales de la clase que instancia la parte [TODO].
Composición
Es un tipo de asociación en donde el ciclo de vida de la parte [PARTE] está vinculado del ciclo de vida de la parte
[TODO], de tal manera que cuando desaparece la parte [TODO] la parte [PARTE] también desaparece. A este tipo de
vinculación se la denomina también asociación fuerte o asociación existencial.
Para ejemplarizar este tipo de relación considérese el caso expuesto anteriormente respecto de los cónyuges y el
matrimonio.
Tomando como referencia el ejemplo anterior, se inferirán las correspondientes reglas respecto a las agregaciones en
los diagramas de clases:
La codificación del Diagrama de Clases del ejemplo anterior en Java podría corresponderse con el siguiente código:
1 class Conyuge {
2 ...
3 }
4 class Matrimonio {
5 ...
6 Conyuge[] conyuge = new Conyuge[2];
7 ...
8 Matrimonio() {
9 conyuge[0] = new Conyuge();
10 conyuge[1] = new Conyuge();
11 ...
12 }
13 }
Al igual que en la agregación la multiplicidad de la clase [TODO] no se expresa porque depende de la restricciones
funcionales de la clase que instancia la parte [TODO].
A partir de aquí.
Con esta sesión doy por finalizada esta serie de entradas dedicada a los Diagramas de Clases UML. Ahora lo que
quizás procede es la realización de algunos Ejercicios de Modelado de Diagramas de Clases para reflejar en la práctica
lo dicho más arriba.
Saludos.
06/06/2013 Responder
5 Votes
Introducción
El concepto de realización refiere la implementación de un interfaz por parte de una clase. Este proceso tiene dos
partes, en primer lugar la clase debe declarar la implementación del interfaz. En segundo lugar la clase debe de
definir el cuerpo de los métodos impuestos por el interfaz.
Representación
En los Diagramas de Clases no se expresa el contenido del cuerpo de los métodos, únicamente se expresa la
declaración de que la clase implementa un interfaz.
En el Diagrama de Clases del ejemplo que se expone a continuación se puede observar como la clase Zapato
implementa el interfaz ICascador que permite al zapato utilizarlo como cascanueces.
Obsérvese como la relación entre la clase y el interfaz implementado se representa como una linea de trazos dirigida,
que parte de la clase y termina en el interfaz con una punta de flecha cerrada. Por supuesto, los métodos impuestos
por el interfaz no se representan en la clase.
Codificación
Pues va a ser que no o sí, aunque la idea es abordar el tema de las relaciones entre de clases.
Bon apetit!