]> git.llucax.com Git - z.facultad/75.42/euler-oo.git/blob - documentacion.h
Se hace que se borre la corrida en el clean.
[z.facultad/75.42/euler-oo.git] / documentacion.h
1 /* vim: set et ts=4 sw=4 fdm=indent tw=80 fdl=1 fdn=1 fo+=t:
2  *
3  * Taller de Programación (75.42).
4  *
5  * Trabajo Práctico Número 1:
6  * Graficador de la solución de una ecuación diferencial por el método
7  * de Euler (explícito).
8  *
9  * Copyleft 2003 - Leandro Lucarella <llucare@fi.uba.ar>
10  * Puede copiar, modificar y distribuir este programa bajo los términos de
11  * la licencia GPL (http://www.gnu.org/).
12  *
13  * Creado: sáb sep 20 21:01:52 ART 2003
14  *
15  * $Id$
16  */
17
18 /** \mainpage Trabajo Práctico III
19
20 \htmlonly
21 También puede ver <a href="../latex/refman.pdf">este documento en formato
22 PDF</a>.
23 \endhtmlonly
24
25 \latexonly
26 También puede ver este documento en formato HTML en html/index.html.
27 \endlatexonly
28
29 \section objetivo Objetivo.
30     Los temas a practicar son:
31     - Introducción a la Programación Orientada a Objetos.
32     - Clases.
33     - Encapsulamiento de código.
34     - Parámetros por defecto.
35     - Herencia.
36     - Métodos virtuales.
37     - \e Overloading y \e overriding.
38
39 \section desarrollo Desarrollo.
40     Se desea desarrollar una aplicacion donde el usuario pueda crear un dibujo
41     a partir de \ref Figura "figuras básicas" (\ref Rectangulo "rectángulos",
42     \ref Cuadrado "cuadrados", \ref Linea "líneas", \ref Circulo "círculos",
43     etc).
44
45     Desarrolle a tal fin una clase Dibujo (y un
46     \ref ::main "programa de prueba"), que implemente una
47     \ref DLList "lista encadenada" de \ref Figura "figuras".
48
49     Toda Figura tiene definidos los siguientes atributos, que serán utilizados
50     al \ref Figura::dibujar "dibujar" la Figura en pantalla.
51     - \ref Figura::color "color" (entero 0 a 15).
52     - \ref Figura::grosor "grosor" (entero 1 a 10).
53     - \ref Figura::centro "posición central" (\ref Punto::x "x",
54       \ref Punto::y "y").
55     - \ref Figura::nombre "nombre".
56
57     Se definen las siguientes \ref Figura "figuras", con los respectivos
58     atributos:
59     - \ref Rectangulo "rectángulo" (\ref Rectangulo::ancho "ancho",
60       \ref Rectangulo::alto "alto").
61     - \ref Cuadrado "cuadrado" (\ref Cuadrado::ancho "ancho").
62     - \ref Linea "línea" (\ref Linea::ini "x0", \ref Linea::ini "y0",
63       \ref Linea::fin "x1", \ref Linea::fin "y1").
64     - \ref Circulo "círculo" (\ref Circulo::radio "radio").
65
66     Cada una de estas \ref Figura "figuras" debe implementarse en clases
67     separadas, derivadas de una clase base Figura, y deben tener un método
68     virtual \ref Figura::dibujar "dibujar", que imprima en pantalla un
69     string con un texto similar al siguiente:
70     \verbatim Dibujando Figura con los siguientes atributos: ... \endverbatim
71     donde \c Figura es el tipo de Figura y \c ... son cada uno de los atributos
72     de la Figura.
73
74     La clase Dibujo debe implementar los métodos
75     \ref Dibujo::agregar_figura "AgregarFigura",
76     \ref Dibujo::dibujar "Dibujar",
77     \ref Dibujo::borrar_todo "BorrarTodo", que permitan agregar una figura al
78     dibujo, dibujarlas y borrar todo el dibujo respectivamente.
79
80     \note
81         - El programa de prueba debe liberar TODA la memoria alocada antes de
82           terminar.
83         - El programa debe ser correctamente modularizado.
84         - No utilice funciones globales (con excepción de main()).
85         - No utilice memoria dinámica como atributos de la clase Figura ni sus
86           derivadas.
87
88
89 \section resolucion Resolución.
90     \subsection dibujo Dibujo.
91         La clase Dibujo fue implementada usando una versión modificada (ahora
92         implementada como una clase) de la
93         \ref DLList "lista doblemente enlazada" realizada para el TP2. Esta
94         lista almacena todas las \ref Dibujo::figuras "figuras" por lo que la
95         clase Dibujo sólo debe preocuparse por
96         \ref Dibujo::agregar_figura "agregar figuras" a la lista,
97         \ref Dibujo::dibujar "recorrer la lista dibujando las figuras" y 
98         \ref Dibujo::borrar_todo "eliminar las figuras de la lista".
99
100     \subsection figuras Figuras.
101         No hay mucho que decir sobre las figuras. Se creó una clase (una
102         estructura para ser exacto, pero tiene constructor y métodos) Punto
103         para guardar el \ref Figura::centro "centro de la figura" (y los
104         extremos de la \ref Linea "línea").
105         Al Cuadrado se lo hizo heredar del Rectangulo ya que un Cuadrado \b es
106         \b un Rectangulo. Todo lo que hace es limitar, en su
107         \ref Cuadrado::Cuadrado "constructor", que el
108         \ref Cuadrado::ancho "ancho" sea igual al \ref Cuadrado::alto "alto".
109
110     \subsection corrida Corrida.
111         A continuación se presenta la salida de la corrida del programa.
112         \verbinclude corrida.txt
113
114 \section requerimientos Requerimientos y modo de uso.
115     \subsection plataforma Plataforma y compilador.
116         Este trabajo práctico fue realizado y probado bajo la plataforma Debian
117         GNU/Linux sid. El compilador utilizado fue GNU GCC versión 3.3.1.
118         El ejecutable entregado corre bajo esta plataforma y su uso se
119         describe en la \ref uso "siguiente sección".
120
121         De todas formas, al estar programado sólo utilizando funciones ANSI
122         C/C++, debería poder compilarse bajo cualquier plataforma y compilador
123         que soporte este estándar.
124
125     \subsection uso Modo de uso.
126         El \ref ::main "programa" debe ser llamado desde un intérprete de
127         comandos. Para compilarlo basta con tener el programa \c make y
128         ejecutarlo. Eso genera (entre otras cosas) el archivo \c tp3 que puede
129         ser ejecutado de la siguiente manera:
130         \verbatim $ ./tp3 \endverbatim
131
132 \section conclusiones Conclusiones.
133     No tuve mayores problemas a la hora de resolver el TP. Sólo un par de veces
134     intenté poner modificadores \c const en la declaración de métodos (ya sea
135     declarando parámetros como \c const o declarando el método como \c const)
136     pero luego tuve errores de compilación porque resultaba que en realidad sí
137     se modificaban cosas. En particular me pasó en Dibujo, al intentar hacer
138     que el método Dibujo::dibujar() sea \c const pero no puede ser así ya que la
139     \ref Dibujo::figuras "lista interna" se modifica al ser recorrida y, por lo
140     tanto, el objeto Dibujo también se modifica.
141
142 */