Un framework, termine della lingua inglese che può essere tradotto come intelaiatura o struttura, in informatica e specificatamente nello sviluppo software, è un'architettura logica di supporto (spesso un'implementazione logica di un particolare design pattern) su cui un software può essere progettato e realizzato, spesso facilitandone lo sviluppo da parte del programmatore.
Caratteristiche
Un framework è definito da un insieme di classi astratte e dalle relazioni tra esse. Istanziare un framework significa fornire un'implementazione delle classi astratte. L'insieme delle classi concrete, definite ereditando il framework, eredita le relazioni tra le classi; si ottiene in questo modo un insieme di classi concrete con un insieme di relazioni tra classi.
Alla base di un framework c'è sempre una serie di librerie di codice utilizzabili in fase di linking con uno o più linguaggi di programmazione, spesso corredate da una serie di strumenti di supporto allo sviluppo del software, come ad esempio un IDE, un debugger o altri strumenti ideati per aumentare la velocità di sviluppo del prodotto finito. L'utilizzo di un framework impone dunque al programmatore una precisa metodologia di sviluppo del software.
Scopi di utilizzo
La sua funzione è quella di creare una infrastruttura generale, lasciando al programmatore il contenuto vero e proprio dell'applicazione. Lo scopo di un framework è infatti quello di risparmiare allo sviluppatore la riscrittura di codice già scritto in precedenza per compiti simili. Questa circostanza si è presentata sempre più spesso man mano che le interfacce utente sono diventate sempre più complesse, o, più in generale, man mano che è aumentata la quantità di software con funzionalità secondarie simili.
Ad esempio, il tipo di interazione con l'utente offerto da un menu a tendina sarà sempre la stessa indipendentemente dall'applicazione cui il menu appartiene (o almeno questo è ciò che l'utente si aspetta); in casi come questo un framework, che permette di aggiungere la funzionalità di una finestra con un menu a tendina con poche righe di codice sorgente a carico del programmatore, o magari permettendogli di disegnare comodamente il tutto in un ambiente di sviluppo, permetterà al programmatore di concentrarsi sulle vere funzionalità dell'applicazione, senza doversi far carico di scrivere codice "di contorno".
Relazione con le librerie di run-time
Un framework può essere visto come (e in alcuni casi è) un sovrainsieme o un'aggiunta alle librerie di run-time di un linguaggio. Per fare qualche esempio:
- Il C++ ha, oltre alla libreria standard C++, un proprio framework non grafico, la Standard Template Library (STL); tuttavia, esistono numerosi framework che estendono o, in parte, sostituiscono la STL, tra cui l'Active Template Library (ATL) e le Microsoft Foundation Classes (MFC) di Microsoft, Qt di Digia, e wxWidgets. Microsoft ha inoltre sviluppato un'implementazione del C++ (ora standard dell'ECMA: C++/CLI) che si appoggia integralmente al Framework .NET.
- Anche il C ha una propria libreria di run-time, la libreria standard del C, nota anche come libc (in ambiente Unix) o CRT (in ambiente Microsoft, da C Run-Time); tuttavia vi sono parecchi framework per il C, fra cui il GIMP Toolkit (GTK).
- Per il linguaggio C#, che non ha una propria libreria di run-time, il Framework .NET svolge anche questa funzione. Lo stesso vale per Visual Basic .NET, che è stato concepito in maniera analoga.
- Tutto il software scritto in Delphi di Borland si appoggia sulla Visual Component Library (VCL), sempre di Borland; questa libreria di fatto è un framework, poiché si prende carico di una gran quantità di servizi software non essenziali (tra i quali, appunto, la gestione dell'interfaccia grafica). Come Microsoft con il C++, anche Borland ha realizzato una versione di Delphi che si appoggia al Framework .NET .
- Sono per Java i framework Cocoon e Struts di Apache, tutti e due orientati allo sviluppo di applicazioni per Internet.
- Programmando in PHP è possibile fare uso di prodotti quali Symfony, Zend Framework, yii, Seagull, Jamp, CodeIgniter o molti altri.
- In Perl esiste il framework Catalyst, nel quale il codice viene generato a partire dallo schema di un database sottostante.
- Programmando in RPG è possibile fare uso di prodotti quali Jeniux framework, WebFacing, GUI/400 e molti altri.
- In Python esiste il framework Twisted che utilizza il paradigma di programmazione orientato agli eventi per lo sviluppo di applicazioni Internet.
Utilizzi
A volte si utilizzano framework proprietari progettati ex-novo oppure che estendono framework già esistenti; trattandosi di fatto di importazione di librerie è anche possibile combinare più framework, ciascuno utilizzato per diverse parti dell'applicazione da realizzare.