Concepto
La idea de objetos es una idea conceptual. Alan Kay y su equipo de Xerox (en Palo Alto) realizaron investigaciones por más de una década tratando de entender como unificar el concepto de objeto con la informática. La idea de objeto puede explicarse fácilmente con una analogía con biología (Alan Kay tiene un PhD en biología). Alan Kay habla de la idea de una célula, cuya membrana encapsula su interior del resto del mundo. Cada célula es autónoma y realiza su trabajo de forma independiente de otras células, pero las células trabajan cooperando unas con otras de forma débilmente acoplada enviándose mensajes (químicos) de una a otra.
Entonces desde la creación de este concepto (por Alan Kay) los objetos son análogos a células. Alan Kay: “Yo invente el termino orientado a objetos y te puedo decir que no estaba pensando en C++”. Todas las características de un objeto están encapsuladas y se accede a ellas mediante el envío de mensajes (la característica más importante de POO).
Encapsulación
El poder de la encapsulación es esconder detalles implementación del mundo externo. Del mismo modo la membrana de una célula esconde el interior de la célula. El mundo externo solamente debe conocer la interfase de mensajes del objeto (conocido en Smalltalk como protocolo de mensajes). Entonces cuando se envía un mensaje a un objeto no se tiene idea de cómo el objeto procesará este mensaje. El objeto es libre de procesar el mensaje de la forma que crea conveniente. Esto nos lleva a la idea de polimorfismo.
Mensajes
Durante la investigación de la Xerox en los años 70 Alan Kay y su equipo buscaron diferentes formas de hacer que los objetos se comunicarán entre si. Si se toma la analogía biológica al extremo entonces cada objeto debería ser totalmente autónomo y no compartir nada con otros objetos (salvo mensajes). Esto significa que cada objeto debería tener su propia CPU, memoria y código, Alan Kay ha dicho que cada objeto debería tener también su propia URL. De esta forma cada objeto sería como una computadora independiente.
En POO y en Smalltalk los objetos se comunican enviándose mensajes, los mensajes instancian cuando se utiliza el Debugger, cuando un objeto no entiende un mensaje (#doesNotUnderstand: aMessage), etc. Por una cuestión de optimización los mensajes no son objetos en todas las ocasiones.
Al ser todo un objeto y los objetos comunicarse mediante el envío de mensajes el único error posible en Smalltalk es que un objeto no entienda un mensaje, es el único error posible (#doesNotUnderstand: aMessage). Se podría re-implementar este mensaje en nuestra jerarquía de clases de ser necesario.
El envío de mensajes es la parte menos entendida en POO, sobre todo en los lenguajes tradicionales. Alan Kay dijo: “OOP to me means only messaging”, “ POO para mí significa sólo mensajería - envío de mensajes” .
“Ambiente Vivo” y Uniformidad
Unos de los conceptos menos entendidos en Smalltalk y en POO es el de ambiente vivo. Todos los cambios que se realizan en Smalltalk son con el sistema funcionando, incluso la modificación de clases, de jerarquías, todo. Nunca se detiene el sistema y se compila como en la tecnología tradicional. Se parece más a un sistema biológico dónde no se “detiene” el sistema para modificarlo, simplemente se crean y modifican objetos.
Los cambios en Smalltalk se parecen a los cambios en un medio ambiente (dónde el sistema no se detiene), un medio ambiente siempre esta funcionando, bajo este mismo principio funciona Smalltalk.
La mejor forma de entender este concepto es mediante el uso práctico alguna herramienta que soporte este concepto. Smalltalk ofrece (todos tienen versiones no comerciales y otros son open source): Dolphin Smalltalk, Squeak Smalltalk, Visual Works Smalltalk, VA Smalltalk, Smalltalk/X, Visual Smalltalk, Object Studio, GemStone/S (OODBMS), Ambrai Smalltalk, Smalltalk MT, etc). Personalmente uso Dolphin Smalltalk.
La mejor forma de entender este concepto es mediante el uso práctico alguna herramienta que soporte este concepto. Smalltalk ofrece (todos tienen versiones no comerciales y otros son open source): Dolphin Smalltalk, Squeak Smalltalk, Visual Works Smalltalk, VA Smalltalk, Smalltalk/X, Visual Smalltalk, Object Studio, GemStone/S (OODBMS), Ambrai Smalltalk, Smalltalk MT, etc). Personalmente uso Dolphin Smalltalk.
La uniformidad viene dada que todo es un objeto incluso: clases, metaclases, métodos de implementación (“código fuente” de los objetos), etc.
Conclusión
En POO las clases y la herencia NO son parte fundamental del paradigma. Las clases son una implementación posible, Smalltalk tiene clases y metaclases y es POO; Self es también POO pero no tiene clases se maneja con prototipos.
Lo bueno de Smalltalk es que diferentes meta modelos pueden convivir en el sin problema, y cada meta modelo representar una realidad totalmente diferente, esto es puede ser comprobado empíricamente. Por ejemplo es posible crear un dominio dónde los objetos se comporten como en el ambiente Self. Si este fuera el caso, habría dos meta modelos en el mismo ambiente y no hay nada de extraño en esto.
Conclusión
En POO las clases y la herencia NO son parte fundamental del paradigma. Las clases son una implementación posible, Smalltalk tiene clases y metaclases y es POO; Self es también POO pero no tiene clases se maneja con prototipos.
Lo bueno de Smalltalk es que diferentes meta modelos pueden convivir en el sin problema, y cada meta modelo representar una realidad totalmente diferente, esto es puede ser comprobado empíricamente. Por ejemplo es posible crear un dominio dónde los objetos se comporten como en el ambiente Self. Si este fuera el caso, habría dos meta modelos en el mismo ambiente y no hay nada de extraño en esto.