next up previous contents
Next: La clase PNView Up: Diseño e implantación Previous: La clase Controller

La clase PNController

Los objetos PNController son el control (del modelo MCV) de los documentos de una red de Petri. Como se aprecia en la figura 4.2, los objetos de la clase PNController mantienen una relación con la ventana asociada al documento, con un objeto de la clase PNView --la cual representa al objeto red de Petri, o al documento red de Petri-- y con el objeto Controller de la aplicación.

Los objetos de esta clase se encargán de mandar los mensajes, provenientes del objeto de control, a la red de Petri, representada con la clase PNView y la ventana que la contiene.

Los objetos PNController contienen varias variables y métodos instancia, lo más importantes son:

@interface PNController : NSObject
{
    PNView   *pnet; 
    id       window; 
    NSString *docName;
    id       controller; 
}
- (void)readTheFile:(id)file;
- (void)saveDocument:(id)sender;
- (void)saveDocumentAs:(id)sender;
- (void)cut:(id)sender;
- (void)print:(id)sender;
- (Class)currentGraphic;
// window's petri net delegate method
- (void)windowDidBecomeKey:(NSNotification *)notification;
@end
La variable pnet hace referencia a un objeto del tipo PNView4.2, el cual es el objeto red de Petri.

La variable window hace referencia a la ventana asociada al objeto red de Petri. Se utiliza principalmente para desplegar el nombre del documento asociado a la red. Un atributo especial de este objeto es el nombre del documento que tiene la red de Petri, el cual se almacena en un objeto NSString, referenciado en la variable docNmae. Cuando un objeto PNControllerse inicializa, el nombre asociado que tiene es UNTITLED (y que se despliega en la barra de estado de la ventana).

Este objeto se encarga de manejar los mensajes provenientes de los objetos Controller y el FirstResponder de PetrA, y comunicarselos al objeto PNView. También los objetos PNController se utilizan como los delegados de las ventanas que contienen a los objetos PNView (referenciados por la variable window).

Estos métodos instancia trabajan de la siguiente manera:

readTheFile
Este método se ejecuta cuando el usuario ha seleccionado la opción Load del menú File, originalmente el objeto Controller recibe el mensaje, y una vez que crea e inicializa el objeto PNController, le manda este mensaje para que cargue el archivo, cuyo nombre se recibe como argumento de entrada. Cuando el objeto PNController recibe este mensaje, manda el mensaje setPNMatrix al su objeto pnet, con un objeto PNMatrix como parámetro, esto es, se le signa su matriz de incidencia, como se muestra a continuación:
1 - (void)readTheFile:(id)file {
2 [pnet setPNMatrix: [NSUnarchiver unarchiveObjectWithFile:file]];
3 }
En la línea 3 de este listado aparece un llamado a la clase NSArchiver --esta clase es la encargada de proporcionar los mecanísmos para poder almacenar objetos en un archivo--y se le envía el mensaje unarchiveObjectWithFile con nombre del archivo como parámetro de entrada.

saveDocument
Este mensaje le llega al objeto a través del FirstResponder. Cuando el documento no tiene asociado ningún nombre --es decir, la variable docName hace referencia a un valor nulo-- se manda a ejecutar al método saveDocumentAs (ver líneas 2 y 6 del siguiente listado). Si se tiene asociado un nombre, entonces se procede a enviarle el mensaje archiveRootObject: to File (con los parámetros de entrada: objeto PNMatrix y nombre del archivo) a la clase NSArchiver, para que se almacene el objeto principal de la red de Petri. Como se aprecia en la línea 3 del siguiente listado
1 - (void)saveDocument:(id)sender {
2    if (docName != nil) {
3          [NSArchiver archiveRootObject:[pnet pnMatrix] 
                                  toFile:docName];
4          return;
5    }
6    [self saveDocumentAs: sender];
7 }

saveDocumentAs
Este método le llega al objeto PNController por el mismo (ver desripción del método saveDocument) y por el usuario a través del FirstResponder. Este método asocia un nombre a la variable docName a través de un objeto NSSavePanel.

cut
Este mensaje le llegua al objeto a través del FirstResponder y lo que se hace es reenviarlo al objeto NSView.

print
Al igual que el mensaje cut, el mensaje print proviene de FirstResponder y lo que se hace es reenviarlo al objeto NSView.

currentGraphic
Este mensaje le llega al objeto a través del objeto PNView, y lo que hace reenviarlo al objeto Controller.

windowDidBecomeKey
Este mensaje lo envía una ventana a su delegado, en este caso al objeto PNController, su función consiste en enviar el mensaje setCurrentDocument al objeto de control de PetrA (Controller), para que mantenga actualizado el valor del documento actual con el que trabaja y facilite la operación al Inspector.


next up previous contents
Next: La clase PNView Up: Diseño e implantación Previous: La clase Controller
Amilcar Meneses
2002-11-08