[MÚSICA] [MÚSICA] Hola y bienvenido. Acompáñame en este tutorial a aplicar los conceptos que hemos aprendido de diagramas de clase para modelar nuestros propios problemas. Utilizando nuestro ejemplo del robot, que presentamos en un tutorial anterior, el objetivo aquà es modelar asociaciones simples. Recuerda que para sacarle el máximo provecho al tutorial es importante que sigas mis acciones al mismo tiempo. Asà que te sugiero configurar ambas ventanas para poder seguir las instrucciones y replicarlas tú mismo en la herramienta. En este tutorial, tenemos cuatro pasos. Primero, leer el enunciado. Este paso es el que debes haber previamente realizado. De lo contrario, pausa este tutorial y dale una leÃda detallada al enunciado antes de continuar. Segundo, crearemos las clases. Tercero, definiremos las asociaciones con sus nombres y roles. Y cuarto, finalmente estableceremos la cardenalidad y la navegabilidad de las asociaciones. Para los siguientes pasos de este tutorial, usaremos la herramienta de creación de diagramas GenMyModel. Asà que inicia sesión en tu cuenta, abre el proyecto del robot y comencemos. Paso número dos, vamos a analizar el enunciado. Hay dos nuevos conceptos que tenemos que modelarlos como clases. El primero se explica inicialmente, un escenario; el segundo, una tarea. Hay dos clases. Ahora que las hemos nombrado, definamos los atributos. En este párrafo, vemos que las caracterÃsticas del escenario son un nombre, una esquina superior y una esquina inferior en coordenadas X y Y. Sabemos también el escenario debe retornar su nombre y sus esquinas como parejas de coordenadas. Para las tareas, vemos que estas consisten en una descripción y una prioridad entre uno y diez. Como vemos en el párrafo, debemos modelar métodos para retornar sus valores y modificarlos. Vamos entonces. Creamos la clase escenario. Le añadimos los atributos nombre, de tipo string, y coordenada X1 y coordenada Y1 para la esquina superior, ambas de tipo real. Luego, hacemos lo mismo para la coordenada X2 y la coordenada Y2 para la esquina inferior. [MÚSICA] [MÚSICA] [MÚSICA] Modelamos también un getter para el nombre y otro para retornar la pareja de coordenadas de la esquina superior y de la esquina inferior. Para el retorno de estos métodos, podemos crear un nuevo tipo, Array, para modelar arreglos o N tuplas de elementos. Ahora, modelemos la tarea. Hay dos atributos, uno que representa su descripción y otro su prioridad. Al primero, lo modelamos como un string; al segundo, como un entero. Crearemos los getters y setters para nuestra clase darDescripción, que retorna un string; cambiarDescripción, que recibe como parámetro un string sin retorno; darPrioridad, que retorna un entero; y cambiarPrioridad, que no tiene retorno pero recibe como parámetro un entero. Paso número tres. Retomemos el enunciado. Veamos que aquà se explica que hay una relación entre escenario y robots, con alguna información adicional que usaremos en el siguiente paso. Por otro lado, aquà sabemos que existe también una relación entre tareas y robots, también vemos caracterÃsticas. Asà que vamos a modelarlo. Bien, creemos entonces las asociaciones. Empecemos por modelar la relación entre escenario y robot. Damos clic al botón de crear nueva asociación en el menú lateral. Luego, hacemos clic en nuestra primera clase y en la segunda para crear la asociación entre ambas. Damos clic en la asociación para ver sus propiedades. En name, le cambiamos el nombre por recorre. En GenMyModel no podemos indicar el sentido de lectura, pero en este caso vamos de robot a escenario. Ahora, llamemos al rol del lado robot como robotsPresentes; y para el del escenario lo dejaremos igual. Ahora, repetimos el mismo proceso con las clases robot y tarea. Llamaremos al rol tieneAsignada. De nuevo, el sentido es de robot a tarea. Cambiaremos el nombre del rol de tarea a tareas. Paso número cuatro, y el último. Revisemos ahora las propiedades de nuestras asociaciones a partir del enunciado. Aquà vemos que para un escenario se pueden usar varios robots y que un robot solo puede estar en un escenario a la vez. Además, vemos que los escenarios se le puede asignar varios robots y que pueden informar de los robots que se encuentran en él y que un robot conoce el escenario que está recorriendo. Con esto, podemos definir la cardinalidad y los métodos. Del lado de escenario podemos hacer doble clic en la cardinalidad y poner 1. Por otro lado, a un escenario pueden estar asignados varios robots, asà que cambiamos la cardinalidad a varios. Dado que un escenario sabe qué robots están en él y un robot conoce su escenario, la navegabilidad será bidireccional. Finalmente, y siempre fieles al enunciado, tenemos que agregar un nuevo método en la clase robot y otro en la clase escenario. Para la primera, darEscenario, que retorna en qué escenario está el robot y en escenario un método darRobotsPresentes para obtener una lista de robots en el escenario. Finalmente, modelamos el método para asignar un robot al escenario. Este método no tiene retorno, pero su parámetro será un objeto de tipo robot. Revisemos el enunciado nuevamente. Aquà vemos que diferentes robots pueden tener la misma tarea y tener varias, siempre teniendo al menos una tarea, y que la tarea no sabe qué robots la están realizando. Perfecto, tenemos todo lo que necesitamos. Ahora, vayamos a la asociación entre la clase robot y tarea. Sabemos que un robot debe tener al menos una tarea, pero puede tener varias. Cambiamos entonces la cardinalidad en consecuencia a uno a varias. Antes de definir la otra cardinalidad de acuerdo a nuestro enunciado, los robots conocen sus tareas pero las tareas no necesariamente conocen al robot. Luego tenemos una navegabilidad unidireccional de robot a tarea. Con esto no tenemos que definir ni cardinalidad ni rol. Para definir esta navegabilidad, vamos a las propiedades y del lado de robot desactivamos la opción Navigable. Esto indica que no podemos navegar hacia el robot. Finalmente, creamos un nuevo método en la clase robot para dar sus tareas asignadas, darTareas; y otro para asignarle nuevas tareas, asignarTareas, que recibe como parámetro una tarea. Y uno para eliminar tareas, eliminarTarea, que también tiene como parámetro una tarea. [MÚSICA] Y listo, hemos sido lo más fieles posibles a nuestro enunciado. Hemos visto cómo modelar asociaciones entre clases, darles nombre, modificar sus roles, sus cardinalidades y su navegabilidad. Ahora es tu turno. En las siguientes actividades tendrás que modelar, a partir de enunciados, tus propios diagramas. Practica mucho y hasta la próxima. [MÚSICA] [MÚSICA] [AUDIO_EN_BLANCO] [AUDIO_EN_BLANCO] [AUDIO_EN_BLANCO]