Object Inheritance Without Classes

Authors Timothy Jones, Michael Homer, James Noble, Kim Bruce

Thumbnail PDF


  • Filesize: 0.59 MB
  • 26 pages

Document Identifiers

Author Details

Timothy Jones
Michael Homer
James Noble
Kim Bruce

Cite AsGet BibTex

Timothy Jones, Michael Homer, James Noble, and Kim Bruce. Object Inheritance Without Classes. In 30th European Conference on Object-Oriented Programming (ECOOP 2016). Leibniz International Proceedings in Informatics (LIPIcs), Volume 56, pp. 13:1-13:26, Schloss Dagstuhl – Leibniz-Zentrum für Informatik (2016)


Which comes first: the object or the class? Language designers enjoy the conceptual simplicity of object-based languages (such as Emerald or Self) while many programmers prefer the pragmatic utility of classical inheritance (as in Simula and Java). Programmers in object-based languages have a tendency to build libraries to support traditional inheritance, and language implementations are often contorted to the same end. In this paper, we revisit the relationship between classes and objects. We model various kinds of inheritance in the context of an object-oriented language whose objects are not defined by classes, and explain why class inheritance and initialisation cannot be easily modelled purely by delegation.
  • Inheritance
  • Objects
  • Classes
  • Operational semantics


  • Access Statistics
  • Total Accesses (updated on a weekly basis)
    PDF Downloads


  1. Henk Barendregt. The Lambda Calculus. North-Holland, revised edition, 1984. Google Scholar
  2. Graham M. Birtwistle, Kristen Nygaard, Bjørn Myhrhaug, and Ole-Johan Dahl. Simula Begin. Studentlitteratur, 1979. Google Scholar
  3. Andrew P. Black, Eric Jul, Norman Hutchinson, and Henry M. Levy. The development of the Emerald programming language. In History of Programming Languages III, 2007. Google Scholar
  4. Alan Borning. Classes versus prototypes in object-oriented languages. In Proc. ACM Fall Joint Computer Conference, pages 36-40, 1986. Google Scholar
  5. Gilad Bracha. The Programming Language Jigsaw: Mixins, Modules, and Multiple Inheritance. PhD thesis, University of Utah, 1992. Google Scholar
  6. Gilad Bracha. Mixins in Dart, 2015. [Online; accessed 30-November-2015]. URL: https://www.dartlang.org/articles/mixins.
  7. Gilad Bracha and William Cook. Mixin-based inheritance. In OOPSLA, 1990. Google Scholar
  8. Gilad Bracha and Gary Lindstrom. Modularity meets inheritance. In Proc. International Conference on Computer Languages, pages 282-290, 1992. Google Scholar
  9. Gilad Bracha, Peter von der Ahé, Vassili Bykov, Yaron Kashai, William Maddox, and Eliot Miranda. Modules as objects in Newspeak. In ECOOP, pages 405-428, 2010. Google Scholar
  10. Craig Chambers, David Ungar, Bay-Wei Chang, and Urs Hölzle. Parents are shared parts of objects: inheritance and encapsulation in Self. Lisp and Symbolic Computation, 1991. Google Scholar
  11. Andrea Corradi, Marco Servetto, and Elena Zucca. DeepFJig: modular composition of nested classes. In PPPJ, pages 101-110, 2011. Google Scholar
  12. Christophe Dony, Jacques Malenfant, and Pierre Cointe. Prototype-based languages: From a new taxonomy to constructive proposals and their validation. In OOPSLA, 1992. Google Scholar
  13. Christophe Dony, Jacques Malenfant, and Pierre Cointe. Classifying prototype-based programming languages. In James Noble, Antero Taivalsaari, and Ivan Moore, editors, Prototype-Based Programming: Concepts, Languages and Applications, chapter 2. 1999. Google Scholar
  14. Stéphane Ducasse, Oscar Nierstrasz, Nathanael Schärli, Roel Wuyts, and Andrew P. Black. Traits: A mechanism for fine-grained reuse. ACM Transactions on Programming Languages and Systems, 2005. Google Scholar
  15. Erik Ernst. Family polymorphism. In ECOOP, 2001. Google Scholar
  16. Manuel Fähndrich and Songtao Xia. Establishing object invariants with delayed types. In OOPSLA, pages 337-350, 2007. Google Scholar
  17. Matthias Felleisen, Robert Bruce Findler, and Matthew Flatt. Semantics Engineering with PLT Redex. MIT Press, 2009. Google Scholar
  18. Matthew Flatt, Shriram Krishnamurthi, and Matthias Felleisen. Classes and mixins. In POPL, 1998. Google Scholar
  19. Matthew Flatt, Shriram Krishnamurthi, and Matthias Felleisen. A programmer’s reduction semantics for classes and mixins. In Formal Syntax and Semantics of Java, 1998. Google Scholar
  20. Joseph (Yossi) Gil and Tali Shragai. Are we ready for a safer construction environment? In ECOOP, pages 495-519, 2009. Google Scholar
  21. Adele Goldberg and David Robson. Smalltalk-80: The Language and its Implementation. Addison-Wesley, 1983. Google Scholar
  22. James Gosling, Bill Joy, Guy Steele, Gilad Bracha, and Alex Buckley. The Java Language Specification. Oracle, 2015. Google Scholar
  23. Michael Homer, Timothy Jones, James Noble, Kim B. Bruce, and Andrew P. Black. Graceful dialects. In ECOOP, pages 131-156, 2014. Google Scholar
  24. Norman C. Hutchinson, Rajendra K. Raj, Andrew P. Black, Henry M. Levy, and Eric Jul. The Emerald programming language report. Computer Science, UBC, October 1991. Google Scholar
  25. Roberto Ierusalimschy, Luiz Henrique de Figueiredo, and Waldemar Celes. The evolution of Lua. In History of Programming Languages III, 2007. Google Scholar
  26. Atsushi Igarashi, Benjamin C. Pierce, and Philip Wadler. Featherweight Java: A minimal core calculus for Java and GJ. ACM Transactions on Programming Languages and Systems, 23(3):396-450, 2001. Google Scholar
  27. Carlton Egremont III. Mr. Bunny’s Big Cup o'Java. Addison-Wesley, 1999. Google Scholar
  28. Timothy Jones and James Noble. Tinygrace: A simple, safe and structurally typed language. In Formal Techniques for Java-like Programs. 2014. Google Scholar
  29. Gregor Kiczales, Jim des Rivières, and Daniel G. Bobrow. The Art of the Metaobject Protocol. MIT Press, 1991. Google Scholar
  30. Giovanni Lagorio, Marco Servetto, and Elena Zucca. Featherweight Jigsaw: Replacing inheritance by composition in Java-like languages. Inf. Comput., 214:86-111, 2012. Google Scholar
  31. Xavier Leroy, Damien Doligez, Alain Frisch, Jacques Garrigue, Didier Rémy, and Jérôme Vouillon. The OCaml system release 4.00 documentation and user’s manual, 2012. Google Scholar
  32. Henry Lieberman. Using prototypical objects to implement shared behavior in object oriented systems. In OOPSLA, November 1986. Google Scholar
  33. Henry Lieberman, Lynn Andrea Stein, and David Ungar. Treaty of Orlando. In Addendum to OOPSLA Proceedings, May 1988. Google Scholar
  34. Lua-Users. Object oriented programming, 2014. [Online; accessed 30-November-2015]. URL: http://lua-users.org/wiki/ObjectOrientedProgramming.
  35. Ole Lehrmann Madsen, Birger Møller-Pedersen, and Kristen Nygaard. Object-Oriented Programming in the BETA Programming Language. Addison-Wesley, 1993. Google Scholar
  36. Donna Malayeri and Jonathan Aldrich. Cz: Multiple inheritance without diamonds. In OOPSLA, 2009. Google Scholar
  37. Bertrand Meyer. Object-oriented Software Construction. Prentice Hall, 1988. Google Scholar
  38. Bertrand Meyer. Eiffel: The Language. Prentice Hall, 1992. Google Scholar
  39. Oscar Nierstrasz, Stéphane Ducasse, and Nathanael Schärli. Flattening traits. Journal of Object Technology, 5:66-90, 2006. Google Scholar
  40. James Noble, Antero Taivalsaari, and Ivan Moore, editors. Prototype-Based Programming: Concepts, Languages, Applications. Springer-Verlag, 1997. Google Scholar
  41. Martin Odersky, Lex Spoon, and Bill Venners. Programming In Scala. Artima, 2011. Google Scholar
  42. Xin Qi and Andrew C. Myers. Masked types for sound object initialization. In POPL, pages 53-65, 2009. Google Scholar
  43. Marco Servetto, Julian Mackay, Alex Potanin, and James Noble. The billion-dollar fix - safe modular circular initialisation with placeholders and placeholder types. In ECOOP, pages 205-229, 2013. Google Scholar
  44. Pat Shaughnessy. Ruby Under A Microscope. No Starch Press, 2013. Google Scholar
  45. Brian C. Smith. Reflection and semantics in Lisp. In Proceedings of the ACM Conference on Principles of Programming Languages, 1984. Google Scholar
  46. Stack Overflow. Which JavaScript library has the most comprehensive class inheritance support?, 2015. [Online; accessed 30-November-2015]. URL: https://stackoverflow.com/questions/711209.
  47. Alex J. Summers and Peter Müller. Freedom before commitment - a lightweight type system for object initialisation. In OOPSLA, pages 1013-1032, 2011. Google Scholar
  48. Antero Taivalsaari. Delegation versus concatenation or cloning is inheritance too. Oops Messenger, 6(3), 1995. Google Scholar
  49. Antero Taivalsaari. Classes vs. prototypes: Some philosophical and historical observations. In James Noble, Antero Taivalsaari, and Ivan Moore, editors, Prototype-Based Programming: Concepts, Languages and Applications, chapter 1. Springer-Verlag, 1999. Google Scholar
  50. David Ungar, Craig Chambers, Bay-Wei Chang, and Urs Hölzle. Organizing programs without classes. Lisp and Symbolic Computation, 4(3), June 1991. Google Scholar
  51. David Ungar and Randall B. Smith. SELF: The power of simplicity. Lisp and Symbolic Computation, 4(3), June 1991. Google Scholar
  52. Wikipedia. Snit, 2015. [Online; accessed 30-November-2015]. URL: https://en.wikipedia.org/w/index.php?title=OTcl&oldid=663399454.
  53. Allen Wirfs-Brock, editor. ECMAScript 2015 Language Specification. Ecma International, 6th edition, 2015. Google Scholar
  54. Yoav Zibin, David Cunningham, Igor Peshansky, and Vijay Saraswat. Object initialization in X10. In ECOOP, pages 207-231, 2012. Google Scholar