In a general sense we can define a framework as a general pool of constructs for understanding a domain that is not tightly enough organized to constitute a predictive theory. However, it is possible to add additional details so as to come up with a predictive theory from a framework. One judges a framework in terms of the success or fruitfulness of the theories it generates [Anderson, 1983].

The term framework is very much used in software engineering, especially in relation to object-oriented analysis and design. The first object-oriented frameworks to be considered as such are the MVC (Model View Controller) for Smalltalk and the MacApp for Apple applications. Other important frameworks from this initial phase were ET++[Weinand et al., 1989] and Interviews. It is interesting to note that most of the seminal frameworks were related to designing user interfaces. In the framework history, it is also important to cite the name of the Taligent company, a joint venture of Apple Computer, IBM and Hewlett-Packard. They developed a set of tools for rapid application development under the name of ``Common Point'' that consist on more than a hundred OO frameworks.

The most accepted definition for an object oriented framework is: ``a framework is a set of classes that embodies an abstract design for solutions to a family of problems'' [Johnson and Foote, 1988]. In the framework literature [Beck and Johnson, 1994,Taligent, 1994,Bosch et al., 1999] we can find similar definitions that can be summarized in the following: A framework is the reusable design of a system or a part of a system expressed as a set of abstract classes and the way the instances of those classes collaborate; a framework is a set of prefabricated software building blocks that programmers can use, extend, or customize for specific computing solutions; frameworks are large abstract applications in a particular domain that can be tailored for individual applications; a framework is a reusable software architecture comprising both design and code. As [Johnson, 1997] points out, although different, all definitions are correct because they focus on different views of a framework such as structural or functional.