20/5/2016UML – Diagramas de Clases – Ejercicio 2 – Con el mazo dando Con el mazo dando Haciendo lo que hay que hacer 07/24/2013 DE JOANPAON UML – Diagramas de Clases – Ejercicio 2 i 9 Votes Introducción En el ejercicio anterior (h偂兠ps://joanpaon.wordpress.com/2013/07/01/uml‑diagrama‑de‑clases‑ ejercicio‑1/) 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. https://joanpaon.wordpress.com/2013/07/24/umldiagramadeclasesejercicio2/ 1/17 1. De cada persona interesa saber sus datos básicos: NIF. los encuentros celebrados y el ganador. interesa saber el número de federado de la federación de la que es miembro. nombre completo y fecha de nacimiento. Análisis del enunciado El primer paso a realizar consiste en leer detenidamente el enunciado y de él extraer toda la información posible. La clase Fecha se modela con tres campos (día. por lo que se procederá a realizar una lista de los elementos más significativos para el proyecto que se puedan extraer del enunciado. Encuentro Fecha del torneo Jugador Número de federado Persona https://joanpaon. Bien. De cada encuentro interesa conocer los oponentes. La clase Nif se modela con un campo de tipo entero llamado dni y un campo de tipo carácter llamado letra. parece que el enunciado refiere únicamente un modelado de datos. Ítems – Elementos significativos del enunciado.20/5/2016 UML – Diagramas de Clases – Ejercicio 2 – Con el mazo dando Del torneo interesa conocer la fecha del torneo. el ganador y el resultado final del marcador de cada una de las tres partidas que se juegan a 21 puntos. que debe de conocer perfectamente las reglas. a veces es cuestión de simple lógica y a veces es cuestión de pura deducción. a veces es cuestión de unir cabos sueltos.com/2013/07/24/umldiagramadeclasesejercicio2/ 2/17 . De cada jugador. Nombre del diagrama – EncuentrosTorneo 3.wordpress. mes y año) de tipo entero. Nombre del proyecto – Torneo 2. no de comportamiento. pero siempre siempre es cuestión de razonar por aproximaciones sucesivas y de experiencia. A veces es cuestión de aplicar el sentido común. png) Clase Fecha https://joanpaon. 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. cuando se vean las relaciones.files.com/2013/07/24/umldiagramadeclasesejercicio2/ 3/17 .wordpress.20/5/2016 UML – Diagramas de Clases – Ejercicio 2 – Con el mazo dando Persona Nif Nombre completo Fecha de nacimiento Dia Mes Año Dni Letra Oponente Resultado final Partida Diseño de clases Recuérdese que las clases son entidades que encapsulan información. Posteriormente. Se procederá a identificar las clases a partir del enunciado y de encapsular en ellas la información relacionada. En esta fase del modelado se procede siempre desde las clases más triviales a las más complejas. Clase Nif (h偂兠ps://joanpaon. Este paso se realizará considerando de forma aislada unas clases de otras.wordpress.com/2013/06/nif. se depurará su composición. png) Clase Marcador (h偂兠ps://joanpaon.com/2013/07/24/umldiagramadeclasesejercicio2/ 4/17 .com/2013/06/fecha.wordpress.wordpress.20/5/2016 UML – Diagramas de Clases – Ejercicio 2 – Con el mazo dando (h偂兠ps://joanpaon.files.png) Clase Persona https://joanpaon.wordpress.com/2013/07/marcador.png) Clase Nombre (h偂兠ps://joanpaon.com/2013/06/nombre.files.wordpress.files. com/2013/07/jugador.png) Clase Encuentro https://joanpaon.png) Clase Jugador (h偂兠ps://joanpaon.wordpress.files.png) Clase Partida (h偂兠ps://joanpaon.wordpress.com/2013/06/persona.com/2013/07/partida.com/2013/07/24/umldiagramadeclasesejercicio2/ 5/17 .files.20/5/2016 UML – Diagramas de Clases – Ejercicio 2 – Con el mazo dando (h偂兠ps://joanpaon.wordpress.wordpress.files. wordpress.com/2013/07/24/umldiagramadeclasesejercicio2/ 6/17 . y ver si existe alguna clase cuyos atributos sean un subconjunto de alguna otra.png) Relaciones En esta fase se va a evaluar qué clases tienen que ver con qué otras.com/2013/07/encuentro. Para que el procedimiento resulte lo más sencillo posible se estudiarán las relaciones dos a dos.wordpress. la regla para detectar una relación de herencia es fijarse en el catálogo de clases diseñadas en la fase anterior. Aunque no es muy ortodoxo.files. https://joanpaon. Herencia Primero se abordan las relaciones de herencia empezando por aquellas que resulten triviales o más evidentes.com/2013/07/torneo. es decir sus relaciones.wordpress.files.20/5/2016 UML – Diagramas de Clases – Ejercicio 2 – Con el mazo dando (h偂兠ps://joanpaon.png) Clase Torneo (h偂兠ps://joanpaon. files. dicho de otra manera.wordpress. el análisis de la relación entre estas dos clases se realizará paso a paso.wordpress.com/2013/07/24/umldiagramadeclasesejercicio2/ 7/17 . no tiene cardinalidad y no está etiquetada por ningún rol. el análisis se realizará considerando las clases de dos en dos. (h偂兠ps://joanpaon. la clase Persona tiene una referencia a un objeto de la clase Fecha. punta de flecha cerrada. Obsérvese también que la flecha que representa esta relación va desde la clase hija a la clase madre. https://joanpaon. que es la clase especializada.com/2013/07/persona‑jugador. Asociación Una vez se han resuelto las relaciones de herencia le toca el turno a las relaciones de asociación. La clase Persona tiene un atributo de tipo Fecha.20/5/2016 UML – Diagramas de Clases – Ejercicio 2 – Con el mazo dando 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. tiene línea continua. no se representan. Para que resulte más claro. Esta asociación es trivial. Persona – Fecha Aun a riesgo de resultar tedioso pero con el objetivo de que resulte lo más clarificador posible. Las asociaciones se representan con una línea de trazo continuo que une las clases vinculadas.png) Obsérvese que los atributos que hereda la clase Jugador. Se procederá siempre abordando primero las triviales o más simples y continuando por las demás. com/2013/07/persona‑fecha‑1. el atributo fechaNac de la clase Persona pasa a ser el rol de la relación que vincula a ambas clases.com/2013/07/persona‑fecha‑2.files. es decir el número de https://joanpaon. Por lo tanto. desaparece de la clase Persona y aparece en la línea de vinculación junto a la clase de su tipo.wordpress.png) Cardinalidades El siguiente paso es abordar las cardinalidades o multiplicidades.com/2013/07/persona‑fecha‑0. (h偂兠ps://joanpaon. 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.wordpress.wordpress.files.png) Roles Así considerado. 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.files.20/5/2016 UML – Diagramas de Clases – Ejercicio 2 – Con el mazo dando (h偂兠ps://joanpaon. (h偂兠ps://joanpaon. Sin embargo.png) Navegabilidad Ahora hay que abordar la navegabilidad tratando de ver si desde una clase se puede ir a la otra.com/2013/07/24/umldiagramadeclasesejercicio2/ 8/17 .wordpress. La navegabilidad se expresa con una punta de flecha abierta puesta en el lado de la clase a la que se llega. com/2013/07/persona‑fecha‑3. Todo – Parte El siguiente paso consiste en considerar qué clase es la parte [PARTE] y qué clase es la parte [TODO].com/2013/07/24/umldiagramadeclasesejercicio2/ 9/17 . es decir el número de instancias de cada clase que intervienen en la relación.wordpress.20/5/2016 UML – Diagramas de Clases – Ejercicio 2 – Con el mazo dando El siguiente paso es abordar las cardinalidades o multiplicidades. Para que la relación sea de composición es condición necesaria que la cardinalidad de la parte [TODO] sea 1. Cuántas fechas de nacimiento como mínimo tiene cada persona : 1 Cuántas fechas de nacimiento como máximo tiene cada persona: 1 Cuántas personas pueden nacer como mínimo en una determinada fecha: 0 Cuántas personas pueden nacer como máximo en una determinada fecha: Varias (h偂兠ps://joanpaon.wordpress. 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.files. Como este no es el caso la relación es de agregación. 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.png) Obsérvese que cuando la cardinalidad mínima y máxima coinciden sólo se representa una de ellas. 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]. https://joanpaon. 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)?” Y luego hacer las preguntas al revés. wordpress.20/5/2016 UML – Diagramas de Clases – Ejercicio 2 – Con el mazo dando (h偂兠ps://joanpaon.files.png) Obsérvese que la parte [TODO] se identifica dibujando un rombo acostado en la línea de la relación.files.wordpress.png) Obsérvese que la parte [TODO] se identifica dibujando un rombo acostado en la línea de la relación. Esta dependencia existencial apunta a una relación de tipo Composición. y viceversa. ya no puede ser utilizado y debería desaparecer también. la existencia de la parte [PARTE]. Persona – Nombre La relación entre la clase Persona y la clase Nombre es muy parecida a la relación existente https://joanpaon. Obsérvese también que el se ha representado el rombo en blanco para identificar una relación de agregación. (h偂兠ps://joanpaon. En situaciones más complejas habrá que reconsiderar este método para introducir los nuevos elementos involucrados. por lo que la cardinalidad en ambos lados es la unidad. el objeto de la clase Persona. tanto mínima como máxima. 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. Además semánticamente si desaparece la parte [TODO].com/2013/07/24/umldiagramadeclasesejercicio2/ 10/17 .com/2013/07/16. el objeto de la clase Nif.wordpress. 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.com/2013/07/persona‑fecha‑4. Obsérvese también que el se ha representado el rombo en negro para identificar una relación de composición. wordpress. Encuentro – Marcador https://joanpaon. Asimismo. Estas restricciones se podrían expresar en los correspondientes diagramas de comportamiento.wordpress.com/2013/07/17.wordpress.com/2013/07/24/umldiagramadeclasesejercicio2/ 11/17 .files. o no.files.png) Obsérvese que al ir expresando los atributos de la clase Persona como roles de sus respectivas relaciones. Respecto a las cardinalidades.com/2013/07/encuentro‑jugador1. (h偂兠ps://joanpaon. el diagrama que representa la clase Persona ya no contiene ningún atributo.png) Obsérvese que si se decidiera no discriminar los roles jugador1 y jugador2. Finalmente. el ganador de un encuentro debe ser uno de los dos participantes del mismo. sus respectivas relaciones se podrían fusionar en una sola que se podría codificar utilizando alguna colección de dos elementos.20/5/2016 UML – Diagramas de Clases – Ejercicio 2 – Con el mazo dando 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. Como se puede apreciar hay tres relaciones diferentes con sus respectivos roles. en el contexto de este supuesto. Encuentro – Jugador La relación entre la clase Encuentro y la clase Jugador es muy interesante. 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. aquellos jugadores que participen en varios encuentros pueden ostentar diferentes roles en cada uno de ellos. (h偂兠ps://joanpaon. a pesar de que en partidas diferentes puedan darse resultados iguales.files.png) Obsérvese que se ha modelizado una relación de Composición porque.com/2013/07/24/umldiagramadeclasesejercicio2/ 12/17 .com/2013/07/torneo‑fecha. 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. en un encuentro se celebran tres partidas.20/5/2016 UML – Diagramas de Clases – Ejercicio 2 – Con el mazo dando En el contexto del supuesto de este ejercicio.wordpress. los objetos instanciados de la clase Marcador que encapsulan estos resultados no se comparten. Obsérvese que no puede haber empate ni en las partidas ni en el encuentro. el primer número corresponde a los puntos de primer jugador y el segundo número a los puntos del segundo jugador. el primer jugador que llegue a 21 puntos gana la partida.wordpress.com/2013/07/encuentro‑marcador. https://joanpaon.wordpress. (h偂兠ps://joanpaon.files.png) Torneo – Encuentro Para que haya un torneo es necesario que haya al menos un encuentro. (h偂兠ps://joanpaon. 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. El jugador que gane más partidas de un encuentro gana el encuentro. ergo si desaparece el encuentro desaparecen sus resultados. La clase Marcador encapsula el resultado de una partida mediante dos números de tipo entero. Clase Partida Llegados a este punto todas las relaciones entre clases están establecidas.com/2013/07/24/umldiagramadeclasesejercicio2/ .20/5/2016 UML – Diagramas de Clases – Ejercicio 2 – Con el mazo dando (h偂兠ps://joanpaon.com/2013/07/torneo‑encuentro.png) Nótese que se ha establecido una relación de composición debido a que los encuentros celebrados en un sorteo no son válidos para otro.wordpress. A pesar de que inicialmente se modeló la clase Partida para recoger los datos de los participantes de cada partida y de su resultado. por lo que se prescindirá de ella. Interfaces Terminado el diseño de los datos encapsulados en las relaciones entre las diferentes clases el 13/17 https://joanpaon.files. Torneo – Jugador El objetivo de un torneo es tener siempre un ganador. 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.wordpress. Esta decisión no es una vuelta atrás ni mucho menos. Esa figura la tiene que ostentar alguno de los jugadores que han participado en él. 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. Un interfaz es como un título que faculta a su poseedor en una determinada habilidad.files. la reparación de un coche por su factura. etc. https://joanpaon.com/2013/07/24/umldiagramadeclasesejercicio2/ 14/17 . Sin embargo. un extintor eficaz por su certificado de industria. ¿Cómo reconocer a un jugador de tenis de mesa sin verlo jugar? La respuesta viene a través de los interfaces. Jugador – IJugador Para expresar que la clase Jugador realiza el interfaz IJugador se utiliza la siguiente representación. toda clase que represente a una persona que sabe jugar a este deporte incorporará este método en su código.20/5/2016 UML – Diagramas de Clases – Ejercicio 2 – Con el mazo dando 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. es decir sus realizaciones.wordpress. 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. (h偂兠ps://joanpaon. Realizaciones En esta fase se va a señalar qué clases deben implementar las capacidades funcionales definidas a través de los interfaces.com/2013/07/ijugador.wordpress.png) 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. como se conoce a un médico por su título universitario. Así se reconoce a un jugador por su título. 20/5/2016 UML – Diagramas de Clases – Ejercicio 2 – Con el mazo dando (h偂兠ps://joanpaon. Diagrama completo Ahora se trata de ponerlo todo junto en un diagrama de clases completo.files.com/2013/07/24/umldiagramadeclasesejercicio2/ 15/17 . 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. (h偂兠ps://joanpaon.com/2013/07/jugador‑ijugador.png) Adviértase que la clase y el interfaz están vinculados por una línea de trazo discontinuo.png) https://joanpaon.wordpress.wordpress.files.wordpress.com/2013/07/encuentrostorneo. 2 pensamientos en “UML – Diagramas de Clases – Ejercicio 2” pepe flores | 11/01/2013 en 22:44 Para mi ha sido muy muy útil. Unified Modeling Language.com/2013/07/encuentrostorneo. Java. En la siguiente entrega se abordará un ejercicio un poco más complejo de diseño de Diagrama de clases UML.png) Este ejercicio está disponible como un archivo ZIP (h偂兠ps://dl. Para abrirlo hay que importar este proyecto desde su menú principal.com/2013/07/24/umldiagramadeclasesejercicio2/ 16/17 .wordpress.com/). quería saber si tienes más ejercicios de este tipo pero con bases de datos ( con alguna clase que sea conexión por ejemplo y use bd ). Acerca de estos anuncios (https://wordpress. Saludos. ya que no encuentro por mas que miro y no tengo muy claro las relaciones que tendría que hacer con esta clase.modeliosoft. UML.wordpress.zip) que se corresponde con un proyecto de la herramienta UML llamada Modelio (h偂兠p://www.dropboxusercontent.20/5/2016 UML – Diagramas de Clases – Ejercicio 2 – Con el mazo dando (h偂兠ps://joanpaon. Programación.com/u/11424209/Torneo. Responder Vitmar Aliaga | 12/14/2015 en 16:46 buenisimo… me esta ayudando conprender mas el tema de diagrama de clases… Gracias… Responder https://joanpaon. Guarda el enlace permanente. Si esta información te ha sido útil házmelo saber y si no … también. UML y etiquetada Diagrama de clases.com/about-theseads/) Esta entrada fue publicada en Java.files. com.20/5/2016 UML – Diagramas de Clases – Ejercicio 2 – Con el mazo dando Responder Crea un blog o un sitio web gratuitos con WordPress.wordpress. | El tema Misty Lake.com/2013/07/24/umldiagramadeclasesejercicio2/ 17/17 . https://joanpaon.
Report "01_UML – Diagramas de Clases – Ejercicio 2 – Con El Mazo Dando"