to be published in the Proceedings of the REX Workshop on Foundations of Object-Oriented Languages DESCRIBING , STRUCTURING and IMPLEMENTING OBJECTS J.Fiadeiro 1 and T.Maibaum Department of Computing Imperial College of Science, Technology and Medecine 180 Queen's Gate, London SW7 2BZ, UK Abstract - The popularity of the notion of object for structuring (the specification of) systems has not been accompanied by the necessary formalisation of the concepts and constructions involved. We have a well developed theory of abstract data types that explains how to structure specifications based on the notion of value, but objects involve imperative notions such as those of action and state which are not well captured in an applicative way. In this paper, we focus on the development of an alternative framework to support systems design based on the concept of object. We provide a notion of object signature around which we define the notion of locality (encapsulation). We adopt a deontic action logic for the description of objects. We define the notion of morphism between object descriptions, and show how these notions can be used to combine object descriptions and, in this way, define the behaviour of societies of interacting objects. And, finally, we show by means of an example how object descriptions may be reified by implementing descriptions of objects at one level (of abstraction) in terms of object descriptions at the level below. 1 Introduction The concept of object, as an "entity" that has an identity independent of its state, that encapsulates a collection of attributes (its private memory) which it is able to manipulate according to a well defined set of actions, and that is able to interact with other objects, has emerged as one of the most powerful abstractions for structuring systems design. As argued in [Sernadas et al 89b], by incorporating states and behaviour, the concept of object is rich enough to capture the wide variety of phenomena that is usually involved in design, so that it becomes possible to consider each layer of the systems development process to be structured uniformly as a collection of interacting objects. Likewise, during reification, it allows us to regard each design step as the implementation of some abstract object in terms of a collection of concrete ones that are "assembled" into a configuration that provides the functionality required by the abstract object. Naturally, the process ends when a layer of objects that do not need to be implemented is reached, either because they correspond to "real-world" entities, or they are supported by the chosen programming and database environment, or by the existing operating system. Although the concept of object can be traced back to 1967 with Simula [Dahl et al 67], and the principles for programming/specifying "in the large" (modular decomposition and stepwise refinement) have been layed since [Hoare 72; Parnas 72], the ensuing work of formalisation has been developed mainly by the so-called ADT school (since [Zilles 74; Goguen et al 78]) around the notion of value as opposed to object. As put in [Schuman and Pitt 87], although both concepts play an important rôle, they also reflect a fundamental technical distinction. The notion of a data type as a collection of data domains and operations on these domains is purely applicative. In contrast, the concept of object that we have in mind involves imperative notions (eg the notion of state, of action) that cannot be accommodated easily within this applicative view. We do recognise that it is possible to model the notion of state as a value (as another data domain) so that actions are just operations on that additional data domain, but this does not provide the right level of abstraction at which we want to deal with 1 on leave from Departamento de Matemática, Instituto Superior Técnico, Lisbon, as a grantee of the Commission of the European Communities.