udging by the looks of the two parties, the marriage between concurrent computation and object-oriented programming--a union much desired by practitioners in such fields as telecommunications, highperformance computing, banking and operating systems--appears easy enough to arrange. This appearance, however, is deceptive: the problem is a hard one. This article points the way toward a pos,;ible solution. The precise problem examined here is restricted to: What is the simplest, smallest and most convincing extension to the method of systematic object-oriented software construction that can address the needs oJ concurrent and distributed computing as well as those of sequential computation? The article does not claim to discuss concurrency and distribution in a general and unbiased way. Rather, it takes the object-oriented paradigm as a given (on the basis of its contributions to the production of quality software) and investigates how best to adapt it so it covers both concurrent and sequentia;[ applications. The word "systematic" as used in the title of the article will provide strong gqaidance to our search for this minimal extension. We are interested in an approach that makes it possible to reason about software systems in a precise way, by extending to the concurrent case the systematic techniques, known as 'design by contract', which can be applied to the systematic (~dthough not necessarily fully formal) development of sequential object-oriented software. A word ofwaming as to the actual ambition of the model discussed here. No claim is made that the work as reported is final, and a number of possible criticisms are discussed in the final section. I do think, however, that in its discussion of how the mutual attraction between object orientation and concurrency can be turned into a reasonably happy marriage, this article raises a number of questions. Although crucial for both theoretical understanding and practical implementation of concurrent object-oriented computation, these questions have not been addressed (or in some cases even mentioned) by previous work on the subject, and will have to be resolved before a solution can be widely accepted and applied. The property which initially suggests an easy match between the ideas of concurrency and object orientation is the remarkable similarity between the basic constructs of both object orientation and concurrency. It is hard to miss the analogies between objects and processes, or more accurately between the underlying abstractions: classes and process types. Both categories of constructs support: • Local variables (attributes of a class, variables of a process or process type) • Persistent data, keeping their value between successive activations. • Encapsulated behavior (a single cycle for a process; any number of routines for a class) • Heavy restrictions on how modules can exchange information • A communication mechanism usually based on some form of message passing. It is not surprising, then, that researchers have tried to unite the two areas. But although existing designs (for surveys see [1, 19] as well as a recent thesis [17] ) have introduced many productive ideas, it is fair to state that so far none has succeeded in providing a widely accepted mechanism for concurrent object-oriented programming. The primary reason is probably the undue complexity of most of the proposed solutions, which tend to add the S6 September 1993/Vo1.36, No.9 ¢Oi41MUNICATIONS OF THR ACM
Meyer's Systematic Concurrent Object-Oriented Programming (SCOOP) concurrent programming model REF is based on Eiffel.
Systematic concurrent object-oriented programming
CACM
Computer Science