Mantenimiento de un Sistema de Objetos

Recopilado por Germán S. Arduino


De la lista de Smalltalking
Autor: Alejandro Reimondo
Fecha: 20/08/2001
Tema: RE: [objetos] EXE o no EXE (Esa es la cuestion ;)

Hay varias formas de hacer que tu aplicación agregue funcionalidad en runtime o que cambie en cualquier lugar (o momento) aunque sea NO previsto.

Un sistema de objetos esta conformado por objetos.
El comportamiento del sistema es resultado de los objetos que este contiene.
Entonces, si uno desea agregar/cambiar comportamiento uno solo debe agregar/cambiar objetos.

Este es el principio fundamental del trabajo con objetos.

Es muy visto que se piense que para cambiar el comportamiento de un sistema
hay que "reprogramarlo" (es decir escribir código); esta no es la única forma de hacerlo trabajando con objetos (ni es la mas recomendable)...

La mas recomendable es buscar que objetos deben ser reemplazados refinando así la funcionalidad en base al reemplazo de objetos y no modificaciones de código.

Un caso particular es cuando deseamos que el comportamiento de un conjunto de objetos ya existentes se modifique/amplíe.

Por ejemplo, con el agregado o eliminación de partes (composición) y/o métodos (comportamiento).

Para modificar el comportamiento de objetos existentes solo basta reemplazar/agregar/eliminar los métodos existentes en la clase del objeto
en cuestión.

Esto altera además a todos los objetos de la misma especie...

Para lograrlo es necesario poder crear métodos dinámicamente, lo cual es posible gracias a que los métodos y clases son objetos (como cualquier otro). Así uno puede implementar fácilmente objetos "robots" que entran en el sistema y lo navegan (entrando por ejemplo en el root del espacio [xejm. Smalltalk] y navegando por la jerarquía de clases gracias a #subclasses o usando el subespacio por nombre [Smalltalk at: #XXXXX] ) luego que este "robot" identifica la clase a modificar puede enviarle mensajes cambiándola,
agregando/modificando o eliminando métodos

o agregando nuevas partes a sus instancias (para

esto es necesario que el ambiente pueda:
1.- cambiar una clase (#subclass:...)
2.- encontrar todas las instancias de una determinada clase (#allInstances).
3.- mutar un objeto sin cambiar su identidad (#become:)

Todo Smalltalk cumple con esos requerimientos, es mas, si no lo cumpliera no seria un Smalltalk.

Es quizás redundante decir que es muy simple agregar subclases o eliminarlas...
 


ArSol.biz 2004