Diseño y Programación Orientados a Objetos
1er. Sem 2010
Tarea 3: Applet para Simulador Gráfico de Masas, Resortes y Elásticos 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.
Sumado a los objetivos de la tares 2, esta tarea tiene por objetivos:
* Generar documentación con Javadoc.
* Crear gráficos en Java.
* Creación de archivos .jar
* Aplicar elementos de Ingeniería de software.

Descripción General
  En la tarea 2 conocimos las limitaciones del algoritmo de simulación de los componentes físicos considerados. El sistema gana energía como consecuencia de la manera como éste es simulado. Para aliviar el problema generado por las cuerdas, en esta tarea usted las reemplazará por elásticos (Rubber band). Éstos pueden ser modelados en forma similar a las cuerdas, pero con constante de elasticidad normal (no muy grande o "infinita").
  Básicamente ahora usted podrá correr las simulaciones a través de Internet usando un Applet. Además deberá crear las clases necesarias para incluir un tres gráficos para una masa del experimento: el primer gráfico mostrará la coordenada en un eje (digamos X) en función del tiempo, otro con la coordenada en el eje perpendicular (digamos Y) y otro con la trayectoria del objeto en un gráfico XY.

Trabajo a desarrollar
Respecto de la especificación de la tarea 2, usted deberá cambiar la clase MyString y GString, por RubberBand y GRubberBand. Refleje el comportamiento de un elástico. Cuando éste sea seleccionado del menú, su programa pedirá el largo y la constante de elasticidad a través de ventanas de diálogos o algo gráfico equivalente.
El tiempo de refresco inicial (refresh time) y el paso de simulación (delta time), deben ser definidos en el html. Ante su ausencia, el applet usará los mismos valores de la tarea 2. Para ello los nombres de los parámetros serán: RefreshTime y DeltaTime.
Si usted lo desea puede definir otros parámetros, pero su applet debe funcionar bien si se especifican los parámetros ya mencionados, sólo uno de ellos o ninguno de ellos. Más abajo se agrega otro parámetro.
El Applet debe dividir el área de despliegue en dos con JSplitPane. A la izquierda debe verse la simulación y a la derecha tres gráficos ordenados verticalmente. Los gráficos deben tener título, y nombre para cada eje. El gráfico superior es del tipo y v/s t, el que le sigue x v/s t y el tercero y v/s x. Los gráficos deben mostrar la posición en el tiempo y trayectoria de una masa. Para seleccionarla, incorpore el ítem de menú "Select" directamente con la barra de menú luego del menú Simulator. Al posicionarse sobre Select, debe aparecer un "tool tip" "Select mass to be plotted). Los gráficos de tiempo deben mostrar sólo el últimos N segundos de la simulación, donde N es un parámetro especificados en el HTML (default = 30 segundos). El nombre de este parámetro en el html es "timeWindowSize"
Cada vez que se selecciona otra masa, el gráfico parte nuevamente borrando toda historia pasada.
Use Javadoc para actualizar la documentación correspondiente a la clase "RubberBand" y "GRubberBand".
Prepare sus archivos de modo de incluir una clase PhysicsLab que permita ejecutar su solución como aplicación y la clase PhysicsLabApplet que lo haga como applet. Para el caso de PhysicsLab use los parámetros por omisión (no serán especificados por ningún html). Su grupo puede optar a 10 puntos de extras si en lugar de usar aquellos por omisión, usted estudia la clase Properties, y define los mismos nombre de parámetros indicados antes en un archivo PhysicsLab.ini.

Resultados Esperados de su Grupo
Entregue todo lo indicado en Normas de Entrega de Tareas.
Incluya un archivo PhysicsLab.html que permita correr su applet.
Debe preparar un archivo PhysicsLab.jar que incluya todo lo requerido para la ejecución de su applet.
La aplicación debe correr usando:
$make run
o bien usando:
$ java -jar PhysicsLab.jar
(Nota por una pregunta el 16.06, agregué la extensión que falta en PhysicsLab.jar)
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 dos casos de usos de la aplicación, sus correspondientes diagramas UML y ponga dos tarjetas CRC.

Ayudas
Será provista según surjan consultas de parte de ustedes.
Con fecha 12 de junio se cambió la clase Bloque.java con una mejor implementación de la simulación que no acumula energía, al menos así se aprecia luego de un buen rato corriendo.
Cuando comenté al profesor Glaría la nueva forma para calcular la simulación, me mostró una forma general para calcular la integral a partir de los valores previos. Su explicación explica el desarrollo hecho antes.

(Cabe destacar que al dejar el programa corriendo por mucho rato, el sistema lleva la CPU a 100% de utilización. Sólo observo esto ahora y no sé a qué se debe aún. Si su tarea luego de más de 10 minutos muestra el mismo problema no será motivo de penalización. Si usted reproduce este problema y luego lo resuelve y explica en su documentación, gana 10 puntos extras en su tarea.)
16.06.10: Ya no aplica este adicional pues resolví le problema. Su explicación y solución está en Simulator.java.