Abstracting object state

The term `state' has many different meanings, depending on the context in which it is used. In the implementation phase, it refers to the values of the instance variables of the object; during design, it refers to states used in finite state models or their derivatives. For both interpretations, problems have been identified: (1) the way clients of an object access its state is defined in an ad hoc manner, (2) the conventional object-oriented model provides no means to change the interface of an object dynamically on the basis its state or the type of client accessing it, (3) finite state machine approaches are not uniformly integrated in the object-oriented model nor do they provide sufficient complexity reduction for modelling the dynamic behaviour, and (4) no support is provided for defining active states. In this paper we introduce the concept of abstract object state as a solution to these problems. This concept provides a systematic technique to explicitly define an abstraction of the object state which is placed at the interface of the object. The abstract object state consists of static states, but also of active states which can be seen as time derivatives of static states. We show that the abstract object state provides a more uniform approach to object behaviour specification than do finite state models. The concepts discussed have been implemented in the layered object model ((LOM)-O-AY), an extended object-oriented model which is supported by a translator to C++, an execution environment and an integrated development environment.