In computer programming, a software framework is an abstraction in which software, providing generic functionality, can be selectively changed by additional user-written code, thus providing application-specific software. It provides a standard way to build and deploy applications and is a universal, reusable software environment that provides particular functionality as part of a larger software platform to facilitate the development of software applications, products and solutions. Software frameworks may include support programs, compilers, code libraries, toolsets, and application programming interfaces (APIs) that bring together all the different components to enable development of a project or system.
Frameworks have key distinguishing features that separate them from normal libraries:
- inversion of control: In a framework, unlike in libraries or in standard user applications, the overall program's flow of control is not dictated by the caller, but by the framework. This is usually achieved with the Template Method Pattern.
- default behaviour: This can be provided with the invariant methods of the Template Method Pattern in an abstract class which is provided by the framework.
- extensibility: A user can extend the framework – usually by selective overriding – or programmers can add specialized user code to provide specific functionality. This is usually achieved by a hook method in a subclass that overrides a template method in the superclass.
- non-modifiable framework code: The framework code, in general, is not supposed to be modified, while accepting user-implemented extensions. In other words, users can extend the framework, but cannot modify its code.
Pree, W (1994), "Meta Patterns: A Means for Capturing the Essentials of Reusable Object-Oriented Design",
Proceedings of the 8th European Conference on Object-Oriented Programming, Lecture Notes in Computer Science, vol.
821,
Springer-Verlag, pp.
150–162,
CiteSeerX 10.1.1.74.7935,
doi:
10.1007/BFb0052181,
ISBN 978-3-540-58202-1{{citation}}: Cite uses deprecated parameter |citeseerx= (help)
↑ Fayad, Mohamed; Schmidt, Douglas C. (1997). "Object-oriented application frameworks". Communications of the ACM. 40 (10): 32–38. doi:10.1145/262793.262798. ISSN 1557-7317. Retrieved 26 May 2026.
↑ Johnson, R E (1992), "Documenting frameworks using patterns", Conference proceedings on Object-oriented programming systems, languages, and applications - OOPSLA '92, ACM Press, pp. 63–76, doi:10.1145/141936.141943, ISBN 0201533723, S2CID 604969
↑ Gachet, A (2003), "Software Frameworks for Developing Decision Support Systems – A New Component in the Classification of DSS Development Tools", Journal of Decision Systems, 12 (3): 271–281, doi:10.3166/jds.12.271-280, S2CID 29690836