Back - Formal Specification | Previous - Petrol Filling Station


Case Study 4 - Therapy Machine

 

Models the Graphical User Interface, based upon the control console of a real medical device, though the same technique can be applied to any event driven system

The Z text is illustrated with a statechart. The system design is split into largely independent subsystems which can include both data and operations on that data, (as with C++ classes).

The Console state incorporates different displays and is concerned with the dialogue from the user who enters a setting via a text input and an accept button in a dialogue box on screen.

An event occurs through a mouse click or a keystroke to change the console state.

 

Selecting a Display

 

Changing a Setting Value

 

 

Finishing the Dialogue

 

The GUI is to be used in conjunction with the Machine


[DISPLAY,SETTING,VALUE,CHAR]

TEXT == seq CHAR

MODE ::= idle | dialog

BUTTON ::= accept | cancel

ÚÄConsoleÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ display : DISPLAY
³ mode : MODE
³ buffer : TEXT
³ setting : SETTING
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

[EVENT]

ÚÄEventÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ œConsole
³ e? : EVENT
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

Many events are simply ignored (they do not change the Console state).

Ignore ¡ Event ™ �Console

³ disp : EVENT �‹Ž DISPLAY

ÚÄSelectDisplayÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ Event
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
³ mode = idle
³ e? î dom disp
³ display' = disp e?
³ mode' = mode
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

ÚÄIgnoreDisplayÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ Ignore
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
³ e? î dom disp
³ mode = dialog
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

We use schema disjunction to combine the two cases.

DisplayEvent ¡ SelectDisplay ˜ IgnoreDisplay

³ stg : EVENT �‹Ž SETTING

ÚÄSelectSettingÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ Event
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
³ mode = idle
³ e? î dom stg
³ setting' = stg e?
³ mode' = dialog
³ buffer' = í
³ display' = display
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

If a dialog is already underway, this operation is disabled.

ÚÄIgnoreSettingÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ Ignore
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
³ e? î dom stg
³ mode = dialog
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

SettingEvent ¡ SelectSetting ˜ IgnoreSetting

³ char : EVENT �‹Ž CHAR
³ edit : (TEXT
´ CHAR) �ŠŽ TEXT

ÚÄGetCharÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ Event
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
³ mode = dialog
³ e? î dom char
³ buffer' = edit (buffer,char e?)
³ mode' = mode
³ setting' = setting
³ display' = display
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

ÚÄIgnoreCharÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ Ignore
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
³ e? î dom char
³ mode = idle
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

CharEvent ¡ GetChar ˜ IgnoreChar

³ button : EVENT �‹Ž BUTTON
³ value : TEXT �ŠŽ VALUE
³ vaild_ : SETTING ‘ŠŽ VALUE

ÚÄAcceptÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ Event
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
³ mode = dialog
³ e? î dom button
³ button e? = accept
³ valid(setting, value buffer)
³ mode' = idle
³ display' = display
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

ÚÄRepromptÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ Event
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
³ mode = dialog
³ e? î dom button
³ button e? = accept
³ ‰ valid(setting, value buffer)
³ buffer' = buffer
³ mode' = mode
³ display' = display
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

ÚÄCancelÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ Event
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
³ mode = dialog
³ e? î dom button
³ button e? = cancel
³ mode' = idle
³ display' = display
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

ButtonEvent ¡ Accept ˜ Cancel ˜ Reprompt

ÚÄMachineÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ measured,prescribed : SETTING �ŠŽ VALUE
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

The NewSetting operation describes what happens in the Machine when a new value v? is assigned to prescribed setting s?.

ÚÄNewSettingÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ œMachine
³ s? : SETTING
³ v? : VALUE
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
³ prescribed' = prescribed
Å {s? šŽ v?}
³ actual' = actual
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

ÚÄSysÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ Console
³ Machine
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

ÚÄChangeSettingÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ œSys
³ Accept
³ NewSetting
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
³ s? = setting
³ v? = value buffer
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

SysDisplayEvent ¡ DisplayEvent ™ �Machine

SysSettingEvent ¡ SettingEvent ™ �Machine

SysCharEvent ¡ CharEvent ™ �Machine

SysButtonEvent ¡ ChangeSetting ˜ (Reprompt ™ �Machine) ˜ (Cancel ™ �Machine)