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