APELLIDOS Nº Mat. NOMBRE UNIVERSIDAD POLITÉCNICA DE MADRID Calificación ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA INDUSTRIAL Departamento El.A.I. ASIGNATURA INFORMÁTICA INDUSTRIAL CURSO 2º GRUPO Julio 2013 3. Indicar la salida por pantalla (2 puntos-15 minutos) #include <cstdlib> #include <iostream> using namespace std; class Canal { public: Canal () {cout <<"Creando nuevo canal de conversación"<<endl;} ~Canal () {cout <<"Eliminando canal de conversación"<<endl;} }; class Chat : public Canal { protected: int id_emisor; int id_receptor; public: Chat (int e,int r) {id_emisor=e; id_receptor=r; cout <<"Chat entre"<<(char)id_emisor<<" y "<<(char)id_receptor<<" establecido"<<endl;} ~Chat (){cout <<"Chat entre"<<(char)id_emisor<<" y "<<(char)id_receptor<<" cerrado"<<endl;} }; class SMS : public Canal { public: SMS (){cout <<"Mensaje instantáneo creado"<<endl;} ~SMS (){cout <<"Mensaje instantaneo destruido"<<endl;} }; int main(void) { Chat conversacion('A','B'); SMS conversacion2; printf("Intercambio de mensajes iniciado\n"); printf("Mensajes.......\n"); printf("Intercambio de mensajes finalizado\n"); system ("Pause"); return 0; } Impresión por pantalla Creando nuevo canal de conversación Chat entreA y B establecido Creando nuevo canal de conversación Mensaje instantáneo creado Intercambio de mensajes iniciado Mensajes....... Intercambio de mensajes finalizado Presione una tecla para continuar . . . APELLIDOS Nº Mat. NOMBRE UNIVERSIDAD POLITÉCNICA DE MADRID Calificación ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA INDUSTRIAL Departamento El.A.I. ASIGNATURA INFORMÁTICA INDUSTRIAL CURSO 2º GRUPO Julio 2013 4. Ejercicio de programación (2,5 puntos-50 minutos) Se desea simular una red de sensores Zigbee formada por distintos nodos. Cada red tiene unos parámetros comunes a todos los nodos: identificador de canal (11-26), identificador de red (0-16383). Además cada nodo tendrá una dirección de red particular (0-65536). Cada nodo de la red puede ser coordinador, router o end-device. El Nodo coordinador crea la red y define el número de canal y de red. La clase Red, contiene un atributo “listanodos” de tipo vector<Nodo> que mediante el uso de las STL nos facilita el contar con un vector dinámico. De esta forma, agregar nodos a esta lista se realiza mediante el método push_back( objeto ), y el acceso a la lista se deduce directamente del código suministrado. Declarar las clases “Nodo”, “Red” y “Coordinador”, utilizando herencia siempre que se pueda. Declarar y definir los métodos y variables necesarios para ejecutar el siguiente código: int main() { Coordinador nodoc1(6); //6 es la dirección de red del nodo Nodo nodo2(123), nodo3(22); //123 y 22 son las direcciones de red de los nodos Red red1; nodoc1.CrearRed(red1,14,5); //El nodo coordinador crea la red; 14 es el cana; 5 el id de red. El nodoc1 se añade a la red red1 + nodo2 + nodo3; //Se añaden los nodos 2 y 3 a la red for (int i=0; i<=red1.listanodos.size();i++) red1.listanodos[i].printid(); //Se sacan por pantalla algunos valores return 0; } Salida por pantalla: Coordinador de red. Dirección de red: 6. Id de red: 5 Dirección de red: 123. Id de red: 5 Dirección de red: 22. Id de red: 5 Press <RETURN> to close this window La puntuación del ejercicio irá no sólo en funcion del resultado, sino de la correcta programación usando las herramientas propias de la POO. Posible Solución #include <iostream> #include <vector> using namespace std; class Nodo; class Red { private: int canalid; int redid; public: void setcanalid(int a){canalid=a;}; void setredid(int a){redid=a;}; int getredid(){return redid;}; vector<Nodo> listanodos; Red& operator+(Nodo& nd); }; class Nodo { protected: int direccionred; Red myred; public: Nodo(int a): direccionred(a){}; void setmyred(Red red){myred=red;}; virtual void printid(){ cout << "Direccion de red:" << direccionred << ". Id de red:" << myred.getredid() << endl; }; }; Red& Red::operator+(Nodo& nd) { nd.setmyred(*this); listanodos.push_back(nd); return *this; } class Coordinador : public Nodo { public: Coordinador(int a):Nodo(a){}; void CrearRed(Red& redid, int canal, int red){ redid.setcanalid(canal); redid.setredid(red); redid + *this; }; void printid(){ cout<< "Coordinador de red."; Nodo::printid(); } }; APELLIDOS Nº Mat. NOMBRE UNIVERSIDAD POLITÉCNICA DE MADRID Calificación ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA INDUSTRIAL Departamento El.A.I. ASIGNATURA INFORMÁTICA INDUSTRIAL CURSO 2º GRUPO Julio 2013 5. Problema de Análisis y Diseño Orientado a Objetos (2.5 puntos - 50 minutos) Se está desarrollando un videojuego de aventuras espaciales, y en la actual iteración del proceso unificado se aborda el diseño e implementación de la flota de naves enemigas, para lo cual ya se han desarrollado las siguientes clases: #include "Vector3D.h" class Modulo { public: Modulo(){} ~Modulo(void){} void SetPosicion(Vector3D p); void Dibuja(); #include "Vector3D.h" class ArmaLaser { public: ArmaLaser (){} virtual ~ArmaLaser (); void SetPosicion(Vector3D p); void Dibuja(); protected: //posicion relativa al centro //geometrico de la nave espacial Vector3D posicion; }; class Vector3D { public: Vector3D(float ix=0,float iy=0,float iz=0 { x=ix;y=iy;z=iz; } ~Vector3D(void); protected: //posicion relativa al centro // geometrico de la nave espacial Vector3D posicion; }; float x; float y; float z; }; Las naves enemigas normales constan siempre de un único módulo espacial y de un arma laser. El código para dibujar una única nave podría ser el siguiente: void main() { Vector3D posicion;//dar la posicion de la nave Modulo modulo; modulo.SetPosicion(Vector3D(0,0,0); ArmaLaser laser; laser.SetPosicion(Vector3D(0,2,0)); glTranslatef(posición.x,posición.y,posición.z); modulo.Dibuja(); laser.Dibuja(); glTranslatef(-posición.x,-posición.y,-posición.z); } Se pide: 1. Diagrama de Clases de Diseño (DCD de la solución), para esta iteración. (2,5 puntos) 2. Implementación de la solución en C++. (2,5 puntos) 3. Un diagrama de secuencias del dibujo, a partir de la función main(). (2.5 puntos) 4. Diagrama de Clases de Diseño (DCD), para el supuesto en que la flota de naves enemigas tuviera también naves nodriza, que estarían formadas por 4 módulos espaciales ensamblados entre si, además de 5 armas laser. La solución debe de prever futuras extensiones a otros distintos tipos de naves. (2.5 puntos)