# EUCIP Core Build

EUCIP Core Build è una delle tre aree fondamentali di EUCIP Core, la certificazione di base che consente l'accesso alla certificazione di uno dei 21+1 profili professionali individuati nel campo dell'ICT. La certificazione delle conoscenze degli argomenti EUCIP Core si ottiene superando tre esami, uno per ogni area (Plan, Build, Operate), gestiti in Italia dall'Associazione italiana per l'informatica ed il calcolo automatico (AICA). I contenuti vengono individuati dal CEPIS (Council of European Professional Informatics Societies), organismo europeo senza fini di lucro che riunisce trentasei associazioni di informatica, tra cui AICA, in rappresentanza di trentuno paesi europei.
Gli argomenti sono raccolti nel syllabus che descrive in dettaglio ciò che il candidato deve sapere per conseguire la certificazione EUCIP Core. In particolare, nell'area Build vengono raccolti tutti gli aspetti relativi alla realizzazione e al miglioramento dei sistemi informativi: il processo di sviluppo dei sistemi, la gestione delle basi di dati, la progettazione software, la cura degli aspetti grafici.

## Metodologie per lo sviluppo di sistemi

In questa parte vengono descritti gli aspetti relativi allo sviluppo di sistemi informativi.

### Software applicativo e software di sistema

Il software è l'insieme dei programmi che permettono ai componenti fisici del computer di svolgere determinati compiti. I programmi sono sequenze di istruzioni, eseguite dall'elaboratore secondo un ordine prestabilito, che producono soluzioni a determinati problemi. Si distinguono due categorie fondamentali di software: Software di sistema e Software applicativo.
Rifacendosi ad un'organizzazione a livelli, il software di sistema (software di base) si trova ad un livello basso, vicino alle risorse fisiche della macchina che li esegue, mentre il software applicativo sta ad un livello più alto, lontano dall'hardware e più vicino all'utilizzatore.
L'esempio più comune di software di sistema è il sistema operativo, che è un programma che fa funzionare i vari componenti del computer e permette all'utente di interagire con l'elaboratore.
I software applicativi realizzano funzionalità specifiche direttamente per l'utente:
* applicativi d'uso generale: elaborazioni testi, fogli elettronici ecc.
* applicativi per lo sviluppo: assemblatori, compilatori, debugger, interpreti ecc.
* applicativi gestionali: contabilità, magazzino ecc.
* applicativi d'uso professionale: progettazione CAD ecc.
* editoria e multimedialità: elaborazioni di immagini, video, audio ecc.
* applicativi per intrattenimento: giochi, player audio/video ecc.

### Principi e metodologie per lo sviluppo di sistemi

Dal punto di vista produttivo il software, come ogni prodotto commerciale, vive le varie fasi di evoluzione del suo mercato. Il suo ciclo di vita generalmente prevede le fasi di analisi, progettazione, sviluppo, verifica e validazione, rilascio, manutenzione.
Nella fase di analisi viene definito ciò che deve essere fatto specificando funzionalità e requisiti che il sistema dovrà possedere; nella fase di progettazione vengono specificate le modalità di sviluppo e la struttura che il sistema dovrà avere; lo sviluppo consiste nell'implementazione del sistema; la verifica e la validazione consentono le verifiche di conformità e di congruenza con le specifiche richieste; il rilascio consiste nella consegna e conseguente installazione del prodotto; la manutenzione prevede le modifiche successive al rilascio.
Esistono alcuni modelli di riferimento nello sviluppo del software:
* Il modello a cascata prevede la concatenazione a sequenza delle varie fasi del ciclo di vita. Ogni fase è legata alla precedente e il passaggio da una fase all'altra prevede un'attività di revisione ed approvazione alla quale partecipano gli autori dell'attività stessa e quelli dell'attività successiva (design review).
* Il modello a spirale utilizza il concetto di prototipo (sviluppo parziale del prodotto). Il prototipo viene raffinato di volta in volta con uno scambio continuo tra committente e fornitore.
* Il modello a prototipazione sfrutta, come il modello a spirale, un prototipo al fine di offrire al cliente un prodotto intermedio su cui confrontare le proprie esigenze. La differenza con il modello precedente è che il feedback non avviene di continuo, ma a date prefissate.
* Nel modello a rilasci incrementali i prototipi vengono gradualmente sostituiti con un altri con funzionalità sempre maggiori.

### Strumenti per lo sviluppo di sistemi

Per gestire le attività inerenti allo sviluppo di sistemi si ricorre spesso a strumenti software denominati CASE (Computer-Aided Software Engineering) che, attraverso varie funzionalità, supportano tutte le fasi della produzione del software.
Spesso vengono utilizzati più prodotti CASE nell'ambito di un progetto, gli upper CASE tools, che si adattano meglio alla gestione dei requisiti della progettazione, e i lower CASE tools, più adatti nelle fasi di programmazione, debugging e testing.

### Collaudo del software e del sistema

Secondo l'ANSI (American National Standards Institute) la verifica di un sistema software comprende le attività di "revisione, ispezione, collaudo, prova formale e indagine che definiscono ed attestano come gli oggetti, i processi, i servizi e i documenti siano conformi ai requisiti specificati".
La revisione è l'attività di valutazione dello stato del progetto che consente l'individuazione dei punti deboli e l'analisi delle possibili soluzioni. La rintracciabilità consente la definizione dei legami tra le varie parti del progetto e i requisiti richiesti. La prova formale serve a dimostrare da un punto di vista logico-matematica la correttezza del software. Il collaudo è il test del sistema su tutte le sue funzionalità per valutare la corrispondenza tra i risultati effettivi e quelli attesi.

### Implementazione di sistemi

L'implementazione di un sistema software richiede l'intervento di un programmatore o di un team di programmazione e prevede la traduzione in codice di linguaggio di programmazione degli algoritmi sviluppati in fase di progettazione. La codifica avviene in genere con l'ausilio di tool specifici che rendono più agevole il lavoro. Per la scrittura del codice vengono utilizzati editor di testo, il codice viene poi tradotto in linguaggio macchina attraverso i compilatori, il programma compilato viane poi testato attraverso i debugger.

### Controllo e sicurezza dei sistemi

Secondo le norme ISO, un sistema software deve assicurare "la protezione dei dati e delle risorse di calcolo in termini di integrità, riservatezza e disponibilità."
L'integrità garantisce la protezione dei dati da alterazioni accidentali o dolose, la riservatezza dovrebbe garantire la segretezza delle informazioni, la disponibilità è riferita alla messa a disposizione dell'utente autorizzato di tutte le informazioni e tutte le funzionalità alle quali è abilitato.

## Gestione dei dati e basi di dati

Con il termine basi di dati (database) si indicano in informatica gli archivi di dati, organizzati attraverso tecniche di modellazione e gestiti sulle memorie di massa dei computer attraverso applicazioni software definite database management system (DBMS).

### Dati e transazioni

Le basi di dati vengono utilizzate prevalentemente per lo sviluppo di applicazioni gestionali. I database devono essere accessibili sia in lettura che in scrittura, dunque modificabili. Il risultato dell'operazione di modifica dei dati (transazione), se va a buon fine, deve essere permanente (commit) in caso contrario deve essere garantito il ripristino dello stato precedente l'inizio della transazione (rollback).
I DBMS supportano la registrazione delle transazioni alle quali forniscono le caratteristiche riassunte nell'acronimo ACID: Atomicity Consistency Isolation Durability. L'atomicità (atomicity) è la caratteristica che rende la transazione indivisibile, cioè le consente di giungere a un completamento valido (commit/rollback); la coerenza (consistency) è assicurata dalle regole sulle modalità di aggiornamento dei dati che devono impedire errori o incongruenze; l'isolamento (isolation) evita l'accesso simultaneo agli stessi dati da parte di transazioni separate evitando situazioni di conflitto; la persistenza (durability) deve garantire la possibilità di ripristino di "stati precedenti" in caso di malfunzionamenti o guasti del sistema.

### Modelli di dati

La progettazione di DBMS viene trattata su tre livelli separati: livello fisico, livello concettuale, livello vista utente. Il livello fisico (physical level) riguarda la modalità di memorizzazione dei dati dal punto di vista fisico, il livello concettuale (conceptual level) si occupa della struttura delle informazioni e delle relazioni tra i dati, il livello vista utente (view level) riguarda le modalità attraverso le quali gli utenti accedono ai dati. Attraverso il livello concettuale gli archivi di dati vengono modellati attraverso opportuni schemi e le varie entità identificate vengono messe in relazione tra di loro secondo le necessità. Tra i modelli più diffusi nella progettazione concettuale:
* il modello E/R (entità/relazioni) individua gli oggetti che compongono la realtà da modellare (entità), gli attributi che caratterizzano le entità e le associazioni che individuano le correlazioni logiche tra le entità; è un modello per la rappresentazione concettuale dei dati ad un alto livello di astrazione;
* il modello gerarchico, definito durante la prima fase di sviluppo dei DBMS, si basa sull'uso di strutture ad albero;
* il modello reticolare, standardizzato successivamente al modello gerarchico, si basa sull'utilizzo di grafi;
* il modello relazionale consente di organizzare i dati in insiemi di record a struttura fissa, si basa sull'algebra relazionale e sulla teoria degli insiemi ed è strutturato attorno al concetto di relazione;
* il modello a oggetti rappresenta l'evoluzione del modello relazionale ed estende alla basi di dati il paradigma della OOP (Object-oriented programming).

### Data warehouse e data mining

L'esistenza di differenti database in un'unica azienda, a volte implementati con tecnologie diverse, può rendere necessario un incrocio dei dati tra i vari oggetti al fine di ricavare informazioni più dettagliate e/o integrazioni ai dati già esistenti. Le operazioni di incrocio delle varie fonti vengono dette di data wharehousing e le successive analisi dei nuovi dati data mining. Un data warehouse, quindi, è un sistema che serve a localizzare, estrarre, trasformare e caricare i dati provenienti da varie fonti. Il data mining utilizza i dati estratti con il data warehousing al fine di produrre analisi sempre più dettagliate.

### I database relazionali

Un database relazionale è costituito da più tabelle. Ogni tabella, composta da righe e colonne, rappresenta le informazioni relative a un insieme di soggetti (es. clienti, fornitori, libri, prodotti ecc.). Ogni riga (record) contiene i dati relavi a un soggetto, le colonne (campi) rappresentano le singole informazioni del soggetto. Per identificare univocamente un soggetto si utilizza un campo con caratteristiche di univocità (chiave primaria). Le tabelle possono essere poste in relazione tra di loro utilizzando i contenuti di colonne che esistono in entrambe.

### Interrogazioni e rapporti

L'interrogazione, ovvero la lettura e la gestione dei dati dei database, avviene attraverso l'algebra relazionale o il linguaggio SQL (structured query language). L'algebra relazionale, in quanto linguaggio procedurale, può necessitare di più passaggi per arrivare a un risultato; il linguaggio SQL, non procedurale, permette, in genere, con un singolo comando di ottenere il risultato atteso. Tra le varie operazioni possibili con il linguaggio SQL:
* create, drop, alter per la creazione, cancellazione e modifica delle tabelle;
* insert, delete, update per inserire, eliminare, modificare record;
* grant, revoke per assegnare o revocare privilegi agli utenti.

### Amministrazione di basi di dati

Le operazioni di gestione di un database sono affidate a uno o più amministratori del database (DBA - database administrator). Il DBA, tra le altre cose, ricopre un ruolo fondamentale nella configurazione e manutenzione del database e la configurazione dei permessi sugli accessi degli utenti.

## Programmazione
### Metodi e tecniche di progettazione software

Secondo il teorema di Jacopini e Bohm, per realizzare un programma sono sufficienti appena tre strutture: sequenza, selezione, iterazione. Nella sequenza, le istruzioni vengono eseguite una di seguito all'altra; nella selezione, un'istruzione o una sequenza di istruzioni vengono eseguite in base al verificarsi o meno di una determinata condizione; nell'iterazione, un'istruzione o una sequenza di istruzioni vengono ripetute in base al verificarsi o meno di una determinata condizione. La programmazione strutturata rispetta il teorema di Jacopini e Bohm e quando fa uso di procedure viene chiamata anche programmazione procedurale . Una procedura racchiude un insieme di istruzioni ed è individuata attraverso un nome univoco. Le procedure vengono invocate da un qualsiasi punto del programma principale o da altre procedure e, al termine dell'esecuzione delle sue istruzioni, il controllo ritorna all'istruzione successiva a quella che l'ha invocata.
L'utilizzo delle procedure, chiamate anche sottoprogrammi o subroutine, permette al programmatore di suddividere il programma in più sottoprogrammi al fine di far svolgere a questi determinate funzione visibili e richiamabili dal resto del codice.
La suddivisione del programma in più sottoprogrammi viene chiamata progettazione top-down, dove ogni sottoprogramma può essere scomposto a sua volta in altri sottoprogrammi. Lo scopo è quello di portare rapidamente alla diminuzione della complessità totale del sistema. In alternativa al modello top-down c'è la progettazione bottom-up, nella quale parti individuali del sistema sono specificate in dettaglio. Queste parti vengono poi connesse tra loro in modo da formare componenti più grandi, che vengono a loro volta interconnesse fino a realizzare un sistema completo.
Altre tipologie di tecniche di progettazione software sono: la programmazione funzionale, che fa un grande uso delle funzioni che vengono trattate come fossero valori e quindi utilizzabili come parametri per altre funzioni; la programmazione orientata agli oggetti (OOP), dove il software è composto da una serie di oggetti da usare e manipolare attraverso le funzioni che gli stessi mettono a disposizione. I costrutti fondamentali dell'OOP sono le classi e l'ereditarietà. La classe è un tipo di dato definito dall'utente caratterizzato da una serie di attributi, che ne rappresentano lo stato, e di metodi per manipolarlo. Per ogni classe possono essere effettuate delle istanze (oggetti) che poi vengono utilizzate all'interno del programma mediante i metodi che la classe stessa mette a disposizione. L'ereditarietà rende possibile derivare un tipo da una classe già esistente, variando tutte o in parte le vecchie funzionalità (overriding) o aggiungendone delle nuove.

### Strutture di dati e algoritmi

Il dato è l'entità astratta sulla quale lavorano i programmi. Per rappresentare i dati si utilizzano le variabili, cui corrispondono locazioni di memoria. Una variabile è definita tramite nome e tipo. Il nome serve a identificarla, il tipo per rappresentare l'intervallo di valori che può assumere e quali operazioni si possono effettuare su di esso. I tipi di dati possono essere semplici o strutturati.
I tipi di dati semplici sono nativi del linguaggio di programmazione e corrispondono a singoli valori. Esempi di tipi di dati semplici sono: int, float per il linguaggio C, integer, single per il linguaggio Visual Basic.
I tipi di dati strutturati (strutture di dati) sono collezioni di dati di tipo semplice. Ogni collezione è vista come unico oggetto, ma è possibile gestire ogni singolo componente. Tra le strutture di dati:
* gli array sono sequenze finite di elementi dello stesso tipo, ad ognuno dei quali viene associato un indice (posizione); il numero di indici rappresenta la dimensione dell'array; per ogni array è necessario specificare il nome, il tipo degli elementi, la dimensione; gli array possono essere a una o due dimensioni, gli array monodimensionali (vettori) contengono N+1 elementi dove N è l'indice dell'ultimo elemento e 0 è l'indice del primo, mentre gli array bidimensionali sono costituiti da N elementi, ciascuno dei quali è un array di M elementi e ogni elemento dell'array è individuato univocamente da una coppia di indici, dei quali il primo identifica la sua posizione in N e il secondo quella in M;
* il record, a differenza dell'array, permette di rappresentare strutture eterogenee, quindi di raggruppare informazioni diverse tra loro; il record è formato da un numero di campi che possono essere di tipo semplice o a loro volta strutturati;
* la lista è un insieme sequenziale di dati, ognuno dei quali contiene la propria informazione e l'indirizzo dell'elemento successivo; in coda, il puntatore all'elemento successivo è NULL.
* l'albero è una struttura gerarchica, i cui elementi vengono detti nodi; gli alberi vengono utilizzati nella gestione di grandi quantità di dati sui quali vengono effettuate molte ricerche; i nodi sono collegati tra di loro dagli archi; ogni nodo (eccetto il nodo radice) ha un unico arco entrante e più archi uscenti; un nodo che è unito ad un altro da un solo percorso è detto foglia; gli archi indicano una relazione padre-figlio; il numero dei figli di un nodo determina il grado del nodo; un albero è orientato quando è significativo l'ordine in cui sono disposti i figli di ogni nodo; un albero di ricerca binaria è un albero orientato in cui ogni nodo ha al massimo due figli e ogni nodo del sottoalbero di sinistra contiene valori minori della radice e ogni sottoalbero di destra contiene valori maggiori della radice.
Algoritmi di ordinamento Esistono varie soluzioni per l'ordinamento dei dati, ognuna delle quali presenta vantaggi e svantaggi in termini di prestazioni:
* l'algoritmo bubblesort scandice un array monodimensionale un elemento per volta, scambiando il valore con quello successivo se quest'ultimo è minore; ripete l'operazione finché non ci sono più scambi (il vettore è ordinato);
* l'algoritmo mergesort procede dividendo il vettore in due parti, ordinandole e poi unendo le parti ordinate; è un algoritmo di tipo ricorsivo e si basa sul paradigma divide et impera per il quale il vettore viene diviso sempre in parti minori che poi vengono uniti tra loro in modo ordinato;
* il Quicksort è un ottimo algoritmo di ordinamento ricorsivo che, come mergesort, si basa sul paradigma divide et impera; la base del suo funzionamento è l'utilizzo ricorsivo della procedura partition: preso un elemento da una struttura dati (es. array) si pongono gli elementi minori a sinistra rispetto a questo e gli elementi maggiori a destra.

### Tipi di linguaggi di programmazione

Dal punto di vista storico, i linguaggi di programmazione possono essere suddivisi in:
* linguaggi di prima generazione categoria alla quale appartengono i diversi linguaggi macchina che utilizzano istruzioni espresse in forma binaria o esadecimale; ogni differente microprocessore è capace di eseguire uno specifico linguaggio macchina;
* di seconda generazione in cui le istruzioni, in linguaggio assembler, sono identificate attraverso dei simboli che corrispondono a determinate istruzioni in linguaggio macchina; l'utilizzo di simboli facilita il lavoro del programmatore, ma rende necessario l'utilizzo di traduttori (assemblatori) dei simboli in linguaggio macchina;
* linguaggi di terza generazione detti anche linguaggi ad alto livello che utilizzano istruzioni con caratteristiche vicine al linguaggio umano, quindi più semplici da utilizzare; necessitano di traduttori (interprete) o compilatori. Tra questi: COBOL, FORTRAN, PASCAL, BASIC; Visual Basic, C, C++, JAVA;
* linguaggi di quarta generazione, non procedurali, spesso specifici di una determinata applicazione (SQL,RPG ecc.);
* linguaggi di quinta generazione ad altissimo livello, nati, in genere, per risolvere problemi legati all'intelligenza artificiale.

### Introduzione ai concetti della programmazione - Il linguaggio EPL

Per verificare le conoscenze di programmazione del candidato, in alcuni dei test d'esame per la certificazione EUCIP CORE, le domande vengono formulate utilizzando il linguaggio EPL.
Di seguito un breve manuale EPL. Per una chiara comprensione è richiesta la conoscenza dei principi base della programmazione.
Dichiarazione di variabili Con la dichiarazione è possibile assegnare un nome simbolico, un tipo e facoltativamente un valore iniziale ad ogni variabile. Esempi:
Operatori aritmetici
Operatori di confronto
| Simbolo | Significato | Utilizzo |
| == | uguale a | a == b |
| != | diverso da | a != b |
| < | minore | a < b |
| > | maggiore | a > b |
| <= | minore o uguale | a <= b |
| >= | maggiore o uguale | a >= b |
Operatori logici
| Simbolo | Significato | Utilizzo |
| && | AND logico | a && b |
| || | OR logico | a || b |
istruzioni e blocchi
Ogni istruzione deve finire con il carattere punto e virgola (;).
I blocchi di istruzioni (es. le istruzioni interne ad un ciclo) vanno racchiuse dentro le parentesi graffe.
Istruzioni condizionali
esempio:
Cicli
while
do...while
for
Istruzioni I/O
| printf("testo da visualizzare") | stampa il testo tra virgolette |
| printf(x) | stampa il contenuto della variabile x |
| printf(x,y) | stampa il contenuto delle variabili x e y |
| readf(x) | legge l'input (da tastiera) e assegna il valore acquisito alla variabile x |
Struttura di un programma
il programma è racchiuso in un blocco principale (main) e tutte le istruzioni sono chiuse da un punto e virgola(;)
esempio di programma che prende in input due interi, li somma e stampa il risultato
Utilizzo di procedure
L'esempio precedente con l'utilizzo di una procedura prevede la dichiarazione della variabile somma a livello globale (visibile al main e a tutte le procedure). La procedura è esterna al main.
Dopo aver preso in input a e b, il controllo passa alla procedura calcola con il passaggio di parametri (a,b). La procedura calcola assegna a n1 il valore di a e a n2 il valore di b ed effettua la somma. Alla fine il controllo ritorna al main e precisamente all'istruzione successiva alla chiamata della procedura calcola (printf(somma)).
Utilizzo di funzioni
A differenza delle procedure, le funzioni restituiscono un risultato
La presenza della variabile somma non è necessaria in questo caso. L'istruzione return indica il valore da restituire.

### Prove e collaudi (testing)

Durante le prove ed il collaudo del software vengono svolte le attività di ricerca e correzione di eventuali errori e/o incongruenze. Il risultato dovrà garantire il buon funzionamento del prodotto e soprattutto che questo soddisfi appieno le esigenze del cliente.
Viene svolta, quindi, un'attività di verifica che accerti che il programma aderisca alle specifiche stabilite in fase di progettazione e un'attività di validazione che consiste nella verifica di conformità con i requisiti espressi dal committente.
Il funzionamento non corretto di un programma è detto malfunzionamento (failure) ed è causato dalla presenza di anomalie (fault). Con errore (error o bug) viene indicata la causa di un'anomalia.
Per la correzione delle anomalie durante la fase di testing viene effettuato il debugging attraverso il quale dopo aver localizzato gli errori e aver determinato la cause si potrà provvedere alla loro eliminazione. Il debugging viene effettuato attraverso il debugger che permette l'esecuzione del programma passo passo (tracing), l'ispezione e la modifica dei valori dei dati, il controllo del flusso del programma.

## Interfaccia utente
### Interazione uomo-macchina

La trasmissione di informazioni tra due o più terminali è definita comunicazione. Le entità minime coinvolte nella comunicazione sono il mittente, il destinatario e il messaggio. Il mittente genera ed invia il messaggio e il destinatario lo riceve. L'analisi da parte di alcuni studiosi delle entità coinvolte nella comunicazione ha portato allo sviluppo di modelli diversi:
* modello Shannon e Weaver
il mittente converte il messaggio in segnale e lo invia attraverso un canale che collega mittente e destinatario. Il segnale può venire disturbato dalla presenza di rumore. L'errore generato dal rumore può venire corretto da segnali aggiuntivi;
* modello di Jakobson
il canale è lo strumento fisico attraverso il quale il mittente invia al destinatario il messaggio; la comunicazione avviene attraverso un codice (linguistico, gestuale ecc.) le cui regole devono essere condivise tra mittente e destinatario; il messaggio si riferisce a un contesto (una serie di informazioni);
* modello di Osgood e Schramm
dal modello lineare di trasmissione del messaggio di Shannon e Weaver si passa ad un modello circolare: il messaggio viene elaborato attraverso un codificatore, un interprete e un decodificatore e ciascun soggetto viene considerato un sistema completo di comunicazione dotato di abilità ricettive e trasmissive.
La comunicazione nelle reti telematiche utilizza i principi di quest'ultimo modello. I computer in rete possono comunicare grazie agli standard definiti da organismi internazionali che stabiliscono il formato dei messaggi e le regole da utilizzare durante la comunicazione (protocolli).

### Progettazione grafica

Nella trasmissione di informazioni attraverso internet, con le pagine web, assume un ruolo fondamentale il testo scritto. La leggibilità del testo dipende dal set di caratteri utilizzato, dalla dimensione, dagli altri elementi di formattazione e dalla sua impaginazione assieme agli altri elementi visivi.
I caratteri possono essere a dimensione fissa, cioè tutti i caratteri occupano la stessa dimensione (es. Courier) oppure proporzionali, cioè diversi caratteri dello stesso set possono avere dimensioni diverse (es. Garamond).
Alcuni tipi di caratteri sono serif (con grazie), cioè hanno delle rifiniture sottili alle estremità, altri sans serif (senza grazie).
La dimensione del carattere è misurata in punti, e, mentre su carta le dimensioni ottimali sono tra 10-12 punti, sul monitor sono tra i 18 e i 72 punti.
La formattazione del testo comprende anche gli effetti che danno più o meno risalto ai caratteri come il corsivo, il grassetto e il sottolineato.
Sul web l'impaginazione è affidata al linguaggio HTML (hyper text markup language) che fornisce le direttive al browser su come deve visualizzare il testo assieme agli altri oggetti che compongono la pagina.
Le immagini utilizzate nelle pagine web devono essere trattate e compresse prima con opportuni strumenti grafici. Le immagini bitmap sono rappresentate attraverso una griglia di punti (pixel) a ognuno dei quali viene associato un gradiente di colore e una posizione. Più sono i punti e più alta è la risoluzione dell'immagine.
Le immagini vettoriali sono definite tramite funzioni matematiche che descrivono le linee e i piani da cui sono composte. L'immagine in questo caso non ha problemi di risoluzione in quanto i cambi di dimensione vengono risolti modificando le variabili contenute nella sua descrizione matematica.
Tra i formati compressi bitmap, utilizzati sul web, si distinguono: TIFF, GIF, JPEG, PNG.

### Metodi e tecniche attuali

Lo sviluppo di un sito web richiede la conoscenza, almeno di base, del linguaggio HTML oltre che la disponibilità di strumenti hardware e software. La scrittura del codice HTML può avvenire con un semplice editor di testo (es. Notepad) oppure con uno strumento professionale che permette il disegno della pagina in modalità WYSIWYG (What You See Is What You Get) che genera l'HTML in automatico (es. Dreamweaver). Il trattamento delle immagini avviene attraverso programmi di grafica (es. Photoshop) e l'inserimento di filmati avviene grazie a strumenti come Adobe FLASH o Microsoft Silverlight.