CURSO 2º GRUPO Junio 2011



Documentos relacionados
Tema: Clases y Objetos en C++.

Impresión por pantalla

Tema: Arreglos de Objetos en C++.

Prof. Dr. Paul Bustamante

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

Prof. Dr. Paul Bustamante

1. Qué tipos de relación hay entre las siguientes clases?

Programación Orientada a Objetos con Java

República Bolivariana de Venezuela Aldea Universitaria Liceo Fray Pedro de Agreda. Lenguaje C++ Contadores y Acumuladores

Capítulo 6. Introducción a la POO

Tema: Herencia Simple y Múltiple en C++.

Examen escrito de Programación 1

EXAMEN FINAL Metodología y Programación Orientada a Objetos. Curso Cuatrimestre de otoño. 17 de Enero de 2011

Examen Junio- Grupo A Lunes 17 de Junio - Programación en C++ Pág. 1

1. Ejemplo de clase : La clase Cuenta 2. Uso de la clase Cuenta. 3. Métodos y objetos receptores de mensajes (Importante)

Introducción al tipo de dato ARRAY

Ejercicio 1 (3 puntos).-

CONTENIDO. Programación orientada a objetos - POO. Clases. Constructores y destructores. Definiciones. Entrada y salida

Índice ÍNDICE EJERCICIO 1: CÁLCULO FINANCIERO (5 PTOS.) EJERCICIO 2: AGENCIA DE COLOCACIONES (5 PTOS.)...4

Introducción. Herencia y Polimorfismo. Ejemplos (I) Ejemplos (II) Control de Acceso. Herencia

Ejercicios del tema 7: Clases y objetos

1. Introducción. 1.1 Ejercicio 1: Estación Meteorológica (4.0 pts.) Ejercicio 2: Gestión Académica: Alumnos (5.0 pts.)...

3. Indicar la salida por pantalla (2 puntos-15 minutos)

Clases y Objetos. Informática II Ingeniería Electrónica

Introducción a la programación orientada a objetos

CONTENIDOS. 1. Completar el ejemplo de Herencia: Superclase Persona-Subclase Alumno

Curso Introducción JAVA Pág.: 1

Tema: Sobrecarga de Operadores.

Solución al Examen de Prácticas de Programación (Ingeniería Informática)

ELO329: Diseño y Programación Orientados a Objetos 20 de Junio de Certamen Final

Examen Principios de Programación Febrero 2012

ESCUELA DE INGENIERÍA DE SISTEMAS DEPARTAMENTO DE COMPUTACIÓN PROGRAMACIÓN 2 PRÁCTICA DE LABORATORIO 7 Herencia y Composición en POO

Prof. Dr. Paul Bustamante

Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero.

Tema: FUNCIONES, PROCEDIMIENTOS Y RECURSIVIDAD.

Contenidos. Funciones (suplemento) Funciones. Justificación del uso de Funciones

Prof. Dr. Paul Bustamante

Se ha desarrollado el siguiente programa principal. Se pide: arquitectura que permita una fácil extensión

ALGORITMICA Y PROGRAMACION POR OBJETOS I

Fundamentos de la Programación Orientada a Objetos Definición de Clases

ISTP CIDET COMPUTACION E INFORMATICA ARREGLOS EN JAVA

Técnicas de Desarrollo de Programas Ingeniería Informática Curso 2008 / Ejercicios de Patrones de Diseño:

Java Inicial (20 horas)

Examen Septiembre Curso Programación en C++ Pág. 1

PROGRAMACIÓN ORIENTADA A OBJETOS

2.2.- Paradigmas de la POO

Prof. Dr. Paul Bustamante

El lenguaje de programación Java

Curso de Java POO: Programación orientada a objetos

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez

Prof. Dr. Paul Bustamante

Programación Orientada a Objetos en Java

class Nombre_Clase extends Nombre_SuperClase { cuerpo de la clase extendida }

Patrones para persistencia (I) Ingeniería del Software II

FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2005

Programación orientada a objetos

Tema 3: Herencia en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

TIPOS DE DATOS DEFINIDOS POR EL PROGRAMADOR: Estructuras CONTENIDOS

Prof. Dr. Paul Bustamante

Segundo Taller Final de PROGRAMACIÓN ORIENTADO A OBJETOS. INGENIERÍA DE SISTEMAS. Docente y Administrativo: Luz Esperanza Espitia Preciado

Trabajo Práctico N 4: Diseño por Contratos

NOTAS TÉCNICAS SOBRE EL SIT: Documentos de Gestión

INTRODUCCIÓN AL TIPO COMPUESTO CADENA CONTENIDOS

Tutorial de UML. Introducción: Objetivos: Audiencia: Contenidos:

Ingeniería del Software

Relaciones entre Clases Programación Avanzada Prim FCC-Buap Profesor: M. C. Miguel Rodríguez Hernandez

Elabore el diagrama de clases en UML y la codificación de un programa para resolver los siguientes problemas:

Programación Orientada a Objetos en JAVA

Programación Avanzada SOLUCIÓN EXAMEN FEBRERO 2011

TEST (8 preguntas, 0 4 puntos por pregunta correcta, puntos por error) [Marcar sólo una opción]

Examen de Prácticas de Programación Ingeniería Informática

Curso 0 de Informática

Etapa de Diseño: Gestión de Hotel Diseño de Sistemas Software

POO PROGRAMACIÓN ORIENTADA A OBJETOS

FACULTAD DE INGENIERÍA

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java

PROGRAMACIÓN ORIENTADA A OBJETOS Master de Computación. II MODELOS y HERRAMIENTAS UML. II.2 UML: Modelado de casos de uso

GUIA PROGRAMACIÓN ORIENTADA A OBJETOS

Vectores. 27/05/05 Programación Digital I 1

TEMA 8: DIAGRAMA DE CLASE EN UML

Hoja de problemas Estructuras de Control

TEMA 5. CONTROL DE FLUJO DEL PROGRAMA. Sentencia Instrucción Expresión Operadores + Operandos Sintaxis: Sentencia ;

Ejercicio 1 (2 puntos. Tiempo: 25 minutos)

Tema 2: La clase string

Conceptos. ELO329: Diseño y Programación Orientados a Objetos. ELO 329: Diseño y Programación Orientados a Objetos

Ejercicios de Programación Orientada a Objetos

Ingeniería del Software

Práctica 2 Gráficos Vectoriales con SVG (versión )

Programación Orientada a Objetos: Arreglos en Java

Tema 6. Reutilización de código. Programación Programación - Tema 6: Reutilización de código

MANUAL DE AYUDA HERRAMIENTA DE APROVISIONAMIENTO

Gestor de aplicaciones Java. Esta herramienta es el intérprete de los archivos de clase generados por el javac (compilador).

Mantenimiento Limpieza

Manual del Protocolo XML-RPC de Mensajería Negocios

Facultad de Ingeniería Escuela de Ingeniería de Sistemas y Computación Algoritmia y Programación

Contenidos. Gestión dinámica de memoria. Gestión dinámica de memoria. Introducción. 1. Introducción 2. El operador NEW 3. El operador DELETE

PART II: Moviendo al jugador

Notación UML para modelado Orientado a Objetos

Fundamentos de Programción (I)

Partes de un programa en Java. A. Ejemplo de un Programa en Java /* Programa Ejemplo de Java: Muestra una Ventana Archivo: Ejemplo1.

Transcripción:

APELLIDOS NOMBRE Nº Mat. UNIVERSIDAD POLITÉCNICA DE MADRID ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA INDUSTRIAL Departamento El.A.I. ASIGNATURA INFORMÁTICA INDUSTRIAL Calificación CURSO 2º GRUPO Junio 2011 Convocatoria del trabajo de Informática Industrial presentado... 1. Test teórico: Acertada +1, error -0.33 (2 puntos-20 minutos) 2. Pregunta Teórica (1 punto 15 minutos) Clases abstractas e Interfaces. Explica para qué se utiliza cada una de ellas y sus características en cuanto a implementación, mencionando diferencias y similitudes. Pon un ejemplo de cada caso y dibuja los diagramas UML correspondientes. 3. Indicar la salida por pantalla (2 puntos 15 minutos) #include <iostream.h> class figura protected: double x, y; void set_dim(double i, double j) x = i;y = j; virtual void mostrar_area() cout << "No hay calculo de area definido "; cout << " para esta clase.\n"; figura ()cout << "Figura Creada"<<endl; ~figura()cout <<"Figura Destruida\n"; ; class triangulo : public figura void mostrar_area() cout << "Triángulo con alto "<< x << " y base " << y; cout << " tiene un área de "<< x * 0.5 * y << ".\n"; triangulo ()cout << "Triángulo Creado"<<endl; ~triangulo()cout <<"Triángulo Destruido\n"; ; class rectangulo : public figura void mostrar_area() cout << "Rectángulo con dimensiones " << x << " x " << y; cout << " tiene un área de " << x * y << ".\n"; ; rectangulo ()cout << "Rectángulo Creado"<<endl; ~rectangulo()cout <<"Rectángulo Destruido\n"; ; void main(void) figura *p; p=new triangulo; p->set_dim(10.0, 5.0); p->mostrar_area(); delete p; rectangulo r; p = &r;

p->set_dim(10.0, 5.0); p->mostrar_area(); Impresión por pantalla Figura Creada Triángulo Creado Triángulo con alto 10 y base 5 tiene un área de 25. Figura Destruida Figura Creada Rectángulo Creado Rectángulo con dimensiones 10 x 5 tiene un área de 50. Rectángulo Destruido Figura Destruida

APELLIDOS NOMBRE Nº Mat. UNIVERSIDAD POLITÉCNICA DE MADRID ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA INDUSTRIAL Departamento El.A.I. ASIGNATURA INFORMÁTICA INDUSTRIAL Calificación CURSO 2º GRUPO Junio 2011 4. Ejercicio de programación (2,5 puntos 50 minutos) Se desea realizar una pequeña base de datos que clasifique la música del hogar. Para ello se define la clase base genérica Cancion, la cual contiene el título, el artista, y el estilo de la canción. Los dos primeros atributos pueden ser de longitud totalmente libre. Los metodos de interfaz pueden ser los que se requieran, pero al menos la clase contiene: Se pide: enum Estilo CLASICA, POP, ROCK, COUNTRY, FLAMENCO, JAZZ, REGGAE, SALSA, GRUNGE; class Cancion char *titulo; char *autor; Estilo estilo; Cancion(char * tit, char *aut, Estilo est); virtual void imprime(); void imprimeestilo(); virtual ~Cancion(); //métodos que se decidan como convenientes. ; 1. Escribir el código de la definición del metodo imprimeestilo, el cual según el estilo de la canción imprimirá por pantalla el texto correspondiente 2. Escribir el código necesario que complete la clase Canción. Esta clase solo puede tener un contructor, sin parámetros por defecto, que es el indicado en la declaración. Para almacenar las distitas canciones se diseña la clase MyTunes, la cual es un contenedor de canciones, que admite hasta un máximo de 10000 referencias. Se incluye parcialmente el código de su declaración como orientacion: #define MAX_CANCIONES 10000 class MyTunes Cancion *lista[max_canciones]; int num; MyTunes(); ~MyTunes(); //métodos adicionales. ; 3. Escribir el código del constructor, del destructor, y una sobrecarga del operador += que permita agregar la dirección de una canción a MyTunes. 4. Escribir un método de MyTunes que permita imprimir sólo las canciones de un estilo dado como parámetro de dicho método. 5. Escribir la clase CancionCD la cual hereda de Canción, pero agrega un identificador numérico de CD, y el número de canción. Cuando se imprima la información de dicho objeto se incluirán estos datos además de los propios de la clase Canción. 6. Escribir la clase CancionWEB que análogamente a la anterior, incluye además de la información relativa a Canción, un texto que codifica la URL del sitio que contiene la canción referenciada. 7. Escribir una función main que agregue una serie de canciones tanto de CDs como de internet a una base de datos, e imprimir después la lista de canciones de algunos de los estilos incluidos. P.D.: No es necesario en ningun apartado hacer un código de interactuación con el usuario (de hecho se considerará como muy negativo la utilización de cin, o de scanf, o de cualquier función de petición de datos) 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.

//Solucion del ejercicio de programación de Junio de 2011 enum Estilo CLASICA, POP, ROCK, COUNTRY, FLAMENCO, JAZZ, REGGAE, SALSA, GRUNGE; class Cancion char *titulo; char *autor; Estilo estilo; Cancion(char * tit, char *aut, Estilo est); virtual void imprime(); void imprimeestilo(); virtual ~Cancion(); //métodos que se decidan como convenientes. Estilo getestilo()return estilo; ; //apartado 1 #include <iostream> using namespace std; void Cancion::imprimeEstilo() switch(estilo) case CLASICA: cout<<"clásica"; break; case POP: cout<<"pop"; break; case ROCK: cout<<"rock & Roll"; break; case COUNTRY: cout<<"country"; break; case FLAMENCO: cout<<"flamenco"; break; case JAZZ: cout<<"jazz"; break; case REGGAE: cout<<"reggae"; break; case SALSA: cout<<"salsa"; break; case GRUNGE: cout<<"grunge"; break; default: cout<<"estilo Libre"; //apartado 2 Cancion::Cancion(char *tit, char *aut, Estilo est) titulo=new char[strlen(tit)+1]; strcpy(titulo,tit); autor=new char[strlen(aut)+1]; strcpy(autor, aut); estilo=est; void Cancion::imprime() cout<<"titulo: "<<titulo<<endl; cout<<"autor: "<<autor<<endl; cout<<"estilo:"; imprimeestilo(); cout<<endl; Cancion::~Cancion() delete [] titulo; delete [] autor;

APELLIDOS NOMBRE Nº Mat. UNIVERSIDAD POLITÉCNICA DE MADRID ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA INDUSTRIAL Departamento El.A.I. ASIGNATURA INFORMÁTICA INDUSTRIAL Calificación CURSO 2º GRUPO Junio 2011 #define MAX_CANCIONES 10000 class MyTunes Cancion *lista[max_canciones]; int num; MyTunes(); ~MyTunes(); //métodos adicionales. //apartado 3 bool operator+=(cancion *c); //apartado4 void imprimeestilo(estilo estilo); ; //definiciones apartado 3 MyTunes::MyTunes():num(0) MyTunes::~MyTunes() //por diseño se podria establecer que no es responsable de la //destruccion en este caso, puesto que no hace la reserva for(int i=0;i<num;i++)delete lista[i]; bool MyTunes::operator +=(Cancion *c) if(num>= MAX_CANCIONES)return false; if(c==0)return false; lista[num++]=c; return true; //definiciones apartado 4 void MyTunes::imprimeEstilo(Estilo estilo) for(int i=0;i<num;i++) if(lista[i]->getestilo()==estilo) lista[i]->imprime(); //apartado 5 class CancionCD: public Cancion int numcd; int numcancion; CancionCD(char *tit, char *aut, Estilo est, int num_cd, int pista):cancion(tit,aut,est) numcd=num_cd; numcancion=pista; void imprime() Cancion::imprime(); cout<<"cd: "<<numcd<<" Pista:"<<numCancion<<endl; ; //apartado 6 class CancionWEB: public Cancion char *url; CancionWEB(char *tit, char *aut, Estilo est, char *dir):cancion(tit,aut,est) url=new char[strlen(dir)+1]; strcpy(url,dir);

~CancionWEB() delete [] url; void imprime() Cancion::imprime(); cout<<endl<<"url: "<<url<<endl; ; //apartado 7 void main() MyTunes tunes; tunes+=new CancionCD("Jueves","LOV",POP,12,1); tunes+=new CancionWEB("True Colors","Phyl Collins",POP,"www.music.net/id?=1234"); tunes.imprimeestilo(pop);

APELLIDOS NOMBRE Nº Mat. UNIVERSIDAD POLITÉCNICA DE MADRID ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA INDUSTRIAL Departamento El.A.I. ASIGNATURA INFORMÁTICA INDUSTRIAL Calificación CURSO 2º GRUPO Junio 2011 5. Problema de Análisis y Diseño Orientado a Objetos (2.5 puntos 50 minutos) Se desee desarrollar una aplicación para calcular los precios de alquiler de una empresa de alquiler de vehículos. Cada vehículo se identifica por medio de su matrícula. La empresa dispone de una flota de vehículos para alquilar. Existen distintos tipos de vehículos, unos son para transportes de personas y otros para mercancías. En la actualidad los vehículos alquilados por la empresa son: coches, microbuses, furgonetas de carga y camiones. El precio de alquiler de cualquier vehículo tiene una componente base que depende de los días de alquiler a razón de 50 /día. En el caso de alquiler de un coche, al precio base se le suma la cantidad de 1.5 por plaza y día. El precio de alquiler de los microbuses es igual que el de los coches, salvo que se le añade una cantidad de 2 /plaza independientemente de los días de alquiler. El precio de los vehículos de carga es el precio base más 20 * PesoMáximoAutorizado en toneladas. Además, en el caso de los camiones, al precio se suma un fijo de 40 independientemente de los días de alquiler. Se pide: a Redacta el escenario principal de éxito para el caso de uso Obtener precio de alquiler, que calcula en el momento de devolución de un vehículo el precio según el número de días que ha estado alquilado. b Diagrama de Clases de Diseño de la solución. Indica los patrones utilizados. c Implementación de la solución en C++. d Un Diagrama de Secuencias del servicio MostrarPrecios(numDias: int) el cual, a partir de un número de días indicados, muestra el precio que supondría alquilar cada uno de los vehículos de la aplicación.

Ejercicio 5 Solución a) Caso de uso CalcularPrecioAlquilerVehículo. Escenario principal de éxito: 1. El Vendedor inicia la operación para calcular el precio de alquiler. 2. El Vendedor introduce la matrícula del vehículo. 3. El Vendedor introduce el número de días que ha estado alquilado el vehículo. 4. El Sistema muestra el precio de alquier de dicho vehículo. b) c) Vehiculo.h class Vehiculo Vehiculo(string m) matricula = m; ; virtual float calcularprecioalquiler(int dias) = 0; string getmatricula() return matricula; ; private: string matricula; ;

APELLIDOS NOMBRE Nº Mat. UNIVERSIDAD POLITÉCNICA DE MADRID ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA INDUSTRIAL Departamento El.A.I. ASIGNATURA INFORMÁTICA INDUSTRIAL Calificación CURSO 2º GRUPO Junio 2011 VehiculoCarga.h class VehiculoCarga: public Vehiculo VehiculoCarga(string m, float peso) : Vehiculo(m) PMA = peso; precioportonelada = 20.0; float calcularprecioalquiler(int dias); protected: float PMA; float precioportonelada; ; VehiculoCarga.cpp float VehiculoCarga::calcularPrecioAlquiler(int dias) return 60.0*dias + precioportonelada*pma*dias; Camion.h class Camion: public VehiculoCarga Camion(string m, float peso) : VehiculoCarga(m, peso) preciofijo = 40.0; float calcularprecioalquiler(int dias); private: float preciofijo; ; Camion.cpp float Camion::calcularPrecioAlquiler(int dias) return VehiculoCarga::calcularPrecioAlquiler(dias) + preciofijo; Furgoneta.h class Furgoneta: public VehiculoCarga Furgoneta(string m, float peso) : VehiculoCarga(m, peso) ; VehiculoPasajeros.h class VehiculoPasajeros: public Vehiculo VehiculoPasajeros(string m, int p) : Vehiculo(m) plazas = p; virtual float calcularprecioalquiler(int dias) = 0; int getplazas(); protected: int plazas; ; VehiculoPasajeros.cpp float VehiculoPasajeros::calcularPrecioAlquiler(int dias) return 50.0 * dias; int VehiculoPasajeros::getPlazas() return plazas; Microbus.h class Microbus: public VehiculoPasajeros Microbus(string m, int p) : VehiculoPasajeros(m, p) precioporplaza = 2.5;

float calcularprecioalquiler(int dias); private: float precioporplaza; ; Microbus.cpp float Microbus::calcularPrecioAlquiler(int dias) return VehiculoPasajeros::calcularPrecioAlquiler(dias) + plazas*2.0; Coche.h class Coche: public VehiculoPasajeros Coche(string m, int p) : VehiculoPasajeros(m, p) float calcularprecioalquiler(int dias); ; Coche.cpp float Coche::calcularPrecioAlquiler(int dias) return VehiculoPasajeros::calcularPrecioAlquiler(dias) + 1.5*dias*plazas; d)