Looking at the False relationship, however, there may be more that we can do.
The False relationship is actually no different from a normal Flow. It would
probably be better to have just a normal Flow relationship for it, and add If to
the set of source objects at the top of the ?¬?gure. The True case would be
distinguished by a different role. Since GotoPoint can allow several incoming
roles, we should probably distinguish those in the normal sequential ?¬‚ow (To)
from those that are jumps to this label (JumpTo). That would allow us to constrain
GotoPoint to a single incoming sequential role??”corresponding to the single line
of assembler that can precede the label??”but many incoming JumpTo roles
corresponding to conditional jumps to the same label from multiple places in the
code.
This would make the rest of the constraints more similar and allow the use of
inheritance. Rather than having to specify constraints for each object type separately,
we could give Text, SystemCall, If, and GotoPoint a common Abstract supertype, and
148 HOME AUTOMATION
specify the supertype in the bindings and constraints. This way there would only be
three constraints: any Object could be in at most one From role, Abstract could be in at
most one To role, and If could be in an most one JumpFrom role. The result of these
changes would look like Fig.
Pages:
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289