GNUstep a fondo

El lenguaje Objective-C

Objective-C, el lenguaje utilizado por GNUstep, esta considerado como uno de los más dinámicos que existen, este dinamismo se nota rápidamente en la herramienta de desarrollo GORM, donde es posible instanciar objetos en tiempo de diseño y crear las conexiones de este. Esto permite mantener en todo momento una visión clara de la forma en que interactúan los objetos de nuestra aplicación. Además, Objective-C utiliza el concepto de Outlets (salidas) y Actions (entradas). Es decir, salidas y entradas de mensajes, donde un mensaje no debe confundirse con la llamada a un método. Los métodos en Objective-C, a diferencia de otros lenguajes, pueden ser métodos de clase o métodos de instancia. Esto debido a que las clases son en realidad objetos.  En la documentación de GNUstep, los métodos de clase van precedidos por un signo más (+) y los métodos de instancia por un signo menos (-). Para comprender mejor todo esto, imaginemos una sencilla aplicación que suma dos números. En la imagen (abajo), el esquema de la interfaz gráfica se muestra a la izquierda, y a la derecha el objeto que llevara a cabo la suma. Este objeto tiene 3 Outlets (salidas) y 1 Action (entrada), con sus respectivos nombres.

ejemplo1

Los Outlets sumando1 y sumando2 son para mandar mensajes a los primeros dos componentes TextEdit de la interfaz, con el fin de obtener los sumandos que el usuario a ingresado (es decir, se ejecutan métodos que devuelven el valor contenido en el componente). Y el tercero para colocar el resultado de la suma en el tercer componente (es decir, se ejecuta el método apropiado para establecer el valor del componente). El Action sumar crea en nuestro objeto un método llamado sumar, y estará conectado al componente Button de nuestra interfaz (los Actions son métodos que se ejecutan cuando se da un clic en el componente visual al que están conectados, o que se pueden ejecutar directamente como cualquier otro método). Ahora, solo es cuestión de conectar los Outlets y el Action de nuestro objeto con los componentes de la interfaz, como se representa a continuación

ejemplo2

Y, por último, escribir el código para llevar a cabo la suma (en el método sumar de nuestro objeto). Esto es exactamente lo mismo que hay que realizar para crear esta aplicación en GNUstep. Una vez creada la interfaz gráfica, creamos una subclase (por ejemplo, de la clase raíz NSObject) con tres Outlets y un Action. Hecho esto, instanciamos un objeto a partir de esta clase y, mediante operaciones de arrastrar y soltar, se conectan los Outlets y el Action. Generamos los archivos de nuestra clase, y escribimos el código para llevar a cabo la suma. Suponiendo que los Outlets tienen los nombres de la gráfica anterior, este podría ser

float numero1, numero2, resultado ;
numero1 = [sumando1 floatValue] ;
numero2 = [sumando2 floatValue] ;
resultado = numero1 + numero2 ;
[suma setFloatValue: resultado] ;

Obsérvese que los mensajes van entre corchetes, teniendo en primer termino el nombre del Outlet (salida) que conecta con el objeto al que deseamos enviar el mensaje, y seguido del método a ejecutar con sus parámetros (si tiene). Puesto que los mensajes pueden anidarse, lo anterior puede realizarse en una sola linea así

[suma setFloatValue: [sumando1 floatValue] + [sumando2 floatValue] ] ;

Y con esto queda terminada la aplicación.

Especificaciones OpenStep

Las especificaciones OpenStep engloban una gran cantidad de características de un programa. Sin embargo, aquellas que se notan inmediatamente se refieren al comportamiento de un programa, así como a la apariencia de este. En la imagen de abajo, podemos notar algunas de estas especificaciones. La primera, y más obvia, es que el menú no se encuentra integrado a ninguna ventana, sino que es independiente, pudiendo localizarse en cualquier parte de la pantalla. La segunda, es que la aplicación tiene un icono localizado en la esquina inferior izquierda (llamado AppIcon), y que sirve para indicar que la aplicación esta ejecutándose. Si se da un clic en la opción Hide del menú, la aplicación se oculta, y podemos hacerla nuevamente visible dando doble clic sobre el AppIcon.

openstep1

openstep2

Otras diferencias las podemos ver en la barra de títulos de las ventanas, que tienen un control con un cuadro a la izquierda, que sirve para minimizar la ventana. Al dar un clic en este control se crea un icono que nos indica que la ventana ha sido minimizada (similar al AppIcon, pero llamado Miniwindow), y dando doble clic sobre este Miniwindow la ventana regresa a su posición. En el lado derecho de la barra de titulo se encuentra el control para cerrar la ventana, similar a los que estamos acostumbrados a usar. No hay un control para maximizar/restaurar la ventana, ya que esto es algo que no existe en las especificaciones OpenStep. Además, para redimensionar la ventana, se utiliza la barra para dicho fin que se encuentra al pie de la ventana y que esta dividida en tres partes. Dando un clic izquierdo y sostenido sobre la parte central y arrastrando el mouse, podemos modificar la altura de la ventana, mientras que las partes izquierda y derecha nos permiten modificar la altura y el ancho simultáneamente.

openstep3

Todas estas especificaciones se implementan bien en el escritorio WindowMaker. Sin embargo, en otros escritorios o sistemas operativos, no se utilizan todas estas especificaciones. Por ejemplo, GNUstep esta configurado para utilizar por defecto la decoración nativa para los bordes de las ventanas. Esto significa que las ventanas tienen un borde redimensionable, así como los tres botones minimizar, restaurar/maximizar y cerrar (excepto cuando se utiliza el gestor de ventanas WindowMaker). En esritorios como Gnome, KDE, Xfce, etc. GNUstep puede configurarse para minimizar las ventanas en la barra de herramientas en lugar de usar los MiniWindows, también se puede configurar para no mostrar el AppIcon, y para tener el menú en la ventana (para las aplicaciones que lo soportan). La siguiente imagen, muestra la aplicación Gemas corriendo en Gnome utilizando el menú en la ventana:

silver

Sin embargo, para los que deseeen utilizar los AppIcons y MiniWindows en estos escritorios, la herramienta IconManager es útil para manejarlos. La siguiente imagen muestra varias aplicaciones hechas con GNUstep corriendo en el escritorio Xfce, donde la herramienta IconManager maneja los AppIcons y Miniwindows a la derecha de la pantalla (tanto el tamaño como la posición de estos puede configurarse).

La apariencia del menú, también puede ser controlada mediante la variable de configuración NSInterfaceStyleDefault. El valor por defecto es NSNextStepInterfaceStyle, que crea el menú vertical y desligado de toda ventana. Otra opción es NSMacintoshInterfaceStyle, que crea un menú horizontal en la parte superior de la ventana (para ser usando en sistemas Mac OS X o con el escritorio Étoilé).

openstep5

En Windows la apariencia de las aplicaciones es como la mostrada en la siguiente imagen. Las ventanas tienen decoración nativa, y los colores para los controles son tomados también del tema nativo. Y, para las aplicaciones que lo soportan, puede tenerse el menú en ventana. Como se aprecia en la imagen de abajo, donde se observa a Gorm con el menú incorporado en la ventana del documento. En este sistema operativo GNUstep no utiliza por defecto los AppIcons o MiniWindows, ya que las aplicaciones se minimizan en la barra de tareas.

Frameworks y paquetes de GNUstep

GNUstep consiste, básicamente, de dos frameworks: Base y GUI, y dos paquetes: Make y Back:

Base

Este es el framework que contiene todas las clases no visuales. Aquellas que derivan de las clases de NextStep comienzan con las letras NS, mientras que las clases incorporadas por GNUstep comienzan con las letras GS. Leer más.

GUI

Este es el framework que contiene todas las clases visuales. Y, al igual que en el framework Base, las clases que derivan de las originales de NextStep comienzan con las letras NS, mientras que las clases incorporadas por GNUstep comienzan con las letras GS. Leer más.

Make

Este paquete facilita la creación de los Makefiles de los proyectos creados con GNUstep. De tal forma que se hace sencilla la configuración, instalación y empaquetado de la aplicación. Leer más.

Back

Este paquete es el backend del framework GUI, necesario para dibujar las clases visuales.