domingo, 28 de agosto de 2016

Librería de Clases y Frameworks en Smalltalk

La imagen de un Smalltalk cuenta con cientos, si no miles, de clases con funcionalidad aprovechable por nuestro desarrollo.

Las clases que vienen en Smalltalk nos brindan, entre otras cosas, la siguiente funcionalidad:

Números: Existen todo tipo de números. Enteros, coma flotante, fracciones, etc.

Colecciones: El framework de colecciones de Smalltalk es uno de los más antiguos y más funcionales que existen en la actualidad. La lista de colecciones incluye Bag, Set, OrderedCollection, SortedCollection, Dictionary, etc.

String: Soporte para cadenas de caracteres de bytes y cadenas que soportan caracteres unicode.

Boolean: Las clases Boolean, True y False se usan, entre otras cosas, para implementar algunas de las 'estructuras de control'.

Cronología: Clases como Date, Time, DateAndTime, Month, Week, Year,

Gráficos: Smalltalk tiene mucho que ver con el desarrollo de las interfaces de usuario gráficas. En los Smalltalk completamente auto-contenidos (como Squeak) todo lo referente al procesamiento gráfico está implementado en Smalltalk y, por ende, es inspeccionable y modificable por el usuario.  Se cuentan con operaciones 2D básicas (como BitBtl) hasta soporte para gráficos 3D con OpenGL.  El Squeak, a la fecha, tiene soporte para colores con el canal alfa (transparencia), anti-aliasing, renderizado de TTF (True Type Fonts), etc.

Stream: Hay veces que es necesario combinar operaciones de acceso a los elementos de una colección con operaciones de inserción de elementos.  Los típicos mensajes de enumeración de las colecciones de Smalltalk no permiten insertar elementos mientras sucede la iteración.  La jerarquía de clases de Stream permite la iteración de colecciones a la vez que la inserción de elementos.  La metafora de los “streams de objetos” funcionó  tan bien en Smalltalk que, a partir de entonces, se usa para acceder a fuentes de datos externas en Smalltalk y en muchos lenguajes orientados a objetos.

Weak References: Se puede hacer un uso avanzado del recolector de basura utilizando referencias débiles a objetos.  Las referencias débiles, al contrario de las referencia normales o fuertes, no evitan que un objeto sea reclamado por el recolector.  Un objeto puede ser reclamado por el recolector cuando no tenga referencias en absoluto, o tenga sólo referencias débiles.  Muy útil para implementar caches, pool de instancias, mecanismos de finalización de objetos, etc.

Multithreading: El Smalltalk soporta multithreading desde los inicios.  Se cuenta con una rica variedad de clases para hacer computación concurrente de forma sencilla.  Las clases Process (Proceso = Thread) y Semaphore (Semáforo) sirven de base para la programación con threads.

Excepciones: Smalltalk cuenta con un moderno esquema de excepciones.  A diferencia de otros lenguajes, toda la implementación de excepciones está escrita en el mismo lenguaje. Entre otras cosas, el mecanismo de excepciones de Smalltalk permite continuar con la ejecución en el punto siguiente donde ocurrió la excepción.

Metaclases: Todo en Smalltalk es un objeto.  Todos los objetos tienen una clase.  Las clases, como todo, son objetos. Las clases tienen su clase, que se llama la Metaclase.  Todo el mecanismo de herencia está modelado con clases y metaclases.

Seaside: El Seaside es un framework para hacer aplicaciones web basado en continuations.  Un framework como Seaside simplifica muchísimo el manejo del flujo de un sitio web.

SUnit: Este es el framework 'padre' de todos los frameworks de unit-testing que existen.

Magma: Base de datos de objetos, multiusuario, que permite una completa transparencia a la hora de persistir objetos.