A Core Calculus of Classes and Mixins

We develop an imperative calculus that provides a formal model for both single and mixin inheritance. By introducing classes and mixins as the basic object-oriented constructs in a λ-calculus with records and references, we obtain a system with an intuitive operational semantics. New classes are produced by applying mixins to superclasses. Objects are represented by records and produced by instantiating classes. The type system for objects uses only functional, record, and reference types, and there is a clean separation between subtyping and inheritance.

[1]  Gilad Bracha,et al.  The programming language jigsaw: mixins, modularity and multiple inheritance , 1992 .

[2]  S. E. Keene,et al.  A programmer's guide to object-oriented programming in Common LISP , 1988 .

[3]  Kim B. Bruce,et al.  Subtyping Is Not a Good "Match" for Object-Oriented Languages , 1997, ECOOP.

[4]  Matthias Felleisen,et al.  Parameter-passing and the lambda calculus , 1991, POPL '91.

[5]  Samuel N. Kamin,et al.  Two semantic models of object-oriented languages , 1994 .

[6]  Luca Cardelli,et al.  Comparing Object Encodings , 1997, TACS.

[7]  Martín Abadi,et al.  A Theory of Objects , 1996, Monographs in Computer Science.

[8]  Viviana Bono,et al.  An Imperative, First-Order Calculus with Object Extension , 1998, ECOOP.

[9]  Luigi Liquori,et al.  A Subtyping for the Fisher-Honsell-Mitchell Lambda Calculus of Objects , 1994, CSL.

[10]  Davide Ancona,et al.  An Algebraic Approach to Mixins and Modularity , 1996, ALP.

[11]  John C. Mitchell,et al.  Type systems for object-oriented programming languages , 1996 .

[12]  Vitaly Shmatikov,et al.  A Core Calculus of Classes and Objects , 1999, MFPS.

[13]  Yannis Smaragdakis,et al.  Implementing Layered Designs with Mixin Layers , 1998, ECOOP.

[14]  Luca Cardelli,et al.  On understanding types, data abstraction, and polymorphism , 1985, CSUR.

[15]  Bjarne Stroustrup,et al.  C++ Programming Language , 1986, IEEE Softw..

[16]  David Notkin,et al.  Using role components in implement collaboration-based designs , 1996, OOPSLA '96.

[17]  Bjarne Stroustrup,et al.  C++ : programovací jazyk : The C++ programming language (Orig.) , 1997 .

[18]  Gilad Bracha,et al.  Modularity meets inheritance , 1992, Proceedings of the 1992 International Conference on Computer Languages.

[19]  Ole Lehrmann Madsen,et al.  Object-oriented programming in the BETA programming language , 1993 .

[20]  Carolyn L. Talcott,et al.  Programming, Transforming, and Providing with Function Abstractions and Memories , 1989, ICALP.

[21]  William R. Cook,et al.  A denotational semantics of inheritance , 1989 .

[22]  Matthias Felleisen,et al.  A Syntactic Approach to Type Soundness , 1994, Inf. Comput..

[23]  Michele Bugliesi,et al.  Matching Constraints for the Lambda Calculus of Objects , 1997, TLCA.

[24]  Benjamin C. Pierce,et al.  Simple type-theoretic foundations for object-oriented programming , 1994, Journal of Functional Programming.

[25]  Ken Arnold,et al.  The Java Programming Language , 1996 .

[26]  Robert Bruce Findler,et al.  Modular object-oriented programming with units and mixins , 1998, ICFP '98.

[27]  William R. Cook,et al.  Inheritance is not subtyping , 1989, POPL '90.

[28]  Kim B. Bruce Safe type checking in a statically-typed object-oriented programming language , 1993, POPL '93.

[29]  David A. Moon,et al.  Object-oriented programming with flavors , 1986, OOPLSA '86.

[30]  John C. Mitchell,et al.  A lambda calculus of objects and method specialization , 1993, [1993] Proceedings Eighth Annual IEEE Symposium on Logic in Computer Science.

[31]  William R. Cook,et al.  Mixin-based inheritance , 1990, OOPSLA/ECOOP '90.

[32]  Mitchell Wand Type inference for objects with instance variables and inheritance , 1994 .

[33]  Martin Hofmann,et al.  Positive Subtyping , 1996, Inf. Comput..

[34]  John C. Mitchell,et al.  A Delegation-based Object Calculus with Subtying , 1995, FCT.

[35]  Robert Hieb,et al.  The Revised Report on the Syntactic Theories of Sequential Control and State , 1992, Theor. Comput. Sci..

[36]  Pierre Lescanne,et al.  Algebraic and Logic Programming , 1988, Lecture Notes in Computer Science.

[37]  Tom Mens,et al.  Encapsulation and composition as orthogonal operators on mixins: a solution to multiple inheritance problems , 1996, Object Oriented Syst..

[38]  Kim B. Bruce A paradigmatic object-oriented programming language: Design, static typing and semantics , 1994, Journal of Functional Programming.

[39]  Scott F. Smith,et al.  Sound polymorphic type inference for objects , 1995, OOPSLA.

[40]  Kim B. Bruce,et al.  PolyTOIL: A Type-Safe Polymorphic Object-Oriented Language , 1995, ECOOP.

[41]  Matthias Felleisen,et al.  Classes and mixins , 1998, POPL '98.

[42]  John C. Mitchell,et al.  On the Relationship Between Classes, Objects, and Data Abstraction , 1998, Theory Pract. Object Syst..

[43]  Luca Cardelli,et al.  On Binary Methods , 1995, Theory Pract. Object Syst..

[44]  Patrick Steyaert,et al.  Generalised Mixin-based Inheritance to Support Multiple Inheritance , 2001 .

[45]  Uday S. Reddy,et al.  Objects as closures: abstract semantics of object-oriented languages , 1988, LISP and Functional Programming.

[46]  Michele Bugliesi,et al.  Matching for the lambda Calculus of Objects , 1999, Theor. Comput. Sci..