next up previous contents
Next: Comentarios finales Up: PetrA: Petri Nets Application Previous: La clase Connection

El manejo de archivos

Un aspecto importante en PetrA es que una red de Petri se maneja como un documento, y como tal, puede almacenarse en el disco. Para salvar una red de petri a disco, bastará con almacenar al objeto PNMatrix. Para grabar objetos a archivo se hacen llamados a las clases NSArchiver y NSUnarchiver. Sin embargo esto no basta, ya que esta clase desconoce que elementos de cada objeto deben almacenarse (inclusive, si los objetos que participan en una composición pueden almacenarse en el archivo). Para realizar esta labor se implanta el protocolo NSCoding. Para integrar este protocolo a una clase, se debe declarar en su archivo de interfaz, como se muestra a continuación.
@interface Matrix  : NSObject <NSCoding>
...
@end
En este código se muestra la definición del protocolo en la línea donde se define el nombre de la clase y la super clase.

Cuando se integra el protocolo a una clase, también se deben implantar los métodos encodeWithCoder e initWithCoder para codificar y decodificar un objeto. En estos métodos se describen los elementos de la instancia que serán codificados y decodificados. Por ejemplo veamos el caso de la implantación del protocolo NSCoding en la clase Matrix. En esta clase se codifican el número de renglones, columnas, y el identificador al elemento base o inicial. El identificador al elemento actual no se almacena ya que su valor puede inicializarse siempre con la referencia de la base.

- (void)encodeWithCoder:(NSCoder *)aCoder
{
    [aCoder encodeValuesOfObjCTypes:"ii@", &nRows, &nColumns, &base];
}

- (id)initWithCoder:(NSCoder *)aDecoder
{
    [aDecoder decodeValuesOfObjCTypes:"ii@", &nRows, &nColumns, &base];
    current = base;
    return self;
}
En este ejemplo se observa que los métodos encodeWithCoder y initWithCoder, tienen un objeto NSCoder como argumento de entrada, este objeto lo envían automáticamente las clase NSArchiver y NSUnarchiver cuando se le mandan los mensajes archiveRootObject (para almacenar un objeto), y unarchiveObjectWithFile, respectivamente.

Las clases que tienen implantado este protocolo son las que tienen relación con la clase PNMatrix (excepto la clase PNView). Estas clases son: PNMatrix, Matrix, Element, Figure, Place, Transition y Connection.


next up previous contents
Next: Comentarios finales Up: PetrA: Petri Nets Application Previous: La clase Connection
Amilcar Meneses
2002-11-08