Las cuestiones se responderán en el espacio reservado para ello

Anuncio
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)
Descargar