What kind of framework is that?

The word ``framework'' continually pops up in computer science literature, particularly in the fields of software engineering and distributed systems. The most essential aspect of its meaning is clear: a framework is something which confers structure but not content. Unfortunately, any given use of the word will usually have a more specific intention -- but it's often unclear what kind of ``thing'' an author is talking about, and what exactly the ``structure'' and ``content'' might be. Principally this is because authors often don't define the term when they use it -- but even when they do, they can have remarkably different definitions.

To document this problem, I've been collecting definitions of the word ``framework'' for a while now. These include those given explicitly and also those I've been able to infer. This page is likely to grow as I find more.

  1. A calculus or set of conceptual definitions which may be used to reason about real-world systems.
  2. A re-usable design for an application or system, analogous to (but wider in scope than) an abstract class definition. It might be completely abstract, or might concretely define one or more program artifacts (such as abstract classes). This is very similar to an architectural style, but has a higher level of specificity: it must specify an application domain, and how the objects of that domain are decomposed and modelled as programmatic objects. It is also similar to a design pattern, but at a higher level, since it specifies a very significant part of an entire application or program. As such it may be regarded as a software architecture template, or as a kind of highly-specified architectural style.
  3. A software component (or connector, at the reader's preference))implementing an "inversion of control" architectural style: it is the central within the architecture, and each component connecting to it is passive with respect to it.
  4. A software architecture.
  5. Unit of software deployment containing a library, its header files, documentation and useful related application data (images, localisations, etc.).
  6. Library used pervasively.
  7. A development tool.
  8. Coarse-grained clump of components, composable as a single unit with the other parts of a system.

Content updated at Wed 6 Jun 21:14:33 BST 2007.
validate this page