Diseño
y Programación Orientados a Objetos
1er. Sem 2007
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.
- Ejercite los conceptos de clases, herencia y entrada y salida
simple a consola.
Esta tarea es la primera de una secuencia donde paso a paso iremos
aplicando el patrón de diseño Modelo-Vista-Control. Este
modelo
sugiere organizar en forma separada: los objetos que almacenan
información (son el Modelo), las vistas que corresponde a la
representación visual de esos datos (puede haber varias vistas),
y el control que son las formas cómo los datos cambian. En esta
primera tarea usted sólo trabajará en la forma
cómo almacenará figuras geométricas. En cierto
sentido hay mucha similitud con la tarea del año 2006. En
próximas tareas en lugar de figuras geométricas, los
objetos a manipular serán componentes eléctricas como
Resistencias, Condensadores, Fuentes para armar un circuito (no una
figura). Espero noten la analogía con lo que esta tarea les pide.
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 y círculo.
Con instancias de estas clases usted construirá una figura a
través de un menú por consola que le permitirá
agregar formas a su figura.
Una vez que la figura esté creada, otro menú le
permitirá trasladar, rotar, o escalar la figura previamente
ingresada. Ante cada operación el programa mostrará por
consola el estado de la figura luego de la operación.
Clase Forma
Como diseño considere un requisito de
la tarea que las clases Circulo y Rectangulo, sean
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 desplazándola 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 y Circulo
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(Point a, Point b); /* rectángulo
con lados paralelos a los ejes coordenados definido por los dos puntos
indicados.*/
Circulo(Point c, double radio); /* Círculo de radio dado y
centro en
punto c. */
Incluya el método equals para cada tipo de forma.
Incluya el método clone
para cada tipo de forma.
Clase Figura
Figura es una abstracción para una conjunto de formas.
También podemos decir que una figura es una forma compuesta de
otras formas más simples. Cada figura contiene una arreglo
(ArrayList) de formas. La clase Figura también es subclase de
Forma y como tal implementa todos sus métodos.
Redefina el método toString para Figura.
Clase TestFigura
Esta clase permitirá revisar si las implementaciones de
cada forma y Figura respondes a lo requerido.
La clase TestFigura posee al menos los siguientes métodos:
public Forma figuraFactory(); este método muestra un menú
de texto en consola con opciones:
1: Crear Rectángulo
2: Crear Círculo
3: Salir
Este menú es presentado hasta que el usuario opta por 3 en cuyo
caso el método retorna con la figura creada hasta entonces.
Otro método de TestFigura es:
public void manipularForma(Forma f); este método muestra un
menú de texto en consola con opciones:
1: rotar
2: trasladar
3: escalar
4: Salir
Para cada operación se solicitan los parámetros, se
aplica la operación a la forma, y se muestra en consola el
resultado.
Notas:
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 la mejor solución
del año pasado, también a otra implementación previa
y al ejemplo
de
Makefile. Más información sobre
Makefiles.