Presentacion (Era Definir Listas Globales)

Antonio Castro acastro en ciberdroide.com
Mie Mar 10 14:33:15 CET 2004


On Wed, 10 Mar 2004, Andres Moya wrote:

> El mié, 10-03-2004 a las 08:33, Antonio Castro escribió:
>
> > Yo tuve un problema de diseño recientemente en el cual la solución
> > parecía pasar por usar variables globales entre determinadas funciones
> > y se me ocurrió meter una clase con sus métodos dentro de una función.
>
> > La idea era que funcionPrincipal() era demasiado grande para hacerlo
> > en una única funcion y parecía necesario la cooperacion de varias
> > funciones que pompartieran variables globales.
>
> Buf, esa solución a mí me parece más fea todavía :P Lo de las

Según se me ocurría me pareció una solución rarita y me queda claro que
a ti tambien te lo parece. ;-)

> clases-función sólo es aconsejable en algunos casos particulares, pero

No estoy seguro. Este podría ser precisamente el caso.

> en general contradice la teoría de orientación a objetos, que dice que
> un objeto es un tipo abstracto de datos.

Eso lo puedo entender pero es que no se trataba de implementar un objeto
sino una función. Aunque las cosas no son blancas o negras yo veo un
objeto como algo que sirve para manejarlo y hacer cosas con él y
una función como algo que básicamente hace algo bastante concreto.

Claro podemos crear y usar una función X() de la forma siguiente:

		instanciaX=ClaseX()
		instanciaX.X()
		del instanciaX

Pero si solo interesa usarlo como X()  **podría**   ser una opción
meter dentro de la función el objeto para uso interno nada más.


> Este caso se puede solucionar de maneras mejores. Por ejemplo, usando un
> estilo procedural típico, lo más fácil es pasar esas variables como
> parámetro:
>
>   def funcionPrincipal(...):
>     var1 = ...
>     var2 = ...
>     fun1(var1, var2)
>
>   def fun1(var1, var2):
>     ... # Si la función modifica las variables, hay que devolverlas al
>         # final con return (en python se pueden devolver varios valores)

Tuve problemas para usarlo así. No recuerdo exactamente el motivo pero
era cosa de las librerías que uso. self.funcionX(algo) debe ser recibido
como def funcionX(self, algo) y cuando la funcionX es tuya no hay
problema en adaptarla,  pero cuando es la funcion de una librería
que espera cierto número de argumentos, y  si ese algo que quieres pasar
debe ser manejado en alguna otra función, es cuando se me crea el problema.

Bueno si alguien tiene curiosidad son unos cientos de líneas y es un
módulo con utilidades de propósito general basadas en el uso de ventanas
emergentes (popup_window). Tome la idea de algunos fuentes de Demos de
Tkinter. (He visto ejemplos similares de varios autores) y lo he adaptado
y ampliado . Usa Tkinter y Tix.

Por cierto hay una parte que me da un error de Segmentation violation
y lo malo es que casca cuando salgo de una función cerrando la ventana.

Creo que alguno de los destructores internos de alguna clase de la
librería debe tener algún bug, pero vey dificil saber donde está.

Otro problema es que una ventana que usa ScrollText() empieza a vibrar
si se intenta redimensionar y no tengo puesto enventos extraños que
lo expliquen, así que es una interacción entre eventos de distintos
widgets cuando varían su tamaño. Aquí el fallo puede ser mío pero no
lo pillo.

-- 
Un saludo
Antonio Castro

       /\     /\
         \\W//
        _|0 0|_
+-oOOO-(___o___)-OOOo---------------------+
| . . . . U U . Antonio Castro Snurmacher |
| . . . . . . . acastro en ciberdroide.com   |
+()()()---------()()()--------------------+




Más información sobre la lista de distribución Python-es