One of the most difficult parts of implementing an user interface is defining and maintaining the relationships between objects.
Typically it is difficult to specify that when one object changes, some other object should be updated. Facilities for explicitly stating and maintaining these dependencies must be available so that the designer can clearly define what interactions are to take place.
Smalltalk contains a hidden and inflexible coordination scheme. Its *dependents* mechanism hides the relationships between objects by allowing them to interact behind the scene. When models think they have changed significantly, they indirectly send a generic update message to the views open on them. The interface (i.e., view) cannot specify what changes it is interested in nor can it control when it gets notified of these changes. The dependents mechanism is further restricted in that all messages go over a single message path which has a fixed format.
Other systems (e.g., the Macintosh) provide little or no coordination facilities that the user can access. These approaches are reasonable for simple applications which have few interacting objects. However, in a more general system which allows the user to compose arbitrarily complex objects from distinct parts, an explicit coordination scheme is needed.