Many modern object-oriented languages (such as C++ and Java) allow the use of
procedural and data encapsulation, as well as dynamic dispatch (virtual functions).
Ben Flynn (Haverford '99) and I have written a paper
describing a conflict between encapsulation and the traditional implementation
of dynamic dispatch, and demonstrated that this conflict can be resolved without
compromising efficiency of dynamic dispatch. An earlier version of this work appeared
at MASPLAS '99)
and as Ben's senior thesis.