Download Bloque práctico 2: Java
Document related concepts
no text concepts found
Transcript
Metodología de la Programación II Práctica 2 Bloque práctico 2: Java 1: Programación modular, herencia simple y polimorfismo. En esta práctica pondremos utilizaremos las capacidades de programación orientada a objetos de que dispone Java El objetivo de la práctica es programar un lienzo y figuras que se puedan pintar utilizando herencia y polimorfismo. Todas las clases asociadas al problema serán programadas siguiendo una filosofía modular, realizando un paquete con todas las clases a utilizar (Lienzo, Disenno, Figura,...) y otro paquete con las clases de prueba de las clases. Esta práctica es continuación de la practica 1 en C++. Para este caso habrá que realizar tanto los programas de prueba, tomando como ejemplo los realizados en la práctica 1 como las librerias. En los casos en los que no es posible una conversión directa a C++ proponer e implementar la alternativa en Java más conveniente razonando la elección. La alternativa debe ir comentada en la clase que lo implementa a modo de comentario multilinea. 0) Recordatorio: la programación modular en Java Para programar una clase dentro de un paquete , deberemos incluir en el archivo donde se crea esta clase la linea package nombredepaquete. El nombre del paquete de librería debe ser Disenno y el de las clases de prueba pruebaDisenno En las clases de Prueba se deberá utilizar import para referenciar a las clases del paquete Disenno. . Ejemplo de clases en un paquete y compilada en un módulo package libreria; public class Punto{ protected int x,y; public void pinta(){ System.out.println( Punto\n"); } } package PruebaPunto; import libreria.*; public class PruebaPunto { public static void main (String [] args){ Punto p=new Punto(); p.pinta(); } } El paquete librería deberá estar en un directorio /librería para ser accesible desde PruebaPunto. 1 Metodología de la Programación II Práctica 2 1) Programar un lienzo y figuras dibujables Un Lienzo es una matriz de puntos de imagen (píxels) de dos dimensiones al que se le pueden poner los píxels de un color determinado (un carácter). Un lienzo se puede rellenar de un color, con lo que todos los píxels del lienzo tendrían dicho valor. Un lienzo, finalmente, se puede mostrar por pantalla. Para pintar en este Lienzo, vamos a construir unas figuras que sepan como pintarse en un lienzo, teniendo en cuenta que si el dibujo se sale de los límites del mismo no se pinten los píxeles que se salen del lienzo (es decir, si la figura se sale del lienzo, no da error, sólo visualiza la parte que cae dentro del mismo). Una figura contiene una posición de origen expresada por dos enteros que determinan la posición del eje x y el eje y. Esta posición es una clase aparte contenida por la figura. Una figura debe tener un método que devuelva una string con la descripción del tipo de figura y su contenido. Una figura tiene un color determinado por un char. Las figuras disponibles son: Punto: Posición y color. Bitmap : Posición inicial (esquina superior izquierda), ancho, alto ,contenido y color. Notas sobre los métodos de Dibujo de cada figura: Bitmap se construye como una cadena que contiene unos ("1") en las posiciones que se quiere pintar y "0" en las no pintables (bitmap monocromo). Un ejemplo de bitmap de alto 3 y ancho tres es el siguiente: Contenido del bitmap: "001001001" Bitmap dibujado con el color '*': " * * *" donde " " serian pixels no dibujados y * el píxel dibujado en el color * Estas figuras deben contener en una superclase todas aquellas características que les sean comunes. Realice un programa de prueba que sea el equivalente en Java del siguiente programa de prueba en C++. 2 Metodología de la Programación II Práctica 2 int main(int argc, char *argv[]) { Lienzo z(15,12); Posicion pos1(1,1),pos2(5,5),pos3(8,8); Punto p(pos1,'*'),p1(pos2,'+'); char* contenido =strdup("001001001"); Bitmap b(Posicion(2,2),contenido,3,3,'@'); z.rellenar(' '); // Pinta dos puntos y un bitmap p.pintar(&z); p1.pintar(&z); b.pintar(&z); z.mostrar(); cout << p.descripcion()<< "\n"; cout << b.descripcion()<< "\n"; // Ejemplo de Polimorfismo Figura *f; f = &p; f->pintar(z); z.mostrar(); system("PAUSE"); return EXIT_SUCCESS; } Salida Esperada * @ @ @ + Punto:(1,1), color:42 Bitmap:(2,2), color:64, contenido:001001001 Presione una tecla para continuar . . . . Presione una tecla para continuar . . . Nota: recuerde que Figura debe ser clase abstracta 3 Metodología de la Programación II Práctica 2 2) La clase Disenno:un manejador de figuras: La clase disenno debe poder manejar un número de figuras máximo definido por constructor. Estas figuras son añadidas con el método add. Este metodo no tiene en cuenta si ya estaba añadida dicha figura con anterioridad, almacenandola siempre que haya un hueco. Las Figuras se pueden borrar del diseño enviándoles la referencia, en dicho caso elimina la primera referencia que se encuentren que apunte al mismo objeto. Diseño debe implementar un método descripción que devuelve un string con todas las descripciones de las figuras que contiene. La clase diseño implementa un método Dibuja, que envia las figuras a pintar sobre un lienzo. Realizar un programa de prueba en Java que : 1) 2) 3) 4) 5) Cree un diseño d1 y un Lienzo lc Añada a d1 un punto en 1,1 y un bitmap en 5,5 Muestre descripcion de d1 y dibuje en el lienzo lc Rellenar lienzo lc a ' ' "remove" el punto y volver a mostrar en lienzo lc. 3)Sobrecarga de toString. Sobrecargue el metodo toString para la clase Disenno de modo que se envíe al flujo de salida que actúa de operando izquierdo una descripción de Disenno en modo texto de la siguiente manera: System.out.println(d); 4) Excepciones. el código debe controlar los errores utilizando excepciones. Se creará una clase de excepción DisennoException que herede de Exception: Los constructores servirán para inicializar los distintos objetos con un valor que deberán mantener almacenado. Se deberán lanzar excepciones cuando: - se intente eliminar una figura de un Disenno vacío, - se intente añadir una figura en un Disenno lleno - se intente dibujar fuera de los límites de un Lienzo El constructor de la Excepción deberá tener un parámetro entero indicando el tipo de la excepción (de 1 a 3) y el método what() devolver una cadena de caracteres con el mensaje apropiado (por ejemplo: "Diseño lleno", "Diseño Vacio", etc...). Realice un programa para que se produzcan las excepciones mencionadas capturando las excepciones y mostrando por pantalla el motivo de la excepción. 4 Metodología de la Programación II Práctica 2 Instrucciones de Entrega La práctica deberá dejarse comprimida con winrar con el nombre: Practica2_xxx.rar en la cuenta de usuario. donde xxx es el código de usuario asociado. La práctica deberá contener dos directorios (Figuras y PruebaFiguras), en Figuras estarán todas las clases del paquete referente a lienzo, disenno y figuras , con un fichero .java por clase. En el otro directorio estarán todas las pruebas a realizar en uno o varios ficheros .java Las fechas de entrega serán desde hasta el 18 de Enero de 2009, siendo necesario defenderlas en clase de la siguiente forma: - Dejar el fichero comprimido en la cuenta. Probar todos los ficheros de prueba presencialmente en clase con el profesor. Si funcionan adecuadamente se revisarán las clases y programas de prueba. En caso de encontrarse errores se permitirá la reentrega dentro de fecha En caso de errores graves no se considera apta. Si la entrega final tiene errores leves, la calificación podrá ser del 50% ó 75% de la parte que le corresponda a la práctica. Esta nota será validada cuando se realice el examen de modificación, hasta entonces la nota no será definitiva. Es necesario superar todas las prácticas y haber asistido a un 70% de las clases prácticas para tener apta la parte práctica de la asignatura (no se cuentan las faltas después de la entrega hasta el comienzo de la siguiente práctica), en caso contrario se puede optar por examen final práctico. El examen de modificación tendrá lugar en la semana del 19 al 24 de Enero de 2007 para los grupos de Jesús Maria Prieto y el 26 para el grupo m1 de Miguel Ángel Rodríguez (una vez presentado al de modificación no se puede presentar al práctico final). El examen práctico final (sólo para aquellos que no realicen el de modificación) tendrá lugar el Lunes 26 de enero a las 10:00 en el aulario Von Neumann. 5