¿Que es un Framework?

¿Que es un Framework?

Un Framework ofrece componentes como una librería, pero además provee de plantillas o esqueletos que definen el funcionamiento de las aplicaciones. Por ejemplo, para una aplicación sencilla (es decir, no basada en documentos) el Framework provee con un centro de notificaciones, pasteboard, métodos delegate, …  que permiten manejar y controlar prácticamente toda la aplicación sin escribir mucho código. Para una aplicación basada en documentos, la plantilla se encarga de cada uno de los documentos abiertos (títulos de las ventanas, cambios en el contenido de cada una, notificar si el documento que se va a cerrar tiene cambios sin guardar, … ). Estas plantillas que ofrece el Framework se pueden adaptar a diferentes necesidades. Y, en el caso de que sus capacidades básicas no basten, se puede crear una subclase (de la clase que provee la plantilla) y agregar las modificaciones deseadas. Dichas plantillas ahorran trabajo a la hora de escribir una aplicación. Además de que hacen relativamente fácil entender otras aplicaciones hechas con el mismo Framework, ya que comparten un esqueleto similar.

¿Como se utiliza un Framework?

Una vez definida la interfaz gráfica (o la interacción a través de una terminal en el caso de una aplicación que no tiene interfaz gráfica), queda por decidir como se manejara la información del usuario y el posterior procesamiento y presentación que la aplicación hará con esa información. En el ejemplo de la aplicación que suma dos números, se tiene únicamente un objeto que controla la aplicación

ejemplo2Puesto que este objeto solamente debe llevar a cabo la suma, lo recomendable es que este sea de la clase NSObject, la clase más básica (es decir, que sea una subclase de la clase NSObject). Sin embargo, habrá situaciones en las que necesitemos objetos de otras clases. Por ejemplo, imaginemos una sencilla aplicación (no basada en documentos) para dibujar. Esta aplicación puede tener una interfaz gráfica como la siguiente:

framework1Para controlar lo que el usuario dibuje en el lienzo, necesitamos un objeto NSView, que es una clase visual. Este objeto, puede también controlar el resto de la interfaz (menú y barra de herramientas). Aunque lo recomendable seria tener un objeto aparte para controlar esto. Nuestra aplicación, utilizando dos objetos, quedaría así:

framework2

El objeto Control es una subclase de NSObject, mientras que el objeto Lienzo es una subclase de NSView. El objeto Control administra los eventos del menu y de la paleta de herramientas, e informa de esto al objeto Lienzo, el cual controla lo dibujado por el usuario. Las flechas azules indican conexiones entre los objetos, mientras que la flecha verde indica que el objeto Lienzo tiene una contraparte en la interfaz gráfica (ya que el objeto Lienzo es de una clase visual), mediante un componente CustomView. De esta forma, el Framework nos permite agregar tantos objetos como se necesiten, cada uno con una función especial, y de la clase más adecuada para el trabajo que van a llevar a cabo. Por ejemplo, si se necesitara almacenar objetos dentro de un Array con ciertas características. Se crearía un objeto de la clase NSArray, y se agregarían dichas características. El hecho de separar un programa en objetos, cada uno de los cuales lleva una función especifica, simplifica enormemente la estructura del programa. Y los Frameworks, especialmente los de GNUstep, nos facilitan la creación de dicha estructura.