1 /* vim: set et ts=4 sw=4 fdm=indent tw=80 fdl=1 fdn=1 fo+=t:
3 * Taller de Programación (75.42).
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).
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/).
13 * Creado: sáb sep 20 21:01:52 ART 2003
18 /** \mainpage Trabajo Práctico III
21 También puede ver <a href="../latex/refman.pdf">este documento en formato
26 También puede ver este documento en formato HTML en html/index.html.
29 \section objetivo Objetivo.
30 Los temas a practicar son:
31 - Introducción a la Programación Orientada a Objetos.
33 - Encapsulamiento de código.
34 - Parámetros por defecto.
37 - \e Overloading y \e overriding.
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",
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".
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",
55 - \ref Figura::nombre "nombre".
57 Se definen las siguientes \ref Figura "figuras", con los respectivos
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").
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
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.
81 - El programa de prueba debe liberar TODA la memoria alocada antes de
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
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".
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".
110 \subsection corrida Corrida.
111 A continuación se presenta la salida de la corrida del programa.
112 \verbinclude corrida.txt
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".
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.
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
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.