[MÚSICA] [MÚSICA] [MÚSICA] Hola y bienvenido. Acompáñame. En este tutorial vamos a aplicar los conceptos que hemos aprendido de diagramas de clase para modular nuestros propios problemas. Recuerda que para sacar el máximo provecho al tutorial es importante que sigas mis secciones 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, modelaremos las asociaciones complejas que las relacionan y cuarto modelaremos las relaciones de dependencia. 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 2. Vamos a nuestro enunciado e identifiquemos las clases. vemos que sensor es una de las clases que creamos en el tutorial anterior. Luego tenemos obstáculos, estos harán parte de otra clase, sus atributos corresponden a una lista de coordenadas en x y y para construir un polígono. Tenemos como base un método que informa dichos atributos. Finalmente equipos, los equipos tienen un nombre como único atributo y un método para informar el nombre y otro para modificarlo. Bien. Empecemos creando las dos nuevas clases. La primera es la clase obstáculo, tiene dos atributos que representan sus puntos, ambos serán de tipo array, coordenadas x y coordenadas y. Luego informar los puntos que sean equivalentes a nuestro método get que retorna un arreglo de [INAUDIBLE] así que dar coordenadas x, y dar coordenadas y, todos con retorno a array. La siguiente clase es equipo, creamos entonces la clase equipo y modelamos su nombre, así como un método para retornarlo y otro para cambiarlo, cambiar nombre. Luego completaremos con el resto de operaciones propias de acuerdo a las asociaciones. [MÚSICA] [MÚSICA] Paso número 3. Empecemos con las asociaciones, miremos nuestro enunciado. Vemos que los sensores son piezas fundamentales de los robots y que sin estar asociados a un robot, no tienen sentido. Entonces de acuerdo con este enunciado tienen una relación de agregación compuesta. Vemos además que hay ciertas operaciones asociadas que tendremos que modelar también. Seleccionamos entonces del panel lateral dicha asociación. Como robot es el todo hacemos clic aquí primero y luego en la clase sensor. Entonces de acuerdo con el enunciado podemos identificar que esta debe ser una relación compuesta bidireccional. Modificamos entonces la cardinalidad, del lado del robot sabemos que será 1 porque es una asociación compuesta y un sensor solo puede estar asociado a un único robot. Del lado del sensor serán varias y el nombre del rol lo bautizaremos sensores. No olvidemos también el nombre de la asociación que bautizaremos como tiene. Ahora, añadimos un método para agregar un nuevo sensor, y otro para removerlo. Así como uno para dar los sensores de la clase robot. En la clase sensor creamos un método que informe a qué robot está asociado además. [MÚSICA] [MÚSICA] Volvamos al enunciado, veamos que entre escenario y obstáculo hay una relación también y que los obstáculos son únicos y parte del escenario. Esto es una asociación compuesta, vemos también que podemos crear y remover obstáculos para un escenario e informar qué obstáculos hay en él. Y tenemos una sola restricción, estos solo podemos verlos desde el escenario. Vamos a nuestra herramienta, a la asociación entre escenario y obstáculo. Un obstáculo es efectivamente una parte del escenario y no tiene sentido si no existe en él. Esto es otra de las asociaciones compuestas que creamos de la misma manera que la anterior. Bautizamos la asociación como tiene y el rol del lado de obstáculos como obstáculos. La cardinalidad es más sencilla, de nuevo 1 del lado del escenario y varios del lado de obstáculos. La navegabilidad es algo diferente, como un escenario conoce sus obstáculos pero según el enunciado no es posible hacer el proceso inverso, debemos ir solamente de escenario a obstáculo. Creamos en escenario entonces un método para crear un obstáculo que recibe como parámetro la lista de coordenadas del polígono. Otro para remover un obstáculo dado y finalmente un método que retorna un arreglo de obstáculos. [MÚSICA] [MÚSICA] [MÚSICA] Finalmente volviendo a nuestro enunciado, vemos que hay equipos conformados por robots. Vemos que los robots pueden o no pertenecer a un equipo. Podemos agregar o quitar robots de un equipo e informar qué robots hacen parte de un equipo. Un robot sabe además a qué equipo pertenece si es que pertenece a alguno, esto nos hace pensar en una relación de asociación pero menos estricta que una asociación compuesta. En efecto, es una asociación compartida. Un robot no necesariamente está asociado a un equipo y su existencia parece no estar ligada. Vamos a GenMyModel y modelamos esta asociación usando el icono correspondiente del menú lateral. Vamos de equipo a robot. El nombre de la asociación está conformado por. Modificamos entonces el rol del lado equipo. Las cardinalidades, un equipo está conformado por varios robots, varios y un robot puede o no pertenecer a un equipo. 0 o 1. En la clase equipo añadimos un método que retorne los robots y que permita asignar o remover un robot del mismo. Estos últimos no tienen retorno pero sí tienen como parámetro objetos de tipo robot. Luego creamos el método que retorna el equipo al que pertenece el robot en la clase robot y otra para asignarlo a un nuevo equipo. [MÚSICA] [MÚSICA] [MÚSICA] Paso 4 y último. Miremos nuestro enunciado. Vemos que un escenario es capaz de informar qué equipos están presentes en él, pero a parte de esto no parece haber una relación directa. Es más, esto lo podemos saber a través de la clase robot. Esto suena a una relación de dependencia, dar información sin tener una asociación modelada previamente. Veamos. Vamos a GenMyModel, creemos el método dar equipo de la clase escenario. Esto retornará un arreglo de equipos pero para ello la clase necesita saber algo de equipos. Luego creamos la relación de dependencia usando el menú lateral. Vamos de escenario a equipo, vemos que el esterotipo use aparece automáticamente en GenMyModel. Listo. Con esto hemos acabado nuestro diagrama y a través de varios tutoriales hemos añadido clases y asociaciones nuevas. [MÚSICA] Hemos sido lo más fieles posibles a nuestro enunciado y hemos modelado usando asociaciones más complejas. Este diagrama solo se podrá leer de una única forma, como la hemos modelado. Es posible que necesitemos validar algunas cosas con el cliente pero por el momento este es el resultado con una única interpretación. Y ahora es tu turno. En las siguientes actividades tendrás que modelar tus propios enunciados a través de diagramas. Practica mucho y hasta la próxima. [MÚSICA] [MÚSICA] [MÚSICA] [MÚSICA] [MÚSICA] [MÚSICA]