Next: La clase PNView
Up: Diseño e implantación
Previous: La clase Controller
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: La clase PNView
Up: Diseño e implantación
Previous: La clase Controller
Amilcar Meneses
2002-11-08