.comment-link {margin-left:.6em;}

BETA (Bytes sobre Educación y Tecnología en Argentina)

lunes, diciembre 27, 2004

Squeak - Por Norberto Manzanos (primera parte)

¿Qué es Squeak?
Squeak es, ante todo, un Smalltalk, pero es muchas otras cosas más.
Entonces, la primera pregunta debería ser:
¿Qué es Smalltalk?
Podríamos decir que Smalltalk es un lenguaje de programación, aunque no terminaríamos de abarcarlo totalmente.
¿Es un lenguaje como tantos otros: Basic, Pascal,C, etc? ¿Si no es así, cual es su característica distintiva?
En lugar de enfrascarnos en disquisiciones teóricas, podríamos recurrir a un ejemplo. Cuando se enseñan los rudimentos de la programación, se comienza explicando qué es un algoritmo. Y el ejemplo más común es el de los pasos necesarios para cocinar algo, por ejemplo, un huevo frito. Primero conseguir un huevo, aceite y una sartén; hechar el aceite en la sartén; prender el fuego; cascar el huevo y hecharlo en la sartén un cierto tiempo. El algoritmo es una serie de pasos ordenados (prender el fuego, cascar el huevo, etc) que procesan una serie de datos (el huevo, el aceite) para obtener al final un resultado (el huevo frito). Esta es la concepción tradicional de lo que es la programación. En cambio, en Smalltalk diríamos que la instrucción necesaria para hacer un huevo frito sería simplemente "Chef, fríame un huevo, por favor".
¿Cual es el secreto para llegar a un enunciado tan simple?
Primero consideremos las fallas posibles del primer método: puede faltarnos aceite o huevos, puede estar cortado el gas, etc. También se me dirá: pueden llamarnos por teléfono para invitarnos a cenar un asado, con lo cual abandonaremos nuestro sencillo huevo frito, que tal vez a esa altura ya se quemó. Bien, pero no se trata de contrastar con las múltiples posibilidades que brinda la realidad, si no, de aislar un hecho, por lo cual debemos desestimar todas las situaciones externas a la tarea a lograr. Las primeras objeciones, en cambio, sí forman parte del hecho aíslado: una cocina funciona con gas, si no hay gas, no funciona. Entonces, nuestro algoritmo para cocinar un huevo deberá llenarse de instrucciones tipo "¿Hay gas en la cocina?. Si hay gas, continuar, si no, detener la tarea." Cosas parecidas pueden decirse sobre el aceite o la sartén. A medida que aparezcan nuevas situaciones imprevistas, nuestro algoritmo terminará siendo una larga lista de condiciones que hay que verificar.
Smalltalk, como también otros lenguajes, parten de una concepción muy diferente: no se trata de establecer pasos para trabajar con datos, si no de juntar los pasos y los datos en un sólo elemento: un objeto. Por eso se la llama programación con objetos.
Cada uno de los participantes de la tarea conoce todo lo necesario, los pasos y los datos, para realizar una determinada tarea. El chef sabe que debe buscar una cocina, la cocina le dirá al chef si tiene gas, la alacena le dirá si hay aceite y huevo, el aceite sabrá calentarse según la intensidad del fuego, el huevo sabrá adoptar distintos estados hasta transformarse finalmente en un huevo frito, etc. Todo estos objetos pueden aprender otras cosas: por ejemplo, si en realidad nuestro médico nos aconsejó comer huevo poché en lugar de huevo frito, sólo se trata de incorporar a cada uno de los objetos, los conocimientos necesarios para esta nueva tarea, y eventualmente, crear nuevos objetos (el agua, por ejemplo). En lugar de tener un nuevo algoritmo para hacer un huevo poché, que repetirá muchas de las pequeñas instrucciones del algoritmo de huevo frito, simplemente tendremos la sentencia: "Chef, preferiría que me cocine un huevo poché".
De manera que pensando en objetos, podemos ir modelando todo lo necesario para cocinar cualquier cosa, agregando objetos nuevos para cada ingrediente, para cada artefacto de la cocina, sin necesidad de pensar en qué pasos, condiciones y datos son necesarios, pues el algoritmo se reduce a: verificar la existencia de los ingredientes, obtener los elementos apropiados, cocinar el plato.

Norberto Manzanos es programador e integra el grupo Small-land