Kombinace SmallDEVSu a objektů Smalltalku
Funkčnost komponenty může být realizována objekty, implementovanými třídami Smalltalku. Instance těchto tříd se umístí do patřičných slotů atomické komponenty a z přechodových funkcí jsou pak těmto objektům zasílány zprávy. Doporučuje se inicializaci slotů provést v initModel, případně (raději) aplikovat línou inicializaci (viz dále).
Nemají-li tyto objekty implementovanou podporu serializace a kopírování (což v případě objektů implementujících např. UI nebo vazbu na hardware apod. obvykle ani není možné), je třeba před serializací a kopírováním nastavit sloty s těmito objekty na nil. To obvykle provádí metoda initModel, automaticky volaná při resetu simulace (pred exportem modelu je ovsem nutne udelat reset):
initModel
self myObject: nil.
V takovémto případě je nutné realizovat línou inicializaci příslušných slotů metodami pro přístup k těmto slotům, např.:
getMyObject
self myObject ifNil: [ self myObject: MyObject new ].
^ self myObject
SmallDEVS od verze 07 automaticky niluje sloty zacinajici X pri kazdem pozastaveni simulace. Toho
lze vyhodne vyuzit v kombinaci s linou inicializaci.
Vytváření inicializovaných objektů ve Smalltalku
bez parametrů:
MyObject
initialize
x := y := 'hello'.
MyObject new vytvoří inicializovnou instanci (initialize se volá automaticky - viz zděděná implementace new).
s parametry:
MyObject class
newWithX: x andY: y
^ self new initializeWithX: x andY: y.
MyObject
initializeWith: argX andY: argY
x := argX.
y := argY.
MyObject newWithX: 'abc' andY: 999 vytvoří inicializovnou instanci.
Link to this Page