Ein ( für Rahmenstruktur) ist ein Programmiergerüst, das in der Softwaretechnik eingesetzt wird – insbesondere in der objektorientierten Softwareentwicklung sowie in komponentenbasierten Ansätzen.
Beschreibung Ein ist kein eigenständiges Programm, sondern stellt eine Struktur bereit, innerhalb derer Entwickler Anwendungen erstellen. Durch die im verwendeten Entwurfsmuster beeinflusst es typischerweise auch die Architektur der entstehenden Software. So unterstützen etwa die Microsoft Foundation Classes das -Muster.
Ralph E. Johnson und Brian Foote beschrieben ein Framework 1988 im Artikel Designing Reusable Classes im Journal of Object-Oriented Programming als:
Frameworks geben in der Regel die grundlegende Anwendungsarchitektur vor. Charakteristisch ist dabei die () (Umkehrung der Steuerung): Programmierer registrieren konkrete Implementierungen, die anschließend vom aufgerufen und verwaltet werden. Wird diese Registrierung nicht im Quellcode festgelegt, sondern extern konfiguriert, spricht man von .
Ein definiert insbesondere den Kontrollfluss einer Anwendung sowie die Schnittstellen, die konkrete Klassen implementieren müssen. Es dient damit der Wiederverwendung bewährter architektonischer Muster. Da solche Muster stets auf eine bestimmte Problemdomäne zugeschnitten sind, sind meist domänenspezifisch oder auf bestimmte Anwendungstypen beschränkt – etwa grafische Editoren, Buchhaltungssysteme oder Webshops.
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 umfangreiche Klassensammlungen als Framework bezeichnet.
- und
Die Unterscheidung zwischen - und -Frameworks bezieht sich auf die Sichtbarkeit und Zugänglichkeit der Implementierung hinter einer Schnittstelle.
Bei einer -Abstraktion kennen Klienten nur die Spezifikation der Schnittstelle, nicht jedoch deren interne Umsetzung. Bei einer -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 zwischen (Erweiterung möglich) und (nur Einsicht möglich).
-Typen
lassen sich – ohne strikte Abgrenzung – in folgende Kategorien einteilen:
bilden das Programmiergerüst für eine bestimmte Klasse von Anwendungen (), die grundlegende Funktionen und Programmstrukturen bereitstellen.
bilden das Programmiergerüst für einen spezifischen Problembereich (), das typische Funktionen und Strukturen dieser Domäne bündelt.
fassen Klassen und Methoden zusammen, die Unterstützung auf einer bestimmten Abstraktionsebene für ein breites Anwendungsspektrum bieten.
Komponenten- 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.
(wie Jini und UPnP) 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.
dienen zur Ausführung automatisierter Softwaretests, etwa JUnit für Modultests oder Selenium für Webanwendungen.
Webframeworks sind ausgelegt für die Entwicklung dynamischer Websites, Webanwendungen oder Webservices.
Bekannte Frameworks Aufgrund der uneinheitlichen Begriffsverwendung ist die Zuordnung einzelner Systeme nicht immer eindeutig. Beispiele sind:
.Net-Framework von Microsoft 1C:Enterprise ACE Action Request System (ARS) – Application Framework von BMC Remedy Adobe Flex Angular AngularJS Apache Spark Bootstrap Framework von Twitter Cocoa CakePHP Django (Framework) Drupal Eclipse Rich Client Platform TYPO3 Flow Grails Horde (Framework) JavaServer Faces JBoss Seam JHotDraw JUnit Laravel OpenIDE RCP Microsoft Foundation Classes Qt Robot Framework Robot Operating System 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 Yii Zend Framework
Literatur
Weblinks
Einzelnachweise
Kategorie:Softwarearchitektur