Estoy leyendo un libro sobre programación a objetos Head First Object-Oriented Analysis&Design. Me parece que es muy ameno, y aporta unas cuantas ideas interesantes sin profundizar en aspectos teóricos.
Sin embargo, en el tema de atributos de clase, no comparto la recomendación de potenciar el uso de Maps frente a la creación de clases para encapsular atributos. Debido a mi falta de experiencia en este tema, me gustaría conocer la opinión de otras personas.
Para poneros en situación, voy a describir un par de ejemplos del libro donde recurren a las propiedades en Maps.
En uno de los ejemplos, se crea un inventario de instrumentos, siendo Instrumento una clase genérica pero instanciable (precio, referencia), donde los atributos específicos de cada instrumento se guardan en una clase por cada tipo de instrumento, pero referenciada como atributo de la clase Instrumento.
Posteriormente con el fin de mejorar la flexibilidad del software, lo que recomiendan es sustituir la clase encapsulada ( con las propiedades específicas de cada instrumento) por un Map con esos mismos atributos.
Bien, las ventajas que ofrece este método son:
-No tener que crear una clase por cada nuevo instrumento
-Facilita el código ya que no es necesario distiguir entre las distintas clases de propiedades de instrumentos.
En mi opinión este método aporta una excesiva libertad que puede dar problemas, ya que en el código no queda constancia de los atributos que se esperan para cada instrumento, y permite la creación de objetos con propiedades erróneas o incompletas.
Evidentemente, eso se puede solucionar creando código de comprobación de propiedades en cada instrumento, pero precisamente eliminaría la ventaja de usar Maps, no necesitar nuevo código para añadir instrumentos ni para comprobar que las propiedades son correctas.
¿Es realmente útil el uso de Maps para guardar atributos de clase?