digresiones (era: Python vs Java C C++)
Chema Cortes
py en ch3m4.org
Lun Mar 22 10:50:50 CET 2004
Hernan Foffani escribió:
> mis preguntas eran algo retoricas. no me refería tanto
> al problema técnico en sí (que ya es bastante complejo) si no mas
> bien al hecho de mantener toda la aplicación en un estado estable.
>
> por ej, puede darse el caso que la nueva clase C cambie un
> determinado atributo "coleccion" de list a dict. todas las
> instancias de C deberían recrear el atributo "coleccion" como dict
> con el contenido de las list anteriores.
> o si la nueva clase Cuenta cambia el atributo "titular" de la
> clase Persona a la clase Cliente, todas las instancias de Persona
> que sean atributos de instancias de la clase Cuenta deben
> cambiar de clase a Cliente aún cuando tanto Cliente como Persona
> no se hayan modificado per se.
Me parece que no tienes enfocado correctamente el problema. Los
atributos son referencias, sin importar el tipo de dato. Me da igual que
titular sea una instancia de Cliente ó una instancia de Persona, puesto
que ambas clases coinciden en estructura:
....
def SetTitular(self,titular):
self.titular=titular
def GetNombre(self):
return self.titular.nombre
Incluso daría igual el cambiar una lista por un diccionario:
def __init__(self,coleccion):
self.coleccion=coleccion
def get(self,id_):
return self.coleccion[id_]
Si está bien diseñado, bastaría con una actualización de los atributos.
Más problemáticos son los cambios en las reglas de negocio. Aún así se
puede minimizar los problemas si se emplea un buen diseño multicapa
("multi-tier"), de modo que los cambios en las reglas de negocio no
influyan tanto en el resto de la aplicación.
Más información sobre la lista de distribución Python-es