Framework albo platforma programistyczna – szkielet do budowy aplikacji. Definiuje on strukturę aplikacji oraz ogólny mechanizm jej działania, a także dostarcza zestaw komponentów i bibliotek ogólnego przeznaczenia do wykonywania określonych zadań. Programista tworzy aplikację, rozbudowując i dostosowując poszczególne komponenty do wymagań realizowanego projektu, tworząc w ten sposób gotową aplikację.
Frameworki bywają nieściśle zaliczane do bibliotek programistycznych. Typowe cechy, które każą wyróżniać je jako samodzielną kategorię oprogramowania, to:
odwrócenie sterowania – w odróżnieniu od aplikacji oraz bibliotek, przepływ sterowania jest narzucany przez framework, a nie przez użytkownika.
domyślne zachowanie – domyślna konfiguracja frameworka musi być użyteczna i dawać sensowny wynik, zamiast być zbiorem pustych operacji do nadpisania przez programistę.
rozszerzalność – poszczególne komponenty frameworka powinny być rozszerzalne przez programistę, jeśli ten chce rozbudować je o niezbędne mu dodatkowe funkcje.
zamknięta struktura wewnętrzna – programista może rozbudowywać framework, ale nie poprzez modyfikację domyślnego kodu.
Architektura
Według Pree framework składa się z zamrożonych i gorących punktów. Zimne punkty definiują ogólną architekturę konkretnego typu oprogramowania, tj. zestaw podstawowych komponentów oraz zależności między nimi. Pozostają one niezmienne (zamrożone) we wszystkich aplikacjach zbudowanych w oparciu o konkretny framework. Gorące punkty reprezentują te części, które programista rozszerza, dodając własne cechy specyficzne dla konkretnego projektu.
Zgodnie z zasadą odwrócenia sterowania, to gorące punkty osadzone są we frameworku, a nie na odwrót. Wykorzystywana jest tutaj tzw. „reguła Hollywood”: nie dzwoń do nas, my zadzwonimy do Ciebie. Klasy i komponenty użytkownika otrzymują sygnały od frameworka, który zarządza wykonywaniem aplikacji.
Zalety i wady
Zalety:
efektywność – tworzenie aplikacji z wykorzystaniem frameworków wymaga od programisty mniejszej ilości kodu do napisania,
poprawa jakości kodu – ponieważ frameworki są projektowane z myślą o elastyczności, mają one dobrą wewnętrzną organizację i logikę, którą narzucają aplikacji,
niezawodność – frameworki jako szkielety aplikacji są dobrze zaprojektowane i przetestowane.
Wady:
złożoność – ze względu na swoją elastyczność oraz wykorzystywanie zaawansowanych koncepcji, opanowanie frameworków nie jest łatwe,
wydajność – często ceną za elastyczną budowę jest niższa wydajność tworzonego oprogramowania.
Zastosowania
Frameworki są stosowane zarówno jako szkielety kompletnych aplikacji, jak i pojedynczych komponentów. Obszary zastosowań frameworków:
↑WPree.Meta Patterns-A Means For Capturing the Essentials of Reusable Object-Oriented Design.„Proceedings of the 8th European Conference on Object-Oriented Programming”,s.150-167,1994.
↑CraigLarman:Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and the Unified Process.Prentice Hall,2001. ISBN0-13-092569-1.(ang.).
↑Johnson, R E,McConnell, C,Lake, M J,Giegerich, Ri inni.The RTL system: a framework for code optimization.„Proceedings of the International workshop on code generation”,s.255-274.Springer-Verlag.
↑Birrer, A,Eggenschwiler, T:Frameworks in the financial engineering domain: an experience report.Springer-Verlag,1993,s.21-35.
↑Hill, C,DeLuca, C,Balaji, V,Suarez, Mi inni.Architecture of the Earth System Modeling Framework (ESMF).„Computing in Science and Engineering”,s.18-27,2004.
↑Gachet, A.Software Frameworks for Developing Decision Support Systems – A New Component in the Classification of DSS Development Tools.„Journal of Decision Systems”.12(3),s.271-281,2003.