[pyar] Consulta de disenio de clases.
Gonzalo
gonchi.sanchez en gmail.com
Vie Feb 25 18:21:51 ART 2011
El 25 de febrero de 2011 17:58, Juan Gabardini <jgabardini en gmail.com>escribió:
> hola
> Las clases parecen muy acopladas, y en tu último ejemplo, parece que A no
> necesita conocer a B para nada.
> Quizás puedas comentar que querés resolver y podríamos tirar ideas para
> diseños alternativos.
> una forma alternativa (de lo que entendí inicialmente) sería
>
>
La idea (como dije antes) es aplicar algo de GRASP y mantener un bajo
acoplamiento, por eso puse la sugerencia de utilizar Singleton.
> class Config:
> def __init__(self, par1, par2):
> self.par1=par1
> self.par2=par2
>
> def parametros(self):
> return self.par1, self.par2
>
> class ClaseA:
> def __init__(self, conf):
> self.conf= conf
>
> def metodoA(self):
> par1, par2 = self.conf.parametros()
> print("los parametros en A son: %d, %d") %(par1, par2)
>
>
> class ClaseB:
> def __init__(self, conf):
> self.conf= conf
>
> def metodoB(self):
> par1, par2 = self.conf.parametros()
> print("los parametros en B son: %d, %d") %(par1, par2)
>
> if __name__ == '__main__':
> config= Config(1,2)
> objetoA = ClaseA(config)
> objetoB = ClaseB(config)
> objetoA.metodoA()
> objetoB.metodoB()
>
>
> Puede ser, lo dejo como alternativa, pero por el momento quiero evitar que
ambas clases hereden de una misma... Cuestiones de diseño nomas! ;)
Gracias por tu tiempo.
slds,
>
> 2011/2/25 Gonzalo <gonchi.sanchez en gmail.com>
>
> Al final no era tan complicado, algo basico. Gracias EHB, lo resolvi de la
>> siguiente manera (seguro se puede hacer mejor y mas bonito):
>>
>> class ClaseA(object):
>> def setInstanciaB(self, objeto):
>> self.instanciaB = objeto
>> def setFancyMsg(self, msg):
>> self.fancymsg = msg
>> def hitme(self):
>> print self.fancymsg
>> return
>>
>> class ClaseB(object):
>> def setInstanciaA(self, objeto):
>> self.instanciaA = objeto
>> return
>> def pasarFancyMsgA(self):
>> self.instanciaA.setFancyMsg("Hola Tarolas!")
>> return
>> def hacerAlgo(self):
>> print "Calling home..."
>> self.instanciaA.hitme()
>> print "Done!"
>> return
>> def run(self):
>> self.pasarFancyMsgA()
>> self.hacerAlgo()
>> return
>>
>> def main():
>> objetoA = ClaseA()
>> objetoB = ClaseB()
>> objetoA.setInstanciaB(objetoB)
>> objetoB.setInstanciaA(objetoA)
>> objetoB.run()
>>
>> Gracias nuevamente.
>>
>> slds,
>>
>> El 25 de febrero de 2011 17:31, Gonzalo <gonchi.sanchez en gmail.com>escribió:
>>
>> Perdon nicolas, explique que no tengo enie en este teclado! ;)
>>>
>>> EHB gracias, algo asi...
>>> A los demas, por si no quedo muy clara la idea seria hacer algo como:
>>>
>>> class ClaseA:
>>> def metodoA(par1, par2):
>>> print("los parametros en A son: %d, %d") %(par1, par2)
>>>
>>> def pasarParametros():
>>> miReferenciaObjetoB.metodoB(par1, par2)
>>>
>>> class ClaseB:
>>> def metodoB(par1, par2):
>>> print("los parametros en B son: %d, %d") %(par1, par2)
>>>
>>> def pasarParametros():
>>> miReferenciaObjetoA.metodoA(par1, par2)
>>>
>>> def main:
>>> objetoA = ClaseA()
>>> objetoB = ClaseB()
>>>
>>>
>>> Evidentemente para que el objetoA tenga una referencia al objetoB,
>>> deberia llamar a una funcion o un objeto "mas alto" jerarquicamente, del
>>> cual poder obtener la referencia al objeto necesario... Pregunte lo del
>>> singleton porque esto una vez lo hcie en java aplicando singleton; tenia una
>>> especie de objeto "Dios", encargado de crear los demas objetos, y cada vez
>>> que desde un objeto "hijo" necesitaba pasar referencia a otro, lo hacia
>>> llamando a un "Dios.getObjetoX.pasarParametro(x,y,z)"... Que es masomenos lo
>>> que necesito aca...
>>> Podria hacerse por ejemplo con variables globales? Es decir, en mi main,
>>> objetoA y objetoB son globales, tales que se pueden llamar de cualquier
>>> clase (esto no lo probe todavia), igual esto seria medio como una fantochada
>>> porque estaria mezclando temas de distintos paradigmas, que es lo que no
>>> quiero hacer...
>>> Muy probablemente tengo un error de conceptos, pero necesito un tip que
>>> me haga avivarme!
>>> Muchas gracias.
>>>
>>> slds,
>>>
>>> 2011/2/25 nicolás rosbaco <antiyanki en gmail.com>:
>>>
>>> > diseÑÑÑÑo
>>> >
>>> > El 25 de febrero de 2011 13:02, Gonzalo <gonchi.sanchez en gmail.com>
>>> escribió:
>>> >>
>>> >> Hola gente, como les va? Hoy tengo una consulta sobre el disenio del
>>> >> esquema de clases de mi programa, paso a explicar:
>>> >> Tengo una ClaseA, y una ClaseB dentro de un mismo file. Tambien una
>>> >> funcion main que crea un objetoA y un objetoB (de clases A y B
>>> >> respectivamente). Ahora bien, necesito llamar desde el objetoB a un
>>> >> metodo de objetoA, es decir, que el objetoA realice un metodo con
>>> >> argumentos que el objetoB conoce.
>>> >> La unica forma de hacerlo es aplicando un patron de disenio? (ejemplo
>>> >> singleton) Si es asi, alguna forma "comoda y linda" para hacerlo?
>>> >> busque pero las veo demasiado complicadas para mis vagos conocimientos
>>> >> de python.
>>> >> Quizas sea muy basico lo que estoy preguntando, es que hace poquito
>>> >> que migre "en serio" a python, antes hice scripts para nada
>>> >> complicados y no en objetos.
>>> >> Bueno, espero no molestarlos, muchas gracias de antemano!
>>> >>
>>> >> slds,
>>> >>
>>> >> PD: Perdon por la ortografia, tengo un teclado ingles... :P
>>> >>
>>> >> --
>>> >> Gonzalo.
>>> >> _______________________________________________
>>> >> pyar mailing list pyar en python.org.ar
>>> >> http://listas.python.org.ar/listinfo/pyar
>>> >>
>>> >> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>> >
>>> >
>>> >
>>> > --
>>> > "En un país colonial las oligarquías son las dueñas de los
>>> diccionarios"
>>> > (John William Cooke)
>>> >
>>> > _______________________________________________
>>> > pyar mailing list pyar en python.org.ar
>>> > http://listas.python.org.ar/listinfo/pyar
>>> >
>>> > PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>> >
>>>
>>>
>>>
>>> --
>>> Gonzalo.
>>>
>>>
>>
>>
>> --
>> Gonzalo.
>>
>> _______________________________________________
>> pyar mailing list pyar en python.org.ar
>> http://listas.python.org.ar/listinfo/pyar
>>
>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>
>
>
>
> --
> Juan Gabardini
> twitter&skype:jgabardini | http://softwareagil.blogspot.com
>
>
--
Gonzalo.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20110225/2ed7581b/attachment.html>
More information about the pyar
mailing list