SWT 2014-2015 Appunti lezione 1

Sistemi Web per il Turismo/ PGST/ 2014-2015
Mario Verdicchio/
Appunti dalla lezione 1/
Per inquadrare il contesto del corso, iniziamo ad analizzare i termini che ne costituiscono il
titolo.
Il concetto di “sistema” non è facile da spiegare in termini più semplici, in quanto è un
concetto primitivo, come “insieme” oppure “oggetto”, che indica le idee più fondamentali
con cui ci esprimiamo e costruiamo concetti più complessi. Possiamo comunque fare un
tentativo.
Sistema: un’entità che distinguiamo dall’ambiente circostante, da cui riceve
un flusso di qualunque genere (chiamato input), che viene trasformato e
restituito all’ambiente (sotto forma di output).
Questa definizione è talmente generale da poter essere applicata a quasi qualunque
entità: di fatto quasi ogni oggetto esistente (noi compresi) può essere visto come ricevere
un input dall’ambiente circostante (nel nostro caso: aria, cibo, stimoli visivi, udtivi, tattili,
etc.) e restituire un output (sempre nel nostro caso: aria espirata, movimento, espressioni
vocali, etc.)
Prendiamo un esempio più vicino al contesto del turismo: un aeroplano. Quali sono l’input
di un aeroplano? Quali sono gli output corrispondenti?
Da un punto di vista strettamente materiale, potremmo vedere l’aeroplano come una
macchina che riceve carburante in input ed emette gas esausti in output. Inoltre, persone e
valigie entrano nel sistema in un luogo (ad es. l’aeroporto di Orio al Serio) ed escono da
esso in un luogo diverso (ad es. l’aeroporto di Praga). Dal momento che le persone che
sono volate a Praga hanno acquistato un biglietto per usufruire di questo servizio,
possiamo vedere l’aeroplano come un sistema che riceve denaro in input e fornisce un
servizio di trasporto in output. E’ ovvio che stiamo operando da una prospettiva diversa da
quella del carburante e dei gas esausti: l’aereo non “riceve” denaro allo stesso modo in cui
riceve carburante.
Questo semplice esempio ci fa capire che un sistema può essere analizzato su diversi
livelli di astrazione, dove per livello basso di astrazione intendiamo una prospettiva in cui
si prendono in considerazione i componenti più concreti e materiali di un sistema (come ad
es. il carburante per un aeroplano) e per livello alto di astrazione intendiamo il punto di
vista di un’analisi che verte su concetti, appunto, più astratti (come ad es. il denaro o i
servizi di trasporto).
Alcuni sistemi si comportano in maniera talmente regolare che la trasformazione che
applicano all’input per ottenere l’output può essere vista come una funzione. Ricordiamo
la definizione del concetto di funzione.
Funzione: corrispondenza tra due insiemi che fa corrispondere a ogni
elemento del primo insieme (chiamato dominio) uno e un solo elemento del
secondo insieme (chiamatao codominio).
Da questo punto di vista, potremmo vedere l’insieme di tutti i possibili input come dominio
e l’insieme di tutti i possibili output come codominio di una funzione che descrive il
comportamento di un sistema.
Dal momento che nel contesto di questo corso siamo interessati ai sistemi Web, ci
chiediamo quale tipo di funzione descrive il comportamento di tali sistemi.
Un sistema si dice automatico quando funziona senza l’intervento umano.
Un sistema si dice informativo quando i suoi input e output consistono di dati e
informazioni.
I sistemi Web sono sia automatici, sia informativi, ovvero sono sistemi informatici,
rientrano nel contesto della disciplina dell’informatica.
Il termine “informatica” deriva dalla fusione di due parole:
• informazione, e
• automatica.
Nel contesto di questa disciplina per “informazione” non intendiamo l’insieme di notizie che
otteniamo per mezzo dei cosidetti “organi di informazione” (come agenzie giornalistiche,
uffici stampa, giornali, telegiornali, etc.), ma qualcosa di molto più semplice: per
“informazione” intendiamo un insieme di dati, dove un “dato” è un insieme di simboli
organizzati in maniera strutturata. Ad esempio, la prima riga di questo documento riporta
un dato. Attenzione: un dato esiste indipendentemente dal significato che gli attribuiamo. Il
fatto che “Sistemi” abbia un certo significato per chi legge non è determinante per il dato
costituito dalla sequenza di simboli “S”, “i”, “s”, “t”,…e così via,
Possiamo definire l’informatica allora come segue:
Informatica: la disciplina che si occupa dell’elaborazione automatica
dell’informazione, intesa come insieme di dati (sequenze strutturate di
simboli).
Un sistema informatico è, quindi, un sistema che riceve dati in input, li elabora, e li
restituisce in output ed è in grado in operare in maniera automatica, senza l’intervento
umano. Naturalmente l’intervento umano è comunque necessario per costruire il sistema e
impostarne il funzionamento. Inoltre, i dati elaborati dal sistema non hanno alcun
significato se non quello attribuito loro dagli essere umani che li interpretano.
Vedremo più avanti come il Web si inserisca nel contesto più generale dell’informatica. Per
il momento concentriamoci su quale tipo di servizio può essere offerto da un sistema
informatico.
Iniziamo da qualche definizione fondamentale:
Problema: un ostacolo, un impedimento, una mancanza che si desidera
eliminare.
Soluzione: l’insieme delle operazioni che permette l’eliminazione di un
problema.
Lavorare nel contesto dell’informatica vuol dire cercare soluzioni fornite come output di un
sistema informatico. Date le caratteristiche particolari dei sistemi informatici, non tutti i
problemi sono risolvibili da loro, ma un sottoinsieme speciale: dobbiamo escludere tutti
quei problemi che richiedono risorse non compaibili col funzionamento di un sistema
informatico, come il buon senso, la comprensione del significato delle parole, l’intuito,
l’istinto, le scelte a caso, i colpi di fortuna (tutte caratteristiche tipiche delle azioni umane).
Dal momento che un sistema informatico elabora dati, dobbiamo escludere anche tutti
quei problemi che includono input di natura diversa: ad esempio un sistema informatico
non può risolvere il problema di trasformare gli ingredienti di una pizza in una pizza –
dobbiamo limitarci a problemi di elaborazione di dati.
Inoltre, dal momento che un sistema informatico è un sistema automatico, tutte le
operazioni da eseguire devono essere specificate prima dell’inizio dell’esecuzione: poiché
l’intervento umano in corso di esecuzione è escluso e improvvisazioni e scelte non sono
possibili, tutto quello che deve essere eseguito deve essere pre-determinato. Il massimo di
“indeterminatezza” che possiamo ammettere è che il sistema informatico a un certo punto
dell’esecuzione controlli delle particolari condizioni al suo interno e, a seconda del risultato
di tale controllo, esegua una certa operazione piuttosto che un’altra (tutte le possibililtà
devono essere comunque pre-determinate: il sistema non può affrontare degli imprevisti).
Considerate tutte queste restrizioni, date dalla natura stessa dei sistemi informatici,
possiamo definire il tipo di soluzione che un sistema informatico è in grado di fornire:
l’algoritmo.
Algoritmo: soluzione che è dotata delle seguenti caratteristiche
• consta di una sequenza finita di operazioni (finitezza),
• che sono ben definite (chiarezza),
• e eseguibili dal sistema (eseguibilità)
• in maniera predeterminata, senza scelte umane o interventi del caso
(determinismo).
Di fatto, i problemi risolvibili con un sistema informatico sono proprio quelli che si possono
risovere mendiante un algoritmo.
L’esempio concreto più comune di sistema informatico è il computer, ma qualunque
dispositivo che elabori dati in maniera automatica rientra nella categoria: uno smartphone,
un tablet, un navigatore satellitare, un orologio digitale, etc.
Tutti i sistemi informatici attuali hanno una caratteristica in comune: sono costituiti da
circuiti elettronici che, stimolati da impulsi elettrici, rispondono con altri impulsi elettrici, in
funzione dell’input.
Riprendendo il discorso dei livelli di astrazione, ciò che a basso livello (quello dei fenomeni
naturali) è un impulso elettrico può essere interpretato a un livello di astrazione superiore
come dato. In particolare, tale intepretazione si basa su un concetto fondamentale in
informatica: quello di codifica.
Codifica: corrispondenza biunivoca tra un insieme qualisiasi di elementi e un
sottoinsieme dei numeri naturali.
Per fare un esempio che riguarda il lettore, gli stessi studenti di UniBG sono stati oggetto
di una codifica all’atto dell’iscrizione per mezzo della matricola che è stata loro assegnata:
ogni studente ha una sola matricola e nessun altro studente ha la sua stessa matricola.
Che cosa c’entrano le codifiche con gli impulsi elettrici all’interno dei circuiti elettronici dei
sistemi informatici?
La codifica su cui si basano i sistemi informatici costituiti da circuiti elettronici è la
seguente:
• i circuiti elettronici non sono costruiti per ricevere impulsi elettrici a caso: perché
funzionino correttamente, essi devono ricevere in input impulsi che variano tra due
specifici valori di tensione: uno basso e uno alto (per i sistemi attuali tali valori sono
0 Volt e 5 Volt rispettivamente, ma questo è un dettaglio tecnologico che potrebbe
cambiare in futuro senza modificare il funzionamento di questi sistemi)
• i circuiti elettronici restituiscono in output gli impulsi elettrici che si ottengono
applicando agli impulsi in input le trasformazioni necessarie, per le quali i circuiti
sono stati costruiti; anche gli impulsi elettrici in output sono compresi tra i valori
basso e alto di tensione
• la codifica vera e propria, ossia la corrispondenza coi numeri naturali, è questa: al
valore di tensione bassa corrisponde il numero 0 e al valore di tensione alta
corrisponde il numero 1
Se teniamo in mente questa corrispondenza, allora possiamo interpretare il funzionamento
del circuito elettronico in maniera più interessante per l’informatica: non stiamo più
osservando impulsi elettrici che entrano in un sistema e vengono trasformati in altri impulsi
che vengono mandati in output, bensì una sequenza di 0 e 1 (a seconda dei valori di
tensione presenti) che viene trasformata in un’altra sequenza di 0 e 1 in uscita dal sistema.
Nasce spontanea una domanda:
“I sistemi informatici sono sistemi che elaborano esclusivamente sequenze di 0 e 1?”
La risposta è sì, ma sarebbe semplicistico fermarsi qui. Tramite la cosiddetta “codifica
binaria”, le sequenze di 0 e 1 possono essere trasformate in sequenze di cifre da 0 a 9,
ossia in numeri nel sistema decimale come siamo abituati ad usarli, e viceversa. Nel
seguente modo.
Un sistema numerico è un sistema con cui fare riferimento, per mezzo di cifre, a
determinate quantità. Ogni sistema numerico ha una base: la base del sistema numerico
che siamo abituati ad utilizzare è il 10, e infatti tutte le quantità che esprimiamo con le cifre
che vanno da 0 a 9 sono basate sulle potenze di dieci (unità, decine, centinaia, migliaia,
etc…) Ad esempio: quando scriviamo 253 (duecentocinquantatré) intendiamo appunto due
centinaia, cinque decine e tre unità
253 = 2 x 102 + 5 x 101 + 3 x 100
Un sistema numerico con base diversa, ad esempio 2, funziona allo stesso modo, solo
che le potenze hanno, appunto, una base diversa. La cifra 10111 in base 2 vuole dire
10111 = 1 x 24 + 0 x 23 + 1 x 22 + 1 x 21 + 1 x 20
Se fate la somma delle potenze di 2 capite che 10111 (in base 2) indica quella quantità
che noi siamo soliti indicare con 23 (in base 10).
Da notare che se un sistema numerico ha base n, si usano le cifre da 0 a n-1: il sistema in
base 10 ha 10 cifre (da 0 a 9) e quello in base 2 ha 2 cifre (0 e 1).
Per non lasciare ambiguità possiamo usare un pedice per indicare la base del sistema
numerico usato: 101112, 25310.
In questo modo 101112 è un numero del sistema binario (quello con base 2) che indica la
quantità che siamo soliti chiamare ventitré, ben distinto da 1011110, che è
diecimilacentoundici.
Con la trasformazione sopradescritta possiamo interpretare ogni sequenza binaria come
un numero del sistema decimale a cui siamo più abituati, quindi un circuito elettronico che
applica trasformazioni a sequenze di 0 e 1 può essere visto come un circuito elettronico
che applica trasformazioni a numeri per ottenere risultati numerici.
Questo è il punto fondamentale dei sistemi informatici costruiti sotto forma di circuiti
elettronici.
I circuiti elettronici che costituiscono i sistemi informatici sono costruiti in
modo che le trasformazioni che applicano sulle sequenze binarie in input
corrispondono all’esecuzione di operazioni aritmetiche, cosicché l’output
corrisponde al risultato di tali operazioni.
In altre parole, i sistemi informatici non sono altro che versioni molto sofisticate e versatili
di calcolatrici. Non a caso, un computer si chiama in questo modo: è un calcolatore –
uno strumento per eseguire calcoli.