We we noted in an earlier chapter, a framework is sometimes described as an upside down library. That is because in a conventional system the programmer writes the controlling code, perhaps only occasionally using code that somebody else as written as a subroutine. In a framework, it is the framework, that somebody else has written, that is the controlling force. The framework interacts with new new code the user has written only through methods that have been overridden. This makes for a very weak form of coupling between the framework and the new application, and is what permits a framework to be used for a wide variety of different applications.