1 #LyX 1.3 created this file. For more info see http://www.lyx.org/
14 \use_numerical_citations 0
15 \paperorientation portrait
18 \paragraph_separation indent
20 \quotes_language english
24 \paperpagestyle default
35 \begin_inset LatexCommand \tableofcontents{}
45 Al ser una aplicación visual, algunos conceptos de la programación orientada
46 a objetos no se han tomados al pie de la letra, ya sea cuestiones de encapsulam
50 Descripción del desarrollo:
56 La clase principal de esta aplicación es la clase Constructor.
57 Ella es la encargada de obtener e inicializar todos los elementos de la
58 ventana principal, ya sean botones, cuadros de diálogo, barras de herramientas,
62 Para cada botón referenciado por esta clase, es conectado a ellos una señal,
63 que será el método que deben invocar al ser presionados.
66 Uno de los métodos mas importantes de esta clase es
67 \begin_inset Quotes eld
70 on_item_drop_drag_recived()
71 \begin_inset Quotes erd
74 que es la encargada de crear un nuevo elemento si es arrastrado desde la
75 barra de elementos, o de moverlo dentro del área de trabajo si este ya
79 Cada nuevo elemento creado es almacenado en una lista de elementos (
80 \begin_inset Quotes eld
84 \begin_inset Quotes erd
87 ) de transporte o almacenamiento de fluido, o de elementos lógicos, según
89 \begin_inset Quotes eld
93 \begin_inset Quotes erd
99 Otra de las funciones principales es
100 \begin_inset Quotes eld
104 \begin_inset Quotes erd
107 que recorre todos los items de ambas listas y verifica que se haya formado
108 en el momento del diseño un circuito posible.
109 Mas adelante se verá como cada elemento verifica su conexión.
112 También está contenida en ella la clase WorkPlace, que detalla a continuación.
118 Esta clase es la encarga de de manejar el área trabajo.
119 Deriva de Gtk::DrawingArea pues es donde se van a dibujar todos los elementos.
120 Una de sus principales tareas es redibujarse cuando sea necesario y al
121 mismo tiempo, redibujar los elementos que contiene, como pueden ser los
122 items de la planta o las líneas lógicas que conectan los mismos.
125 Para lograr esto, se ha redefinido el método virtual (contenido en la clase
127 \begin_inset Quotes eld
131 \begin_inset Quotes erd
134 de manera conveniente.
137 También se encarga de eliminar correctamente un item, eliminando al mismo
138 tiempo las lineas que llegan o salen de él.
144 Acá se definen los comportamientos comunes de todo los items de la aplicación,
145 como puede ser la imagen actual, la posición en la grilla, el caudal máximo,el
146 número único de identificación y diferentes punteros a otros objetos.
149 También esta definida en esta clase la estuctura que representa los conectores
150 físicos, y otra que representa a los conectores lógicos.
153 Esta clase contiene métodos abstractos ya que cualquier elemento que descienda
154 de ella deberá poder implementar los mismos porque, por ejemplo, ningún
155 item se guarda en un archivo de la misma manera; este es el caso del método
157 \begin_inset Quotes eld
161 \begin_inset Quotes erd
167 Existe otro método abstracto dentro de esta clase que es
168 \begin_inset Quotes eld
172 \begin_inset Quotes erd
176 Del mismo modo que un item se guarda de forma diferente que otro, también
177 verifica su conexión de distinta forma, es por eso que cada item debe implement
178 ar su manera de verificar como y con quién esta conectado.
181 Al ser esta clase abstracta, no puede ser instanciada, con lo cual existirá
182 una clase derivada de esta para cada item que se quiera agregar en la aplicació
184 \layout Subsubsection
186 Método check_connection():
189 Anteriormente se mencionó que cada item verifica sus conexiones de manera
193 Las clases que heredan de CItem son las siguientes:
196 Conduct: representa un tubo.
199 Splitter: representa un codo.
202 Union: representa un empalme ( UNION ó DIVISION).
205 Cistern: representa un tanque,
208 Exclusa: representa una exclusa.
211 Drain: representa un drenaje.
214 Pump: representa una bomba.
217 Para las clases Conduct, Splitter y Exclusa, este método es bastante similar,
218 sobre todo teniendo en cuenta que una exclusa es un tubo con una propiedad
219 mas (abierto/cerrado) y el codo es un tubo que en la aplicación representa
223 Estos tres elementos tienen la particularidad que sus conectores físicos
224 no estan definidos en el momento de su creación, sino que se definen una
225 vez que pertenecen a un circuito.
228 La verificación se realiza recorriendo la lista de items y preguntandole
229 a cada uno que posee en sus extremos.
232 El tanque, la bomba, el empalme y el drenaje, tiene definidos sus conectores
233 en el momento de la creación.
236 Supongamos que el circuito es el siguiente:
240 \begin_inset Graphics
241 filename /home/nico/plaqui/Constructor/doc/check_connection.png
248 Donde bomba0 y tubo0 son los de la izquiera y bomba1 y tubo1 son los de
249 la derecha, para poder diferenciarlos.
252 Cabe aclarar que no importa con cual de los items se comience la iteración.
255 Según la imagen actual de la bomba0, este debe preguntar con quién esta
256 conectado en su salida pero ya sabe, por ser bomba que tendrá una salida,
257 luego el tubo0 que en ese momento no esta definido, debe averiguar como
258 definirse, para hacerlo pregunta en su otro extremo el cual esta conectado
259 con una unión, que por ser unión posee dos entradas (horizontales en este
260 caso) y una salida (vertical).
261 La unión le responde que posee una entrada, por lo tanto el extremo derecho
262 del tubo será una salida, lo cual implica que el extremo izquierdo tiene
263 que ser una entrada, y esto es compatible con la bomba.
264 De esta forma la bomba0 y el tubo0 se setean sus conectores y se establecen
266 \begin_inset Quotes eld
270 \begin_inset Quotes erd
274 Continuando con la iteración, es el turno del tubo0 (por el orden de incersión
275 en la lista), pero este ya está conectado, por lo tanto no se realizan
279 Lo mismo ocurre del lado derecho del circuito con la bomba1 y el tubo1.
282 Algo similar ocurre cuando la unión pregunta que tiene en su salida, la
283 exclusa debe preguntarle al tanque y este le responderá que posee una entrada,
284 luego la exculsa tendrá una entrada en el extremo superior y una salida
285 en el inferior; nuevamente el circuito es compatible.
286 Por último el tanque le solicita al codo que le informe su estado y el
287 proceso se repite con el drenaje que posee solamente una salida.
290 Así todos los elementos han quedado conectados y conocen también con quién