Object-oriented composition untangled

Object-oriented languages come with pre-defined composition mechansims, such as inheritance, object composition, or delegation, each characterized by a certain set of composition properties, which do not themselves individually exist as abstractions at the language level. However, often non-standard composition semantics is needed, with a mixture of composition mechanisms. Such non-standard semantics are simulated by complicated architectures that are sensitive to requirement changes and cannot easily be adapted without invalidating existing clients. In this paper, we propose compound references, a new abstraction for object references, that allows us to provide explicit linguistic means for expressing and combining individual composition properties on-demand. The model is statically typed and allows the programmer to express a seamless spectrum of composition semantics in the interval between object composition and inheritance. The resulting programs are better understandable, due to explicity expressed design decisions, and less sensitive to requirement changes.

[1]  Akinori Yonezawa,et al.  Abstracting Object Interactions Using Composition Filters , 1993, ECOOP Workshop.

[2]  Erich Gamma Extension object , 1997 .

[3]  Peter Sommerlad,et al.  Pattern-Oriented Software Architecture , 1996 .

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

[5]  Franz J. Hauck,et al.  Inheritance modeled with explicit bindings: an approach to typed inheritance , 1993, OOPSLA '93.

[6]  Günter Kniesel Type-Safe Delegation for Run-Time Component Adaptation , 1999, ECOOP.

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

[8]  Davide Ancona,et al.  Jam - A Smooth Extension of Java with Mixins , 2000, ECOOP.

[9]  Henry Lieberman,et al.  Using Prototypical Objects to Implement Shared Behavior in Object Oriented Systems , 1986, OOPSLA.

[10]  Wolfgang Weck,et al.  Generic Wrappers , 2000, ECOOP.

[11]  Antero Taivalsaari,et al.  On the notion of inheritance , 1996, CSUR.

[12]  Douglas C. Schmidt,et al.  Pattern-Oriented Software Architecture, Patterns for Concurrent and Networked Objects , 2013 .

[13]  Günter Kniesel,et al.  Dynamic object-based inheritance with subtyping , 2000 .

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

[15]  Mira Mezini Variational Object-Oriented Programming Beyond Classes and Inheritance , 1998, The Kluwer international series in engineering and computer science.

[16]  Markku Sakkinen,et al.  Disciplined Inheritance , 1989, ECOOP.

[17]  Clemens A. Szyperski,et al.  Component software - beyond object-oriented programming , 2002 .

[18]  Jens Palsberg,et al.  Evolution of object behavior using context relations , 1996, SIGSOFT '96.

[19]  Randall B. Smith,et al.  Self: The power of simplicity , 1987, OOPSLA 1987.

[20]  Erik Ernst gbeta - a Language with Virtual Attributes, Block Structure, and Propagating, Dynamic Inheritance , 2000 .

[21]  Jean-Marc Geib,et al.  The point of view notion for multiple inheritance , 1990, OOPSLA/ECOOP '90.

[22]  Craig Chambers,et al.  Predicate Classes , 1993, ECOOP.

[23]  Mira Mezini,et al.  Dynamic Object Evolution without Name Collisions , 1997, ECOOP.

[24]  Patrick Steyaert,et al.  A Marriage of Class- and Object-Based inheritance Without Unwanted Children , 1995, ECOOP.

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

[26]  Grady Booch,et al.  Essential COM , 1998 .

[27]  Ken Arnold,et al.  The Java programming language (2nd ed.) , 1998 .

[28]  Martin Fowler,et al.  Planning Extreme Programming , 2000 .

[29]  Henry Lieberman,et al.  Using prototypical objects to implement shared behavior in object-oriented systems , 1986, OOPLSA '86.

[30]  Martin Fowler,et al.  Refactoring - Improving the Design of Existing Code , 1999, Addison Wesley object technology series.