1) computer Flashcards
Cos’è un computer oggi?
Cos’era nel 17° secolo?
Un computer è un qualsiasi agente (ovvero, quell’entità in grado di agire se istruita appropriatamente, come una persona o una macchina) che sia in grado di fare calcoli e produrre una risposta (detta output) a partire da qualche informazione iniziale (detta input).
Nel 17° secolo un computer era chiunque eseguisse calcoli matematici.
Le 4 soluzioni al problema dei calcoli lunghi:
- Babbage (1822) sviluppa una macchina in grado di sostituire l’uomo nell’effettuare alcuni calcoli, la Macchina Differenziale (solo un prototipo parziale).
- Tuttavia, la Macchina Differenziale non era programmabile e, di conseguenza, era in grado di fare solo alcuni calcoli (utilizzare solo un numero limitato di operazioni sull’input ricevuto).
Babbage (1837) progetta la Macchina Analitica (nessun prototipo, solo disegni del progetto): essa era programmabile tramite schede perforate ed è considerato il primo computer general purpose. - Cent’anni dopo:
Electronic Numerical Integrator and Computer (ENIAC, 1946): il primo computer interamente digitale (processa le informazioni e le trasforma in un sistema binario»_space; digitalizza le informazioni), sviluppato negli Stati Uniti d’America.
completamente programmabile attraverso l’uso di cavi e interruttori
punto fisso nel tempo da cui tutti i moderni computer sono poi stati creati - La ‘Bomba’ (1940), sviluppata da Alan Turing, è stata il principale strumento che ha permesso a un gruppo di persone, rinchiuse nella base militare segreta britannica di Bletchley Park, di decifrare (grazie anche al lavoro pregresso fatto da crittologi polacchi come Marian Rejewski) le comunicazioni tedesche che erano state cifrate dalla macchina Enigma.
‘scrivere un programma’:
comunicare ad un computer elettronico utilizzando un linguaggio (in questo caso formale) che sia l’istruttore umano sia il computer stesso possano comprendere
definizione di ‘pensiero computazionale’:
approccio per risolvere problemi, sviluppare sistemi e capire il comportamento umano che riprende i concetti fondamentali della computazione (= calcolo).
Definisce i processi mentali che coinvolgiamo quando formuliamo un certo problema ed esprimiamo le relative soluzioni usando un linguaggio che un computer (sia esso umano o macchina) può comprendere e, conseguentemente, eseguire
definizione di ‘astrazione’:
processo di rimozione dei dettagli trascurabili di una situazione in modo da semplificarla, per così focalizzare l’attenzione sulle sue caratteristiche principali.
Usiamo queste astrazioni in modo intenzionale o inconscio nella vita quotidiana.
obiettivi del pensiero computazionale:
- Dare nuovamente forma alle astrazioni che abbiamo già immagazzinato in passato come conseguenza della nostra esperienza personale – e che, spesso, riutilizziamo inconsciamente.
- Essere nuovamente e interamente coscienti di queste astrazioni significa doverle ridefinire usando un linguaggio appropriato per renderle comprensibili a un computer.
- Obiettivo principale (dell’insegnamento) del pensiero computazionale: permettere alle persone di pensare come se fossero computer scientist, anche quando bisogna affrontare attività del quotidiano.
organizzare l’informazione al fine dell’astrazione:
Organizzare l’informazione fa parte del processo di astrazione il descrivere l’informazione presente in una certa situazione secondo un’organizzazione generica e riutilizzabile in più contesti.
Si usano quelle che comunemente sono chiamate strutture dati.
‘strutture dati’:
struttura dati: una sorta di contenitore dove possiamo posizionare alcune informazioni, e che fornisce dei metodi specifici per aggiungere e richiedere pezzi di questa informazione
Tipologie di strutture dati: liste, code, pile, insiemi, dizionari, alberi e grafi.
Queste strutture hanno determinate caratteristiche per scelta di design a seguito di analisi per scegliere le strutture data più efficienti per i programmatori.
strutture dati: ‘lista’, ‘pila’, ‘coda’, ‘insieme’, ‘dizionario’, ‘albero’, ‘grafo’.
- Lista: sequenza di elementi ordinati e potenzialmente ripetibili che si possono contare, perché si può sapere quanti elementi essa contiene in un dato momento. Gli elementi possono essere aggiunti e rimossi senza regole particolari.
- Pila: Una lista particolare, poiché le operazioni di aggiunta e rimozione seguono una strategia fissa, ‘last in first out’ (LIFO»_space; il primo che arriva è il primo a cui posso accedere).
- Coda: una lista particolare vista da un’altra prospettiva e con uno specifico insieme di operazioni che possono essere effettuate sugli elementi che contiene. Le operazioni di aggiunta e rimozione seguono una strategia first in first out (FIFO).
- Insieme: una collezione di elementi non ordinati e non ripetibili che si possono contare.
- Dizionario: una collezione non ordinata di elementi definiti da coppie chiave-valore che si possono contare, dove la chiave non è ripetibile.
-
Albero: una struttura dati composta da un insieme di nodi collegati tra loro da una relazione gerarchica genitore-figlio.
Qui vi è una relazione fra gli elementi contenuti nella struttura dati! - Grafo: un insieme di nodi di una rete collegati da archi (che possono essere orientati). Usati per descrivere, in termini astratti, molte situazioni del mondo reale: tragitti tra città, relazioni tra persone nei social network, l’organizzazione dei collegamenti ipertestuali tra pagine Web e le relazioni concettuali nelle basi di dati.
‘algoritmo’:
un algoritmo è un’astrazione di una procedura (procedura = una sequenza di istruzioni) passo passo che prende qualcosa come input e produce un certo output, scritta in un linguaggio specifico in modo che le istruzioni che definisce possano essere comunicate e comprese da un computer in modo da ottenere qualcosa come conseguenza dell’elaborazione di qualche materiale di input.
‘programmatore’:
Un programmatore è una persona che crea algoritmi e li specifica in programmi usando uno specifico linguaggio comprensibile dal computer (elettronico).
Ada Lovelace e la ‘Macchina differenziale’:
Ada Lovelace era una matematica inglese.
Partecipò nel 1833 ad una festa organizzata da Charles Babbage per presentare la Macchina Differenziale, e ne fu così colpita che iniziò una corrispondenza epistolare con lui che durò 27 anni.
Fu la traduttrice in inglese del primissimo articolo sulla Macchina Analitica scritto da Luigi Federico Menabrea, e che lei stessa arricchì con un grande numero di annotazioni personali e riflessioni.
Tra le varie annotazioni che Ada aggiunse al testo, c’era anche una descrizione di come usare la Macchina Analitica per calcolare i numeri di Bernoulli.
Questo è riconosciuto come il primo programma della storia dei computer, creato senza avere a disposizione la macchina reale, visto che la Macchina Analitica era soltanto teorica, che di fatto fa di Ada la prima programmatrice della storia.
“[La Macchina Analitica] potrebbe operare su altre cose oltre ai numeri, se si trovassero oggetti le cui relazioni fondamentali possano essere espresse da quelle della scienza astratta delle operazioni”
Scienza astratta delle operazioni = informatica.
Che linguaggio usare per definire un algoritmo?
Non esiste un linguaggio standard per descrivere un algoritmo in modo che possa essere immediatamente comprensibile da un qualunque computer.
Di solito si usa uno pseudocodice, ovvero un linguaggio informale per descrivere i passi principali di un algoritmo ad un umano, anche se non è direttamente eseguibile da un computer elettronico – anche se i suoi costrutti sono strettamente connessi con quelli tipicamente definiti nei linguaggi di programmazione.
Un esempio di pseudocodice: i diagrammi di flusso (diagramma di flusso: descrive il flusso di istruzioni che l’algoritmo deve seguire.)
oggetti grafici di un diagramma di flusso: linea/freccia, terminale, processo, decisionale, input/output:
- linea di flusso: la freccia è usata per definire l’ordine in cui le operazioni sono eseguite.
- terminale (cerchio): viene usato per indicare l’inizio e la fine di un algoritmo.
- processo (rettangolo): viene usato per esprimere un’istruzione che è eseguita e che può cambiare lo stato corrente di qualche variabile usata nell’algoritmo.
- decisionale (rombo): permette di esprimere operazioni condizionali, dove una condizione è verificata e, a seconda del valore di alcune variabili usate nell’algoritmo, l’esecuzione continua in un particolare ramo del flusso invece che in un altro.
Di solito questa operazione crea due possibili rami: un seguito se la condizione è vera, e un altro che viene seguito quando la condizione è falsa. - input/output (rettangolo obliquo): permette di specificare un possibile input o output che viene usato o restituito dall’algoritmo solitamente all’inizio o alla fine della sua esecuzione.
il paradosso del pensiero computazionale e ‘reductio ad absurdum’:
Tre domande chiave del pensiero computazionale:
1. Possiamo usare gli algoritmi per computare qualsiasi cosa vogliamo? Possiamo generare qualsiasi tipo di informazione?
2. Esiste un limite a quello che possiamo computare?
3. È possibile definire un problema computazionale – ovvero un problema che può essere risolto algoritmicamente da un computer – che non può essere risolto da nessun algoritmo?
Definizione paradosso: data una situazione che descrive un particolare problema, qualunque strada che si intraprende per trovare la soluzione del suddetto problema porta ad una contraddizione.
Uno degli approcci più usati per dimostrare che qualcosa non esiste è quello di costruire una situazione in apparenza plausibile che, poi, si rivela paradossale e auto-contraddittoria – in cui, per esempio, l’esistenza di un algoritmo contraddice se stessa.
Questo approccio dimostrativo porta il nome di ‘reductio ad absurdum’ (dimostrazione per assurdo): stabilire che una situazione è contraddittoria cercando di derivare un’assurdità dalla sua negazione, in modo da dimostrare che una tesi deve essere accettata perché la sua negazione non può essere difesa e, alla fine, genera un paradosso.
il problema della terminazione: la ‘macchina teorica’ di Turing:
Per dimostrare che non è possibile usare un algoritmo per definire qualsiasi cosa, il matematico Hilbert dimostra che non è possibile sviluppare un algoritmo che fosse in grado di dirci se un altro algoritmo, specificato come input, terminasse la sua esecuzione o no.
Turing sviluppò la sua macchina teorica (1936) proprio per rispondere al problema della terminazione di Hilbert.
La macchina è in grado di simulare l’esecuzione di qualunque algoritmo realmente implementabile.
Approssimazione della soluzione di Turing:
Premessa: supponiamo sia possibile sviluppare l’algoritmo “termina?”, che prende in input un certo algoritmo e restituisce “vero” nel caso in cui l’algoritmo specificato come input termina, mentre restituisce “falso” in caso contrario
NB: è soltanto un algoritmo ipotetico, stiamo supponendo che possiamo svilupparlo in qualche modo, senza mostrare come farlo davvero.
Usiamo questo algoritmo per crearne un altro.
Caso 1: se l’algoritmo “termina?” afferma che il nuovo algoritmo termina, conseguentemente (per come è definito) il nuovo algoritmo non termina l’esecuzione.
Caso 2: se l’algoritmo “termina?” afferma che il nuovo algoritmo non termina, e conseguentemente (per come è definito) il nuovo algoritmo restituisce 0 e termina l’esecuzione.
Paradosso: l’algoritmo che verifica se un altro termina non può esistere.
Questo risultato ha avuto un effetto dirompente sulla percezione delle abilità computazionali che un computer può avere.
La macchina di Turing e le relative analisi effettuate su di essa hanno imposto dei limiti chiarissimi a quello che possiamo calcolare, e hanno permesso di dimostrare che determinati problemi computazionali interessanti, come quello della terminazione, non possono essere risolti da nessun approccio algoritmico.
Tutto questo è stato possibile solo grazie all’applicazione di un pensiero computazionale esclusivamente astratto, considerando che la macchina di Turing è solo uno strumento prettamente teorico.
i linguaggi formali:
I linguaggi naturali non sono formali per definizione, tuttavia molti studi in linguistica cercano di fornirne una formalizzazione mediante l’uso di strumenti matematici-
Chomsky è uno dei padri della linguistica moderna – le cui ipotesi di ricerca principali sul linguaggio umano sono:
* la sua struttura sintattica di base è rappresentabile mediante una teoria matematica
* tale struttura è determinata biologicamente in tutti gli umani.
Un linguaggio formale possiamo pensarlo come un insieme di frasi.
Una grammatica formale permette di generare un linguaggio ed è definita da 4 elementi:
1. un insieme di regole di produzione,
2. simboli terminali
3. simboli non-terminali
4. simbolo iniziale
Un insieme di regole di produzione di forma “premessa ::= espressione”, dove la premessa e l’espressione possono contenere uno o più:
* simboli terminali (specificati tra virgolette), che identificano tutti i simboli elementari del linguaggio in considerazione (come nomi, verbi, etc.)
* simboli non terminali (specificati tra parentesi angolari), che identificano tutti i simboli di una grammatica formale che possono essere sostituiti da una combinazione di simboli terminali e non terminali.
Esempio:
<frase> ::= "Io" <verbo>
<verbo> ::= "scrivo" | "leggo"
Il simbolo non terminale <frase> è il simbolo iniziale.
Frasi che possiamo produrre da questa grammatica:
-Io scrivo
-Io leggo
</frase></verbo></verbo></frase>
le grammatiche formali e la ‘gerarchia di Chomsky’:
Chomsky ha proposto una gerarchia (gerarchia di Chomsky) per descrivere formalmente le relazioni che possono esistere tra diverse grammatiche in termini delle loro possibili strutture sintattiche che sono in grado di generare. Sono ordinate dalla meno espressiva alla più espressiva
Queste tipologie sono caratterizzate dal tipo di simboli che possono essere usati nella premessa e nell’espressione delle regole di produzione (lettere greche usate per indicare una combinazione di simboli terminali e/o non terminali):
1. grammatiche regolari – <nt> ::= "t" | "t" <nt>
2. grammatiche libere dal contesto – <nt> ::= γ
3. grammatiche dipendenti dal contesto – α <nt> β ::= α γ β (viene mantenuto lo stesso contesto (in questo caso α e β) in cui si trova il simbolo non terminale.
4. grammatiche ricorsivamente enumerabili – α ::= β</nt></nt></nt></nt>
cosa soo i ‘linguaggi di programmazione’:
Un linguaggio di programmazione è un linguaggio formale che obbliga l’uso di specifiche regole sintattiche sviluppate in modo tale da evitare possibili istruzioni ambigue.
Solitamente l’espressività del linguaggio è ridotta ma tutte le “frasi” componibili trasmettono un solo possibile significato.
I linguaggi di programmazione sono solitamente basati su grammatiche libere dal contesto e possono distinguersi per un basso o elevato livello di astrazione dal linguaggio propriamente in uso da un elaboratore elettronico per eseguire le operazioni.
esempi di linguaggi di programmazione:
- Linguaggio macchina: Un insieme di istruzioni che possono essere eseguite direttamente dalla CPU (central processing unit, o processore) di un computer elettronico. E’ basato sul codice binario – una sequenza di 0 e 1 – rivisitato da Leibniz alla fine del diciassettesimo secolo.
-
Linguaggi di programmazione a basso livello: Forniscono un livello di astrazione sopra il linguaggio macchina e permettono di scrivere programmi in modo che siano un pochino più intellegibili dagli umani.
Il più famoso linguaggio di questo tipo è l’*Assembly *– anche se introduce simboli più comprensibili, di solito una linea di codice in Assembly rappresenta una specifica istruzione in linguaggio macchina -
Linguaggi di programmazione ad alto livello: Caratterizzati da un forte livello di astrazione dal linguaggio macchina – esempio: Python.
Possono usare parole proprie del linguaggio naturale per definire costrutti specifici, così da essere di più facile comprensione per un umano.
Più astrazione da un linguaggio di programmazione a basso livello è fornita, più comprensibile è il linguaggio.
i primi linguaggi:
Grace Brewster Murray Hopper è tra i più grandi pionieri dei linguaggi di programmazione.
Il primo programmatore dell’Harvard Mark I, un computer elettromeccanico general-purpose usato durante la seconda guerra mondiale.
Hopper era fermamente convinta della necessità di avere linguaggi di programmazione che fossero indipendenti dalle macchine su cui erano utilizzati, che l’ha portata allo sviluppo del COBOL (linguaggio ad alto livello).
In modo da facilitare l’avvicinamento all’uso dei linguaggi di programmazione tradizionali, negli ultimi anni sono stati sviluppati diversi linguaggi di programmazione visuali che permettono lo sviluppo di piccoli programmi per risolvere problemi computazionali specifici.
Alcuni sono proposti sotto forma di gioco, e permettono l’introduzione dei costrutti principali propri dei linguaggi di programmazione mediante l’utilizzo di oggetti grafici.
(ex. il linguaggio del coniglio di Goggle, che deve ricevere istruzioni per mangiare tutte le carote posizionate sul suo percorso come ‘vai avanti’ o ‘gira a destra’).
definizione ‘ipertesto’ e prima esemplificazione tecnologica:
ipertesto: un testo (corpo di materiale scritto) interconnesso in modo così tanto complesso che non è conveniente presentare su carta.
Prima esemplificazione tecnologica: 1945
Vannevar Bush scrive l’articolo “As We May Think”, che contiene una sequenza di visioni tecnologiche che sono state realizzate nei decenni a venire e che tuttora influenzano lo sviluppo di nuove tecnologie
Scenario: crescita esponenziale delle pubblicazioni, conseguenza delle nuove scoperte scientifiche, che necessitano di essere divulgate + meccanismi di produzione sempre più industrializzati.
Il problema: i meccanismi che venivano usati per trasmettere e/o revisionare i risultati di una ricerca erano molto vecchi e per niente adatti a facilitarne la divulgazione.
Se non si fosse intervenuti per tempo, ci sarebbe stato il rischio di perdere importanti pietre miliari della ricerca all’interno di una massa sempre più corposa di materiale irrilevante.
La tecnologia allora in fase di sperimentazione poteva già dare largo supporto alla creazione di piattaforme elettro-meccaniche che semplificassero notevolmente il salvataggio, la ricerca, e la consultazione di materiale rilevante.
Vannevar Bush suggeriva di usare i microfilm, che erano una tecnologia di frontiera in quel periodo.
Secondo Bush, era possibile salvare un’intera copia dell’Enciclopedia Britannica all’interno di un supporto grosso quanto una scatola di fiammiferi.
Uno dei problemi principali alla consultazione di un qualsiasi materiale, era la sua organizzazione sequenziale e l’artificialità del meccanismo di indicizzazione dei contenuti.
Quando un’informazione viene raccolta in un dispositivo di memorizzazione, essa viene in qualche modo indicizzata alfabeticamente o numericamente, e può essere contenuta soltanto in un posto specifico, a meno che non venga in qualche modo duplicata.
Per recuperare una certa informazione a partire dagli indici a disposizione, una persona deve seguire determinate regole in modo da identificare la posizione in cui tale informazione si trova.
il ‘meccanismo per associazioni’:
Il meccanismo di indicizzazione non è il modo in cui la mente umana solitamente opera.
Partendo da una specifica informazione, la mente si sposta istantaneamente alla successiva mediante un processo associativo: un’informazione ne richiama un’altra, conformemente a una complicata rete di pensieri veicolata dalle cellule del nostro cervello.
Secondo Bush questa selezione poteva essere meccanizzata e conseguentemente esplicitata in una macchina.
“Il memex”:
Macchina che avrebbe permesso di memorizzare informazioni di vario genere su microfilm, così da accedervi in modo meccanico, flessibile, e veloce, e offriva:
* Indici tradizionali
* Consultazione sequenziale dei documenti
* Annotazioni
* Percorsi tra informazioni attraverso collegamenti associativi
* Condivisione percorsi via microfilm
la nascita degli ipertesti:
Ted Nelson aveva iniziato a lavorare ad un nuovo progetto, chiamato Xanadu (1965).
Obiettivo: creare una rete di computer che potesse essere depositaria dell’intera conoscenza umana e che potesse essere estesa mediante dei collegamenti ipertestuali bidirezionali che permettessero di collegare tra loro idee contenute in diversi documenti – idea molto simile ai percorsi associativi introdotti da Vannevar Bush.
Nel frattempo, Douglas Engelbart aveva iniziato l’implementazione di un sistema rivoluzionario che di fatto permetteva per la prima volta la creazione di ipertesti su un computer – tra le tante cose.
Questo sistema, chiamato oN-Line System (NLS), fu mostrato in una sessione dimostrativa nella Fall Joint Computer Conference del 1968, suscitando commenti entusiastici da parte di tutta la comunità, tanto da aver poi etichettato quella sessione come la madre di tutti i demo.
Innovazioni:
Software (le applicazioni e i programmi a disposizione di un computer)
1. finestre come meccanismo visuale per l’organizzazione di contenuti
2. ipertesto
3. un sistema di videoscrittura (o word processor in inglese, tipo Microsoft Word)
4. meccanismi per il controllo delle versioni dei documenti
5. editor collaborativo in tempo reale (tipo Google Docs)
Hardware (ovvero la parte fisica di un computer)
1. sistema di videoconferenza
2. il mouse
cos’è il Web nella testa del suo creatore:
Un ipertesto che potesse descrivere una varietà di risorse eterogenee (documenti, persone, concetti astratti, …) collegabili tra loro mediante l’uso di collegamenti ipertestuali etichettati, in modo da poter specificare la semantica del collegamento come parte esplicita del link.
Semplificazione rispetto a Nelson: collegamenti ipertestuali del Web dovevano essere percorribili in un’unica direzione.
Primo prototipo: un’ulteriore semplificazione: soltanto una tipologia di risorse (la pagina Web) e una sola tipologia di collegamento ipertestuale, ovvero il semplice riferimento (il documento A fa riferimento al documento B).
Sviluppò una serie di tecnologie che permettessero agli utenti:
* la creazione di documenti ipertestuali.
* di mettere a disposizione i suddetti documenti ipertestuali sul Web.ùdi identificarli mediante l’utilizzo di un opportuno identificativo.
* di richiederli mediante l’utilizzo di uno specifico protocollo di comunicazione.
* di visualizzarli su un computer.
identificare le risorse sul Web: URL:
Il computer non mostra tutto quello che conosce sui link ipertestuali presenti in quella pagina.
Dentro quel frammento di testo sottolineato e solitamente colorato in blu (o in viola, nel caso sia stato già visitato) che può essere cliccato, c’è nascosto un oggetto invisibile che inizia per “http://” (o, a volte, “https://”)
Quell’oggetto è un Uniform Resource Locator, o URL, rappresenta una sorta di nome (o più propriamente, un indirizzo) della pagina web a cui il link punta e permette di accedere cliccandoci sopra, ad esempio:
http://it.wikipedia.org/wiki/Barack_Obama
Struttura di un URL:
La forma di un qualunque URL presente nel Web è conforme con la seguente struttura (ove gli elementi tra parentesi quadre sono opzionali):
<schema>://<host>[:<porta>][/<percorso>][?<interrogazione>][#<frammento>]
**Metafora**: arrivare in una specifica posizione all’interno di una casa per prendere oggetto specifico.
1. schema: mezzo di trasporto usato per raggiungere la casa
2. host: indirizzo della casa da raggiungere
3. porta: ingresso da utilizzare per entrare nella casa
4. percorso: sequenza dei locali da percorrere per arrivare in quello di interesse
5. interrogazione: chiedere alla casa di eseguire azioni in quel locale
6. frammento: oggetto specifico dentro il locale raggiunto.
!!: ormai generalmente non è più necessario uno 'schema' per arrivare alla pagina web dedicata a qualcosa (Ex. it.wikipedia.org ci porta allo stesso documento a cui ci porta http://it.wikipedia.org).
</frammento></interrogazione></percorso></porta></host></schema>
‘browser’:
Un ‘browser’ è un’applicazione software che permette di accedere e ottenere le informazioni presenti nel Web, così da poterlo “navigare” – esempi: Internet Explorer, Firefox, Microsoft Edge, Safari, Google Chrome
Il primo browser sviluppato da Tim Berners-Lee si chiamava WorldWideWeb.
Come funziona un browser:
Il browser permette di specificare un URL della risorsa a cui siamo interessati in un apposito campo della sua interfaccia, solitamente in alto
A seconda del tipo di risorsa, permette di visualizzarla all’interno della finestra browser (ad esempio nel caso di una pagina web) o di salvarla in uno specifico documento nel proprio computer (ad esempio nel caso di un documento PDF)
Nel primo caso, la pagina web visualizzata è un documento ipertestuale a tutti gli effetti: può contenere dei link che, se cliccati, indicano al browser di richiedere e scaricare la risorsa identificata dall’URL del link stesso così da visualizzarla
La navigazione nel Web è solo metaforica, siccome non ci si sposta fisicamente da una pagina web ad un’altra come se prendessimo un autobus.
‘protocollo di comunicazione’:
Protocollo di comunicazione: un insieme di regole che due entità, parte di un sistema di comunicazione, devono seguire per scambiarsi informazioni
Cosa serve?
* Una sintassi da seguire per costruire i messaggi.
* Delle regole interpretative del messaggio così da definire la semantica dei messaggi.
* Dei meccanismi per sincronizzare la comunicazione.
* Dei meccanismi per correggere e/o gestire eventuali errori che possono intercorrere nello scambio dei messaggi.
Dove li usiamo: nella vita di tutti i giorni quando vogliamo, per esempio, comunicare con qualcuno.
il protocollo HTTP:
l’Hypertext Transfer Protocol (HTTP) è un protocollo di comunicazione inizialmente sviluppato da Tim Berners-Lee per facilitare l’implementazione del Web.
Basato su metodi di comunicazione di richiesta-risposta
Esteso negli anni successivi – ad esempio con il protocollo HTTPS: un’estensione di HTTP che implementa un protocollo di comunicazione più sicuro sul Web, utile quando è necessario trasmettere dati di autenticazione come nomi utenti e password.
Entità coinvolte:
* Client: l’agente che fa la richiesta, ad esempio un browser
* Server: l’agente che dovrebbe avere informazioni su una risorsa, ad esempio un server Web, e che risponde alla richiesta.
* Messaggio di richiesta: il messaggio mandato dal client al server in cui vengono chieste informazioni riguardo una specifica risorsa indicata da un URL.
* Messaggio di risposta: il messaggio che il server restituisce al client, che può essere sia positivo sia negativo.