Some of these classes and interfaces are meaningful only in the context of other classes or interfaces. Furthermore, the use of nested classes makes the collaboration easier to recognize, avoids namespace pollution, and reduces the number of source files. Nested classes are simply static inner classes. Because of this, inner class objects require an object of the enclosing class, while nested class objects do not. In addition, nested classes have access to all members of the enclosing class.
Event objects encapsulate change notifications from the model.
Views register interest in various events by adding listeners to the underlying model of the component. The model notifies its viewers of changes in its own state by delivering these event objects to its registered listeners. Often, these listener and event types are specific to the model type, and therefore make sense only in the context of the model type. Because each of these listener and event types must be publicly accessible, each must be in its own source file. In this situation, unless some coding convention is used, the coupling between these types is difficult to recognize.