Template

Da Wikipedia, l'enciclopedia libera.
Se riscontri problemi nella visualizzazione dei caratteri, clicca qui.

Il termine inglese template (ˡtemplɪt, letteralmente "sagoma" o "calco"[1]) in informatica indica un documento o programma nel quale, come in un foglio semicompilato cartaceo, su una struttura generica o standard esistono spazi temporaneamente "bianchi" da riempire successivamente. In questo ambito, la parola è traducibile in italiano come "modello", "semicompilato", "schema", "struttura base", "ossatura generale" o "scheletro", o più correntemente "modulo", anche se di solito non così elaborato e sofisticato.

Documenti elettronici[modifica | modifica sorgente]

Con il termine template si intende anche un modello di documento (es. Microsoft Office o OpenOffice.org) nel quale sono importati dati esterni con una certa frequenza. L'impaginazione (layout) della pagina rimane invariata ogni volta, facilitando la ricerca e l'archiviazione dei documenti, il confronto fra versioni ovvero un'immagine dell'azienda presso l'esterno. Lavorando con dei fogli di calcolo, il template serve non solamente come foglio di stile per l'aspetto grafico, ma contiene delle formule che rendono i documenti confrontabili nel tempo.

Web[modifica | modifica sorgente]

Nel campo delle pagine web vengono denominati template quei documenti d'esempio che vengono messi a disposizione gratuitamente o a pagamento su siti internet, per lo sviluppo di altre pagine web con grafica e formattazione identiche ma contenuti diversi. Sono uno strumento utile e potente per chi vuole:

  • creare un sito con uno stile uniforme pur non avendo molte competenze,
  • usare un codice che spesso risulta corretto se convalidato,
  • ottenere un layout 'user-friendly' e graficamente ricercato.

Spesso, nei template gratuiti, in fondo alla pagina viene inserito un collegamento al sito dell'autore, che è bene lasciare per non andare contro le licenze sotto cui sono distribuiti i template.

Solitamente vengono utilizzati i linguaggi principali del Web, l'HTML per i contenuti e il CSS per la formattazione, ma non mancano esempi in Flash.

Programmazione[modifica | modifica sorgente]

Nel gergo della programmazione informatica viene usato per definire la funzionalità del linguaggio C++ che permette di scrivere codice funzionante a prescindere dal tipo di dato che verrà effettivamente usato in esecuzione. In altre parole, i template sono il mezzo con cui il C++ supporta la programmazione generica. Tale meccanismo è presente in altri linguaggi come Java.

Mediante i template è possibile creare del codice che ha un elevato grado di riutilizzabilità, facendo risparmiare al programmatore moltissimo lavoro ridondante. Ad esempio, sarà possibile implementare una lista senza pensare minimamente al tipo di codice che essa userà effettivamente. Un altro esempio può essere una funzione che ordina degli array: in questi casi è sufficiente specificare solo le operazioni di scambio e la funzione di ordinamento desiderata (ordine crescente o decrescente).

La Standard Template Library (STL) del C++ mette a disposizione del programmatore molte utili funzionalità all'interno di una elegante struttura di template.

Ci sono due tipi di template in C++: le funzioni template e le classi template.

Funzioni[modifica | modifica sorgente]

Una funzione template si comporta come una funzione che può accettare argomenti, e fornire valori, di tipo generico. Per esempio, la Standard Template Library mette a disposizione la funzione template max(x, y) che ritorna x o y a seconda di quale sia il più grande, che potrebbe essere definita in questo modo:

template <typename T> T max(T x, T y)
{
    if (x < y)
        return y;
    else
        return x;
}

La chiamata alla funzione max non differisce da quella ad una normale funzione:

cout << max(3, 7);   // scrive 7 sull'output

Il compilatore non può tentare minimanente di intuire il tipo che in fase di esecuzione verrà effettivamente utilizzato. Anche se nel main è presente una singola chiamata max(int, int) non può certo prendere iniziative, anche perché possono essere presenti una serie di condizioni che, a seconda dei casi, possono stravolgere le chiamate. Proprio per questo motivo, le classi o le funzioni che utilizzano i template, non possono essere implementati nei file con estensione .cpp, perché il compilatore per l'appunto, non può decidere cosa accadrà in fase di esecuzione. Le implementazioni perciò devono rimanere nel file di definizione, ossia i file con estensione .h o .hpp.

In fase di esecuzione invece, il sistema esamina gli argomenti, determina che si tratta di una chiamata a max(int, int) e instanzia una versione della funzione dove il tipo int viene utilizzato al posto di T.

Questo processo funziona se gli argomenti x e y sono interi, stringhe, o qualunque altro tipo per il quale ha senso dire "x < y". Nel caso si usi un proprio tipo di dati, è necessario definire il significato di < per quel tipo (mediante ridefinizione dell'operatore <) per poter usare max(x, y).

Come controesempio, consideriamo il tipo standard complex, che non definisce l'operatore < in quanto i numeri complessi non possono essere ordinati. Dunque se scrivessimo del codice che tentasse di chiamare la funzione template max(x, y), dove x e y siano di tipo complex, otterremmo un errore di compilazione.

Classi[modifica | modifica sorgente]

Una classe template estende il medesimo concetto alle classi.

Un esempio di classe che utilizza i template può essere il seguente:

template <typename T> class Vector;
template <typename T> class Node;
 
template <typename T> class Vector
{
private:
    int __size;
    Node<T>* head;
    Node<T>* tail;
 
public:
    Vector();
    void add(T);
    int size();
    T first();
    T last();
    bool isEmpty();
};

Le implementazioni devono essere contenute nel file header. A questo punto nel main (o in qualche altro file) sarà possibile utilizzare il seguente vettore generico semplicemente specificando il tipo desiderato, nella forma seguente:

Vector<string> v1;
v1.add("esempio");
v1.add("di");
v1.add("template");
 
Vector<int> v2;
v2.add(1);
v2.add(2);
v2.add(3);

È evidente che con una sola implementazione, abbiamo attuato un modo unico di creare liste di qualsiasi tipo. Basta specificare il tipo all'interno delle parentesi angolari ed il gioco è fatto.

Note[modifica | modifica sorgente]

  1. ^ La parola ha origine come diminutivo del francese temple, dal latino templum, nel senso di "piccolo legnetto" per usi architettonici ("Template" in Collins Concise English Dictionary, 1978, ISBN 0004330463).
informatica Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica