Il 0% ha trovato utile questo documento (0 voti)
1 visualizzazioni

INF-LOG - Lez 1

Il documento introduce il concetto di informatica spiegando che si occupa della rappresentazione e dell'elaborazione dell'informazione in modo sistematico e rigoroso tramite algoritmi. Vengono fornite esempi di algoritmi nella vita quotidiana e spiegato il ruolo dei calcolatori come esecutori automatici di algoritmi.

Caricato da

ipasrl.guest
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
1 visualizzazioni

INF-LOG - Lez 1

Il documento introduce il concetto di informatica spiegando che si occupa della rappresentazione e dell'elaborazione dell'informazione in modo sistematico e rigoroso tramite algoritmi. Vengono fornite esempi di algoritmi nella vita quotidiana e spiegato il ruolo dei calcolatori come esecutori automatici di algoritmi.

Caricato da

ipasrl.guest
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 100

Introduzione all’Informatica

Gianfranco Lombardo, Ph.D


[email protected]
@me
Currently I am a Postdoctoral Researcher in the Social web, intelligent and distributed systems engineering
(SoWIDE) Group at the Department of Engineering and Architecture (DIA) of the University of Parma.

I received the Ph.D in Information Technologies (2021) and the Master Degree in Computer Engineering
(2017) both at the University of Parma.

In 2019 I have been Visiting Researcher at the Center for Applied Optimization (CAO) at the Herbert
Wertheim College of Engineering of the University of Florida (United States)

Since 2021 I am adjunct professor of Artificial Intelligence and Big Data at the University of Parma

My research activity is focused on:


● Machine Learning and Deep Learning
● Natural Language Processing
● Network Science and Graph Data Mining
● Fintech technologies
● Social Networks
● Predictive Maintenance

Gianfranco Lombardo, Ph.D ([email protected])


Cos’è l’Informatica?

Gianfranco Lombardo, Ph.D ([email protected])


Arriviamoci per gradi
● L’Informatica è una disciplina che abbraccia ormai campi disparati:

○ Calcolo scientifico-ingegneristico

○ Gestione aziendale

○ Intelligenza Artificiale

○ Elaborazione dati
■ Marketing
■ Finanziari
■ Geografici e ambientali

○ Automazione industriale

○ Arte

○ Domotica

○ E-health
Gianfranco Lombardo, Ph.D ([email protected])
Arriviamoci per gradi
● Tuttavia l’Informatica non coincide con nessuna delle molteplici applicazioni dei calcolatori elettronici

○ Eppure accade spesso che i professionisti tendano ad essere così concentrati su di esse da
considerarle come l’essenza stessa dell’informatica

● Mito da sfatare: L’Informatica non è la scienza e la tecnologia dei calcolatori elettronici (computer)

● Quale è il punto in comune tra gli ambiti della slide precedente? In tutti, si ha la necessità di elaborare
delle informazioni per conseguire degli obiettivi tipici dell’ambito

○ Elaborazione mappe geografiche -> Nel caso di analisi ambientali


○ Elaborare il comando dell’utente per spegnere la luce -> Domotica
○ Rappresentare forme e colori richieste dall’utente -> Arte e grafica
○ Percepire lo spazio circostante per muoversi -> Robotica

● Non solo elaborazione! Per poter elaborare qualcosa si deve anche avere l’idea di ciò su cui vogliamo
lavorare
○ Si ha anche la necessità di rappresentare l’informazione per poterla elaborare

Gianfranco Lombardo, Ph.D ([email protected])


Definizione formale
● L’Informatica è la scienza della rappresentazione e dell’elaborazione dell’informazione

○ Questa definizione mette in evidenza che:


■ Il prodotto principale su cui opera la tecnologia informatica è l’informazione
■ L’Informatica come disciplina comprende non solo la tecnologia dei calcolatori, ma
soprattutto il modo in cui l’informazione viene strutturata (rappresentata) ed elaborata

○ L’accento sull’informazione fornisce inoltre una spiegazione del perchè l’informatica stia
rapidamente diventando una parte integrante di tutte le attività, poiché in tutte vi è la necessità di
gestire qualche genere di informazione

○ Il termine “Scienza” sottolinea il fatto che l’elaborazione dell’informazione avviene in maniera


rigorosa e pertanto può essere automatizzata

■ L’informazione in altri ambiti è trattata in modo meno formale in altri ambiti, ad esempio il
giornalismo

■ Che si intende per “meno formale” e “maniera rigorosa”? Vediamo una seconda definizione
Gianfranco Lombardo, Ph.D ([email protected])
Definizione formale
● L’Informatica è la studio sistematico degli algoritmi che descrivono e trasformano l’informazione: la loro
teoria, analisi, progetto, efficienza, realizzazione e applicazione

● La definizione viene dalla Association for Computing Machinery (ACM) e sebbene sia decisamente più
complessa delle precedente vi è del tutto compatibile

● Compare il termine algoritmo


○ L’algoritmo è una sequenza precisa di operazioni comprensibili e perciò eseguibili da uno strumento
automatico
○ L’algoritmo definisce la formalità ed il rigore che permettono di automatizzare le operazioni

● Non solo, questa definizione di Informatica mette anche in luce gli aspetti progettuali e realizzativi che
caratterizzano l’attività di un informatico
○ Analisi del problema
○ Progettazione di algoritmi per risolverlo
○ Sviluppo e realizzazione
○ Valutazione dell’efficienza

● L’amico, zio, cugino che smonta il computer o che lo formatta non è evidentemente un informatico :D
Gianfranco Lombardo, Ph.D ([email protected])
Il concetto di algoritmo
● Sequenza di passi, definiti con precisione, che portano alla realizzazione di un compito

● Il concetto non prevede di per sé l’uso di un calcolatore elettronico

● Difatti seguiamo algoritmi continuamente senza rendercene conto nella vita quotidiana

● Un esempio: Il montaggio di un mobile IKEA

Gianfranco Lombardo, Ph.D ([email protected])


Il concetto di algoritmo
● Altri esempi di algoritmo sono le procedure che seguiamo per prelevare i soldi dal bancomat

○ Estrarre la carta di credito dal portafoglio


○ Inserirla nell’apposito lettore
○ Digitare il pin della carta
○ Selezionare l’importo
○ Ritirare il contante
○ Ritirare la carta di credito
○ Riporre il tutto nuovamente nel portafoglio

Gianfranco Lombardo, Ph.D ([email protected])


Il concetto di algoritmo
● Un primo aspetto importante è che l’algoritmo deve essere comprensibile al suo esecutore

○ Come le informazioni sono rappresentate è cruciale affinchè l’esecutore possa comprendere i passi
da eseguire

■ Se il manuale di montaggio del mobile fosse in tedesco invece che in italiano, la


rappresentazione sarebbe perfetta per un esecutore di Hannover ma non per quello di Parma
che non comprende il tedesco

■ Ikea taglia la testa al toro e per minimizzare i costi sceglie una rappresentazione grafica dei
propri algoritmi di montaggio di modo che possano essere comprensibili al maggior numero di
possibili esecutori
● Rinuncia a parte della precisione con una descrizione meno formale (ed infatti ogni
tanto non si capisce esattamente)

Gianfranco Lombardo, Ph.D ([email protected])


Il concetto di algoritmo
● Un primo aspetto importante è che l’algoritmo deve essere comprensibile al suo esecutore

○ Come le informazioni sono rappresentate è cruciale affinchè l’esecutore possa comprendere i passi
da eseguire

■ Se il manuale di montaggio del mobile fosse in tedesco invece che in italiano, la


rappresentazione sarebbe perfetta per un esecutore di Hannover ma non per quello di Parma
che non comprende il tedesco

■ Ikea taglia la testa al toro e per minimizzare i costi sceglie una rappresentazione grafica dei
propri algoritmi di montaggio di modo che possano essere comprensibili al maggior numero di
possibili esecutori
● Rinuncia a parte della precisione con una descrizione meno formale (ed infatti ogni
tanto non si capisce esattamente)

Gianfranco Lombardo, Ph.D ([email protected])


Algoritmi e calcolatori elettronici
● I calcolatori entrano in gioco nel mondo informatico quali esecutori di algoritmi in grado di automatizzare
le operazioni che vi sono descritte

● Gli algoritmi vengono descritti tramite programmi: cioè sequenze di istruzioni scritte in un opportuno
linguaggio di programmazione che sia comprensibile al calcolatore

● Il compito dell’informatico è quindi quello di produrre algoritmi:


○ Identificare la sequenza di passi che portano alla risoluzione di un problema
○ Codificare tale sequenza in un programma per renderla comprensibile al calcolatore

● Step 1
● Step 2
● Step 3
● Step 4
● Torna a
step 1
Rappresentazione con
Identificazione sequenza linguaggio di Esecuzione
(Problem solving) programmazione
Gianfranco Lombardo, Ph.D ([email protected])
Algoritmi e calcolatori elettronici
● Il vantaggio del calcolatore è che esegue tutti i passi dell’algoritmo in modo estremamente preciso e
veloce senza mai deviare dalla esecuzione, distrarsi o confondersi.

● Attenzione: Non devia dalla esecuzione neanche se quest’ultima è palesemente sbagliata o conduce ad
un risultato sbagliato
○ Il calcolatore è assolutamente privo di “buon senso”
○ E’ un mero esecutore che se istruito in modo preciso e non ambiguo riesce a svolgere molte
operazioni più velocemente di un essere umano

● Precisione e non ambiguità sono le qualità chiave che definiscono un algoritmo come “informatico”

○ La regola “Per fare una torta di mele occorrono tre chili di mele, tre uova e mezzo chilo di farina” si
può considerare sufficientemente precisa

○ La regola “ Legate l’arrosto con dello spago e salatelo” confida invece, per l’esecuzione, nel buon
senso del cuoco per determinare la quantità di sale necessario

Gianfranco Lombardo, Ph.D ([email protected])


Correttezza ed efficienza
● Correttezza ed efficienza sono due proprietà essenziali degli algoritmi

● Un algoritmo è corretto se esso perviene alla soluzione del compito cui è preposto, senza difettare di
alcun passo fondamentale
○ Se l’algoritmo di montaggio della scrivania chiedesse di montare il piano orizzontale sui piedi del
mobile, chiedendo successivamente o dimenticandosi del montaggio delle gambe, sarebbe non
corretto.

● Un algoritmo è efficiente se perviene alla soluzione del problema nel modo più veloce possibile e/o
usando la minima quantità di risorse fisiche, compatibilmente con la sua correttezza.
○ Se l’algoritmo di montaggio ci chiedesse prima di montare i piedi del mobile, poi di fare altri passi,
poi di smontare i piedi e di rimontarli nuovamente dopo altri step, non sarebbe efficiente

● L’informatico cercherà sempre, nell’ambito di tutti gli algoritmi corretti che risolvono un certo problema, di
scegliere quello più efficiente

Gianfranco Lombardo, Ph.D ([email protected])


Esempio: Gestione di una biblioteca
● Immaginiamo una piccola biblioteca che contenga un certo numero di scaffali, su cui sono disposti i libri
● Ogni libro si trova in una precisa e invariabile posizione:
○ se qualche volume viene estratto dallo scaffale in cui si trova, la posizione di quelli che gli stanno
accanto non cambia (immaginiamo per semplicità che un libro, anche se isolato, non cada né si
sposti dalla sua posizione);
○ quando poi il volume sarà restituito, verrà rimesso nella posizione originaria.

● La biblioteca è dotata di uno schedario. Ogni scheda che vi si trova contiene, nell’ordine:
○ cognome e nome dell’autore (se il libro ha più autori, sono riportati tutti i cognomi e nomi nello
stesso ordine in cui sono stampati sulla copertina del libro);
○ titolo del libro;
○ anno di pubblicazione;
○ numero dello scaffale in cui si trova;
○ numero dello scaffale in cui si trova
○ numero d’ordine della posizione attribuita al libro nello scaffale

Gianfranco Lombardo, Ph.D ([email protected])


Esempio: Gestione di una biblioteca
● Le schede sono disposte in ordine alfabetico in base al loro autore e titolo;
○ Cioè il loro ordine dipende dal primo autore, e a pari primo autore dal secondo, e così via;
○ Libri con gli stessi autori sono ordinati in base al titolo

● Supponendo di conoscere autore e titolo di un libro, definire l’algoritmo per accedere a tale libro nella
biblioteca
Gianfranco Lombardo, Ph.D ([email protected])
Algoritmo: Ricerca del libro

1. Si ricerca la scheda del libro nello schedario.

2. Una volta trovata questa ........

Gianfranco Lombardo, Ph.D ([email protected])


Algoritmo: Ricerca del libro

1. Si ricerca la scheda del libro nello schedario.

2. Una volta trovata questa, si segnano su un foglietto numero di scaffale e posizione del libro.

Gianfranco Lombardo, Ph.D ([email protected])


Algoritmo: Ricerca del libro

1. Si ricerca la scheda del libro nello schedario.

2. Una volta trovata questa, si segnano su un foglietto numero di scaffale e posizione del libro.

3. Si ricerca lo scaffale indicato.

Gianfranco Lombardo, Ph.D ([email protected])


Algoritmo: Ricerca del libro

1. Si ricerca la scheda del libro nello schedario.

2. Una volta trovata questa, si segnano su un foglietto numero di scaffale e posizione del libro.

3. Si ricerca lo scaffale indicato.

4. Una volta individuato lo scaffale, si accede alla posizione del libro, lo si preleva e, se richiesto, si scrive
sulla scheda la data del prestito e il nome di chi richiede il libro.

● Il primo passo però è un pò più complesso di come lo abbiamo formalizzato e necessita quindi di essere
espanso

Gianfranco Lombardo, Ph.D ([email protected])


Sotto algoritmo: Ricerca nello schedario

1. Si ricerca la scheda del libro nello schedario.


a. Si esamina la prima scheda dello schedario

b. Se nome dell’autore e titolo coincidono con quelli cercati


Allora la ricerca è conclusa con successo
Altrimenti: si passa alla scheda successiva

c. Si continua di scheda in scheda finchè si trova quella cercata


Se invece vengono esaurite le schede
Allora la ricerca è conclusa in modo infruttuoso e dovremo andare altrove

Gianfranco Lombardo, Ph.D ([email protected])


Sotto algoritmo: Ricerca nello schedario

● Il (sotto)algoritmo di prima è molto semplice ma richiede un numero eccessivo di operazioni.

● Basti pensare a quanto impiegheremmo, per eseguirlo, in una biblioteca di soli 1000 libri!

● Per fortuna, non è questo l’algoritmo che usiamo nella realtà; le operazioni che eseguiamo normalmente
per una ricerca più efficace del libro assomigliano di più all’algoritmo che segue:

1. Si prende la scheda centrale dello schedario.

2. Se essa è la scheda cercata la ricerca ha termine.

3. In caso contrario, se la scheda cercata segue in ordine alfabetico quella presa in esame, si continua la
ricerca nella seconda metà dello schedario, altrimenti si continua la ricerca nella prima metà.

Gianfranco Lombardo, Ph.D ([email protected])


Algoritmo: Ricerca del libro

● Cosa impariamo dall’esempio precedente?

1. Il primo step da compiere nella realizzazione è analizzare il problema è scomporlo in macro problemi più
piccoli (sotto-problemi)

2. Raffinare i sotto-problemi fino a ricondurli a delle unità base che rappresentino singole operazioni

3. La sequenza che porta alla risoluzione di un problema non è univoca, ma possono esisterne molteplici
quindi bisogna individuare quella più efficiente

4. La sequenza di passi non è una strada a senso unico che viene percorsa dall’alto verso il basso:
a. Talvolta dobbiamo porre dei vincoli logici per determinare come proseguire
(“Se…allora…altrimenti”)

b. Talvolta imponiamo delle condizione di ciclicità: “Continua fino a che”

Gianfranco Lombardo, Ph.D ([email protected])


Esempio: Consultazione di una carta geografica

● Ci troviamo in auto e per recarci in luogo dobbiamo consultare una mappa (carta geografica o google
maps o navigatore). Per semplicità immaginiamo di essere negli anni 90 e di avere a disposizione solo
una cartina geografica del luogo.

● La carta geografica contiene dell’informazione, che vi è rappresentata secondo determinate codifiche:

○ Le regioni, i mari, i laghi oppure le montagne sono indicate tramite i loro confini, che ne danno una
riproduzione in scala.

○ Aiutano a comprendere la carta alcuni ausili visivi, per esempio la scelta dei colori di fondo delle
superfici: l’azzurro si usa per rappresentare superfici marine o lacustri, il verde per le pianure, il
marrone per le montagne.

Gianfranco Lombardo, Ph.D ([email protected])


Esempio: Consultazione di una carta geografica

● Le città sono rappresentate da piccoli cerchi

● Le strade che uniscono le varie città sono descritte da linee che, approssimativamente, ne riproducono
l’andamento; il tratto utilizzato viene scelto in un insieme finito di tratti che denotano il tipo di strada
(autostrada, strada di grande comunicazione, strada secondaria ecc.).

● Infine, la lunghezza di un tratto di strada è indicata da un numero posto accanto alla linea che la
rappresenta

Gianfranco Lombardo, Ph.D ([email protected])


Esempio: Consultazione di una carta geografica

● ll problema di trovare la via più breve per andare in auto da una città all’altra può essere risolto mediante
un algoritmo.

● Supponiamo di voler andare da Reggio Emilia a Carrara

● Diverse strade sono possibili e la rappresentazione


potrebbe ingannarci portandoci a seguire una tratta
ritenuta più breve (perchè con meno chilometraggio)
rispetto ad una più lunga ma più breve poichè più
veloce (strade ad alto scorrimento con velocità media
più alta)

Gianfranco Lombardo, Ph.D ([email protected])


Esempio: Consultazione di una carta geografica

● Sia Reggio Emilia, città di partenza definita come cp


● Sia invece Carrara, città di arrivo definita come ca

● Costruiamo l’algoritmo per individuare il percorso più breve

1. Si trovano tutte le sequenze di città che determinano un


itinerario tra le due città. Si individuano e si memorizzano,
ognuna su un diverso pezzo di carta, tutte le sequenze {c0,
c1, c2, …, ck} di nomi di città, tali che:

a. Nessuna città compaia due volte nella sequenza

b. Il primo elemento della sequenza, c0, coincida con cp,


e l’ultimo, ck, coincida con ca

c. Per ogni coppia di elementi contigui, < ci, ci+1 >, esista
un tratto di strada che li unisce

Gianfranco Lombardo, Ph.D ([email protected])


Esempio: Consultazione di una carta geografica

1. (Slide precedente)

2. Per ogni sequenza, si calcola la somma delle distanze dei vari tratti di strada e la si memorizza accanto
alla sequenza

3. Si individua la sequenza per cui il valore della somma delle distanze è minimo e la si sceglie come
strada più breve. Se per caso si trovasse più di un itinerario con la stessa distanza totale tra cp e ca, se
ne sceglierebbe uno arbitrariamente (per esempio il primo trovato). Se non si trova alcun itinerario, per
esempio perché cp e ca sono separate dal mare, non esiste alcuna soluzione.

● Tutti i punti necessitano di una ulteriore raffinazione in sotto-problemi, ma concentriamoci sul punto 1
● Trovare tutti gli itinerari che vanno da una città all’altra è a sua volta un problema che va risolto
mediante un opportuno algoritmo: possiamo chiamarlo un sottoproblema del problema principale,
perché la sua soluzione è necessaria per costruire la soluzione di quest’ultimo

Gianfranco Lombardo, Ph.D ([email protected])


Trovare tutti gli itinerari tra due città

● Se n è il numero di città riprodotte nella carta geografica, un itinerario che unisca cp a ca non può essere
costituito da un numero di tratti elementari superiore a n – 1:
○ infatti un itinerario con un numero superiore di elementi dovrebbe necessariamente passare per
una stessa città più di una volta, cosa che abbiamo escluso.
○ Basta quindi costruire tutti gli itinerari che partono da cp e hanno un numero di tratti non superiore
a n – 1, e scegliere tra questi quelli che terminano in ca

● Per costruire poi tutti gli itinerari che si dipartono da cp con un numero generico r di tratti si può usare il
seguente ragionamento:
○ Supponiamo di aver già trovato tutti gli itinerari che partono da cp e sono costituiti da r – 1 tratti
○ Otterremo gli itinerari di r tratti creando molte copie degli itinerari di r – 1 tratti e aggiungendo a
ciascuna copia un tratto ulteriore, che collega l’ultima città, cr-1, a tutte le città direttamente
collegate a essa, purché tali città non facciano già parte della sequenza originaria.

Gianfranco Lombardo, Ph.D ([email protected])


Trovare tutti gli itinerari tra due città

● Per iniziare, basta considerare come itinerario di lunghezza 0 un itinerario fittizio, che parte e arriva nella
città cp. A questo punto, gli itinerari di lunghezza 1 saranno tutti quelli che collegano cp alle città limitrofe,
cioè a quelle città direttamente collegate a cp da una strada.

● Abbiamo così definito i primi due passi di un algoritmo, che in n passi ci porta a generare tutti i percorsi
di n – 1 tratti che partono da cp, e quindi a risolvere il punto 1 dell’algoritmo generale

● Questo ragionamento è un primo esempio di un potentissimo procedimento matematico-informatico che


ci servirà per risolvere i più svariati problemi: l’induzione.

Gianfranco Lombardo, Ph.D ([email protected])


Esempio: Consultazione di una carta geografica

● L’algoritmo può quindi essere così sintetizzato:

1. Partiamo da una sequenza iniziale, trascritta su un foglio di carta, che comprende la sola città cp; questa
sequenza è costituita, convenzionalmente, da 0 tratti
2. Esaminiamo le sequenze fin qui costruite, di r – 1 tratti. Chiamiamo S una generica sequenza {cp, c1,
c2, …, cr–1}

a. Per ciascuna sequenza S si costruiscono nuove sequenze di r tratti, come segue:


i. sia cr–1 l’ultima città della sequenza S. Si trovano tutte le città collegate a cr–1 da una strada: siano
esse l’insieme di città {a1, a2, …, as}
ii. si escludono dall’insieme {a1, a2, …, as} tutte le città che già fanno parte della sequenza S.
Restano così {a1, a2, …, at} città, con t ≤ s;
iii. si costruiscono t sequenze di r tratti, ottenute aggiungendo a S una diversa città ai scelta fra le t
città individuate al passo precedente.
3. Si ripete l’esecuzione del passo precedente fino a quando non si verifica la condizione r = n. A questo punto
vengono estratte (da tutte le sequenze costruite da un numero di tratti minore di n) le sequenze che hanno ca
come ultima città, e l’algoritmo che identifica tutti i possibili tragitti termina.
a. Se per caso non ve ne fossero, si può terminare a questo punto l’intero algoritmo, stabilendo che “il
problema non ha soluzione”.

Gianfranco Lombardo, Ph.D ([email protected])


Esempio: Consultazione di una carta geografica
● Individuiamo il miglior tragitto tra la città E e la città D applicando l’algoritmo

Gianfranco Lombardo, Ph.D ([email protected])


Osservazioni
● Il modo in cui noi consultiamo normalmente le carte geografiche per risolvere lo stesso problema è
molto diverso da quello qui descritto (per nostra fortuna): ciò significa che usiamo un algoritmo migliore
o che non usiamo affatto un algoritmo?
○ In effetti, nel consultare le carte usiamo molto il colpo d’occhio, che ci permette di individuare
rapidamente la strada migliore.
■ sappiamo che la strada migliore che unisce due città verosimilmente non si discosta molto
dal cosiddetto percorso in linea d’aria, ci permette di focalizzare la nostra ricerca in un
settore limitato della cartina.
■ Si osservi però che questa conoscenza può aiutarci a trovare rapidamente la soluzione in
molti casi, ma in certi casi critici, per esempio se tra due città sorgessero montagne o zone
di difficile attraversamento, essa potrebbe anche essere sorgente di errori.

● Non è affatto detto che l’algoritmo che abbiamo trovato sia l’unica soluzione del problema, né tanto
meno la soluzione migliore; anzi, esiste una soluzione molto più efficiente del problema

● Non è ancora molto chiaro a che punto un algoritmo si possa ritenere sufficientemente specificato da
poter essere eseguito dal calcolatore
○ Come rappresento la cartina al calcolatore? come può consultarla per trovare i percorsi?

Gianfranco Lombardo, Ph.D ([email protected])


BREAK

Gianfranco Lombardo, Ph.D ([email protected])


Linguaggi di programmazione
● Linguaggio di programmazione: ovvero linguaggi che consentono di scrivere gli algoritmi
sotto forma di programmi che possano essere compresi dal calcolatore, che ne è
l’esecutore.

● I linguaggi di programmazione sono molteplici:

○ Si differenziano per scopo: Tipologia di programma che si può sviluppare

○ Prestazioni

○ Livello di astrazione rispetto al codice macchina

○ Paradigma:
■ Programmazione strutturata
■ Programmazione ad oggetti
■ Programmazione funzionale

Gianfranco Lombardo, Ph.D ([email protected])


Linguaggi di programmazione
● Agli albori dell’informatica l’uomo, per comunicare i suoi algoritmi al calcolatore, doveva
imparare il linguaggio della macchina, cioè l’insieme dei comandi che la macchina era in
grado di eseguire.

● Nella seconda metà degli anni Cinquanta, il linguaggio con cui l’uomo comunicava alla
macchina gli algoritmi cominciò ad “alzarsi di livello”, diventando in primo luogo più adatto
a codificare gli algoritmi e in secondo luogo molto più comprensibile; la fatica di tradurre il
programma nel linguaggio della macchina fu affidata alla macchina stessa (attraverso i
compilatori)

○ Per meglio comprendere però cosa si intende per astrazione di un linguaggio è


necessario introdurre gli elementi base dei calcolatori elettronici

Gianfranco Lombardo, Ph.D ([email protected])


Rappresentazione dell’informazione

● Una grandezza (fisica o astratta) può essere rappresentata in due forme


○ Analogica: insieme di valori continuo (denso e “senza buchi”)
○ Digitale (o numerica): insieme di valori discreto (tutti i punti sono
isolati)

Gianfranco Lombardo, Ph.D ([email protected])


Approssimazione dell’informazione

● Alcune informazioni sono intrinsecamente discrete


○ Informazioni “artificiali”, es. un testo scritto
○ Scala atomica o subatomica …
● Molte grandezze fisiche hanno forma continua
○ Per loro elaborazione al calcolatore: rappresentazione digitale
○ Approssimazione del valore analogico
○ Errore dipende dalla precisione della rappresentazione digitale scelta

Gianfranco Lombardo, Ph.D ([email protected])


Rappresentazione dell’informazione
● L’informazione può essere rappresentata in due forme:

○ Analogica

○ Digitale (o Numerica; in inglese digit = cifra/numero )

● In forma analogica una grandezza è rappresentata mediante un’altra grandezza in modo


continuo (ad esempio mediante un livello variabile di tensione).

● In forma digitale una grandezza è rappresentata in modo discreto, mediante sequenze


finite di simboli tratti da un insieme finito associabile con i numeri naturali.

Gianfranco Lombardo, Ph.D ([email protected])


Rappresentazione dell’informazione

Gianfranco Lombardo, Ph.D ([email protected])


Rappresentazione dell’informazione

● Rappresentazione analogica dell’informazione

● Esempio

● suono -> microfono -> tensione (codifica)

● tensione -> registratore -> polarizzazione magnetica (memorizzazione)

● p.magn. -> altoparlante -> suono (decodifica)

● Rappresentazione analogica qui significa che:

○ La tensione prodotta dal microfono è tanto più alta quanto più elevato è il livello del suono.

○ La vibrazione dell’altoparlante è tanto più ampia quanto più elevata è la tensione

Gianfranco Lombardo, Ph.D ([email protected])


Rappresentazione dell’informazione

● La rappresentazione digitale (numerica) usata all’interno di un calcolatore:

○ è una approssimazione discreta della realtà.

○ ogni quantità è approssimata da una sequenza finita di dati (numeri), ciascuno dei
quali può assumere solo un numero finito di valori.

○ l’errore che si commette in questa approssimazione dipende dalla quantità di dati


utilizzati e dalla precisione (numero di cifre/simboli a disposizione) della
rappresentazione digitale.

○ La rappresentazione digitale della realtà è una rappresentazione basata su numeri


(digit = cifra, quindi digitale = numerico) che necessita di un CODICE per
rappresentarli.

Gianfranco Lombardo, Ph.D ([email protected])


Il Codice Binario

● I circuiti di un calcolatore lavorano a due diversi livelli di tensione (di solito 0 e 5 Volt, ma
anche 0 e 3.3 Volt)

○ I 2 livelli rappresentano, in generale, due SIMBOLI diversi, a cui associare due diversi
significati.

Es. Vero/Falso

Positivo/Negativo

Presenza/Assenza

…ma anche le quantità (cifre) 0/1

Gianfranco Lombardo, Ph.D ([email protected])


Il Codice Binario

● Rappresentazione di numeri.

● Notazione di tipo posizionale (come quella decimale).

● Un numero è rappresentato da una sequenza di simboli.

● Il valore del numero dipende non solo dalla quantità rappresentata dai simboli, ma anche
dalla posizione in cui si trovano.

○ 3456 è diverso da 6543

○ 1001 è diverso da 1100

● Utilizza solo 2 simboli (0 e 1)

Gianfranco Lombardo, Ph.D ([email protected])


Il Codice Binario

● Scelta una base di rappresentazione B

● ogni numero è rappresentato da una sequenza di simboli (cifre) appartenente a


un alfabeto di B simboli
● ogni cifra rappresenta un valore compreso fra 0 e B-1
● a ogni posizione corrisponde un peso, uguale ad una potenza della base
crescente da destra verso sinistra.
● Valore del numero = somma dei prodotti di ciascuna cifra per il peso associato
alla sua posizione

dN-1 dN-2 …d1 d0 = dN-1* BN-1 + dN-2 * BN-2 +…+ d1* B1 + d0 * B0

Cifra più significativa Cifra meno significativa


Gianfranco Lombardo, Ph.D ([email protected])
Esempi

(109)10 = 1*102 + 0*101 + 9*100 = 100 + 0 + 9

(1101101)2 = 1* 26+1* 25+0* 24+1* 23+1* 22+0* 21+ 1*


20 = 64 + 32 + 0 + 8 + 4 + 0 + 1 = (109)10

(155)8 = 1*82 + 5*81 + 5*80 = 64 + 40 + 5 = (109)10

(6C)16 = 6*161 + 13 *160 = 96 + 13 = (109)10


Gianfranco Lombardo, Ph.D ([email protected])
Multipli del Byte

1 Byte = 8 bit

1 KiloByte (kB) = 1024 byte (210 = 1024)

1 MegaByte (MB) = 1024 KB = 220 Byte

1 GigaByte (GB) = 1024 MB = 230 Byte

1 TeraByte (TB) = 1024 GB = 240 Byte

Gianfranco Lombardo, Ph.D ([email protected])


Rappresentazione in basi diverse

■ Con sequenze di N simboli in base B posso rappresentare BN numeri


diversi
■ 3 cifre decimali (B=10) 1000 (103) valori diversi
■ 3 cifre binarie (B=2) 8 (23) valori diversi

■ Quindi, se devo codificare M valori, ho bisogno di ⎡logBM⎤ simboli.

■ Quanto più piccola è la base tanto più lunga sarà la rappresentazione di


una stessa quantità.
Es. (109)10 = (1101101)2 = (6D)16

Gianfranco Lombardo, Ph.D ([email protected])


Notazione posizionale

Nota importante:

■ In qualunque base B, il valore del numero non cambia se aggiungo 0 ( uno o


più ) a sinistra:
■ Es. decimale 145 = 0145 mentre 145 ≠ 1450
■ Es. binario 0110 = 00110 mentre 0110 ≠ 01100

■ Aggiungendo 0 a sinistra (cifra più significativa), la posizione delle altre non


cambia.

■ Viceversa, se aggiungo 0 alla cifra meno significativa, le altre shiftano di una


posizione ( quindi una potenza ).

Gianfranco Lombardo, Ph.D ([email protected])


Notazione posizionale

Nota importante:

■ In qualunque base B, il valore del numero non cambia se aggiungo 0 ( uno o


più ) a sinistra:
■ Es. decimale 145 = 0145 mentre 145 ≠ 1450
■ Es. binario 0110 = 00110 mentre 0110 ≠ 01100

■ Aggiungendo 0 a sinistra (cifra più significativa), la posizione delle altre non


cambia.

■ Viceversa, se aggiungo 0 alla cifra meno significativa, le altre shiftano di una


posizione ( quindi una potenza ).

Gianfranco Lombardo, Ph.D ([email protected])


Rappresentazione digitale binaria

■ Per rappresentare un dato si ha a disposizione un numero finito N di bit.

■ Con N bit si possono formare 2N combinazioni diverse (con N cifre in base 10


se ne formano 10N )

■ Quindi, se voglio rappresentare valori in un certo intervallo [min,max] posso


rappresentare in modo esatto 2N valori compresi fra min e max (inclusi)

■ Tutti gli altri possibili valori nell’intervallo sono approssimati con il valore
rappresentabile più vicino

Gianfranco Lombardo, Ph.D ([email protected])


Rappresentazione digitale binaria

Con N bit posso rappresentare qualunque insieme numerabile (cioè che può
essere messo in corrispondenza con gli interi) di simboli.

Con due bit è possibile generare 4 configurazioni distinte (00, 01, 10, 11) che
possono essere associate a 4 informazioni distinte
Esempi di insiemi diversi di informazioni rappresentabili:
00 -> a 1 verde
01 -> b 2 rosso
10 -> c 3 giallo
11 -> d 4 blu

Gianfranco Lombardo, Ph.D ([email protected])


Rappresentazione digitale binaria

Codifica di caratteri
26 lettere minuscole e 26 lettere maiuscole, 10 cifre, 10 segni
aritmetici, 20 segni di interpunzione (spazi inclusi) e 3
caratteri non stampabili (a capo, tabulazione, backspace) =
95 caratteri, che rappresentano la lingua Inglese

Per 95 simboli sono necessari ? bit

Gianfranco Lombardo, Ph.D ([email protected])


Rappresentazione digitale binaria

Codifica di caratteri
26 lettere minuscole e 26 lettere maiuscole, 10 cifre, 10 segni
aritmetici, 20 segni di interpunzione (spazi inclusi) e 3
caratteri non stampabili (a capo, tabulazione, backspace) =
95 caratteri, che rappresentano la lingua Inglese

Per 95 simboli sono necessari ? bit

Gianfranco Lombardo, Ph.D ([email protected])


Rappresentazione digitale binaria

Codifica di caratteri
Per 95 simboli sono necessari 7 bit: ⎡log295⎤ =7

Una consolidata rappresentazione a 7-bit è il codice ASCII


(American Standard Code for Information Interchange)

Gianfranco Lombardo, Ph.D ([email protected])


Rappresentazione digitale binaria

A metà degli anni ‘60 divenne chiaro che il codice a 7 bit non bastava per
rappresentare anche i caratteri dei linguaggi diversi dall’inglese

IBM estese il codice ASCII a 8 bit e 256 simboli

Chiamato "Extended ASCII", la prima metà (codici da 0 a 127) è costituita


dall’originale codice ASCII, con uno 0 aggiunto all’inizio di ogni gruppo di bit.

Permette di esprimere la maggior parte dei caratteri degli alfabeti occidentali e


include molti altri simboli utili

Gianfranco Lombardo, Ph.D ([email protected])


Rappresentazione digitale binaria

Gianfranco Lombardo, Ph.D ([email protected])


Rappresentazione delle immagini
Codifica RGB per immagini a colori
■ Il colore è diviso in 3 componenti fondamentali:
Rosso (R), Verde (G), Blu (B) 🡨 (R,G,B)

■ L’intensità di ognuna è di solito rappresentata su 8 bit (256 valori


diversi). Ogni colore è rappresentato su 24 bit.
■ Posso rappresentare 224 colori diversi.

(0,0,0) 🡨 nero (255, 255, 255) 🡨 bianco


(128, 128,128) 🡨 grigio (255,0,0) 🡨 rosso
(0, 128, 0 ) 🡨 verde chiaro (255,255,0) 🡨 giallo

Gianfranco Lombardo, Ph.D ([email protected])


Linguaggio macchina

● L’elaboratore (o calcolatore elettronico) è quindi un dispositivo in grado di


○ Rappresentare (codificare)
○ Memorizzare
○ Elaborare
I dati seguendo sequenze di operazioni elementari mediante il cosiddetto “Linguaggio Macchina”

● Il linguaggio macchina è basato su un alfabeto detto binario in quanto comprende due soli simboli,
generalmente indicati con 0 e 1
○ Un simbolo di questo alfabeto viene detto bit.

● Il processore o CPU è quella componente hardware di un computer che è in grado di eseguire i


programmi scritti in linguaggio macchina. In altre parole in linguaggio macchina sono definite l'insieme
di istruzioni fondamentali che un processore è in grado di compiere (instruction set) in cui i codici di
programmi da eseguire devono essere tradotti.

Gianfranco Lombardo, Ph.D ([email protected])


Linguaggio macchina

● I codici operativi e i dati nel linguaggio macchina sono pattern (stringhe) di bit.

● Come nelle lingue naturali, nel linguaggio macchina i simboli dell'alfabeto utilizzato (1 e 0) sono
organizzati in "parole" che a loro volta costituiscono "frasi".

● Le frasi del linguaggio macchina sono dette istruzioni; ognuna di esse ordina al processore di eseguire
un'azione elementare afferente allo stato interno del computer, come la lettura di una locazione di
memoria oppure il calcolo della somma dei valori contenuti in due registri.

● Le frasi sono generalmente costituite da una parola iniziale detta codice operativo iniziale, che indica il
tipo di azione da eseguire, seguita da altre parole che specificano gli eventuali parametri (o dati) a cui
l'azione deve essere applicata

10011100 00101100 10010110


10101101 10110101 11010101
01001001 11011001 01100010
01001011 10010011 10010110

Gianfranco Lombardo, Ph.D ([email protected])


Limiti del linguaggio macchina

● Poco comprensibile ed utilizzabile per un essere umano

● Fondamentalmente stiamo dando istruzioni al processore sui livelli di tensione da


produrre 0 - 5 Volt per descrivere tutte le informazioni
○ Ogni tipologia di processore ha il suo linguaggio macchina, perchè è un modo
per dare istruzioni direttamente al processore
○ Nessun livello di astrazione: stiamo parlando il “VOLTese”

● E’ il “livello più basso” nella piramide di astrazione poichè non astraiamo rispetto
alla architettura hardware della macchina

○ Ciò che scrivo va bene per un intel-i9 ma non per un intel i5 o un AMD

Gianfranco Lombardo, Ph.D ([email protected])


Linguaggio Assembly

● Un linguaggio di programmazione a “basso livello” in informatica, indica un


linguaggio di programmazione che coincide con il linguaggio macchina o che
differisce poco dal linguaggio macchina, fornendo poca o nessuna astrazione dai
dettagli del funzionamento fisico del calcolatore.

● L’ Assembly è il primo linguaggio di “basso livello” che permette effettivamente di


programmare “agevolmente”

○ E’ un linguaggio privo di alcuni costrutti logici che permettono di formalizzare


gli algoritmi con maggiore astrazione rispetto alla macchina
○ Le istruzioni però sono più comprensibili per un essere umano e vengono
successivamente tradotte in automatico da un compilatore nel linguaggio
macchina adottato dal processore che stiamo utilizzando

Gianfranco Lombardo, Ph.D ([email protected])


Linguaggio Assembly

MODEL SMALL
STACK 100H
.DATA
HW DB "hello, world", 13, 10,
'$'
.CODE
.STARTUP
MOV AX, @data
MOV DS, AX
MOV DX, OFFSET HW
MOV AH, 09H
INT 21H
MOV AX, 4C00H
INT 21H
END

Gianfranco Lombardo, Ph.D ([email protected])


BREAK

Gianfranco Lombardo, Ph.D ([email protected])


Calcolatore elettronico

● L’architettura della maggior parte degli elaboratori elettronici è organizzata secondo il


modello della cosiddetta macchina di von Neumann, dal nome del ricercatore americano
che, nel corso della Seconda Guerra Mondiale, dedicò i suoi studi alla realizzazione dei
primi elaboratori

● La macchina di von Neumann è costituita da quattro elementi funzionali fondamentali:


l’unità di elaborazione (CPU, Central Processing Unit), la memoria centrale, le periferiche e
il bus di sistema.

Gianfranco Lombardo, Ph.D ([email protected])


Calcolatore elettronico

● L’unità di elaborazione contiene i dispositivi elettronici in grado di acquisire, interpretare ed


eseguire le istruzioni del programma.

● La memoria centrale contiene le informazioni necessarie all’esecuzione di un programma,


cioè istruzioni e dati.

● Le periferiche permettono lo scambio delle informazioni fra l’elaboratore e il mondo


esterno, attraverso operazioni di ingresso – dall’esterno all’elaboratore – e di uscita –
dall’elaboratore al mondo esterno.
○ In particolare, fanno parte del calcolatore le sole interfacce di collegamento verso le
periferiche, mentre queste ultime vengono considerate come dispositivi separati.

Gianfranco Lombardo, Ph.D ([email protected])


Calcolatore elettronico
● Nell’architettura di von Neumann, le periferiche includono anche le memorie di massa
○ dal punto di vista dell’interazione con il calcolatore si comportano in modo
funzionalmente analogo a terminali, stampanti e altri dispositivi collegati verso
l’esterno. Infine, il bus di sistema opera il collegamento fra questi elementi funzionali.

● Questa architettura elementare è un’astrazione della macchina reale, in cui possono


essere presenti componenti ulteriori; tuttavia, tale astrazione è sufficientemente vicina alla
realtà da dare una buona idea degli elementi funzionali di un calcolatore

Gianfranco Lombardo, Ph.D ([email protected])


Calcolatore elettronico

● Tutto ciò che deve essere eseguito risiede nella memoria centrale, che nelle architetture
moderne è chiamata memoria RAM (Random Access Memory)

● Ogni qual volta un set di istruzioni deve essere eseguita la macchina svolge il seguente
ciclo di funzionamento:
○ L’unità di elaborazione, che coordina le varie attività, estrae istruzioni dalla memoria
○ le decodifica comprendendo il loro significato
○ le esegue tramite opportune funzioni all’interno dell’architettura del calcolatore
■ Svolge gli opportuni calcoli prelevando i dati sempre dalla memoria, svolge le
operazioni in binario e se richiesto memorizza i risultati in una ulteriore cella di
memoria

● I trasferimenti tra elementi funzionali diversi avvengono sempre tramite il bus di sistema
che, in funzione dell’operazione in atto, effettua il collegamento logico tra i vari elementi
funzionali coinvolti nel trasferimento (mentre il collegamento fisico è sempre presente).

Gianfranco Lombardo, Ph.D ([email protected])


Calcolatore elettronico

● Nella macchina di von Neumann le fasi di elaborazione si succedono in modo sincrono


rispetto alla scansione temporale imposta da un orologio (clock) di sistema.

● Durante ciascun intervallo di tempo una parte dell’unità di elaborazione (detta unità di
controllo) coordina l’esecuzione temporale delle funzioni che verranno svolte
internamente all’unità di elaborazione stessa o negli altri elementi funzionali.

Gianfranco Lombardo, Ph.D ([email protected])


Dati e Variabili

Di quali dati abbiamo bisogno e come usarli?

❑ Dati sono necessari per trovare la soluzione.


■ Es. Per trovare area rettangolo, ho bisogno di base e altezza.
❑ I valori identificano una particolare istanza del problema, anche se la
soluzione resta la stessa.
❑ Per questo si chiamano variabili.
❑ Per descrivere la soluzione ho bisogno di fare riferimento alle variabili con
un nome.

Con il calcolatore, a cosa mi serve il nome e dove si trovano questi dati?

Gianfranco Lombardo, Ph.D ([email protected])


Memoria RAM

■ Spazio di lavoro: contiene i dati da elaborare, le istruzioni da eseguire


(programmi) e i risultati delle elaborazioni.

■ Insieme di celle di dimensione pari a 1 byte, ciascuna delle quali è individuata


da un indirizzo, che indica la posizione della cella all’interno della memoria.

■ Se ogni indirizzo è codificato con 32 bit, posso distinguere e accedere


singolarmente a ?? celle diverse.

Gianfranco Lombardo, Ph.D ([email protected])


Memoria RAM

■ Spazio di lavoro: contiene i dati da elaborare, le istruzioni da eseguire


(programmi) e i risultati delle elaborazioni.

■ Insieme di celle di dimensione pari a 1 byte, ciascuna delle quali è individuata


da un indirizzo, che indica la posizione della cella all’interno della memoria.

■ Se ogni indirizzo è codificato con 32 bit, posso distinguere e accedere


singolarmente a 232 celle diverse.
232 celle = 4 Gcelle -> 4 Gbyte (circa 4 x 109 celle)

■ Si usano normalmente indirizzi a 32 o 64 bit (16x1018 celle)

Gianfranco Lombardo, Ph.D ([email protected])


Memoria RAM

■ I dati possono (devono) essere modificati durante l’esecuzione dei programmi,


ma per farlo vanno trovati!

■ Il nome simbolico che assegniamo ad una variabile viene messo in


corrispondenza con un indirizzo di memoria.

■ La cella di memoria con tale indirizzo contiene il valore della variabile che ci
interessa.

var1

10
0CFB14A3

Gianfranco Lombardo, Ph.D ([email protected])


Memoria RAM
■ Un’operazione del tipo var1 🡨 var1 + 5 si traduce in:

❑ Leggi il contenuto della cella di memoria all’indirizzo che corrisponde al


nome var1

❑ Aggiungi a questo valore 5

❑ Scrivi nella stessa cella di memoria il nuovo valore

■ Quando creiamo una variabile nuova invece:

❑ Trova una cella di memoria libera ( non ci interessa come fare )

❑ Assegna l’indirizzo di quella cella al nome della variabile

❑ Scrivi il valore dentro la cella


Gianfranco Lombardo, Ph.D ([email protected])
Memoria RAM

■ Nota: ogni cella è 1 byte, ma spesso i dati sono più grandi, es. per
rappresentare un numero intero servono 4 byte.

■ La memoria è organizzata in modo tale da poter dividere i dati in celle contigue.

■ Una variabile quindi in realtà identifica sia l’indirizzo della prima cella, che il tipo
di valore che rappresenta.

■ Il tipo identifica quante celle occupa il dato in questione.

■ Per leggere un intero devo quindi leggere 4 celle contigue, mettere insieme i
valori e decodificarli.

Gianfranco Lombardo, Ph.D ([email protected])


Memoria RAM

■ Nota: ogni cella è 1 byte, ma spesso i dati sono più grandi, es. per
rappresentare un numero intero servono 4 byte.

■ La memoria è organizzata in modo tale da poter dividere i dati in celle contigue.

■ Una variabile quindi in realtà identifica sia l’indirizzo della prima cella, che il tipo
di valore che rappresenta.

■ Il tipo identifica quante celle occupa il dato in questione.

■ Per leggere un intero devo quindi leggere 4 celle contigue, mettere insieme i
valori e decodificarli.

Gianfranco Lombardo, Ph.D ([email protected])


Central Processing Unit (CPU)

● CPU: “cervello” del calcolatore


○ Esegue i programmi
○ Comanda le altre parti del calcolatore

● Composta da due parti:

○ Control Unit (CU): interpreta le istruzioni, comanda le altre parti


della CPU, controlla il flusso tra CPU e memoria

○ Arithmetic Logical Unit (ALU): esegue le operazioni aritmetiche e


logiche, esegue i confronti tra dati

Gianfranco Lombardo, Ph.D ([email protected])


Central Processing Unit (CPU)

Gianfranco Lombardo, Ph.D ([email protected])


Central Processing Unit (CPU)

● Caricamento: CU preleva l’istruzione dalla locazione di memoria


indicata dal registro PC (Program Counter) e la memorizza in IR
(Instruction Register)
● Decodifica: CU interpreta l’istruzione, legge eventualmente dalla
memoria i dati necessari
● Esecuzione: CU comanda le parti
● Memorizzazione: risultati memorizzati nella memoria centrale o in
registri della CPU

Gianfranco Lombardo, Ph.D ([email protected])


Lettura da memoria

Gianfranco Lombardo, Ph.D ([email protected])


Fetch delle istruzioni (caricamento)

Gianfranco Lombardo, Ph.D ([email protected])


Decode delle istruzioni (caricamento)

● Al termine della fase di fetch, IR contiene l'istruzione da eseguire


○ Codice operativo + operandi
○ Linguaggio macchina: il significato dipende dalla CPU

● Nell'esempio: 4 010 ₍₁₆₎ = 0100 0000 0001 0000 ₍₂₎


○ Codice operativo = 0100
○ Es. Leggi una parola dal registro delle periferiche...
○ E memorizzala in un indirizzo di memoria (operando)

Gianfranco Lombardo, Ph.D ([email protected])


Esecuzione delle istruzioni (caricamento)

Gianfranco Lombardo, Ph.D ([email protected])


Rivediamo: linguaggio Assembly

MODEL SMALL
STACK 100H
.DATA
HW DB "hello, world", 13, 10,
'$'
.CODE
.STARTUP
MOV AX, @data
MOV DS, AX
MOV DX, OFFSET HW
MOV AH, 09H
INT 21H
MOV AX, 4C00H
INT 21H
END

Gianfranco Lombardo, Ph.D ([email protected])


Architettura moderna

Gianfranco Lombardo, Ph.D ([email protected])


Classificazione di Flynn

● Parallelismo: ↑ prestazioni, a parità di velocità


su singola istruzione
○ S/M: single/multiple
○ I/D: instruction/data
● SISD: una operazione alla volta; macchine
tradizionali a singolo processore e core
● MISD: insolite, per tolleranza ai guasti; sistemi
eterogenei, sugli stessi dati, devono dare gli
stessi risultati
● SIMD: operazioni naturalmente parallelizzabili;
unità di calcolo vettoriale e GPU
● MIMD: istruzioni diverse su dati diversi;
architetture con più core o processori autonomi,
sistemi distribuiti
Gianfranco Lombardo, Ph.D ([email protected])
BREAK

Gianfranco Lombardo, Ph.D ([email protected])


Linguaggi di programmazione

● Agli albori dell’informatica l’uomo, per comunicare i suoi algoritmi al calcolatore,


doveva imparare il linguaggio della macchina, cioè l’insieme dei comandi che la
macchina era in grado di eseguire.

● Nella seconda metà degli anni Cinquanta, il linguaggio con cui l’uomo
comunicava alla macchina gli algoritmi cominciò ad “alzarsi di livello”, diventando
in primo luogo più adatto a codificare gli algoritmi e in secondo luogo molto più
comprensibile; la fatica di tradurre il programma nel linguaggio della macchina fu
affidata alla macchina stessa

● Ciò fu reso possibile dalla presenza di altri programmi, capaci di tradurre i


linguaggi di più alto livello nel linguaggio della macchina: i compilatori

Gianfranco Lombardo, Ph.D ([email protected])


Linguaggi di programmazione

● Poiché allora l’uso principale dei calcolatori consisteva nel risolvere problemi di
calcolo numerico, il primo linguaggio di alto livello per la programmazione dei
calcolatori fu il Fortran (nome che deriva dall’originario acronimo FORTRAN, che
stava per FORmula TRANslator), particolarmente adatto a descrivere
l’elaborazione di formule matematiche.

● Di poco posteriore al Fortran è il COBOL (COmmon Business Oriented


Language), il primo linguaggio orientato alle applicazioni gestionali,
particolarmente adatto alla memorizzazione ed elaborazione di dati.

● COBOL e Fortran sono rimasti per lungo tempo i linguaggi di programmazione più
diffusi specie perchè utilizzati nei mainframe

Gianfranco Lombardo, Ph.D ([email protected])


Mainframe

Gianfranco Lombardo, Ph.D ([email protected])


Linguaggi di programmazione

● Poiché allora l’uso principale dei calcolatori consisteva nel risolvere problemi di
calcolo numerico, il primo linguaggio di alto livello per la programmazione dei
calcolatori fu il Fortran (nome che deriva dall’originario acronimo FORTRAN, che
stava per FORmula TRANslator), particolarmente adatto a descrivere
l’elaborazione di formule matematiche.

● Di poco posteriore al Fortran è il COBOL (COmmon Business Oriented


Language), il primo linguaggio orientato alle applicazioni gestionali,
particolarmente adatto alla memorizzazione ed elaborazione di dati.

● COBOL e Fortran sono rimasti per lungo tempo i linguaggi di programmazione più
diffusi specie perchè utilizzati nei mainframe

Gianfranco Lombardo, Ph.D ([email protected])


Linguaggi di programmazione

● Esiste poi una categoria di linguaggi più rigorosamente basati su uno studio dei
principi della programmazione. Il “capostipite” di tali linguaggi è l’ALGOL
(ALGOrithmic Language) 60, che proprio per questo ha grande importanza, pur
non essendo mai stato molto utilizzato nella pratica. I linguaggi più noti di questa
famiglia sono:
○ il Pascal, introdotto inizialmente con scopi prettamente didattici, ma che ha
conosciuto anche un notevole successo in ambito industriale;

○ il C, forse il linguaggio che ha avuto maggior successo relativamente alla


costruzione di sistemi informatici;
■ Tuttora i sistemi operativi sono scritti in C così come molte routine di
sistemi embedded (Internet of Things), auto a guida autonoma etc…

Gianfranco Lombardo, Ph.D ([email protected])


Linguaggi di programmazione

● In tempi più recenti si è affermato lo stile di programmazione orientato agli oggetti


(object-oriented)
○ si tende a mantenere una corrispondenza fra gli oggetti che caratterizzano
un’applicazione e la loro codifica.

● Ciò ha portato naturalmente alla nascita di linguaggi basati su questo stile, detti
appunto linguaggi orientati agli oggetti. Tra essi menzioniamo:
○ C++
○ C# (letto C Sharp)
○ Java

Gianfranco Lombardo, Ph.D ([email protected])


Linguaggi di programmazione

● Vi sono poi i linguaggi di scripting


○ “pronipoti” dei job control languages mediante i quali l’utente interagiva con il
calcolatore indicando a esso i compiti (job) da eseguire
○ dalle originali sequenze di semplici comandi essi sono evoluti in veri e propri
linguaggi di programmazione in grado di specificare qualsiasi algoritmo

● Tra i linguaggi di scripting più noti e usati menzioniamo Python e Javascript.

● Inizialmente i primi linguaggi di scripting nacquero dall'esigenza di automatizzare


alcune operazioni come l'esecuzione di programmi e l'interazione con essi: non
c'erano molti costrutti e spesso erano relegati a mansioni specifiche.

● Sono linguaggi interpretati e non compilati

Gianfranco Lombardo, Ph.D ([email protected])


Linguaggi di programmazione

● Vi sono poi i linguaggi di scripting


○ “pronipoti” dei job control languages mediante i quali l’utente interagiva con il
calcolatore indicando a esso i compiti (job) da eseguire
○ dalle originali sequenze di semplici comandi essi sono evoluti in veri e propri
linguaggi di programmazione in grado di specificare qualsiasi algoritmo

● Tra i linguaggi di scripting più noti e usati menzioniamo Python e Javascript.

● Inizialmente i primi linguaggi di scripting nacquero dall'esigenza di automatizzare


alcune operazioni come l'esecuzione di programmi e l'interazione con essi: non
c'erano molti costrutti e spesso erano relegati a mansioni specifiche.

● Sono linguaggi interpretati e non compilati

Gianfranco Lombardo, Ph.D ([email protected])


Linguaggi di programmazione

● Abbiamo introdotto l’Assembly: ne esiste però uno per ogni tipo di processore

Gianfranco Lombardo, Ph.D ([email protected])


Verso il compilatore

Gianfranco Lombardo, Ph.D ([email protected])


Verso il compilatore

Gianfranco Lombardo, Ph.D ([email protected])


Verso il compilatore

Gianfranco Lombardo, Ph.D ([email protected])


Verso il compilatore

Gianfranco Lombardo, Ph.D ([email protected])

Potrebbero piacerti anche