In a simulation the ability of a rocket to be launched can be represented by a method
Rocket.launch(). In a program controlling a real rocket the same signature can
be used, if we consider the object to be a window to the thing. Unfortunately there
can be many obstacles during a rocket launch - even in the communication between
the program and the real rocket so that Spolsky’s law [11] applies: “All non-trivial
abstractions, to some degree, are leaky.” The abstract representation of the launching
process by the launch() method is in many cases a good model but as obstacles
may occur, the system needs to handle them. Therefore it makes sense to reduce the
illusion of a direct access to the real thing, e.g. by changing the names of class and
method to RocketProxy.initiateLaunch() or by declaring exceptions. Then
the class name expresses that the object is not the rocket itself but a proxy for it. The
method name makes clear that the method invocation does not execute the launch, but
only initiates it, which might fail. The goal of a reconstruction of the model would be to
find out that “rocket” is a thing that can “launch”. In addition the reference to the Proxy
design pattern should be detected, as well as if "initiate" has an (instrumental) meaning.
In case the class Rocket is a mirror of a rocket, it probably has no
method launch(). This method will be in another object that uses an object of class
Rocket to store for example the start time of the rocket by invoking a
method Rocket.setLaunchInitiated(Time). The distortions in mirror ob-
jects are larger, but the same amount of knowledge should be represented. Behavior
of the real thing is often represented as state. Sometimes behavior that belongs to the
real things is not present in the mirror object but in the objects collaborating with it.
Systems Automating the Real World. Isoda describes in [6] that for simulations mod-
els can be build by natural modeling. Unfortunately this already not true anymore for
systems that automate the real world, e.g. that facilitate business processes. If the soft-
ware would contain a natural model of the automated real world, it would need to con-
tain itself. In addition the natural modeling approach would lead to classes unrelated
to the business process under consideration, or class that are related but unnecessary
for the implementation, or to methods in necessary classes that are confusing (cf. [6,
p.159]). Therefore already [4, p.31] recommended: “For real-world objects, create sys-
tem representations of those objects that respond to events rather than initiate them.
They should be maintaining a representation of the object, rather than initiating activi-
ties.” In our terminology: These objects should be mirrors. If developers want to make
this explicit, the can name a class instead of Customerfor example CustomerData.
Note that “customer” refers to the application domain and “data” the technical domain
of the (virtual) machine.
Boundary, Control, Entity. The distinction of classes using the UML stereotypes
«boundary», «control», «entity» corresponds to differences in the mode of denotation.
Entities are typically mirrors of real things. Boundaries as elements of the user inter-
face are typically windows (in our sense) to virtual elements on the screen. User and
developers can easily ignore the virtuality of these elements (“mediated immediacy”)
and typically do so. Still there is more about this object than internal state. Classes of
these stereotypes and their names tend to refer to different realities: Entities refer to
96