You Can't Do It All With Inheritance

There has been much written about the natural match between object oriented programming and user interface design. The design of abstract objects such as windows which do not correspond to any object in physical reality remains a challenge. We have found many programmers using Smalltalk's or Flavors' subclassing organization (Inheritance) where an aggregation or parts organization would be better.

Is it really true that a bordered window is a subclass of window? Should a text window with a scroll bar be different from one without? Subclassing leads to very cumbersome and confusing user interface datatypes, especially in a single inheritance model. Systems such as Animus [Duisberg, 1986] have clearly illustrated that it is better to think of a bordered window as a composite object [Lieberman, 1986] [Lalonde, Thomas and Pugh, 1986b] composed of a border part and a window part.

This means we need a system with lots of small parts such as buttons, text views, scroll bars, etc. which are assembled by the user interface designer. Combining these parts to form new parts should not require us to change existing code or write large amounts of new code. Examples of systems with this capability are ThingLab [Horning, 1979] and The Alternate Realities Kit [Smith, 1986].