Diseño
y Programación Orientados a Objetos
1er. Sem 2006
Tarea 1: Figuras Geométricas
Esta tarea tiene por objeto que:
- Usted se familiarice con el ambiente de
desarrollo que usará en otras tareas y su proyecto.
- Evalúe la herramienta que resulte más cómoda
para
usted.
En clases he sugerido trabajar con Emacs o Jgrasp.
- Aprenda a crear un Makefile
- Aprenda la generación automática de
documentación usando javadoc.
La tarea será revisada desde consola; es decir se requiere que
usted cree un archivo Makefile para que el ayudante compile su trabajo
sólo ejecutando la sentencia
$ make
Para ejecutar su programa el ayudante ejecutará
$ make run
Descripción General:
En esta tarea se le pide que usted implemente las clases
rectángulo, círculo, línea, y triángulo.
Luego usted deberá crear un programa de prueba donde
ejercitará los métodos creados para cada clase. Usted
hará uso de implementaciones de toString para mostrar por
consola el resultado de sus operaciones.
Clase Forma
Como diseño considere como requisito dado de
la tarea que las clases Circulo, Rectangulo, Linea, y Triangulo, son
subclase de la clase Forma.
La clase Forma es una clase abstracta con los siguientes métodos:
/**
* Superclass para distintas formas en R2.
* @author Agustín J. González
*/
public abstract class Forma
{
/** Escala la forma respecto al punto central en un factor dado.
* @param centro Punto respecto del cual se hace el escalamiento.
* @param factor Factor usado en el escalamiento. >1
corresponde a amplificación, <1 corresponde a
reducción.
*/
public abstract void escalar(Point centro, double factor);
/** Rota la forma respecto al punto central en un ángulo dado.
* @param centro Punto respecto del cual se hace la rotación.
* @param deltaAngulo ángulo de rotación en radianes.
*/
public abstract void rotar(Point centro, double deltaAngulo);
/** Traslada la forma desplazandola en sentido X e Y.
* @param deltaX desplazamiento en sentido horizontal.
* @param deltaY desplazamiento en sentido vertical.
*/
public abstract void trasladar(double deltaX, double deltaY);
}
Clases Rectangulo, Circulo, Triangulo,
y Linea
Usted decida cómo representará los atributos de cada
forma específica.
Para cada subclase redefina el método toString. En este
método, usted deberá incluir la siguiente
información:
Este es un <Clase del Objeto>: <lista de atributos>
Por ejemplo, para un rectángulo, podríamos tener:
"Este es un Rectangulo: Centro=(3,4) ; Ancho=5; alto=4,
inclinación=45 grados."
O algo así.
Como constructores usted debe proveer:
Rectangulo(double ancho, double alto); /* rectángulo
inicialmente centrado en (0,0), e inclincación 0 grados.*/
Circulo(double radio); /* Círculo de radio dado y centro en
(0,0). */
Triangulo(Point a, Point b, Point c); /* triángulo en
algún punto del espacio R2 con vértices a,b,c.
Linea(Point a, Point b); /* Línea que va desde punto a a punto b. */
Incluya el método equals para cada tipo de forma.
Incluya el método clone
para cada tipo de forma.
Clase TestForma
Esta clase permitirá revisar si las implementaciones de
cada forman responden a lo requerido.
Por ejemplo uno puede crear un rectángulo, luego lo muestra por
consola, luego le aplica una rotación en Math.PI, lo que luego
se muestra por pantalla
consola debería
ser lo mismo que antes.
Así se pueden aplicar algunas operaciones cuyo resultado puede
ser chaqueado observando el estado posterior del objeto.
Se recomienda crear un arreglo de Formas en el cual usted puede
incorporar un grupo de cada tipo, luego recorra el arreglo para
trasladar todas, rotar todas, etc... Si usted hace un clone del
arreglo, luego traslada las figuras en un sentido y luego hace otra
traslación en sentido contrario debería poder comparar
por la igualdad el arreglo clonado con el final.
Observación, para
revisar su tarea, el ayudante además de
correr su programa TestForma, él correrá su propio
TestForma.
En la documentación de esta tarea, no es necesario que usted
haga una descripción en alto nivel de los algoritmos usados. En
esta tarea la verificación de
estilo es voluntaria. Usted debe
entregar su código documentado de manera que se pueda generar la
documentación con el utilitario javadoc.
Dele una mirada a un ejemplo de
Makefile. Más información sobre
Makefiles.