Patrones de diseño

David Villa dvilla en gmx.net
Lun Ago 2 16:35:52 CEST 2004


Hola:

El lun, 02-08-2004 a las 14:55, Toni Martínez escribió:
> Pensando en voz alta:
> Ya hay una lista básica de patrones con una nomenclatura establecida. (S/N)

Sí, hay un catálogo básico de patrones, a parte de los de GoF (el libro
que he citado), están los patrones GRASP y algunos otros específicos de
entornos concretos: concurrencia, tiempo real, etc.

> Dado que solucionan problemas muy comunes, convendría tenerlos implementados
> en Python (S/N)

Aquí creo que tienes una pequeña confusión. Los patrones no puedes
"tenerlos implementados", El código que aparece en los enlaces que
pones, y lo que nosotros haríamos son sólo EJEMPLOS. Los patrones NO se
pueden tener en una librería, tienes que implementarlos en cada
aplicación en la que los apliques (valga la redundancia). 

Los patrones son "elementos reutilizables para DISEÑO", puedes
reutilizar la idea, pero la mayor parte del código tendrás que hacerla
cada vez. Recuerda que la solución de un problema está en el diseño del
sistema, no en el código. Los patrones son una idea más abstracta, pero
mucho más potente que una clase o un TAD (Tipo Abstracto de Dato)

> Teniendo en cuenta que cada uno tiene problemas diferentes esta
> implementación sería mediante unas clases muy sencillas que sirven de
> esquema y base a las clases definitivas, que cada uno debe currarse. (S/N)

No, creo que lo explico en la respuesta anterior. Si no me explico y no
queda claro concrétame tu duda.

> En cualquier caso está muy claro que hay que ponerse manos a la obra, ya que
> puede ser una de las herramientas más imprescindibles para sacarle jugo a
> python.

Lo patrones son herramientas para sacarle jugo al diseño (permíteme que
insista tanto porque es importante). Puedes aplicar patrones a cualquier
diseño independientemente de en qué lenguaje lo vayas a codificar
después.
Simplemente que algunos lenguajes te dan facilidades (sobre todo los
OO). Lo que pretendemos hacer (creo yo) es averiguar cómo de bueno es
Python y qué facilidades nos da para la implementación de patrones.

> No creo que haya que inventar nada, analicemos los desarrollos en c++, java
> o c# y adaptémolos a Python.

Como ya he dicho, hay que aprovechar las características de Python que
no tienen esos otros lenguajes (si las hay).

> Visto lo que he llegado a entender los patrones pueden convertirse en mi
> mejor aliado, tanto a la hora de reutilizar código, mantenerlo y
> documentarlo, o NO?

Vuelvo a insistir, los patrones te permiten reutilizar DISEÑOS, no
código. Puede que consigas reutilizar código, pero ese no es el objetivo
de los patrones. Sin duda son un gran aliado, simplifican muchísimo la
vida del programador y aplicar la filosofía KISS (Keep It Simple,
Stupid). 
También son muy útiles para documentar y mantener como tu bien dices. Si
usas patrones, los cambios tardíos en el diseño afectan mucho menos al
código porque están más localizados. El objetivo principal de todo
patrón es: reducir el acoplamiento y aumentar la cohesión, y eso
simplifica la vida al analista, al diseñador y al programador.

Saludos.

> 
> > -----Mensaje original-----
> > De: python-es-bounces en aditel.org [mailto:python-es-bounces en aditel.org]En
> > nombre de David Villa
> > Enviado el: lunes, 02 de agosto de 2004 12:55
> > Para: La lista de python en castellano
> > Asunto: RE: [Python-es] Patrones de diseño
> >
> >
> > Hola:
> >
> > De manera informal podemos decir que un patrón de diseño es:
> >
> >   "Una buena solución para un problema frecuente"
> >
> > El patrón describe, normalmente con ayuda de diagramas de clases y de
> > secuencia, como solucionar un tipo concreto de problema que suele
> > aparecer con frecuencia en el DISEÑO de sistemas. El patrón es siempre
> > una herramienta de DISEÑO y por tanto aparece en el diagrama de clases
> > Pongo como ejemplo el patrón "Abstract Factory" sacado de [1]:
> >
> > Problema a resolver:
> >   Conseguir una interfaz para creación de objetos dependientes o
> > relacionados sin especificar sus clases concretas.
> >
> > Motivación:
> >   El ejemplo típico es crear un programa que puede utilizar (de forma
> > excluyente) dos o más librerías de widgets diferentes. Imagina que
> > tienes que hacer un programa que debe poder "renderizar" su GUI con QT o
> > GTK y elegirá entre una u otra librería dependiendo de lo que encuentre
> > en el sistema. Intenta pensar como harías esto sin replicar todo el
> > programa, claro.
> >
> >   Pues el patrón "Abstract Factory" te da una solución (una buena
> > solución) a este problema (y a otros parecidos), hay muchas soluciones
> > peores y puede que alguna mejor.
> >
> >  Aplicando este patrón a este ejemplo, puedes añadir más tarde soporte
> > para una nueva librería de widgets sin tener que tocar nada del código
> > de la aplicación.
> >
> > Los patrones tienen muchas ventajas:
> >
> > - Ante un problema habitual, no tienes que pensar una solución ah hoc.
> > Simplemente aplica el patrón adecuado.
> > - Cuando usas un patrón estás seguro de que tu implementación tiene un
> > buen nivel de calidad, sabes que no es una chapuza porque hay unos gurus
> > que saben un huevo y dicen que esa es una solución estupenda para tu
> > problema
> > - Los patrones te dan vocabulario. Le puedes decir a otro colega que
> > trabaja contigo en un proyecto: "La creación de las herramientas la he
> > hecho con un 'Factory Method' que obtiene la descripción a través de un
> > 'Singleton' que accede a la BD con un 'Facade'". En una frase le has
> > contado todo el diseño, algo que sin patrones te podría llevar mucho más
> > tiempo.
> > - Más ventajas que no voy a contar porque "pa esto" me pongo a escribir
> > un libro :-)
> >
> > Saludos
> >
> > PD: Aconsejo muy encarecidamente a todos los interesados en el tema de
> > los patrones de diseño, el libro de "The Gang of Four" [1]. Es una
> > verdadera maravilla, después de leerlo cambiarás tu manera de programar,
> > garantizado.
> >
> > [1] Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides.
> > "Design Patterns". Addison-Wesley, 1994
> >
> >
> > El lun, 02-08-2004 a las 11:27, Toni Martínez escribió:
> > > Bueno, al final habéis conseguido que para estas vacaciones me
> > lea, entre
> > > otras cosas, el Thinking in Python.
> > >
> > > En el tema patrones estoy muy muy verde, por no decir blanco,
> > trasparente.
> > > Lo poco que he leído sobre el tema sólo ha conseguido despistarme más.
> > > Supongo que es el tipo de esquema mental que utilizo ;)
> > >
> > > Ya se que es abusar pero me podéis explicar con un ejemplo
> > básico, de que me
> > > servirían los patrones de diseño en una aplicación normal de gestión.
> > >
> > > Un saludo
> > >
> > > > -----Mensaje original-----
> > > > De: python-es-bounces en aditel.org
> > [mailto:python-es-bounces en aditel.org]En
> > > > nombre de Chema Cortés
> > > > Enviado el: lunes, 02 de agosto de 2004 11:23
> > > > Para: La lista de python en castellano
> > > > Asunto: Re: [Python-es] Patrones de diseño
> > > >
> > > >
> > > > -----BEGIN PGP SIGNED MESSAGE-----
> > > > Hash: SHA1
> > > >
> > > > On Monday 02 August 2004 12:14, Santi Camps wrote:
> > > >
> > > > > Vale, vale.  Yo es que lo primero que me leí después de el python
> > > > > tutorial fué el "Thinking in Python" de Bruce Eckel (el autor del
> > > > > famosísimo "Thinking in Java").  Está a medias e incompleto, pero de
> > > > > algo sirve, e incluye algunos trocitos de código de ejemplo de cada
> > > > > patrón.  Si te sirve de algo:
> > > > > http://jamesthornton.com/eckel/TIPython/html/Index.htm
> > > >
> > > > Sería lo más próximo a lo que busco, aunque los ejemplos han
> > quedado algo
> > > > anticuados en relación a lo que se puede hacer ahora en python.
> > > >
> > > > De todos modos me estoy dando cuenta de las implementaciones tan
> > > > diferentes
> > > > que pueden haber de una idea bastante simple.
> > > > -----BEGIN PGP SIGNATURE-----
> > > > Version: GnuPG v1.2.2 (GNU/Linux)
> > > >
> > > > iD8DBQFBDggPHLTQrABk8H0RAoOUAJsFLCeMBfvlh/n1kN4hnDRH14E6bACdG4/M
> > > > yHuVSLTx3568EmNUNiOf06Q=
> > > > =IWq9
> > > > -----END PGP SIGNATURE-----
> > > > _______________________________________________
> > > > Python-es mailing list
> > > > Python-es en aditel.org
> > > > http://listas.aditel.org/listinfo/python-es
> > > >
> > >
> > > _______________________________________________
> > > Python-es mailing list
> > > Python-es en aditel.org
> > > http://listas.aditel.org/listinfo/python-es
> > >
> >
> > _______________________________________________
> > Python-es mailing list
> > Python-es en aditel.org
> > http://listas.aditel.org/listinfo/python-es
> >
> 
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es
> 




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