]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blob - Constructor/doc/especificaciones_tecnicas.lyx
subo el workplace.h y decime si asi esta bien puesto el comentario
[z.facultad/75.42/plaqui.git] / Constructor / doc / especificaciones_tecnicas.lyx
1 #LyX 1.3 created this file. For more info see http://www.lyx.org/
2 \lyxformat 221
3 \textclass article
4 \language english
5 \inputencoding auto
6 \fontscheme default
7 \graphics default
8 \paperfontsize default
9 \papersize Default
10 \paperpackage a4
11 \use_geometry 0
12 \use_amsmath 0
13 \use_natbib 0
14 \use_numerical_citations 0
15 \paperorientation portrait
16 \secnumdepth 3
17 \tocdepth 3
18 \paragraph_separation indent
19 \defskip medskip
20 \quotes_language english
21 \quotes_times 2
22 \papercolumns 1
23 \papersides 1
24 \paperpagestyle default
25
26 \layout Title
27
28 PlaQui Constructor
29 \layout Title
30
31 Documentación Técnica
32 \layout Standard
33
34
35 \begin_inset LatexCommand \tableofcontents{}
36
37 \end_inset 
38
39
40 \layout Section
41
42 Introducción:
43 \layout Standard
44
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
47 iento o abstracción.
48 \layout Section
49
50 Descripción del desarrollo:
51 \layout Subsection
52
53 Constructor:
54 \layout Standard
55
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,
59  etc.
60 \layout Standard
61
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.
64 \layout Standard
65
66 Uno de los métodos mas importantes de esta clase es 
67 \begin_inset Quotes eld
68 \end_inset 
69
70 on_item_drop_drag_recived()
71 \begin_inset Quotes erd
72 \end_inset 
73
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
76  estaba creado.
77 \layout Standard
78
79 Para facilitar el diseño y disminuir la complejidad, la grilla fue dividida
80  en sectores de 32x32 pixels, lo que permite que el usuario no tenga que
81  ser muy preciso a la hora de soltar un item en el área de trabajo.
82 \layout Standard
83
84 Cada nuevo elemento creado es almacenado en una lista de elementos ( 
85 \begin_inset Quotes eld
86 \end_inset 
87
88 listaItems
89 \begin_inset Quotes erd
90 \end_inset 
91
92  ) de transporte o almacenamiento de fluido, o de elementos lógicos, según
93  cual sea ( 
94 \begin_inset Quotes eld
95 \end_inset 
96
97 lista_logic_items
98 \begin_inset Quotes erd
99 \end_inset 
100
101 ).
102 \layout Standard
103
104 Otra de las funciones principales es 
105 \begin_inset Quotes eld
106 \end_inset 
107
108 check_connection()
109 \begin_inset Quotes erd
110 \end_inset 
111
112  que recorre todos los items de ambas listas y verifica que se haya formado
113  en el momento del diseño un circuito posible.
114  Mas adelante se verá como cada elemento verifica su conexión.
115 \layout Standard
116
117 Esta clase contiene los métodos necesarios para guardar y cargar un archivo
118  XML cuyo formato se explica mas adelante.
119 \layout Standard
120
121 También está contenida en ella la clase WorkPlace, que detalla a continuación.
122 \layout Subsection
123
124 WorkPlace:
125 \layout Standard
126
127 Esta clase es la encarga de de manejar el área trabajo.
128  Deriva de Gtk::DrawingArea pues es donde se van a dibujar todos los elementos.
129  Una de sus principales tareas es redibujarse cuando sea necesario y al
130  mismo tiempo, redibujar los elementos que contiene, como pueden ser los
131  items de la planta o las líneas lógicas que conectan los mismos.
132 \layout Standard
133
134 Para lograr esto, se ha redefinido el método virtual (contenido en la clase
135  ancestro) 
136 \begin_inset Quotes eld
137 \end_inset 
138
139 on_expose_event()
140 \begin_inset Quotes erd
141 \end_inset 
142
143  de manera conveniente.
144 \layout Standard
145
146 También se encarga de eliminar correctamente un item, eliminando al mismo
147  tiempo las lineas que llegan o salen de él.
148 \layout Subsection
149
150 CItem:
151 \layout Standard
152
153 Acá se definen los comportamientos comunes de todo los items de la aplicación,
154  como puede ser la imagen actual, la posición en la grilla, el caudal máximo,el
155  número único de identificación y diferentes punteros a otros objetos.
156 \layout Standard
157
158 Por cuestiones de diseño los elementos de la planta además de tener un número
159  único que los identifica, también deben tener nombres difrerentes.
160 \layout Standard
161
162 También esta definida en esta clase la estuctura que representa los conectores
163  físicos, y otra que representa a los conectores lógicos.
164 \layout Standard
165
166 Esta clase contiene métodos abstractos ya que cualquier elemento que descienda
167  de ella deberá poder implementar los mismos porque, por ejemplo, ningún
168  item se guarda en un archivo de la misma manera; este es el caso del método
169  
170 \begin_inset Quotes eld
171 \end_inset 
172
173 save( FILE archivo)
174 \begin_inset Quotes erd
175 \end_inset 
176
177 .
178 \layout Standard
179
180 Existe otro método abstracto dentro de esta clase que es 
181 \begin_inset Quotes eld
182 \end_inset 
183
184 check_connection()
185 \begin_inset Quotes erd
186 \end_inset 
187
188 .
189  Del mismo modo que un item se guarda de forma diferente que otro, también
190  verifica su conexión de distinta forma, es por eso que cada item debe implement
191 ar su manera de verificar como y con quién esta conectado.
192 \layout Standard
193
194 Al ser esta clase abstracta, no puede ser instanciada, con lo cual existirá
195  una clase derivada de esta para cada item que se quiera agregar en la aplicació
196 n.
197 \layout Subsubsection
198
199 Método check_connection():
200 \layout Standard
201
202 Anteriormente se mencionó que cada item verifica sus conexiones de manera
203  diferente.
204 \layout Standard
205
206 Las clases que heredan de CItem son las siguientes:
207 \layout Enumerate
208
209 Conduct: representa un tubo.
210 \layout Enumerate
211
212 Splitter: representa un codo.
213 \layout Enumerate
214
215 Union: representa un empalme ( UNION ó DIVISION).
216 \layout Enumerate
217
218 Cistern: representa un tanque,
219 \layout Enumerate
220
221 Exclusa: representa una exclusa.
222 \layout Enumerate
223
224 Drain: representa un drenaje.
225 \layout Enumerate
226
227 Pump: representa una bomba.
228 \layout Standard
229
230 Para las clases Conduct, Splitter y Exclusa, este método es bastante similar,
231  sobre todo teniendo en cuenta que una exclusa es un tubo con una propiedad
232  mas (abierto/cerrado) y el codo es un tubo que en la aplicación representa
233  un curva.
234 \layout Standard
235
236 Estos tres elementos tienen la particularidad que sus conectores físicos
237  no estan definidos en el momento de su creación, sino que se definen una
238  vez que pertenecen a un circuito.
239 \layout Standard
240
241 La verificación se realiza recorriendo la lista de items y preguntandole
242  a cada uno que posee en sus extremos.
243 \layout Standard
244
245 El tanque, la bomba, el empalme y el drenaje, tiene definidos sus conectores
246  en el momento de la creación.
247 \layout Standard
248
249 Supongamos que el circuito es el siguiente:
250 \layout Standard
251
252
253 \begin_inset Graphics
254         filename /home/nico/plaqui/Constructor/doc/check_connection.png
255
256 \end_inset 
257
258
259 \layout Standard
260
261 Donde bomba0 y tubo0 son los de la izquiera y bomba1 y tubo1 son los de
262  la derecha, para poder diferenciarlos.
263 \layout Standard
264
265 Cabe aclarar que no importa con cual de los items se comience la iteración.
266 \layout Standard
267
268 Según la imagen actual de la bomba0, este debe preguntar con quién esta
269  conectado en su salida pero ya sabe, por ser bomba que tendrá una salida,
270  luego el tubo0 que en ese momento no esta definido, debe averiguar como
271  definirse, para hacerlo pregunta en su otro extremo el cual esta conectado
272  con una unión, que por ser unión posee dos entradas (horizontales en este
273  caso) y una salida (vertical).
274  La unión le responde que posee una entrada, por lo tanto el extremo derecho
275  del tubo será una salida, lo cual implica que el extremo izquierdo tiene
276  que ser una entrada, y esto es compatible con la bomba.
277  De esta forma la bomba0 y el tubo0 se setean sus conectores y se establecen
278  como 
279 \begin_inset Quotes eld
280 \end_inset 
281
282 conectados
283 \begin_inset Quotes erd
284 \end_inset 
285
286 .
287  Continuando con la iteración, es el turno del tubo0 (por el orden de incersión
288  en la lista), pero este ya está conectado, por lo tanto no se realizan
289  verificaciones.
290 \layout Standard
291
292 Lo mismo ocurre del lado derecho del circuito con la bomba1 y el tubo1.
293 \layout Standard
294
295 Algo similar ocurre cuando la unión pregunta que tiene en su salida, la
296  exclusa debe preguntarle al tanque y este le responderá que posee una entrada,
297  luego la exculsa tendrá una entrada en el extremo superior y una salida
298  en el inferior; nuevamente el circuito es compatible.
299  Por último el tanque le solicita al codo que le informe su estado y el
300  proceso se repite con el drenaje que posee solamente una salida.
301 \layout Standard
302
303 Así todos los elementos han quedado conectados y conocen también con quién
304  o quienes lo están.
305 \layout Section
306
307 Formtato del archivo:
308 \layout Standard
309
310 El archivo de salida de la planta al guardarla tiene un formato XML.
311 \layout Standard
312
313 Para el ejemplo anterior el archivo sería el siguiente:
314 \layout Standard
315
316 \the_end