]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blob - Constructor/doc/especificaciones_tecnicas.lyx
si tienen un minuto lean esto y digan que les parece
[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 Cada nuevo elemento creado es almacenado en una lista de elementos ( 
80 \begin_inset Quotes eld
81 \end_inset 
82
83 listaItems
84 \begin_inset Quotes erd
85 \end_inset 
86
87  ) de transporte o almacenamiento de fluido, o de elementos lógicos, según
88  cual sea ( 
89 \begin_inset Quotes eld
90 \end_inset 
91
92 lista_logic_items
93 \begin_inset Quotes erd
94 \end_inset 
95
96 ).
97 \layout Standard
98
99 Otra de las funciones principales es 
100 \begin_inset Quotes eld
101 \end_inset 
102
103 check_connection()
104 \begin_inset Quotes erd
105 \end_inset 
106
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.
110 \layout Standard
111
112 También está contenida en ella la clase WorkPlace, que detalla a continuación.
113 \layout Subsection
114
115 WorkPlace:
116 \layout Standard
117
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.
123 \layout Standard
124
125 Para lograr esto, se ha redefinido el método virtual (contenido en la clase
126  ancestro) 
127 \begin_inset Quotes eld
128 \end_inset 
129
130 on_expose_event()
131 \begin_inset Quotes erd
132 \end_inset 
133
134  de manera conveniente.
135 \layout Standard
136
137 También se encarga de eliminar correctamente un item, eliminando al mismo
138  tiempo las lineas que llegan o salen de él.
139 \layout Subsection
140
141 CItem:
142 \layout Standard
143
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.
147 \layout Standard
148
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.
151 \layout Standard
152
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
156  
157 \begin_inset Quotes eld
158 \end_inset 
159
160 save( FILE archivo)
161 \begin_inset Quotes erd
162 \end_inset 
163
164 .
165 \layout Standard
166
167 Existe otro método abstracto dentro de esta clase que es 
168 \begin_inset Quotes eld
169 \end_inset 
170
171 check_connection()
172 \begin_inset Quotes erd
173 \end_inset 
174
175 .
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.
179 \layout Standard
180
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ó
183 n.
184 \layout Subsubsection
185
186 Método check_connection():
187 \layout Standard
188
189 Anteriormente se mencionó que cada item verifica sus conexiones de manera
190  diferente.
191 \layout Standard
192
193 Las clases que heredan de CItem son las siguientes:
194 \layout Enumerate
195
196 Conduct: representa un tubo.
197 \layout Enumerate
198
199 Splitter: representa un codo.
200 \layout Enumerate
201
202 Union: representa un empalme ( UNION ó DIVISION).
203 \layout Enumerate
204
205 Cistern: representa un tanque,
206 \layout Enumerate
207
208 Exclusa: representa una exclusa.
209 \layout Enumerate
210
211 Drain: representa un drenaje.
212 \layout Enumerate
213
214 Pump: representa una bomba.
215 \layout Standard
216
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
220  un curva.
221 \layout Standard
222
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.
226 \layout Standard
227
228 La verificación se realiza recorriendo la lista de items y preguntandole
229  a cada uno que posee en sus extremos.
230 \layout Standard
231
232 El tanque, la bomba, el empalme y el drenaje, tiene definidos sus conectores
233  en el momento de la creación.
234 \layout Standard
235
236 Supongamos que el circuito es el siguiente:
237 \layout Standard
238
239
240 \begin_inset Graphics
241         filename /home/nico/plaqui/Constructor/doc/check_connection.png
242
243 \end_inset 
244
245
246 \layout Standard
247
248 Donde bomba0 y tubo0 son los de la izquiera y bomba1 y tubo1 son los de
249  la derecha, para poder diferenciarlos.
250 \layout Standard
251
252 Cabe aclarar que no importa con cual de los items se comience la iteración.
253 \layout Standard
254
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
265  como 
266 \begin_inset Quotes eld
267 \end_inset 
268
269 conectados
270 \begin_inset Quotes erd
271 \end_inset 
272
273 .
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
276  verificaciones.
277 \layout Standard
278
279 Lo mismo ocurre del lado derecho del circuito con la bomba1 y el tubo1.
280 \layout Standard
281
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.
288 \layout Standard
289
290 Así todos los elementos han quedado conectados y conocen también con quién
291  o quienes lo están.
292 \layout Standard
293
294 \the_end