[Python-es] pregunta casi filosófica: ¿es mejor usar tipos básicos o mejor clases dedicadas?

Javier Gutierrez ukeitaro en yahoo.es
Sab Nov 24 22:01:48 CET 2012


Hola Jose.
 
Las preguntas que planteas es muy interesante y me voy a
mojar.
 
Mi respuesta es: Sí. Y alado: sin duda.
 
Te justifico brevemente el porqué con los primeros
argumentos que se me vienen al cabeza (y que o están muy trabajados).
 
- Si usas clases dedicadas, aumentas la semántica de tu código,
es decir, en vez de ver bucles e if, ves métodos que te transmiten el objetivo
que persigues. Es un paso hacia las ideas de los DSLs y código fácil de
entender.
- Además tu código de negocio queda más pequeño.
- Te quitas código de en medio, lo puedes poner en una esquina
y usarlo sin que te estorbe.
- Tu código va a ser más fácil e probar.
- Llevándote código aparte y aislándolo te va a resultar más
sencillo refactorizarlo.
- Llevarte tu código a una clase dedicada te ayuda a darte
cuenta de las dependencias que tienes. Si descubres que tienes que pasarle
muchos parámetros a los métodos o que necesitas muchas referencias puede ser un
aviso para revisar tu diseño y tus dependencias. 
- Aumenta la reusabilidad, bien directamente bien mediante el
uso de herencia.
 
Por supuesto, hay que valorar si todo lo anterior merece la
pena, ya que, aunque suena muy bien, podríamos caer en el riesgo e utilizar
sobreingeniería. En ese sentido, la respuesta que nos da Ricardo es muy
interesante y merece la pena tener en cuenta sus motivos.
 
Un saludo.
 


________________________________
 De: Ricardo Cárdenes <ricardo.cardenes en gmail.com>
Para: La lista de python en castellano <python-es en python.org> 
Enviado: Sábado 24 de noviembre de 2012 20:27
Asunto: Re: [Python-es] pregunta casi filosófica: ¿es mejor usar tipos básicos o mejor clases dedicadas?
 

Yo sí soy informático de carrera (y empecé a estudiarla antes de la publicación del GoF*, todo sea dicho). Tengo una visión bastante pragmática respecto al uso de objetos y patrones: los uso donde creo que debo y donde no, me los salto.

Esto para algunas personas es anatema, pero mira, es lo que hay. Para un proyecto pequeño, los objetos "custom" no suelo ni planteármelos, a menos que vea que me dan una ventaja interesante. Para un proyecto mediano o grande: depende del ciclo de vida de los datos (¿van a salir estos datos del entorno en que han sido generados, o circularán hasta vaya vd. a saber dónde - en el caso de Python, quizá me interese que la granularidad del objeto sea el módulo, exponiendo un API? ¿quién los va a usar? ¿van a ser persistentes o morirán en breve? etc) Pero me temo que eso es algo que sólo te da la experiencia y la planificación del proyecto.

* GoF = Gang of Four, que es el apodo por el que se conoce al libro "Design Patterns"



2012/11/24 Jose Caballero <jcaballero.hep en gmail.com>

Hola,
>
>
>
>
>es una pregunta medio técnica, medio filosófica. 
>Al menos desde el punto de vista de lo que se viene en llamar un "intruso", como es mi caso. 
>Alguien que trabaja como desarrollador sin ser informático de educación universitaria.
>
>
>Imaginemos un pseudo-código sencillo como éste:
>
>
>--------------------------------------------------------------------------------
>def foo():
>    out = []
>    for blah in blah:
>        out.append( ... )
>     return out
>
>
>info = foo()
>if info:   # o equivalentemente   if len(info)==0
>    print "foo() devuelve una lista de valores"
>--------------------------------------------------------------------------------
>
>
>
>
>Funcionar, funciona. 
>Lo que me pregunto es si sería, desde el punto de vista del desarrollo de software, más apropiado trabajar con una clase dedicada en lugar de con el tipo básico 'list'. Algo como...
>
>
>--------------------------------------------------------------------------------
>class MyInfoList:   # si eso, se puede hacer MyInfoList(list)
>    def __init__(self):
>        self.infolist = []
>    def __nonzero__(self):
>        return len(self.infolist) != 0
>
>
>def foo():
>     out = MyInfoList()
>     for blah in blah:
>         out.infolist.append(...)
>     return out
>--------------------------------------------------------------------------------
>
>
>
>
>Desde el punto de vista de la ingenería de sw, ¿qué sería mejor? 
>¿Introduce la segunda forma alguna ventaja, o simplemente una complicación innecesaria?
>¿Cuál de las dos formas es más aconsejable para un proyecto mediano (2 o 3 años de trabajo, un orden de magnitud de 100.000 líneas de código, más de un desarrollador)?
>
>
>
>
>
>
>Referencias a literatura sobre el asunto serán más que bienvenidas.
>Saludos cordiales,
>Jose
>_______________________________________________
>Python-es mailing list
>Python-es en python.org
>http://mail.python.org/mailman/listinfo/python-es
>FAQ: http://python-es-faq.wikidot.com/
>
>

_______________________________________________
Python-es mailing list
Python-es en python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20121124/c83040ca/attachment.html>


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