Framework




Ein Framework (englisch für Rahmenstruktur) ist ein Programmiergerüst, das in der Softwaretechnik, insbesondere im Rahmen der objektorientierten Softwareentwicklung sowie bei komponentenbasierten Entwicklungsansätzen, verwendet wird. Im allgemeineren Sinne bezeichnet man mit Framework auch einen Ordnungsrahmen.




Inhaltsverzeichnis





  • 1 Beschreibung


  • 2 White-Box- und Black-Box-Frameworks


  • 3 Framework-Typen


  • 4 Bekannte Frameworks


  • 5 Literatur


  • 6 Einzelnachweise




Beschreibung |


Ein Framework ist selbst noch kein fertiges Programm, sondern stellt den Rahmen zur Verfügung, innerhalb dessen der Programmierer eine Anwendung erstellt, wobei u. a. durch die in dem Framework verwendeten Entwurfsmuster auch die Struktur der individuellen Anwendung beeinflusst wird. Beispielsweise unterstützen die Microsoft Foundation Classes das Model-View-Controller-Muster.


So beschrieben Ralph E. Johnson und Brian Foote bereits im Jahr 1988 im Artikel Designing Reusable Classes im Journal of Object-Oriented Programming ein Framework wie folgt:


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]

Ein Framework gibt somit in der Regel die Anwendungsarchitektur vor. Dabei findet eine Umkehrung der Steuerung (Inversion of Control) statt: Der Programmierer registriert konkrete Implementierungen, die dann durch das 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 „von außen“ konfiguriert, so spricht man auch von Dependency Injection.


Ein Framework definiert insbesondere den Kontrollfluss der Anwendung und die Schnittstellen für die konkreten Klassen, die vom Programmierer erstellt und registriert werden müssen. 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 Frameworks meist domänenspezifisch oder doch auf einen bestimmten Anwendungstyp beschränkt. Beispiele sind Frameworks für grafische Editoren, Buchhaltungssysteme oder Shops 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.



White-Box- und Black-Box-Frameworks |


Die Blackbox- und Whitebox-Abstraktion bezieht sich auf die Sichtbarkeit einer Implementierung hinter der Schnittstelle. In einer idealen Blackbox-Abstraktion wissen Klienten keine Details, die sich hinter der Schnittstelle und ihrer Spezifikation befinden. In einer 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 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 Whiteboxes und Glassboxes, wobei die Whitebox die Manipulation der Implementierung erlaubt und Glassboxes lediglich das Studieren der Implementierung.)[2]



Framework-Typen |


Frameworks lassen sich darüber hinaus wie folgt unterteilen (z. T. keine strikte Trennung):


Application Frameworks

bilden das Programmiergerüst für eine bestimmte Klasse von Anwendungen (horizontal slice), die Funktionen und Programmstrukturen bereitstellen, die bei allen Anwendungen dieser Klasse von Bedeutung sind.

Domain Frameworks

hingegen bilden das Programmiergerüst für einen bestimmten Problembereich (vertical slice), also Funktionen und Strukturen, die zur Lösung dieses Problembereichs typischerweise benötigt werden.

Class Frameworks

fassen Klassen und Methoden zusammen, die Unterstützung auf einer bestimmten Abstraktionsebene für ein breites Anwendungsfeld bieten.

Komponenten-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.

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 selbstä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.

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.

Webframeworks

sind ausgelegt für die Entwicklung von dynamischen Webseiten, Webanwendungen oder Webservices.


Bekannte Frameworks |


Aufgrund der ungenauen Definition und unterschiedlichen Verwendung des Begriffes "Framework" ist die Aufnahme bzw. der Ausschluss bezüglich folgender Liste in vielen Fällen nicht eindeutig.



  • .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

  • 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 |


  • 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. 


Einzelnachweise |



  1. 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


  2. 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. 








Popular posts from this blog

Darth Vader #20

How to how show current date and time by default on contact form 7 in WordPress without taking input from user in datetimepicker

Ondo