Abstract#R##N##R##N#While most object-oriented programming is done in class-based languages, the trend in theoretical study has been to develop formal systems that are object-based, without classes and often without explicit inheritance mechanisms. This paper studies the correspondence between class constructs of the form found in C++, Eiffel, and Java and object primitives of the form used in recent type-theoretic studies. One insight is that classes require both an extensible aggregate, to serve as the basis for inheritance, and a non-extensible form of object to support subtyping; typed object calculi without extensible objects or extensible records do not seem adequate for conventional class-based programming. We develop our analysis by comparing three approaches to class-based programming, the first using records of object components called “premethods” and the latter two using an extensible form of object called a “prototype.” While the first approach is simplest, using fewer primitive operations on objects, it does not seem to accurately provide several features of conventional class-based languages. In the latter two approaches, we give more comprehensive treatments of classes by combining prototypes with standard abstraction mechanisms. All three treatments of classes are based on typed translations into provably sound object calculi. © 1998 John Wiley & Sons, Inc.
['Kathleen Fisher', 'John C. Mitchell']
On the relationship between classes, objects, and data abstraction