Framework
{{Dieser Artikel|beschäftigt sich mit Frameworks in der Softwaretechnik; zu der Office-Suite Framework siehe Framework (Software).}}
Ein {{lang|en|Framework}} ist ein Programmiergerüst, das in der Softwaretechnik, insbesondere im Rahmen der objektorientierten Softwareentwicklung sowie bei komponentenbasierten Entwicklungsansätzen, verwendet wird. Im allgemeineren Sinne und nicht als dezidiertes Softwareprodukt verstanden, bezeichnet man mit Framework auch einen Ordnungsrahmen.
Beschreibung
Ein {{lang|en|Framework}} ist selbst noch kein fertiges Programm, sondern stellt den Rahmen, innerhalb dessen der Programmierer eine Anwendung erstellt, zur Verfügung, wobei u. a. durch die in dem {{lang|en|Framework}} verwendeten Entwurfsmuster auch die Struktur der individuellen Anwendung beeinflusst wird. Beispielsweise unterstützen die Microsoft Foundation Classes das {{lang|en|Model-View-Controller}}-Muster.
Ein {{lang|en|Framework}} gibt somit in der Regel die Anwendungsarchitektur vor. Dabei findet eine Umkehrung der Steuerung ({{lang|en|Inversion of Control}}) statt: Der Programmierer registriert konkrete Implementierungen, die dann durch das {{lang|en|Framework}} gesteuert und benutzt werden, statt – wie bei einer Klassenbibliothek – lediglich Klassen und Funktionen zu benutzen. Wird das Registrieren der konkreten Klassen nicht fest im Programmcode verankert, sondern wird „von außen“ konfiguriert, so spricht man auch von {{lang|en|Dependency Injection}}.
Ein {{lang|en|Framework}} definiert insbesondere den Kontrollfluss der Anwendung und die Schnittstellen für die konkreten Klassen, die vom Programmierer erstellt und registriert werden müssen. {{lang|en|Frameworks}} werden also im Allgemeinen mit dem Ziel einer Wiederverwendung „architektonischer Muster“ entwickelt und genutzt. Da solche Muster nicht ohne die Berücksichtigung einer konkreten Anwendungsdomäne entworfen werden können, sind {{lang|en|Frameworks}} meist domänenspezifisch oder doch auf einen bestimmten Anwendungstyp beschränkt. Beispiele sind {{lang|en|Frameworks}} für grafische Editoren, Buchhaltungssysteme oder elektronische Warenhäuser im World Wide Web.
Eine allgemeingültige Definition von Frameworks gibt es aufgrund der hohen Anzahl von Diversitäten nicht.Oftmals wird der Begriff deswegen falsch angewendet, so dass beispielsweise bereits gewöhnliche Klassensammlungen fälschlicherweise als Framework deklariert werden. Dies rührt auch daher, dass der Begriff mittlerweile einen relativ hohen Stellenwert in der Informationstechnik einnimmt und durch eine fehlende absolute Definition missbräuchlich verwendet werden kann.
{{lang|en|White-Box}}- und {{lang|en|Black-Box-Frameworks}}
Die {{lang|en|Blackbox}}- und {{lang|en|Whitebox}}-Abstraktion bezieht sich auf die Sichtbarkeit einer Implementierung hinter der Schnittstelle. In einer idealen {{lang|en|Blackbox}}-Abstraktion wissen Klienten keine Details, die sich hinter der Schnittstelle und ihrer Spezifikation befinden. In einer {{lang|en|Whitebox}}-Abstraktion kann die Schnittstelle immer noch die Kapselung erzwingen und begrenzen, was die Klienten tun können, obwohl die Implementierung das Erben substanzieller Interferenzen erlaubt. Wie auch immer, die Implementierung einer {{lang|en|Whitebox}} ist vollständig vorhanden und kann deswegen studiert werden, um das Darunterliegende genauer zu verstehen, was die Abstraktion ausmacht. (Einige Autoren unterscheiden weiterhin zwischen {{lang|en|Whiteboxes}} und {{lang|en|Glassboxes}}, wobei die {{lang|en|Whitebox}} die Manipulation der Implementierung erlaubt und {{lang|en|Glassboxes}} lediglich das Studieren der Implementierung.){{Literatur |Autor=Clemens Szyperski, Dominik Gruntz, Stephan Murer |Titel= {{lang|en|Component Software. Beyond object-oriented programming}} |Auflage=2. |Verlag=Addison-Wesley |Ort=London; München |Jahr=2002 |Seiten=40f |ISBN=0-201-74572-0 }}
{{lang|en|Framework}}-Typen
{{lang|en|Frameworks}} lassen sich darüber hinaus wie folgt unterteilen (z. T. keine strikte Trennung):
; {{lang|en|Application Frameworks}}
: bilden das Programmiergerüst für eine bestimmte Klasse von Anwendungen ({{lang|en|horizontal slice}}), die Funktionen und Programmstrukturen bereitstellen, die bei allen Anwendungen dieser Klasse von Bedeutung sind.
; {{lang|en|Domain Frameworks}}
: hingegen bilden das Programmiergerüst für einen bestimmten Problembereich ({{lang|en|vertical slice}}), also Funktionen und Strukturen, die zur Lösung dieses Problembereichs typischerweise benötigt werden.
; {{lang|en|Class Frameworks}}
: fassen Klassen und Methoden zusammen, die Unterstützung auf einer bestimmten Abstraktionsebene für ein breites Anwendungsfeld bieten.
; Komponenten-{{lang|en|Frameworks}}
: abstrahieren von der objektorientierten Ebene und bieten eine Umgebung zur Entwicklung und Integration von Software-Komponenten an. Software-Komponenten werden dabei meist als Bündel von Klassen mit eindeutig definierten Schnittstellen betrachtet.
; {{lang|en|Coordination-Frameworks}}
: (wie z. B. Jini und UPnP) stellen Formen und Einrichtungen der Geräte-Interaktion zur Verfügung und dienen so in erster Linie deren nahtloser und skalierbarer Interoperabilität. Wenn beispielsweise ein „Jini-fähiger“ Drucker an ein Netzwerk angeschlossen wird, welches Jini verwendet, so kann er selbstständig anderen Geräten mitteilen, was für eine Art von Drucker dazugekommen ist – so dass andere Geräte sich jetzt dieser neuen Möglichkeit „bewusst“ sind.
; {{lang|en|Tests Frameworks}}
: dienen zur Ausführung von (automatisierten) Softwaretests, besonders im Rahmen der testgetriebenen Entwicklung. Populäre Beispiele sind JUnit für Modultests oder Selenium zum Testen von Webanwendungen.
Bekannte Frameworks
* .NET Framework von Microsoft
* ACE
* Adobe Flex
* Application Kit
* CakePHP
* Django (Framework)
* Drupal
* Eclipse Rich Client Platform
* Grails
* Hamlets
* Horde (Framework)
* JavaServer Faces
* JBoss Seam
* JHotDraw
* JUnit
* MFC – {{lang|en|Application Framework}} von Microsoft
* MooTools
* Robot Framework
* Ruby on Rails
* Selenium
* Spring (Framework)
* Struts
* Symfony
* Visual Component Library (VCL) – Komponentenbibliothek von Borland
* WoltLab Community Framework (WCF) – PHP-Framework
* YAML (Framework) CSS-Framework
Siehe auch
* Liste von Webframeworks
* Content Management Framework
* Integrierte Entwicklungsumgebung
* Komponente
* Laufzeitumgebung
* Plattform (Computer)
* Plugin
Literatur
* {{Literatur |Autor=Wolfgang Pree |Titel=Komponentenbasierte Softwareentwicklung mit Frameworks |Verlag=dpunkt |Jahr=1997 |ISBN=3-920993-68-3}}
Einzelnachweise
ar:إطار عمل (برمجة)
bn:ফ্রেমওয়ার্ক
ca:Framework
cs:Framework
da:Framework
Software framework
es:Framework
fa:چارچوب نرمافزار
fi:Ohjelmistokehys
Framework
he:שלד תוכנה
hu:Szoftverkörnyezet
id:Kerangka kerja
it:Framework
ja:ソフトウェアフレームワーク
ko:소프트웨어 프레임워크
nl:Framework
pl:Framework
pt:Framework
ru:Фреймворк
rue:Фреймворк
simple:Framework
ta:மென்பொருள் சட்டகம்
th:ซอฟต์แวร์เฟรมเวิร์ก
uk:Фреймворк
zh:軟體框架
Text und Bilder dieses Beitrags stammen aus dem Artikel Framework der freien Enzyklopädie Wikipedia und stehen unter der GNU Free Documentation License. Die Liste der Autoren ist in der Wikipedia unter dieser Seite verfügbar, der Original-Artikel lässt sich hier bearbeiten.