LA ELEGANCIA DE LA SENCILLEZ Smalltalk es, a la vez, un lenguaje y el entorno con el que se opera. En realidad Smalltalk es, primariamente, un entorno o sistema: hay que tener en cuenta que nace del Grupo de Investigación del Aprendizaje (de Xerox), que más tarde se denominó SGC (Grupo de Conceptos Software), con la idea de procurar una base extensible acumuladora del aprendizaje asociado a sus usuarios. Este no trivial objetivo requería unas bases sólidas. De aquí que Smalltalk maneje un muy reducido número de conceptos: objeto, mensaje, clase, instancia y método [2], por lo que resulta fundamental una adecuada comprensión de los mismos y de su relación con el lenguaje. Aún más: todos estos, en el mejor estilo bíblico, se agrupan en uno solo: en Smalltalk todo son objetos, y los objetos se comunican por medio de mensajes. Pero no piensen que esto resulta especialmente difícil: los objetos son instancias de clases, que a su vez son objetos, a los que se dirigen mensajes (que también son objetos) y que responden con métodos (objetos, al fin). Así, por ejemplo, una instancia se crea usualmente dirigiendo el mensaje “new” a un objeto de tipo “clase”. Así si tenemos la clase Politico, un ejemplar nuevo se creará de la siguiente forma
donde vemos que, en primer lugar se declara una variable local (sin especificar tipo), y más tarde se asigna el objeto de tipo Politico resultante de aplicarle el mensaje new a la clase Politico. Incidentalmente aquí podemos anunciar que tales objetos no necesitan ser expresamente destruidos: Smalltalk incorpora un “recolector de basura” (garbage collector) que limpia del espacio de memoria los objetos desreferenciados. ¿SMALLTALK++? UNA COMPARACIÓN AMABLE Para intentar comprender qué significa Smalltalk vamos a compararlo con otros lenguajes, pero sólo en lo que a características esenciales respecta. Esto es, no entraremos en disquisiciones belicosas (Calderón decía que desmentir una calumnia es repetirla) sobre si aquél es mejor, éste más orientado-a-objetos, el de allá más eficiente, el de acullá una estupidez de x páginas, etc., que se dejarán a los fanáticos de las discusiones futiles. De cualquier forma, y dado el morboso interés que estas cuestiones suscitan, seguidamente se detallan algunos “hechos” razonablemente consensuados sobre las diferencias entre Smalltalk y C++, su más potente competidor y actual vencedor en el área comercial:
Y podríamos seguir con otros muchos “hechos” diferenciales, pero ¿para qué demonios?. ¿Saben cuáles son, en definitiva, las poderosas razones que esgrimen los defensores fanáticos de uno u otro lenguaje? “C++ no está orientado-a-objetos de verdad” y “Smalltalk es poco eficiente”. Esto es, la opinión de los adeptos de un lenguaje respecto del otro es como la que Lady Caroline Lamb sostenía de Lord Byron: “Demente, malo y peligroso de conocer”. Bien: corramos un tupido velo y examinemos aspectos linguísticos más interesantes. EXTENSIBILIDAD Aquí cabría recordar las visionarias ideas de Alan Kay sobre máquinas portátiles Smalltalk que fueran creciendo y adaptándose a sus usuarios. Esto refuerza la idea intuitiva -por no decir explícita- de los creadores de Smalltalk de procurar una base estable que permitiera a sus usuarios desarrollar, de forma personalizada, el lenguaje adaptándolo a sus propias necesidades. Pero hay también que decir que tal extensibilidad, aunque teóricamente ilimitada, se sustenta en la aceptación “moral” de ciertos límites, para no caer en algo parecido a los universos del lenguaje “Forth”, donde frecuentemente el lenguaje es irreconocible de un desarrollador a otro. Así, por ejemplo, el método “new” (el equivalente al operador “new” de C++), cuya funcionalidad consiste en la creación de un objeto sin inicializar, puede redefinirse, como más adelante veremos y como de hecho puede hacerse en C++, con total libertad. Pero dado que esto puede plantear situaciones de no muy buena resolución en Smalltalk, los diseñadores del lenguaje proveyeron a éste con un método clónico de “new” denominado “basicNew” y que es equivalente a aquél, instruyendo a los programadores de la siguiente forma: “sí, bueno, ya sé que puedes modificarlo todo, incluido el método new, pero, por favor, no me toques el basicNew”. Naturalmente esto es un convenio moral -o de caballeros- que cualquier programador desalmado (¡Vaya! ¡Un pleonasmo!) puede saltarse. Pero, sorprendentemente, esto históricamente no ha ocurrido, y los programadores (y aun los implementadores) Smalltalk han seguido de forma razonablemente ajustada las directrices de diseño originales del lenguaje-entorno. En otros lenguajes, como por ejemplo en C++, existe un grupo invariante de lo que se denominan “palabras reservadas”. Nosotros podemos extender el lenguaje temporalmente mediante la adición de variables y funciones, y, en el caso de C++, mediante clases, pero el núcleo del lenguaje permanece invariante: esto es, un “for” siempre será un “for” y operará de una única forma predeterminada. De igual forma en Visual Basic, el “if” siempre tendrá la misma sintaxis y realizará la misma operación de selección lógica. No ocurre así, sin embargo, en Smalltalk. Resulta que aquí no existen, en el sentido tradicional, estructuras de control, asignaciones, etc., pues, cómo ya se anunció, en Smalltalk sólo existen objetos y mensajes. Así, por ejemplo, las siguientes líneas en C++
pueden re-escribirse en Smalltalk de la siguiente guisa:
qué, básicamente, significa lo siguiente: al objeto con identificador “variable” se le manda el mensaje “>“ con argumento “ 0”, que devuelve un objeto de tipo Bool (“true” o “false”), al que se le manda el mensaje “ifTrue: [...] ifFalse: [...]”. Pero es posible que en algún contexto estas mismas líneas de Smalltalk no funcionen de la misma manera que aquí, pues es los métodos de Smalltalk pueden ser modificados o ampliados. Por ejemplo, yo podría redefinir el mensaje “>“ para que funcionará como si fuera “<“. También podría, puestos a recurrir a despropósitos, redefinir el mensaje “ifTrue: [...] ifFalse: [...]” de forma que su ejecución invariablemente generase el mensaje “No me importa si es verdad o mentira”. Resulta que, como el lector ya habrá adivinado, si bien en los lenguajes tradicionales no podemos acceder al código, por ejemplo, de un “do”, en Smalltalk sí podemos acceder al método equivalente (do: [...]) para estudiarlo, cambiarlo o aun eliminarlo, porque el lenguaje-entorno nos proporciona el código fuente. Así, por ejemplo, tenemos el siguiente código en la clase “OrderedColection”:
de manera que, si quisíeramos, podríamos directamente cambiar el código de esta manera
pues, como el lector ya habrá adivinado, ¡Smalltalk está codificado en Smalltalk! Pero pongamos otro ejemplo clarificador: Sabemos que en C++ se pueden sobrecargar funciones y operadores, de forma que se puede redefinir, por ejemplo, el operador "+" para su uso con objetos de nuevas clases, como pudiera ser la clase "NumeroAmigo":
Pero lo que no podemos hacer en C++ es redefinir el mismo operador "+" para su uso respecto de tipos predefinidos: esto es, no podemos hacer que la suma de "floats" opere de forma distinta a como lo hace. ¿Por qué? Pues porque el conocimiento de su comportamiento está incluido, de forma inamovible, en el compilador C++ (o en su defecto, en el caso de preprocesadores o precompiladores, estaría inserto en el compilador C subsiguiente). Sin embargo tal redefinición sí puede darse en Smalltalk. Pero, preguntará aquí el lector, profundamente inquietado, ¿es que no hay límite a la extensibilidad? ¿No hay nada fijo en este lenguaje? Pues sí, lo que se denominan expresiones literales, también llamadas constantes literales u objetos literales, que representan objetos invariantes y que, a la sazón, son: números, caracteres individuales, cadenas de caracteres, símbolos y vectores compuestos de expresiones literales constantes. PRIMITIVAS El lector ya sabe que Smalltalk está escrito practicamente en su totalidad en el propio Smalltalk. Casi todo pero no todo: la excepción es un pequeño subconjunto del lenguaje constituido por lo que se denominan "primitivas" y que suponen el enlace del Smalltalk con las particulares características del soporte lógico y físico en cada caso elegido, ejecutando funciones de bajo nivel: operaciones aritméticas, acceso a dispositivos, comparaciones lógicas, etc. Así podemos encontrar, por ejemplo, en el método asociado al mensaje “+” (el equivalente a la definición de una función miembro en C++) de los objetos de clase “SmallInteger” lo siguiente:
La primitiva consta de dos partes: una primera en ensamblador (el método concreto se identifica con un número, el 21 en nuestro caso) y otra en Smalltalk. Primero se ejecuta la primitiva, y si no falla se devuelve el objeto resultante del método en ensamblador, como en un “return” de una típica función C; si falla se ejecuta la segunda parte en Smalltalk. Es bastante corriente que esta última parte sea del tipo
originando la aparición de un error (generado en este caso, por ejemplo, cuando el argumento que se pasa no es un número). En el código expuesto la solución al fallo de la primitiva es, sin embargo, cambiar la posición de los contendientes: el mensaje “+” dirigido a un objeto SmallInteger con un parámetro se troca en el mensaje “+” digido al anterior objeto parámetro tomando ahora como nuevo parámetro el objeto SmallInteger. Así, verbigracia, la suma de un Político a una cantidad causaría error y se ejecutaría la parte Smalltalk, devolviendo la adición de una cantidad a un Político, un asunto de rabiosa actualidad [5]. El sistema Smalltalk impone primitivas predefinidas, pero el usuario puede añadir las suyas propias (si acaso lo considerara necesario): en el caso de Smalltalk/V, por ejemplo, tales primitivas definidas por el usuario se implementan en rutinas de DLL y se accede a ellas por un nombre en lugar de por un número. OTRAS CARACTERÍSTICAS Naturalmente Smalltalk es un sistema rico en particulares construcciones y esquemas. He aquí algunos de ellos:
En fin, las características de Smalltalk merecen un curso aparte, pero lo anterior puede darles una idea del entusiasmo que se pretende comunicar. VOLVAMOS AL PLANETA TIERRA De acuerdo: el lenguaje parece muy atractivo (orientación-a-objetos, entorno gráfico, flexibilidad, etc.), pero ¿qué pasa con su aplicación en la vida real? Lamartine sostenía que, frecuentemente, una utopia no es sino una verdad prematura: sí, parece que llegó el tiempo de Smalltalk. Y es que resulta que, como en otros lenguajes y significativamente en C++, con independencia de ciertas consideraciones empíricas, los aspectos prácticos funcionan perfectamente en Smalltalk y, usualmente, las expectativas de desarrollo quedan sobradamente cubiertas. Hay que decir, no obstante, que no es éste un lenguaje para cualquier tarea ni para cualquier persona, pero sus evidentes atractivos se acrecientan sobremanera con el trato. ¿Quieren conocer a un programador satisfecho y profesionalmente ilusionado? Acérquense a un miembro de un equipo de desarrollo en Smalltalk (lo afirman equipos de psicólogos y psiquiatras, los mismos que tratan a programadores y ejecutivos en sus procesos de migración a la OOP). Pero la elección debe ser, en todo caso, cuidadosamente medida, pues hay distintos aspectos a considerar:
De cualquier forma, con independencia de consideraciones generalistas, cada proyecto ha de merecer una evaluación concreta, en la que las herramientas comerciales tendrán un papel primordial. DIALECTOS COMERCIALES Dado que el entorno Smalltalk “desnudo” difícilmente puede utilizarse para el desarrollo de aplicaciones no triviales, en lo que sigue se detallarán los productos directamente afectos al Smalltalk de cada compañía, procurando una integración total con éste en cada caso. No se hará mención, empero, de las múltiples herramientas y extensiones sobre estos productos (como, por ejemplo, “Distributed Smalltalk” de Hewlett Packard, una extensión CORBA de VisualWorks, u “ObjectMetrics” de ObjectSpace, una colección de facilidades métricas para VisualWorks y Smalltalk/V), como tampoco de dialectos Smalltalk inicialmente muy interesantes pero restringidos a determinadas plataformas, (como, verbigracia, el excelente SmalltalkAgents, de Quasar Knowledge Systems, con soporte actual únicamente para Macintosh). Nos centraremos, pues, en los productos afectos a los dialectos Smalltalk más extendidos: Smalltalk-80, Smalltalk/V, IBM Smalltalk y Enfintalk. VisualWorks/Smalltalk versión 2.0, de ParcPlace Systems, la compañía cuya CEO es Adele Goldberg, ofrece soporte para Windows 3.1, OS/2 2.1, Macintosh, DEC, HP, IBM RS/6000, Sequent y Sun, entre otros. VisualWorks funciona sobre ObjectWorks/Smalltalk, también de ParcPlace, la implementación del dialecto principal Smalltalk-80, y añade a éste un constructor gráfico y clases que procuran conectividad con distintas bases de datos relacionales. ParcPlace es la compañía más antigua en el ruedo Smalltalk y sus productos se convierten rápidamente en referencia de otros (aunque la poderosa entrada de IBM en el sector pudiera modificar este comportamiento), acumulando, a la vez, una extensa base de clientes y una gran experiencia en desarrollo, lo que le permite disponer de excelentes herramientas de productividad como Objectkit. La compañía ha granulado comercial y efectivamente sus productos, de forma que su unión puede generar uno de los entornos de desarrollo más potentes del mercado, pero a costa de un costo a considerar, teniendo en cuenta, además, que es la única compañía que cobrar licencias run-time por aplicación. ParcPlace ha hecho mucho hincapié en la portabilidad de su código entre distintas plataformas, pero ésta se basa en una emulación en cada caso del look-and-feel de la plataforma elegida: esto es, no se utilizan widgets nativos, sino que se simula el comportamiento en cada caso (y este aspecto no-nativo puede resultar para algunos un handicap insuperable), y si bien esto aumenta la facilidad de portabilidad dificulta, por otro lado, la adopción de nuevas características en cada entorno (así, por ejemplo, la versión de Windows carece de funcionalidad arrastra-y-suelta (drag-n-drop), o de Interfaz de Documento Múltiple (MDI)). En definitiva, VisualWorks es la opción “segura” en el ámbito corporativo. Smalltalk/V [6] version 3.0, de Digitalk Inc., con soporte para DOS, Windows 3.1, OS/2 2.0, Win32, Windows NT, Macintosh, AIX y Solaris. Por su relativo bajo precio en versiones DOS y Windows, el producto de Digitalk ha sido profusamente utilizado tanto para procurar un primer acercamiento al mundo Smalltalk como para trainings in-house. Smalltalk/V no incluye facilidades para la construcción gráfica de aplicaciones, así que, hasta la aparición de Parts, de la misma Digitalk, los programadores habían de utilizar productos de terceros como “WindowBuilder Pro/V”, de Object Share Systems Inc. El conjunto Smalltalk/V + Parts proporciona un adecuado entorno de trabajo, con un constructor de IGUs y clases de enlace con bases de datos relacionales. El soporte para trabajo en equipo lo proporciona Team/V, también de Digitalk, aunque es frecuente usar de “Envy/Developer”, un producto de Object Technology International, para mantener el control de versiones, accesos y titularidad de clases. Parts está pensando más como un conjunto de componentes de productividad, en su calidad de “cajas negras”, que como un entorno flexible, pues tales componentes no suponen una extensión del entorno básico Smalltalk/V, sino una colección de herramientas que se usan “tal-cual”, sin modificación: esto es, cuando el programador crea un nuevo componente lo que en realidad crea es una componenda de instancias de objetos de clases preexistentes, y no una nueva clase. A diferencia de VisualWorks, Smalltalk/V usa, por otro lado, controles gráficos nativos, de manera que el acceso a las características de cada plataforma es completo. La portabilidad entre distintos sistemas queda, empero, a un nivel más bajo que el proporcionado por VisualWorks. Smalltalk/V es, en definitiva, la elección “natural” para Windows, con un buen futuro inter-plataformas y especialmente indicada, por su rapidez y cohesividad, para el desarrollo de aplicaciones medias. VisualAge 2.0, de IBM Corporation, con soporte para Windows 3.1 y OS/2 2.1, y apoyado en una muy conseguida integración con IBM Smalltalk, está basado en la propuesta de IBM de la Base Smalltalk Común: IBM ha entrado con potencia en la arena Smalltalk y su producto presenta innovaciones en el hasta ahora estático paisaje del lenguaje (referido sobre todo a los estándares de Digitalk y ParcPlace): así, por ejemplo, las clases de la familia Collection han experimentado un resideño que incluye la dependencia de modelos de implementación para procurar más eficiencia en la gestión de pequeñas, medias y grandes colecciones. IBM Smalltalk constituye, sin duda, la implementación Smalltalk más completa del mercado. Los esquemas de portabilidad de IBM Smalltalk se sostienen en un diseño basado en X Window, de manera que, a la vez que se utilizan widgets de IGU nativos, se produzca una correlación natural entre plataformas Windows, OS/2 y UNIX. El esquema de desarrollo en equipo, IBM Smalltalk/Team, es, en esencia, una matizada reconversión de ENVY/Developer, cuya tecnología ha sido adquirida por IBM. Sobre esta base se monta VisualAge, una extensión visual natural de Smalltalk que, con un núcleo en IBM Smalltalk, se ha autogenerado con el propio VisualAge : la mayor parte de los componentes visuales que componen el producto se han codificado con VisualAge mismo, y permiten el acceso a bases de datos relaciones, la incorporación de código heredado (legacy code), la incorporación de gráficos de empresa, widgets extendidos, etc. La principal diferencia respecto de otros productos, como Parts de Digitalk, es que VisualAge constituye un entorno naturalmente extensible, donde sus piezas son cajas negras-blancas (abiertas-cerradas, según la definición de Meyer [7]): cuando el usuario crea un nuevo componente está realmente creando una nueva clase Smalltalk, pero de forma visual, así que realmente opera de forma transparente respecto del subyacente IBM Smalltalk, resultando que el posible cambio del entorno de VisualAge al puro de Smalltalk es perfectamente transparente. Por otro lado, los programas de IBM para incorporar extensiones de terceros (por ejemplo, el programa “The Object Connection for VisualAge” en el que mi propia empresa participa) indican la clara intención de IBM de procurar un entorno de herramientas que sitúe al producto en una posición predominante en el área Smalltalk. La opción IBM [8] es claramente atractiva para el desarrollo de aplicaciones cliente-servidor, sobre todo para los entornos Windows y OS/2 actualmente, aunque, dado que IBM Smalltalk se extenderá a todas las plataformas IBM, también para AS/400 y RS/6000, pendientes de la concrección de la portabilidad genérica a UNIX. Enfin 4.0, de Easel Corporation, con soporte para Windows 3.1 y OS/2 2.1, se diferencia de los demás productos en que el acercamiento a Smalltalk se generado a la inversa, con las peculiaridades que esto ha conllevado: Enfin ha pasado de ser originariamente un entorno 4G propietario a usar únicamente de Smalltalk como lenguaje base, con la intención de acercarse cada vez más a los requerimientos del proceso de estandarización del mismo. Esta peculiaridad convierte a Enfin en un entorno Smalltalk “poco normalizado”, con menos funcionalidad pura Smalltalk que sus competidores, mucho más código encerrado en primitivas y algunas características sintácticas y de uso bien particulares. En contrapartida Enfin ofrece un entorno fuertemente pertrechado para la creación y mantenimiento de aplicaciones basadas en bases de datos relacionales SQL. La excelente integración de Enfin con Sinchronicity, una herramienta CASE -también de Easel- que genera código Smalltalk desde esquemas orientados-a-objetos basados en OMT, junto con una soporte eficaz para los esquemas de programación clásicos, otorgan a este conjunto el atractivo de la “gradualidad sin brusquedades” usualmente deseada por las empresas corporativas. Como siempre, la especialización productiva a unos les merece confianza y a otros les parece restrictiva. Quizá un buen baremo para elegir Enfin sea el grado de inserción del usuario en esquemas orientados-a-objetos: cuanto menor sea éste más segura aparecerá la opción de Easel. SELECCIÓN BIBLIOGRÁFICA COMENTADA La literatura Smalltalk posee un tanto a su favor: al ser éste un lenguaje que aparentemente no está “en la cresta de la ola” y que conserva un cierto rigor academicista (rigor mortis le llaman algunos) la tontería no ha penetrado de forma irremediable en su acervo bibliográfico. No se dan así, al menos todavía, libros del tipo “Programe en 15 horas con Smalltalk, asombre a sus amigos y dé un nuevo rumbo a su vida sexual”. Esto aparentemente quiere decir que casi todos los libros actuales sobre Smalltalk son intelectualmente legibles y no causan daños neuronales irreparables. Y la verdad es que, aunque sin competencia respecto de C++, existe una buena cantidad de libros sobre Smalltalk, pero, puestos a elegir, he aquí mi selección, aproximada y pretendida, pero no necesariamente, en orden creciente de dificultad: Programación Orientada a Objetos: Aplicaciones con Smalltalk , Angel Morales & Francisco J. Segovia, 1993, Paraninfo, 84-283-2019-5. Es éste el único libro original en castellano que, de forma pedagógicamente reglada, procura una razonable introducción al lenguaje, bien aderezada, además, de ejemplos prácticos completos cuya utilidad, sin embargo, no sobrepasa el ámbito de la didáctica académica. Resulta curiosamente actual el tendencioso ejemplo en el que Empresarios, Funcionarios, Intermediarios, Matones y Periodistas son, por fuerza, Políticos (derivan de esta clase), y un objeto de tipo Empresario soborna a un objeto de tipo Funcionario conocido como John War (nada que ver con Monsieur Alphonse, a lo que parece). Los ejemplos son, en general y según lo visto, muy amenos (no faltan las ubicuas “Torres de Hanoi”), a la vez que la primera parte teórica es suficientemente exacta: se describe el dialecto Smalltalk-80 de forma que se consigue adentrar en los conceptos básicos del lenguaje a lectores con conocimientos al menos básicos de algún otro lenguaje de programación, quizás Pascal o similar. Se echa quizás en falta un disquete con el código de los ejemplos, siempre deseable en Smalltalk por las facilidades de experimentación con el mismo. Smalltalk Programming for Windows , Dan Shafer con Scott Herndon y Laurence Rozier, 1993, Prisma Publishing, 1-55959-237-5. Este libro es una revampirización del texto “Practical Smalltalk: Using Smalltalk/V” de Dan Shafer y Dean Ritz, publicado en 1990 por Springer-Verlag. La obra describe ejemplos prácticos sobre Smalltalk/V versión 2.0 para Windows, y asume un conocimiento cuando menos elemental de Smalltalk y de la programación Orientada-a-Objetos, abordando la enseñanza mediante el desarrollo completo y gradual de siete proyectos bien engarzados y cuyo código completo se acompaña en un disquete: un “prioritizador” (un secuenciador de items en base a prioridades), un contador simple (con botones de incremento y decremento), un calendario con interfaz gráfico, un agenda de citas (que se añadirá al calendario), un paquete gráfico elemental, un diseñador de formularios y un reloj multiproceso. El texto está muy pegado a la tierra, y el nivel es bajo-medio. Resulta aconsejable su lectura tras el estudio de los manuales de Smalltalk/V, quizá demasiado etéreos. Object Oriented Programming , Peter Coad & Jill Nicola, 1993, Prentice-Hall, 0-13-032616-X, con disquete del código C++ y Smalltalk. El libro resulta sorprendentemente fresco, detallado y específico comparado con los anteriores de Coad y Yourdon sobre OOA/OOD, y, la verdad, resulta muy divertido de leer: se puede acabar de un tirón. Mediante el análisis, diseño e implementación de distintos pequeños proyectos, en creciente grado de dificultad, pero siempre muy pedagógicos (un contador elemental, una maquina vendedora, un sistema de soporte de ventas y un sistema de control de tráfico), se introduce al lector en un discurrir donde se alternan C++ y Smalltalk, convirtiéndose así en una perfecta obra ambivalente de introducción a ambos lenguajes. Los autores intentan, a la vez -y parece que consiguen-, imbuir al lector en lo que denominan “object-thinking”, una suerte de estructuración mental en la que se ven objetos por doquier en cualquier área [9]. En fin: un texto ameno y recomendable, de nivel medio. Discovering Smalltalk , Wilf LaLonde, 1994, Benjamin Cummings, 0-8053-2720-7. Si sólo ha de leer un libro sobre Smalltalk, lea éste. Independientemente de si conoce o no ya el lenguaje, de si sabe o no qué es un ordenador, de si proviene de Cobol o C++, éste es su libro. Y si bien puede resultar chocante que al principio por ejemplo se explique, aun de pasada, qué es un “disco flexible”, el lector pronto descrubrirá que casi inadvertidamente, en una forma que recuerda el énfasis conceptual adscrito a Alan Kay, se va introduciendo en un lenguaje que no necesita de ningún bagaje informático anterior. La profusión de gráficos es impresionante (a diferencia del resto de los libros, éste se puede leer perfectamente sin tener Smalltalk delante) y el estilo francamente atractivo: los conceptos se introducen con fuerza, amenidad y detalle. No tienen excusa: lean y disfruten de un lenguaje agradecido como pocos. Smalltalk-80: The Language , Adele Goldberg & David Robson, 1989, Addison-Wesley, 0-201-13688-0. Este libro es un clásico y representa la segunda edición, convenientemente modificada y remozada, del anterior texto “Smalltalk-80: The Language and its Implementation”, familiarmente conocido como “libro azul”, de los mismos autores, publicado por Addison-Wesley en 1983, que contenía una interesante especificación, desparecida en la presente edición, para la construcción de una máquina virtual Smalltalk-80 (una buena razón para disponer de las dos obras). Este texto se apoda “libro púrpura” y está estructurado como un manual de acceso y descripción del lenguaje: la introducción sintáctica es seguida por un repaso de los recursos del lenguaje-entorno para acabar con la exposición de distintas aplicaciones de simulación discreta orientada-a-eventos. El tono de la obra es exacto y su lectura resulta cómoda y estimulante. En definitiva, como dicen los americanos, un “must-have”. Smalltalk-80: The Interactive Programming Environment , Adele Goldberg, 1984, Addison-Wesley, 0-201-11372-4. Originalmente concebido como documentación de usuario del sistema Smalltalk-80 de Xerox, debido a la extraordinaria integración del entorno con el lenguaje en sí, este texto (denominado, según la costumbre, con el color de su portada: “libro naranja” [10]) describe, en forma de manual tutorado, la interfaz de usuario del entorno-lenguaje, las técnicas de extracción de información de los objetos del sistema, las operaciones CRUD sobre clases, la depuración del código y las relaciones del entorno respecto del exterior. El libro presenta suficientes ilustraciones gráficas y el estilo es adecuadamente paternal. En fin, un manual “clásico” [11]. Inside Smalltalk I , Wilf LaLonde & John Pugh, 1990, Prentice-Hall, 0-13-468414-1. Esta obra, junto con el segundo tomo, representa para los años 90 lo que para los 80 los textos de Goldberg y Robson. El papel impreso quédase obsoleto con mucha rapidez, pero así y todo está obra es indispensable para todo aquél que quiera trabajar de forma seria en Smalltalk. En este tomo se describen los fundamentos del dialecto Smalltalk-80 versión 2 y de su entorno de programación, junto con el detalle de las clases básicas y la gestión de imágenes gráficas. Inside Smalltalk II , Wilf LaLonde & John Pugh, 1990, Prentice-Hall, 0-13-465964-3. Este tomo, inseparable compañero del anterior, se centra en la construcción de aplicaciones con IGUs VIMP [12]. Centrándose en el paradigma MVC (Modelo-Vista-Controlador) con una profundidad difícil -si no imposible- de hallar en otros textos, los autores introducen al lector con detalle, rigor y precisión en las operaciones con ventanas, menús, ventanas emergentes, etc., para acabar con casi 200 páginas en las que se discute y expone el diseño e implementación de un “constructor de ventanas” (una suerte de asistente que proporciona facilidades gráficas para la creación de interfaces de usuario), una aplicación de tamaño medio de gran interés. Se trata de una obra imprescindible. Smalltalk/V: Practice and Experience , Wilf LaLonde & John Pugh, 1994, Prentice-Hall, 0-13-814039-1, con disquete. LaLonde y Pugh son, entre otras cosas y desde hace tiempo, columnistas permanentes de la sección Smalltalk del JOOP (Journal of Object-Oriented Programming), de SIGS Publications. Fruto del ingente material publicado en sus columnas es el presente texto, en el que se presentan convenientemente remozados algunos casos prácticos de programación orientada-a-objetos en Smalltalk/V para Windows. El libro está pensado, como los mismos artículos, para lectores con conocimientos medios de Smalltalk, aunque como los casos son realmente interesantes (conjuntos borrosos, intercamio dinámico de datos, combinación de componentes modales y no-modales para construir un visor gráfico, etc.), la lectura de las 185 páginas del texto resultarán tan valiosas para los expertos como para los recien-llegados al lenguaje. The Smalltalk Report , de SIGS Publications, P.O. Box 2031, Langhorne, PA 19047, USA, fax 215.785.6073, es una publicación de carácter mensual dedicada intégramente al lenguaje Smalltalk en todas sus variantes, al proceso de su estandarización, bibliotecas de clases, patrones de diseño (The Smalltalk Best Practice Language, etc.), y otras áreas relacionadas. CONSIDERACIONES PRÁCTICAS FINALES ara solaz de los lectores, RPP acompaña en este número la versión 1.1.1 completa de la implementación Smalltalk de GNU (puro freeware) para DOS, basada en línea de comandos. Y para terminar, los lectores ávidos de información adicional sobre Smalltalk (URLs en el WWW, gophers, archivos ftp, newsgroups, FAQs, proceso de estandarización, proyectos de investigación, etc.) o sobre APTO2 pueden dirigirse al autor. [1] Según una nota de prensa “no oficial” del 15-02-95 emitida conjuntamente por la “Ada Resource Association” y la “Ada Joint Program Office” del Ministerio de Defensa de USA. [2] No nos extenderemos aquí desarrollando estos conceptos, cuya influencia en el ámbito téorico de la Tecnología de Objetos ha sido tal que ésta prácticamente los ha incorporado sin variación. Cualquier tratado de introducción a la OOP procura suficientes definiciones y ejemplos. [3] Se echa en falta un “Juicio Universal de la Informática” al estilo del de Pappini, donde un tremendo erudito eche cuentas de lenguajes, personas y otras cuitas. [4] La cuestión de si Smalltalk es compilado o interpretado genera toneladas de tinta, y las opiniones oscilan entre lo chusco y lo pedante. Obviaremos aquí estas sutilezas lingüísticas. [5] Un político honesto -decía aproximadamente Simon Cameron- es aquél que permanece fiel a quien le sobornó primero. [6] La “V” va por “Virtual”. [7] “Object-Oriented Software Construction”, Bertrand Meyer, 1988, Prentice-Hall. [8] El lector podrá formarse una idea bastante clara del direccionamiento tecnológico de IBM revisando el texto “Object Technology in Application Development”, de Daniel Tkach y Richard Puttick, 1994, Benjamin Cummings, 0-8053-2572-7. [9] Con esto pasa como con el tabaco y los vicios mayores: los más convencidos de la “objetivización mental” son precisamente los “estructuralistas arrepentidos”. Y la pregunta es ¿cuándo se fundará “Estructuralistas Anónimos”? Hay ciertos pecados que necesitan pública confesión. [10] El inquieto lector podría preguntarse si existen más “libros de colores”. Pues, bien, sí: al texto “Smalltalk-80: Bits of History, Words of Advice”, de Glenn Krasner, editor, Addison-Wesley, 1983, ISBN 0-201-11669-3, se le denomina “libro verde”. Nada malicioso, empero. [11] Mark Twain socarronamente afirmaba que “un clásico es un libro que todo el mundo elogia y nadie lee”. Ya sabe, lector: sea original y lea. [12] VIMP (Ventanas, Iconos, Menú y Puntero) es la aventurada grafía castellana de WIMP. |
||
| Pº. Castellana 188, 14º e · 28046 - Madrid · info@a4devis.com |
||