Statically Scoped Object Adaptation with Expanders

Proceedings of the Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA 2006), Portland, Oregon, October 22-26, 2006.Alessandro Warth, Milan Stanojevic, Todd Millstein
This paper introduces the expander, a new
object-oriented (OO) programming language construct designed
to support object adaptation.
Expanders allow existing classes to be noninvasively updated with
new methods, fields, and superinterfaces.
Each client can customize its view of a class by explicitly
importing any number of expanders. This view then applies
to all instances of that class, including objects passed to
the client from other components.
A form of expander
overriding allows expanders to interact naturally with OO-style
inheritance.

We describe the design, implementation, and evaluation of eJava, an
extension to Java supporting expanders. We illustrate eJava's syntax
and semantics through several examples. The statically scoped nature
of expander usage allows for a modular static type system
that prevents several important classes of errors.
We describe this modular static type system informally, formalize
eJava and its type system
in an extension to Featherweight Java, and prove a type soundness
theorem for the
formalization.
We also describe a modular compilation strategy for eJava, which
we have implemented using the Polyglot extensible compiler
framework.
Finally, we illustrate the practical benefits of eJava by using this
compiler in two experiments.