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...