This article is from the Object-Oriented Technology FAQ, by Bob Hathaway firstname.lastname@example.org with numerous contributions by others.
See [Kim 89, ch 1,3].
This is the 1 Level System as Described under Meta-Classes. Delegation refers
to the delegating of responsibility and can be applied to inheritance. When a
derived class does not have a desired attribute, it "delegates" responsibility
to one of its base classes. In delegation systems, each object has a delegate
list instead of a parent list. Thus, delegation's primary emphasis is
on message passing where an object could delegate responsibility of a message
it couldn't handle to objects that potentially could (its delegates). Any
object can be added to the delegate list, giving dynamic inheritance (of a
sort). Typically, delegation and prototyping languages also have "part
inheritance" in which fields and methods can be added and deleted from objects.
This makes for easy "prototyping", which allows for objects to be constructed
piece by piece at run-time, although the term "prototyping" in the context of
delegation languages usually refers to objects serving as prototypes for
object instantiation, or exemplars.
Next's NextStep OS provides delegation using Objective-C, providing an example
of delegation in a class-based language [Garfinkel 93].