One major benefit of the object-oriented paradigm is the inherent support for abstraction-centric, reusable, and adaptable design. In particular, it is common to construct complex systems using predefined frameworks. A framework is a collection of collaborating classes that provides a set of services for a given domain. You customize the framework to a particular application by subclassing and composing instances of the framework classes. Therefore, frameworks represent object-oriented reuse.
There are several advantages to using frameworks: