Diseño
y Programación Orientados a Objetos
1er. Sem 2010
Tarea 2: Simulación Gráfica de Masas, Resortes y Cuerdas como Objetos de Software
Recomendación: Lea detenidamente la tarea. Si algo no lo
entiende, consulte en clases. Si es preciso, se incorporarán
aclaraciones al final.
Esta tarea tiene por objetivos:
* Generar documentación con Javadoc.
* Crear de Interfaces gráficas en Java
* Manejar eventos de software.
* Ejercitar la creación y extensión de clases dadas para satisfacer nuevos requerimientos.
* Modelar un objeto físico como un objeto de software.
* Ejercitar una estrategia para programar simulaciones de fenómenos continuos.
Descripción General
Como en la tarea 1, en esta tarea se modela la interacción de resortes
y bloques; pero esta vez se hace en forma gráfica y se agrega el objeto
cuerda. Las cuerdas se pueden modelar como resortes con constante de
elasticidad "muy grande" cuando intentamos estirar la cuerda y con
constante de elasticidad nula si intentamos acortar la cuerda. La
representación gráfica de una cuerda será la de una trazo recto simple.
Su grupo no partirá desde cero. Aquí
usted encontrará los archivos que permiten generar configuraciones de
un número arbitrario de resortes y bloques. Cada bloque admite más de
un resorte.
Una vez construida la configuración. Ésta se puede detener en cualquier
momento, como se aprecia en la Figura 1. La interfaz permite cambiar la
posición de bloques y resortes. En general se puede modificar lo actual
e incorporar más elementos a la simulación. La simulación puede ser
reanudada cuantas veces se desee.
Figura 1: Simulación en un momento de detención
Trabajo a desarrollar
Usted verá que la aplicación permite incorporar bloques y resortes; sin
embargo, su estado inicial está predefinido. Usted deberá crear alguna
interfaz gráfica para especificar los atributos de cada resorte y cada
bloque. Esta especificación debe hacerse al momento de crear un
resorte, bloque o cuerda.
Su principal aporte en esta tarea será la creación una nueva categoría
de objetos: las cuerdas. Se espera que usted cree la clase MyString, para
modelar la parte física de las cuerdas, esto es sin representación
gráfica. Además se espera que usted cree la clase GString, que
incorpora la representación gráfica de sus cuerdas. Como los
resortes, las cuerdas sólo se pueden "amarrar" a bloques.
Para incorporar cuerdas, usted deberá crear tal opción en el menú "Insert".
Usted deberá documentar, usando notación "JavaDoc" las clases por usted creadas.
Además su grupo es instado a encontrar errores de ejecución o mejorar
el modelo dinámico de lo ya entregado. Por estas mejoras su grupo puede
optar hasta 10 puntos extras (máx. 110).
Resultados Esperados de su Grupo
Entregue todo lo indicado en Normas de Entrega de Tareas. Su documentación automática con javadoc debe ser generable con:
$ make doc
(OJO no incluya las páginas html generadas por javadoc, éstas serán generadas por este comando cuando el ayudante las revise)
En su archivo de documentación (pdf o html) incorpore el diagrama de clases de la aplicación. Éste lo puede generar con jgrasp u otro programa.
En su archivo de documentación incorpore además un diagrama de secuencia.
Éste debe mostrar la secuencia de invocaciones generadas al soltar el
botón del mouse luego que usted ha arrastrado el segundo extremo de la
cuerda a un bloque.
Ayudas
Dé una mirada a la solución parcial al problema. Si encuentra errores o algo que pueda ser mejorado, indíquelo claramente.
No dude en consultar al profesor o ayudante sobre dudas de esta tarea.
La tarea llega hasta aquí; sin embargo, usted también puede ganar ese
extra crédito (10 puntos, no acumulables con las mejores ya señaladas)
si usted agrega la opción de poner gravedad en el ambiente. Siga
considerando todo en dos dimensiones; sólo que en lugar de tener todo
sobre una mesa, todo estará vertical. Para que pueda afirmar las cosas,
seguramente deberá crear un tipo de bloque fijo, es decir no afecto a
la gravedad.
Considere una mirada a MyPhisicsLab, para que vea qué tan lejos está de lo que otros han hecho.
Sobre la arquitectura Modelo Vista Controlador
Para organizar interfaces gráficas una arquitectura de software
recomendada es la "modelo-vista-controlador". El modelo es el conjunto
de clases que manejan el modelo de datos o los objetos que almacenan
los datos significativos del problema. En este caso la clase
BlockSpringConfiguration maneja parte del modelo. Por otro lado tenemos
el la interfaz gráfica. Éstas clases representan visualmente los
objetos del problema. No es el caso nuestro, pero por ejemplo el objeto
termómetro puede tener varias formas de mostrarse, como columna de
mercurio, como número digital, como un color, etc. Finalmente tenemos
el controlador. Las clases controladoras son aquellas que modifican los
datos, por ejemplo a través de las acciones del usuario en la interfaz.
Generalmente las clases controladoras son los "listeners" o manejadores
de los eventos que usted estima de interés. Puede leer más sobre Model-View-Controller.
OBS: En los códigos dados
inicialmente, se aproximó v= vo+a*delta_t; como la aceleración varía,
esta aproximación para v(t) generó un error acumulado que se reflejó en
un incremento sostenido de la energía del sistema. Esto
llevó a buscar una mejor aproximación para v(t). Ésta se explica aquí, y es la implementación disponible en aquí a partir del 12 de junio 2010.