Problema planteado en el material de asignatura de: Programacin Concurrente y Distribuida
Ingeniera en Informtica, Universidad de Cantabria, Espaa
Jos M. Drake SISTEMA DE RADAR La aplicacin consiste en el diseo del software del sistema de defensa de una zona de inters estratgico, basada en misiles interceptores y una infraestructura en tierra con un sistema de radar que cubre el espacio areo en la regin prxima a la zona protegida. El objetivo de la aplicacin es defender el espacio areo de la zona estratgica, que corresponde a un crculo de 10 km de radio. Su centro se considera como origen de coordenadas [0, 0, 0]. El sistema de defensa est constituido por un sistema de radar situado en el centro de la zona protegida, tiene un alcance de 50 km. As mismo, en cuatro puntos del permetro de la zona protegida Norte [0, 10 km, 0], Este [10 km, 0, 0], Sur [0, -10 km, 0] y Oeste [-10 km, 0, 0], existen bateras de misiles defensivos capaces de recabar informacin del sistema de radar para localizar su objetivo, y definir y seguir la trayectoria adecuada para interceptarlo. A partir de su lanzamiento la velocidad del misil es constante e igual a 100 m/s.
Los objetos enemigos se denominan Jets. Se mueven siempre en lnea recta con velocidad constante. Su velocidad vara entre 80 y 120 m/s, y la mxima altura que pueden alcanzar es de 5.000 m. Su nmero es indeterminado, y pueden aparecer por cualquier punto del permetro cubierto por el radar.
El sistema de radar es un equipo autnomo (que no es objeto del diseo), que ofrece una interfaz remota (RMI) que ofrece las operaciones scan(), currentTime(), getJetPositon() y moveMissile() que respectivamente retorna la lista de objetivos descubiertos, el tiempo actual de su reloj, la posicin de un determinado objetivo y representa un misil defensivo en la interfaz.
Problema planteado en el material de asignatura de: Programacin Concurrente y Distribuida Ingeniera en Informtica, Universidad de Cantabria, Espaa Jos M. Drake
Funcionalidad de la aplicacin.
Servidor en tierra. Implementa las siguientes funciones:
Gestiona el sistema de radar y recaba de l informacin de los objetos que se encuentran en la zona vigilada. Cuando detecta un nuevo objeto, analiza su trayectoria. Si esta no impacta en la zona protegida, la descarta y no le vuelve a prestar atencin. Si por el contrario, impacta en la zona protegida, selecciona la batera de misiles ms prxima a la zona de interseccin de la trayectoria del objeto con el cilindro que cubre el permetro de la zona protegida y activa en ella un misil defensivo. Mantiene actualizadas las posiciones de los objetos a interceptar y proporciona a los misiles activados para interceptarlos la informacin que requieran sobre ellos. Visualiza continuamente en un monitor la posicin de todos los objetivos (seguidos y descartados) y de los misiles activados para lanzarlos. Considera como interceptado un objeto, cuando el misil que lo intercepta explota.
Cliente misil. Tiene asignada la siguiente funcionalidad:
Permanece suspendido en espera de ser lanzado por el sistema de tierra. Una vez activado el misil, sube inicialmente 100 m en direccin vertical. Requiere del servidor, cuando lo necesita, la posicin del objetivo y continuamente reporta su propia posicin. Identifica y mantiene la trayectoria del objetivo que debe interceptar. Define su trayectoria y controla su movimiento por ella. La trayectoria se compone de tres tramos rectos: Inicialmente avanza verticalmente. Cuando identifica la trayectoria del objeto que debe interceptar, cambia su trayectoria hacia el punto de interseccin de la trayectoria del objeto con el cilindro que se sita sobre el permetro de la zona protegida. Cuando alcanza esa posicin, cambia de nuevo la direccin de su trayectoria y se dirige directamente hacia el objetivo. Lo alcanza siempre de frente (as lo alcanza aunque el objeto sea ms veloz que el misil). Cuando impacta con el objeto, se destruye y deja de operar (deja de reportar su posicin al servidor de tierra).
Problema planteado en el material de asignatura de: Programacin Concurrente y Distribuida Ingeniera en Informtica, Universidad de Cantabria, Espaa Jos M. Drake
Diseo de la aplicacin
En los siguientes diagramas de clases se muestra el diseo estructural de la aplicacin SmartHunter como programa concurrente que se distribuye. Los detalles sobre su funcionalidad pueden encontrarse en los comentarios del cdigo que se distribuye.
Clase SmartHunterSystem: Representa el programa principal que lanza la aplicacin: Construye el objeto defenseBase, que corresponde al software ubicado en la infraestructura de tierra y construye el conjunto de misiles con los que se arma el sistema, y los distribuye por las cuatro bateras existentes.
Mtodos: main(): Mtodo principal que lanza la ejecucin del programa concurrente. Instancia defenseBase, con lo que construye la aplicacin, genera 5 misiles por cada batera y inicializa en defenseBase el inicio de la ejecucin.
Clase DefenseBase: Representa la clase base del sistema de defensa. Tiene agregada el sistema de radar del que obtiene informacin sobre los jets atacantes y cuatro bateras de misiles a travs de los que lanza los misiles defensivos. Es una clase activa, y en su mtodo run() requiere los jets que supervisa el sistema de radar, los compara con los que ya tiene registrados, y en el caso de que sea nuevo, analiza su trayectoria y en caso de que lo identifique como peligroso lanza un misil para interceptarlo.
Constantes: <final>SCAN_PERIOD=1000 => Periodo con el que se invoca scan() al sistema radar para verificar los jets que se detectan en el espacio areo que se supervisa. Problema planteado en el material de asignatura de: Programacin Concurrente y Distribuida Ingeniera en Informtica, Universidad de Cantabria, Espaa Jos M. Drake
Atributos: theRadar:RadarSystem => Referencia la instacia del SistemaRadar con el que se supervisa el espacio areo. theBateries: MissileBatery => Referencia a las 4 bateras desde las que se gestionan los misiles. theJets: JetData =>Lista de los datos que referencian los jets atacantes que estn siendo supervisados.
Mtodos: DefenseBase() => Constructor de la clase. init() => Inicia la actividad del sistema de defensa. No se ha automatizado para posibilitar crear los misiles defensivos sin actividad del sistema de defensa.
shotMissile(battery:int, jc:JetControl) => Requiere el lanzamiento desde la betera que se pasa como primer parmetro un misil para interceptar el jet cuyos JetData pasan como segundo parmetro. getBattery(index:int):MissileBatery => Retorna la referencia del la batera cuyo ndice se pasa como argumento.
Clase JetData => Clase en la que delega la clase defenseBase para el seguimiento de cada jet detectado por el sistema de Radar:
- Analiza el Jet y lo clasifica como inofensivo o peligroso - Si el jet es peligroso ordena el disparo de un misil.
Atributos: id: long => Identificador de jet que representa. intersection:Position => Posicin de la interseccin de la trayectoria del jet con el cilindro de la zona defendida. lastJetPosition: Postion => Posicin del jet en la supervisin previa. Se utiliza para determinar la trayectoria. identified: Boolean => Ya se disponen de dos posiciones del jet, y con ello se tiene identificada la trayectoria. checked: Boolean => El jet se encuentra en la presente supervisin, y por tanto continua activo.
Mtodos: JetData(id:long, theJetPosition:Position,db:DefenseBase)=> Constructor de la clase. Se le pasa el identificador del jet que representa, su posicin actual y la referencia al sistema de defensa. getIntersection():Position=> Retorna la posicin de interseccin de la trayectoria del jet con el cilindro de la zona defendida. setJetPosition(newPosition:Position) => Registra una nueva posicin del jet. Si es la segunda, analiza la trayectoria y en el caso de que sea peligroso lanza el misil defensivo de la batera que corresponda.
Problema planteado en el material de asignatura de: Programacin Concurrente y Distribuida Ingeniera en Informtica, Universidad de Cantabria, Espaa Jos M. Drake Clase MissileBattery => Clase que representa el software ubicado en la plataforma de lanzamiento de misiles. Constituye el punto de contacto del sistema de defensa del que los misiles adquieren informacin.
Attributos: xCoord, yCoord :int => Coordenadas de la posicin de la batera de misiles: N (0,10000), E(10000,0), S(0,-10000) y O (-10000,0).
Mtodos: MissileBatery(name:String, db:DefenseBase) => Constructor de la clase. Recibe como parmetros su nombre {N,E,S y O}. shot(id:long, intersection:Position) => Habilita el disparo de un misil adscrito a la batera. Recibe el id del jet, con el que el misil pueda recabar (a la batera) informacin sobre l y el punto de interseccin al que inicialmente debe ir el misil. getJetX(id:long):float, getJetY(id:long):float y getJetZ(id:long):float => Retorna las coordenadas del punto de interseccin. getTargetId():long => Mtodo al que los misiles requieren (mediante polling) el jet que van a constituir su objetivo. Cuando no hay jet asignado retorna -1, En el caso de que se le asigne uno retorna su id, y ello supone el lanzamiento del misil. getIntersectionX(jetId:long):float, getIntersectionY(jetId:long):float y getIntersectionZ(jetId:long):float=> Retorna las coordenadas del punto de interseccin del jet con el cilindro de la zona defensiva. setMissilePosition(id:long,x:float,y:float,z:float) => Con su invocacin, el misil informa su posicin para ser visualizado en la GUI.
Interfaz remota SistemaRadar: La ofrece el equipo que implementa el sistema de radar. A travs de ella se puede recabar informacin de los objetos que se encuentran en la zona de observacin. A cada objeto, le asigna un identificador nico, que lo identifica de forma unvoca en todas las listas de posiciones que suministre el sistema de radar mientras que permanezca en la zona de observacin. Proporciona la localizacin de cada objeto a travs de sus tres coordenadas x, y y z con resolucin de un metro. El sistema filtra los misiles defensivos, de los que no proporciona informacin. /**
Mtodos: scan():TargetList => Retorna la lista de todos los elementos invasores que tiene registrados. currentTime():long => Retorna el tiempo actual medido por su reloj interno. Este reloj es el ques e utiliza para datar los resultados que proporciona. jetPosition(jetId:long):Position=> Retorna la posicin actual del jet cuyo identificador se pasa como argumento. moveMissile(id:long, to:Position) => Visualiza en la GUI una nueva posicin del misil. Clase TargetList: Define la estructura de datos que retorna el mtodo scan() de la interfaz SistemaRadar. Describe los objetos y la posicin que ocupan en el instante concreto en el que se invoca el mtodo.
Atributos: time:long => Representa el tiempo expresado en milisegundos al que corresponde las posiciones de los objetos descritos en la instancia. Problema planteado en el material de asignatura de: Programacin Concurrente y Distribuida Ingeniera en Informtica, Universidad de Cantabria, Espaa Jos M. Drake targets: TreeMap<long,Position> => Es una lista diccionario (Map) que contiene una entrada por cada objetivo detectado. La clave es el identificador de cada objetivo y es un long. Entradas con el mismo identificador en diferentes instancias corresponden al mismo objeto. De cada objeto detectado contiene su Posicin, caracterizada por las tres coordenadas cartesiana x, y y z expresadas en metros.
Clase AirRaid =>: Representa un escenario de un ataque de la zona protegida visto desde el sistema de radar. Hacia el exterior es un sistema de Radar que implementa la interfaz SistemaRadar. Internamente modela un ataque en el que los objetivos entran aleatoriamente por cualquier punto del permetro. Contiene la GUI en la que se representa la informacin.
Mtodos: AirRaid(interarrivalJet:int, numJet:int) => Constructor. Recibe como parmetros interarrivalJet que describe cada cuantos segundos genera un nuevo jet atacante (valr tpico 5 s) y numJet que indica el nmero de jet que coexisten atacando. Implementa los mtodos de la interfaz RadarSystem.
Clase SmartHunterGUI => Interfaz grfica de usuario que ofrece recursos para visualizar grficamente la evolucin de los jets y misiles en la aplicacin SmartHunter
Clase Misil => Objeto que controla el movimiento de los misiles defensivos a fin de interceptar el jet atacante que le ha sido asignado. Es un programa activo que acta de forma autnoma. Para ello, recaba de la clase MissilBatery desde la que fue lanzado, la informacin que necesita para el seguimiento del Jet que tiene asignado y ejecuta las acciones a travs de la clase que controla el hardware a travs de la interfaz MissileHardware.
Atributos: state: MissilState => Representa los estados que sigue un misil desde que es lanzado hasta que explota destruyendo el jet. Problema planteado en el material de asignatura de: Programacin Concurrente y Distribuida Ingeniera en Informtica, Universidad de Cantabria, Espaa Jos M. Drake missileTime: long => Representa el tiempo que transcurre en ms desde que es lanzado el missil hasta que explota. id: long => Identificador del jet que debe destruir. Lo utiliza para requerir de la batera la informacin que necesita del jet que se le asigna como objetivo. Mtodos: Missile(batteryName:String, batteryRef:MissileBattery) => Constructor. Recibe el nombre de la batera en la que se instala (E, N, S y O). run() => Mtodo que constituye la actividad del missil.
Interfaz MissileHardware: Interfaz que deben ofrecer los objetos que constituyen el controlador del mecanismo que constituye el misil. Mtodos: shot() => Dispara el misil de la batera en la que est instalado. setDirection(cosDirX:foat, cosDirY:float, cosDirZ:float) => Establece la direccin de avance del misil. Se pasan como argumentos los tres cosenos directores de la direccin de avance. getX():float, getY():float, getZ():float =>Retorna las coordenadas de la posicin actual del misil, obtenidas a travs del GPS que posee. explode() => Se ordena explotar la carga del misil.
Clase SpeedFalcon: Clase que emula el hardware de un misil que se desplaza a una velocidad de 1000 m/s. Su desplazamiento se controla a travs de los mtodos definidos en la interfaz MissilHardware que implementa.
Mtodos: SpeedFalcon(batteryName:String): Constructor. Recibe como informacin el nombre de la batera en la que est instalado. Lo usa para inicializar su sistema de posicin.
Relaciones cliente/servidor entre mdulos
En el diagrama de colaboracin se muestran los subsistemas que constituyen el sistema defensivo SmartHunter, y se identifican las relaciones cliente/servidor que se establecen entre ellos, y los servicios que se prestan.
Problema planteado en el material de asignatura de: Programacin Concurrente y Distribuida Ingeniera en Informtica, Universidad de Cantabria, Espaa Jos M. Drake
La aplicacin se desarrolla en equipos mximo de 4 personas (no se aceptarn equipos de ms integrantes).
Junto con la aplicacin es necesario entregar el manual operativo, este contiene: Portada Especificacin de la aplicacin. Diagramas de caso de uso Diagramas de transicin de estados por mdulo programado, incluyendo GUI Cdigo documentado de la aplicacin (la documentacin no es lnea por lnea es definir claramente la finalidad de cada tarea incluida en el programa y su relacin con los otras del sistema) Descripcin detallada de la aplicacin (interfaces describiendo como se opera, datos de entrada, datos de salida) establece el diseo propio de los programas vinculados con sus interfaces.