--- /dev/null
+/* vim: set et ts=4 sw=4 fdm=indent tw=80 fdl=1 fdn=1 fo+=t:
+ *
+ * Taller de Programación (75.42).
+ *
+ * Trabajo Práctico Número 1:
+ * Graficador de la solución de una ecuación diferencial por el método
+ * de Euler (explícito).
+ *
+ * Copyleft 2003 - Leandro Lucarella <llucare@fi.uba.ar>
+ * Puede copiar, modificar y distribuir este programa bajo los términos de
+ * la licencia GPL (http://www.gnu.org/).
+ *
+ * Creado: sáb sep 20 21:01:52 ART 2003
+ *
+ * $Id$
+ */
+
+/** \mainpage Trabajo Práctico III
+
+\htmlonly
+También puede ver <a href="../latex/refman.pdf">este documento en formato
+PDF</a>.
+\endhtmlonly
+
+\latexonly
+También puede ver este documento en formato HTML en html/index.html.
+\endlatexonly
+
+\section objetivo Objetivo.
+ Los temas a practicar son:
+ - Introducción a la Programación Orientada a Objetos.
+ - Clases.
+ - Encapsulamiento de código.
+ - Parámetros por defecto.
+ - Herencia.
+ - Métodos virtuales.
+ - \e Overloading y \e overriding.
+
+\section desarrollo Desarrollo.
+ Se desea desarrollar una aplicacion donde el usuario pueda crear un dibujo
+ a partir de \ref Figura "figuras básicas" (\ref Rectangulo "rectángulos",
+ \ref Cuadrado "cuadrados", \ref Linea "líneas", \ref Circulo "círculos",
+ etc).
+
+ Desarrolle a tal fin una clase Dibujo (y un
+ \ref ::main "programa de prueba"), que implemente una
+ \ref DLList "lista encadenada" de \ref Figura "figuras".
+
+ Toda Figura tiene definidos los siguientes atributos, que serán utilizados
+ al \ref Figura::dibujar "dibujar" la Figura en pantalla.
+ - \ref Figura::color "color" (entero 0 a 15).
+ - \ref Figura::grosor "grosor" (entero 1 a 10).
+ - \ref Figura::centro "posición central" (\ref Punto::x "x",
+ \ref Punto::y "y").
+ - \ref Figura::nombre "nombre".
+
+ Se definen las siguientes \ref Figura "figuras", con los respectivos
+ atributos:
+ - \ref Rectangulo "rectángulo" (\ref Rectangulo::ancho "ancho",
+ \ref Rectangulo::alto "alto").
+ - \ref Cuadrado "cuadrado" (\ref Cuadrado::ancho "ancho").
+ - \ref Linea "línea" (\ref Linea::ini "x0", \ref Linea::ini "y0",
+ \ref Linea::fin "x1", \ref Linea::fin "y1").
+ - \ref Circulo "círculo" (\ref Circulo::radio "radio").
+
+ Cada una de estas \ref Figura "figuras" debe implementarse en clases
+ separadas, derivadas de una clase base Figura, y deben tener un método
+ virtual \ref Figura::dibujar "dibujar", que imprima en pantalla un
+ string con un texto similar al siguiente:
+ \verbatim Dibujando Figura con los siguientes atributos: ... \endverbatim
+ donde \c Figura es el tipo de Figura y \c ... son cada uno de los atributos
+ de la Figura.
+
+ La clase Dibujo debe implementar los métodos
+ \ref Dibujo::agregar_figura "AgregarFigura",
+ \ref Dibujo::dibujar "Dibujar",
+ \ref Dibujo::borrar_todo "BorrarTodo", que permitan agregar una figura al
+ dibujo, dibujarlas y borrar todo el dibujo respectivamente.
+
+ \note
+ - El programa de prueba debe liberar TODA la memoria alocada antes de
+ terminar.
+ - El programa debe ser correctamente modularizado.
+ - No utilice funciones globales (con excepción de main()).
+ - No utilice memoria dinámica como atributos de la clase Figura ni sus
+ derivadas.
+
+
+\section resolucion Resolución.
+ \subsection dibujo Dibujo.
+ La clase Dibujo fue implementada usando una versión modificada (ahora
+ implementada como una clase) de la
+ \ref DLList "lista doblemente enlazada" realizada para el TP2. Esta
+ lista almacena todas las \ref Dibujo::figuras "figuras" por lo que la
+ clase Dibujo sólo debe preocuparse por
+ \ref Dibujo::agregar_figura "agregar figuras" a la lista,
+ \ref Dibujo::dibujar "recorrer la lista dibujando las figuras" y
+ \ref Dibujo::borrar_todo "eliminar las figuras de la lista".
+
+ \subsection figuras Figuras.
+ No hay mucho que decir sobre las figuras. Se creó una clase (una
+ estructura para ser exacto, pero tiene constructor y métodos) Punto
+ para guardar el \ref Figura::centro "centro de la figura" (y los
+ extremos de la \ref Linea "línea").
+ Al Cuadrado se lo hizo heredar del Rectangulo ya que un Cuadrado \b es
+ \b un Rectangulo. Todo lo que hace es limitar, en su
+ \ref Cuadrado::Cuadrado "constructor", que el
+ \ref Cuadrado::ancho "ancho" sea igual al \ref Cuadrado::alto "alto".
+
+ \subsection corrida Corrida.
+ A continuación se presenta la salida de la corrida del programa.
+ \verbinclude corrida.txt
+
+\section requerimientos Requerimientos y modo de uso.
+ \subsection plataforma Plataforma y compilador.
+ Este trabajo práctico fue realizado y probado bajo la plataforma Debian
+ GNU/Linux sid. El compilador utilizado fue GNU GCC versión 3.3.1.
+ El ejecutable entregado corre bajo esta esta plataforma y u uso se
+ describe en la \ref uso "sección siguiente".
+
+ De todas formas, al estar programado sólo utilizando funciones ANSI
+ C/C++, debería poder compilarse bajo cualquier plataforma y compilador
+ que soporte este estándar.
+
+ \subsection uso Modo de uso.
+ El \ref ::main "programa" debe ser llamado desde un intérprete de
+ comandos. Para compilarlo basta con tener el programa \c make y
+ ejecutarlo. Eso genera (entre otras cosas) el archivo \c tp3 que puede
+ ser ejecutado de la siguiente manera:
+ \verbatim $ ./tp3 \endverbatim
+
+\section conclusiones Conclusiones.
+ No tuve mayores problemas a la hora de resolver el TP. Sólo un par de veces
+ intenté poner modificadores \c const en la declaración de métodos (ya sea
+ declarando parámetros como \c const o declarando el método como \c const)
+ pero luego tuve errores de compilación porque resultaba que en realidad sí
+ se modificaban cosas. En particular me pasó en Dibujo, al intentar hacer
+ que el método Dibujo::dibujar() sea \c const pero no puede ser así ya que la
+ \ref Dibujo::figuras "lista interna" se modifica al ser recorrida y, por lo
+ tanto, el objeto Dibujo también se modifica.
+
+*/