Sin embargo podemos aprovechar la orientación a objetos para facilitarnos un poco la tarea y para ilustrar como agregar un nuevo objeto gráfico a la red de Petri.
La estrategia será la siguiente: crear una subclase de Place llamada PlaceLimited con el nuevo atributo, insertarla en el panel Tools, para que el usuario pueda utilizarla. Después, se deberá modificar, inevitablemente, el código del método de instancia conditionsOK, de los objetos Transition.
#import "Place.h" @interface PlaceLimited : Place { int maxTokens; } - (id)initWithFrame:(NSRect)frameRect inView:(id)contentView; - (int)maxTokens; - (void)setMaxTokens:(int)n; @endy su archivo de implantación quedaría:
#import "PlaceLimited.h" @implementation PlaceLimited - (id)initWithFrame:(NSRect)frameRect inView:(id)contentView { self=[super initWithFrame:frameRect: inView: contentView]; return self; } - (int)maxTokens { return maxTokens; } - (void)setMaxTokens:(int)n { maxTokens=n; } - (void)encodeWithCoder:(NSCoder *)aCoder { [super encodeWithCoder: aCoder]; [aCoder encodeValuesOfObjCTypes: "i", &maxTokens]; } - (id)initWithCoder:(NSCoder *)aDecoder { self = [super initWithCoder: aDecoder]; [aDecoder decodeValuesOfObjCTypes: "i", &maxTokens]; return self; } @end
Se puede observar que la clase PlaceLimited, es una subclase de Place, maneja un solo atributo (maxTokens), y tiene cinco métodos --uno de ellos es de inicialización, dos para accesar al atributo macToken y los métodos del protocolo <NSCoding>--.
- (BOOL)conditionsOK { int i, l, t, w; id cTemp; l = [[ioConnections inputs] count]; for (i=0; i<l; i++) { cTemp = [[ioConnections inputs] objectAtIndex: i]; w = [cTemp weight]; t = [[cTemp startGraph] tokens]; if (w>t) return NO; } // inicia parte agregada l = [[ioConnections outputs] count]; for (i=0; i<l; i++) { cTemp = [[ioConnections outputs] objectAtIndex: i]; w = [cTemp weight]; w+= [[cTemp endGraph] tokens]; t = [[cTemp endGraph] maxTokens]; if (w>t) return NO; } // termina parte agregada return YES; }
Evidentemente el usuario debe tener conocimiento de las herramientas de desarrollo de OpenStep/Mac OS X para realizar estos pasos sin problemas. Sin embargo se tiene la confianza de que los desarrolladores futuros comprendan que la programación en esta plataforma de desarrollo es poderosa y muy conveniente.