Smalltalk organiza los comportamientos de las instancias utilizando clases. Una clase es un objeto que contiene un conjunto de métodos que se ejecutan cuando una de sus instancias recibe un mensaje que es el nombre de uno de estos métodos.
El Browser del sistema, o simplemente el Browser, es una herramienta que controla todas las clases de Cuis-Smalltalk. Es una herramienta para explorar las clases (tanto del sistema como de usuario) y para escribir nuevas clases y métodos.
Para acceder a la herramienta ...menú World →
Open... → Browser...
Figura 2.1: El Browser del sistema
En la parte superior izquierda se encuentran las categorías de clases, grupos de clases que comparten el mismo tema. Una categoría también se puede utilizar para crear un paquete (Package), que es un elemento organizativo para guardar código en un sistema de archivos. En la Figura 2.1, la categoría de clase seleccionada es Kernel-Numbers, un grupo de clases que ya hemos empezado a utilizar. El término Kernel- indica que forma parte de las categorías fundamentales, pero solo es una convención. Véanse otras categorías como Kernel-Text y Kernel-Chronology, relacionadas con entidades de texto y fecha.
A la derecha se encuentran las clases de la categoría
seleccionada. Están bien presentadas en una jerarquía de clases
padre-hijo. Cuando se selecciona una clase por primera vez en este
panel, su declaración aparece en el panel grande de abajo. La
declaración de la clase Number es:
Magnitude subclass: #Number instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Kernel-Numbers'
Algunos puntos importantes de esta declaración:
Number es una subclase de Magnitude.
Es decir,
Number es un tipo especializado de Magnitude.
#subclass:instanceVariableNames:classVariableNames:...
se enviará a Magnitude para crear esta clase.
subclass:, Number tiene el prefijo
“#”. Es un símbolo, un tipo de cadena única. Efectivamente cuando
declaramos la clase Number, el sistema no tiene constancia de
ella, por lo que la nombramos como un símbolo.
instanceVariableNames: es una cadena:
las variables de instancia de la clase se declaran mediante nombres separados
por un espacio. No hay ninguno en esta definición de clase.
Una subclase hereda comportamientos de su superclase padre, por lo que
solo necesita describir lo que difiere de su superclase. Una instancia
de Number añade métodos (que definen comportamientos)
desconocidos para una instancia de Magnitude. Exploraremos esto
en detalle a medida que avancemos.
Para conocer el propósito de una clase, es recomendable visitar
siempre el comentario de la clase. A menudo, los comentarios
también incluyen ejemplos de código para aprender a utilizar el objeto;
estos fragmentos de código se pueden seleccionar y ejecutar in situ, tal
y como se hace desde un espacio de trabajo. En la
Figura 2.1, mira el botón comment para leer o
editar el «comentario» de la clase seleccionada.
A la derecha del panel de clases se encuentra el panel de categorías de
métodos. Una clase puede tener muchos métodos, por lo que agruparlos por
categorías ayuda a otros usuarios a orientarse en la búsqueda de métodos
relacionados. A modo de referencia, Number tiene más de 100
métodos de instancia implementados en sí mismo14. Al hacer clic en la categoría arithmetic, se accede
directamente a los métodos relacionados en el siguiente y último panel
de la derecha.
Un click derecho en el panel Categoría de Clases proporciona un menú contextual. Puedes seleccionar
find class ..o, como indica el menú, utilizar Ctrl-f (Find), para obtener un panel de rellenar y escribir parte de un nombre de clase que buscar. Pruébalo conString.
¿Cuántos métodos hay en la categoría de métodos arithmetic de la clase
CharacterSequence?
Ejercicio 2.3: Recuento de métodos
En el Browser, una vez seleccionado un método (como en Figura 2.1,
método abs), la parte inferior muestra su código fuente, listo para ser
explorado o editado. A menudo, encontrará un pequeño comentario justo
después del nombre del método, entre comillas dobles.
Todo objeto conoce su propia clase y puede responder con ella al mensaje #class.
Truco. En el Workspace, hacer Ctrl-b (Browse) sobre el nombre de una clase abrirá un Browser con la clase nombrada:
2 class e imprime con
Ctrl-p,
SmallInteger y está destacado
automáticamente como la selección actual,
SmallInteger
con Ctrl-b,
SmallInteger, lista para la exploración.
Si tenemos en cuenta a sus padres, el recuento combinado del método supera los 300.