Dieser Artikel beschäftigt sich mit Programmiergerüsten in der Softwaretechnik. Zum Office-Paket siehe
Framework (Office-Paket).
EinFramework (englisch fürRahmenstruktur) ist ein Programmiergerüst, das in derSoftwaretechnik eingesetzt wird – insbesondere in derobjektorientiertenSoftwareentwicklung sowie inkomponentenbasierten Ansätzen.
EinFramework ist kein eigenständiges Programm, sondern stellt eine Struktur bereit, innerhalb derer Entwickler Anwendungen erstellen. Durch die imFramework verwendetenEntwurfsmuster beeinflusst es typischerweise auch dieArchitektur der entstehenden Software. So unterstützen etwa dieMicrosoft Foundation Classes dasModel-View-Controller-Muster.
Ralph E. Johnson und Brian Foote beschrieben ein Framework 1988 im ArtikelDesigning Reusable Classes imJournal of Object-Oriented Programming als:
„Ein Framework ist eine semi-vollständige Applikation. Es stellt für Applikationen eine wiederverwendbare, gemeinsame Struktur zur Verfügung. Die Entwickler bauen das Framework in ihre eigene Applikation ein und erweitern es derart, dass es ihren spezifischen Anforderungen entspricht. Frameworks unterscheiden sich von Toolkits dahingehend, dass sie eine kohärente Struktur zur Verfügung stellen, anstatt einer einfachen Menge von Hilfsklassen.“[1]
Frameworks geben in der Regel die grundlegende Anwendungsarchitektur vor. Charakteristisch ist dabei die(Inversion of Control) (Umkehrung der Steuerung): Programmierer registrieren konkreteImplementierungen, die anschließend vomFramework aufgerufen und verwaltet werden. Wird diese Registrierung nicht im Quellcode festgelegt, sondern extern konfiguriert, spricht man vonDependency Injection.
EinFramework definiert insbesondere denKontrollfluss einer Anwendung sowie dieSchnittstellen, die konkrete Klassen implementieren müssen. Es dient damit der Wiederverwendung bewährter architektonischer Muster. Da solche Muster stets auf eine bestimmteProblemdomäne zugeschnitten sind, sindFrameworks meist domänenspezifisch oder auf bestimmte Anwendungstypen beschränkt – etwa grafische Editoren, Buchhaltungssysteme oderWebshops.
Eine allgemeingültige Definition existiert nicht, da Frameworks sehr unterschiedlich ausgeprägt sein können. Der Begriff wird daher häufig unscharf verwendet; mitunter werden bereits umfangreicheKlassensammlungen als Framework bezeichnet.
Die Unterscheidung zwischenWhite-Box- undBlack-Box-Frameworks bezieht sich auf die Sichtbarkeit und Zugänglichkeit der Implementierung hinter einer Schnittstelle.
- Bei einerBlack-Box-Abstraktion kennen Klienten nur die Spezifikation der Schnittstelle, nicht jedoch deren interne Umsetzung.
- Bei einerWhite-Box-Abstraktion ist die Implementierung einsehbar und kann durch Vererbung erweitert werden, auch wenn die Schnittstelle weiterhin eine gewisse Kapselung erzwingt.
Einige Autoren unterscheiden zusätzlich zwischenWhite-Boxes (Erweiterung möglich) undGlass-Boxes (nur Einsicht möglich).[2]
Frameworks lassen sich – ohne strikte Abgrenzung – in folgende Kategorien einteilen:
- Application Frameworks
- bilden das Programmiergerüst für eine bestimmte Klasse von Anwendungen(horizontal slice), die grundlegendeFunktionen undProgrammstrukturen bereitstellen.
- Domain Frameworks
- bilden das Programmiergerüst für einen spezifischen Problembereich(vertical slice), das typische Funktionen und Strukturen dieser Domäne bündelt.
- Class Frameworks
- fassen Klassen und Methoden zusammen, die Unterstützung auf einer bestimmten Abstraktionsebene für ein breites Anwendungsspektrum bieten.
- Komponenten-Frameworks
- abstrahieren von der objektorientierten Ebene und stellen eine Umgebung zur Entwicklung und Integration von Software-Komponenten bereit. Software-Komponenten werden dabei meist als Bündel von Klassen mit eindeutig definierten Schnittstellen betrachtet.
- Coordination Frameworks
- (wieJini undUPnP) ermöglichen die Interaktionen zwischen Geräten und unterstützen deren Interoperabilität. Wenn beispielsweise ein „Jini-fähiger“ Drucker an ein Netzwerk angeschlossen wird, welches Jini verwendet, so kann er selbständig anderen Geräten mitteilen, was für eine Art von Drucker dazugekommen ist.
- Test Frameworks
- dienen zur Ausführung automatisierterSoftwaretests, etwaJUnit fürModultests oderSelenium fürWebanwendungen.
- Webframeworks
- sind ausgelegt für die Entwicklung dynamischer Websites, Webanwendungen oder Webservices.
Aufgrund der uneinheitlichen Begriffsverwendung ist die Zuordnung einzelner Systeme nicht immer eindeutig. Beispiele sind:
- Wolfgang Pree:Komponentenbasierte Softwareentwicklung mit Frameworks. dpunkt, 1997,ISBN 3-920993-68-3.
- Krzysztof Cwalina, Brad Abrams:Richtlinien für das Framework-Design – Konventionen, Ausdrücke und Muster für wiederverwendbare .NET-Bibliotheken. Addison-Wesley, 2007,ISBN 3-8273-2626-5.
- ↑Ralph E. Johnson, Brian Foote: “Designing Reusable Classes” im "Journal of Object-Oriented Programming" (1988); "A framework is a semi-complete application. A framework provides a reusable, common structure to share among applications. Developers incorporate the framework into their own application and extend it to meet their specific needs. Frameworks differ from toolkits by providing a coherent structure, rather than a simple set of utility classes."; Quelle: Petar Tahchiev, Felipe Leme, Vincent Massol: JUnit in Action, 2. Auflage, broschiert, Manning Publications, 2010,ISBN 1935182021, Seite 4
- ↑Clemens Szyperski, Dominik Gruntz, Stephan Murer:Component Software. Beyond object-oriented programming. 2. Auflage. Addison-Wesley, London; München 2002,ISBN 0-201-74572-0,S. 40 f.