Capitolo 1 Computer, algoritmi e linguaggi c 2005-2010 Pearson Education Italia Capitolo 1 - 1 / 71 Informazioni sul corso Sito del corso: pighizzini.di.unimi.it/programmazione/ Laboratorio: Prof. Carlo Mereghetti, inizio 16 ottobre Esame: scritto + laboratorio + orale Compitini: novembre, gennaio Appelli: gennaio-febbraio, giugno-luglio, settembre c 2005-2010 Pearson Education Italia Capitolo 1 - 2 / 71 Esami – 1 Struttura dell’esame 1 L’esame di Programmazione consiste di una prova scritta, di una prova di laboratorio e di un colloquio. 2 Nella prova scritta viene richiesta la soluzione di alcuni esercizi (sullo stile di quelli presenti nel libro di testo e proposti nei compitini). 3 Nella prova di laboratorio viene richiesta la scrittura di codice che soddisfi specifiche assegnate. Per partecipare alla prova di laboratorio è necessario disporre di un account presso il SiLab. 4 Il colloquio verterà sui contenuti del corso. Oltre alla padronanza degli argomenti, nella prova orale si verificherà la capacità di esprimere correttamente e con termini appropriati i concetti appresi. c 2005-2010 Pearson Education Italia Capitolo 1 - 3 / 71 Esami – 2 Vincoli sull’ordine di svolgimento delle prove 1 La prova scritta e la prova di laboratorio possono essere sostenute in un ordine qualsiasi e in appelli differenti. Tuttavia, visto che le due prove riguardano, anche se da punti di vista diversi, gli stessi contenuti, si suggerisce fortemente di sostenere le prove nello stesso appello. 2 Si accede al colloquio dopo avere superato sia la prova scritta sia la prova di laboratorio. Al termine del colloquio verrà formulata e verbalizzata la valutazione finale dell’esame. Il colloquio può essere sostenuto nello stesso appello delle altre prove, o in un appello successivo, purché entro il limite massimo indicato sotto. c 2005-2010 Pearson Education Italia Capitolo 1 - 4 / 71 Esami – 3 Validità delle prove 1 L’esame deve essere completato entro l’ultimo appello previso per l’anno accademico, cioè quello di settembre 2012. Dopo tale appello eventuali parti d’esame superate saranno inderogabilmente annullate. 2 La partecipazione a una prova scritta annulla un’eventuale prova scritta già superata (inclusa la prova superata mediante compitini). 3 La partecipazione a una prova di laboratorio annulla un’eventuale prova di laboratorio già superata. 4 Il mancato superamento del colloquio implica l’annullamento della prova scritta e dunque rende necessaria la sua ripetizione. c 2005-2010 Pearson Education Italia Capitolo 1 - 5 / 71 Esami – 4 Compitini 1 Sulla base dei risultati ottenuti nei compitini lo studente può essere esonerato dalla prova scritta ed eventualmente dalla prova orale. 2 In caso di esonero dalla prova orale, il voto finale proposto sarà comunicato dopo il superamento della prova di laboratorio. 3 È necessario che lo studente si presenti alla prova orale per la verbalizzazione del risultato. 4 Lo studente ha comunque la facoltà di sostenere la prova orale. c 2005-2010 Pearson Education Italia Capitolo 1 - 6 / 71 Introduzione 1 2 3 4 Computer, algoritmi e programmi Computer, algoritmi e programmi Evoluzione della programmazione Finalità del corso Rappresentazione dell’informazione Dal linguaggio macchina ai linguaggi ad alto livello La macchina di Von Neumann Componenti principali di un computer I linguaggi ad alto livello Java Virtual Machine (JVM) Strumenti per la stesura dei programmi La programmazione strutturata Le strutture di controllo fondamentali Variabili e assegnamenti Sintassi e semantica Grammatiche Lessico del linguaggio Java c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 7 / 71 Sommario: Computer, algoritmi e linguaggi 1 2 3 4 Computer, algoritmi e programmi Computer, algoritmi e programmi Evoluzione della programmazione Finalità del corso Rappresentazione dell’informazione Dal linguaggio macchina ai linguaggi ad alto livello La macchina di Von Neumann Componenti principali di un computer I linguaggi ad alto livello Java Virtual Machine (JVM) Strumenti per la stesura dei programmi La programmazione strutturata Le strutture di controllo fondamentali Variabili e assegnamenti Sintassi e semantica Grammatiche Lessico del linguaggio Java c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 8 / 71 Computer e programmi Programmazione Codifica del procedimento risolutivo di un problema (algoritmo) in un insieme di istruzioni (programma) destinate ad un esecutore (macchina) c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 9 / 71 Computer e programmi Programmazione Codifica del procedimento risolutivo di un problema (algoritmo) in un insieme di istruzioni (programma) destinate ad un esecutore (macchina) Problema dell’ordinamento (sorting) Ordinare una sequenza di interi in modo crescente 21 5 9 10 13 2 6 c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 9 / 71 Computer e programmi Programmazione Codifica del procedimento risolutivo di un problema (algoritmo) in un insieme di istruzioni (programma) destinate ad un esecutore (macchina) Problema dell’ordinamento (sorting) Ordinare una sequenza di interi in modo crescente 21 5 9 10 13 2 6 Possiamo risolvere il problema usando diversi algoritmi: mergesort, bubblesort, quicksort c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 9 / 71 Computer e programmi Programmazione Codifica del procedimento risolutivo di un problema (algoritmo) in un insieme di istruzioni (programma) destinate ad un esecutore (macchina) Problema dell’ordinamento (sorting) Ordinare una sequenza di interi in modo crescente 21 5 9 10 13 2 6 Possiamo risolvere il problema usando diversi algoritmi: mergesort, bubblesort, quicksort Possiamo codificare l’algoritmo usando diversi linguaggi: c, visual basic, java c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 9 / 71 Computer e programmi Programmazione Codifica del procedimento risolutivo di un problema (algoritmo) in un insieme di istruzioni (programma) destinate ad un esecutore (macchina) Problema dell’ordinamento (sorting) Ordinare una sequenza di interi in modo crescente 21 5 9 10 13 2 6 Possiamo risolvere il problema usando diversi algoritmi: mergesort, bubblesort, quicksort Possiamo codificare l’algoritmo usando diversi linguaggi: c, visual basic, java Possiamo eseguire il programma su diversi processori: intel, amd, motorola c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 9 / 71 Algoritmi Algoritmo Insieme ordinato di passi eseguibili (non manipolo oggetti infiniti) e non ambigui che definiscono un processo terminante (no cicli infiniti). c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 10 / 71 Algoritmi Algoritmo Insieme ordinato di passi eseguibili (non manipolo oggetti infiniti) e non ambigui che definiscono un processo terminante (no cicli infiniti). La nozione di algoritmo precede quella di programmazione Algoritmo di Euclide per calcolare il massimo comun divisore (300 AC) Crivello di Eratostene per enumerare i numeri primi (250 AC) Algoritmi per la moltiplicazione, divisione, estrazione di radice quadrata. . . c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 10 / 71 L’algoritmo di Euclide Calcola il massimo comun divisore (MCD) fra due numeri interi x e y (x ≥ y > 0) c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 11 / 71 L’algoritmo di Euclide Calcola il massimo comun divisore (MCD) fra due numeri interi x e y (x ≥ y > 0) 1. Calcola il resto della divisione di x per y c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 11 / 71 L’algoritmo di Euclide Calcola il massimo comun divisore (MCD) fra due numeri interi x e y (x ≥ y > 0) 1. Calcola il resto della divisione di x per y 2. Se il resto è diverso da zero, ricomincia dal passo 1 utilizzando come x il valore attuale di y , e come y il valore del resto, c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 11 / 71 L’algoritmo di Euclide Calcola il massimo comun divisore (MCD) fra due numeri interi x e y (x ≥ y > 0) 1. Calcola il resto della divisione di x per y 2. Se il resto è diverso da zero, ricomincia dal passo 1 utilizzando come x il valore attuale di y , e come y il valore del resto, altrimenti prosegui con il passo successivo c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 11 / 71 L’algoritmo di Euclide Calcola il massimo comun divisore (MCD) fra due numeri interi x e y (x ≥ y > 0) 1. Calcola il resto della divisione di x per y 2. Se il resto è diverso da zero, ricomincia dal passo 1 utilizzando come x il valore attuale di y , e come y il valore del resto, altrimenti prosegui con il passo successivo 3. Il massimo comun divisore è uguale al valore attuale di y c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 11 / 71 L’algoritmo di Euclide Calcola il massimo comun divisore (MCD) fra due numeri interi x e y (x ≥ y > 0) 1. Calcola il resto della divisione di x per y 2. Se il resto è diverso da zero, ricomincia dal passo 1 utilizzando come x il valore attuale di y , e come y il valore del resto, altrimenti prosegui con il passo successivo 3. Il massimo comun divisore è uguale al valore attuale di y L’ intelligenza necessaria per trovare la soluzione del problema è tutta codificata nell’algoritmo c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 11 / 71 L’algoritmo di Euclide Calcola il massimo comun divisore (MCD) fra due numeri interi x e y (x ≥ y > 0) 1. Calcola il resto della divisione di x per y 2. Se il resto è diverso da zero, ricomincia dal passo 1 utilizzando come x il valore attuale di y , e come y il valore del resto, altrimenti prosegui con il passo successivo 3. Il massimo comun divisore è uguale al valore attuale di y L’ intelligenza necessaria per trovare la soluzione del problema è tutta codificata nell’algoritmo Chiunque sappia comprendere ed eseguire le operazioni che costituiscono l’algoritmo di Euclide, può calcolare l’MCD c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 11 / 71 Un esempio negativo 1. Crea un elenco di tutti i numeri primi 2. Ordina l’elenco in modo decrescente 3. Preleva il primo elemento dall’elenco risultante È un algoritmo? c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 12 / 71 Un esempio negativo 1. Crea un elenco di tutti i numeri primi 2. Ordina l’elenco in modo decrescente 3. Preleva il primo elemento dall’elenco risultante È un algoritmo? Non lo è La prima e la seconda istruzione non sono effettivamente eseguibili in quanto richiedono la manipolazione di infiniti elementi c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 12 / 71 Algoritmi e programmi Programma È la codifica di un algoritmo in un linguaggio che un esecutore è in grado di eseguire su una data macchina senza bisogno di ulteriori spiegazioni LOAD LOAD start DIV MUL LOAD SUB R1, R2, R1, R1, R2, R2, 101 102 R2 R2 101 R1 c 2005-2010 Pearson Education Italia LOAD JZERO STORE STORE JUMP end LOAD STORE R1, 102 R2, end R1, 101 R2, 102 start R1, 102 R1, 103 Capitolo 1 - Computer, algoritmi e linguaggi 13 / 71 Evoluzione della programmazione c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 14 / 71 Evoluzione della programmazione anni ’40-’50 Programmi scritti direttamente nel linguaggio del processore (linguaggio macchina). Difficili da scrivere e da modificare. c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 14 / 71 Evoluzione della programmazione anni ’40-’50 Programmi scritti direttamente nel linguaggio del processore (linguaggio macchina). Difficili da scrivere e da modificare. 1954 Nascita dei linguaggi ad alto livello e dei compilatori. fortran (IBM) c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 14 / 71 Evoluzione della programmazione anni ’40-’50 Programmi scritti direttamente nel linguaggio del processore (linguaggio macchina). Difficili da scrivere e da modificare. 1954 Nascita dei linguaggi ad alto livello e dei compilatori. fortran (IBM) 1958 Nascita dei linguaggi “multipiattaforma”. algol c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 14 / 71 Evoluzione della programmazione anni ’40-’50 Programmi scritti direttamente nel linguaggio del processore (linguaggio macchina). Difficili da scrivere e da modificare. 1954 Nascita dei linguaggi ad alto livello e dei compilatori. fortran (IBM) 1958 Nascita dei linguaggi “multipiattaforma”. algol 1970 Programmazione strutturata (Dijkstra). Blocchi, top-down, no goto. Strutture di controllo: sequenza, selezione e ciclo. Struttura → correttezza, manutebilità. pascal, ada c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 14 / 71 Evoluzione della programmazione anni ’40-’50 Programmi scritti direttamente nel linguaggio del processore (linguaggio macchina). Difficili da scrivere e da modificare. 1954 Nascita dei linguaggi ad alto livello e dei compilatori. fortran (IBM) 1958 Nascita dei linguaggi “multipiattaforma”. algol 1970 Programmazione strutturata (Dijkstra). Blocchi, top-down, no goto. Strutture di controllo: sequenza, selezione e ciclo. Struttura → correttezza, manutebilità. pascal, ada 1972 Programmazione ad oggetti. smalltalk c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 14 / 71 Evoluzione della programmazione anni ’40-’50 Programmi scritti direttamente nel linguaggio del processore (linguaggio macchina). Difficili da scrivere e da modificare. 1954 Nascita dei linguaggi ad alto livello e dei compilatori. fortran (IBM) 1958 Nascita dei linguaggi “multipiattaforma”. algol 1970 Programmazione strutturata (Dijkstra). Blocchi, top-down, no goto. Strutture di controllo: sequenza, selezione e ciclo. Struttura → correttezza, manutebilità. pascal, ada 1972 Programmazione ad oggetti. smalltalk 1991 java (Sun, acquistata da Oracle). c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 14 / 71 Evoluzione della programmazione (cont.) Tendenza generale Il linguaggio si astrae dalle caratteristiche della macchina Programmazione strutturata → struttura nel codice Programmazione ad oggetti → struttura nei dati c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 15 / 71 Evoluzione della programmazione (cont.) Tendenza generale Il linguaggio si astrae dalle caratteristiche della macchina Programmazione strutturata → struttura nel codice Programmazione ad oggetti → struttura nei dati Programmazione ad oggetti Idea di fondo: disegno il software attorno agli oggetti manipolati piuttosto che attorno alle azioni eseguite sugli oggetti Approccio giustificato perché si parte dal problema (dato) e non dalla soluzione (algoritmo) La rappresentazione dei dati (oggetto) è più stabile rispetto al codice che implementa le operazioni su di esso Posso usare oggetti semplici per costruire oggetti più complessi (riuso del software) c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 15 / 71 Finalità del corso Acquisire le abilità necessarie per programmare usando linguaggi ad oggetti Non è un corso di Java: il linguaggio è uno strumento per esemplificare i concetti c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 16 / 71 Finalità del corso Acquisire le abilità necessarie per programmare usando linguaggi ad oggetti Non è un corso di Java: il linguaggio è uno strumento per esemplificare i concetti Organizzazione del corso Parte I: Combinazione di oggetti già esistenti (quali servono, come li combino) Parte II: Costruzione di classi di oggetti → costruire classi che possono essere riusate per affrontare problemi diversi c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 16 / 71 Rappresentazione dell’informazione Nel computer, qualsiasi informazione deve esssere rappresentata in forma digitale binaria come sequenza di bit Bit (binary digit): una quantità astratta che può assumere soltanto due valori distinti Digitalizzazione: processo che traduce informazione in formato binario (immagini, audio, video, testi, programmi) In alcuni casi il processo di digitalizzazione comporta perdita di informazione (data entry rispetto a campionamento) c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 17 / 71 Rappresentazione di numeri e caratteri Con n bit posso rappresentare al più 2n interi distinti c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 18 / 71 Rappresentazione di numeri e caratteri Con n bit posso rappresentare al più 2n interi distinti n=3 → 23 = 8 000 001 010 011 100 101 110 111 c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 18 / 71 Rappresentazione di numeri e caratteri Con n bit posso rappresentare al più 2n interi distinti n=3 → 23 = 8 000 001 010 011 100 101 110 111 Alcuni tipi di codifiche Caratteri alfanumerici ASCII: 8 bit per ogni carattere (28 = 256 caratteri) c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 18 / 71 Rappresentazione di numeri e caratteri Con n bit posso rappresentare al più 2n interi distinti n=3 → 23 = 8 000 001 010 011 100 101 110 111 Alcuni tipi di codifiche Caratteri alfanumerici ASCII: 8 bit per ogni carattere (28 = 256 caratteri) Caratteri alfanumerici Unicode: 16 bit per ogni carattere (216 = 65536 caratteri) c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 18 / 71 Rappresentazione di numeri e caratteri Con n bit posso rappresentare al più 2n interi distinti n=3 → 23 = 8 000 001 010 011 100 101 110 111 Alcuni tipi di codifiche Caratteri alfanumerici ASCII: 8 bit per ogni carattere (28 = 256 caratteri) Caratteri alfanumerici Unicode: 16 bit per ogni carattere (216 = 65536 caratteri) Codifica tipica numeri interi: 32 bit per ogni intero. Rappresento il range {−231 , . . . , 0, . . . , 231 − 1} c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 18 / 71 Rappresentazione di numeri e caratteri Con n bit posso rappresentare al più 2n interi distinti n=3 → 23 = 8 000 001 010 011 100 101 110 111 Alcuni tipi di codifiche Caratteri alfanumerici ASCII: 8 bit per ogni carattere (28 = 256 caratteri) Caratteri alfanumerici Unicode: 16 bit per ogni carattere (216 = 65536 caratteri) Codifica tipica numeri interi: 32 bit per ogni intero. Rappresento il range {−231 , . . . , 0, . . . , 231 − 1} Codifica tipica numeri decimali: 64 bit per ogni numero x = m × 10e 53 bit per m e 11 bit per e −6 Esempio: 0,000012 = 12 × 10 c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 18 / 71 I multipli del bit 1 byte = 8 bit c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 19 / 71 I multipli del bit 1 byte = 8 bit Kilobyte 210 (circa 103 ) byte. Una pagina web statica c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 19 / 71 I multipli del bit 1 byte = 8 bit Kilobyte 210 (circa 103 ) byte. Una pagina web statica Megabyte 220 (circa 106 ) byte. Una fotografia digitale c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 19 / 71 I multipli del bit 1 byte = 8 bit Kilobyte 210 (circa 103 ) byte. Una pagina web statica Megabyte 220 (circa 106 ) byte. Una fotografia digitale Gigabyte 230 (circa 109 ) byte. Un banco di memoria RAM c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 19 / 71 I multipli del bit 1 byte = 8 bit Kilobyte 210 (circa 103 ) byte. Una pagina web statica Megabyte 220 (circa 106 ) byte. Una fotografia digitale Gigabyte 230 (circa 109 ) byte. Un banco di memoria RAM Terabyte 240 (circa 1012 ) byte. Un disco fisso esterno c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 19 / 71 I multipli del bit 1 byte = 8 bit Kilobyte 210 (circa 103 ) byte. Una pagina web statica Megabyte 220 (circa 106 ) byte. Una fotografia digitale Gigabyte 230 (circa 109 ) byte. Un banco di memoria RAM Terabyte 240 (circa 1012 ) byte. Un disco fisso esterno Petabyte 250 (circa 1015 ) byte. Un datacenter c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 19 / 71 I multipli del bit 1 byte = 8 bit Kilobyte 210 (circa 103 ) byte. Una pagina web statica Megabyte 220 (circa 106 ) byte. Una fotografia digitale Gigabyte 230 (circa 109 ) byte. Un banco di memoria RAM Terabyte 240 (circa 1012 ) byte. Un disco fisso esterno Petabyte 250 (circa 1015 ) byte. Un datacenter Exabyte 260 (circa 1018 ) byte. Traffico mobile dati nel mondo al mese c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 19 / 71 I multipli del bit 1 byte = 8 bit Kilobyte 210 (circa 103 ) byte. Una pagina web statica Megabyte 220 (circa 106 ) byte. Una fotografia digitale Gigabyte 230 (circa 109 ) byte. Un banco di memoria RAM Terabyte 240 (circa 1012 ) byte. Un disco fisso esterno Petabyte 250 (circa 1015 ) byte. Un datacenter Exabyte 260 (circa 1018 ) byte. Traffico mobile dati nel mondo al mese Zettabyte 270 (circa 1021 ) byte. Tutto il web c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 19 / 71 Sommario: Computer, algoritmi e linguaggi 1 2 3 4 Computer, algoritmi e programmi Computer, algoritmi e programmi Evoluzione della programmazione Finalità del corso Rappresentazione dell’informazione Dal linguaggio macchina ai linguaggi ad alto livello La macchina di Von Neumann Componenti principali di un computer I linguaggi ad alto livello Java Virtual Machine (JVM) Strumenti per la stesura dei programmi La programmazione strutturata Le strutture di controllo fondamentali Variabili e assegnamenti Sintassi e semantica Grammatiche Lessico del linguaggio Java c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 20 / 71 Il Computer Computer: macchina elettronica programmabile (lavatrice?) c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 21 / 71 Il Computer Computer: macchina elettronica programmabile (lavatrice?) Il computer è una macchina universale, ovvero può eseguire qualsiasi algoritmo c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 21 / 71 Il Computer Computer: macchina elettronica programmabile (lavatrice?) Il computer è una macchina universale, ovvero può eseguire qualsiasi algoritmo Negli anni Trenta il matematico inglese Alan Turing caratterizza ciò che può essere calcolato da un algoritmo c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 21 / 71 Il Computer Computer: macchina elettronica programmabile (lavatrice?) Il computer è una macchina universale, ovvero può eseguire qualsiasi algoritmo Negli anni Trenta il matematico inglese Alan Turing caratterizza ciò che può essere calcolato da un algoritmo Negli anni Quaranta il matematico ungherese John von Neumann definisce l’architettura base di un calcolatore universale (stored-program computer ) c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 21 / 71 La macchina di Von Neumann (1946) I componenti fondamentali dell’hardware di un elaboratore sono: c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 22 / 71 La macchina di Von Neumann (1946) I componenti fondamentali dell’hardware di un elaboratore sono: Memoria Contiene il programma da eseguire e i dati da esso utilizzati. c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 22 / 71 La macchina di Von Neumann (1946) I componenti fondamentali dell’hardware di un elaboratore sono: Memoria Contiene il programma da eseguire e i dati da esso utilizzati. Processore È l’esecutore del programma e opera ripetendo il ciclo Decode Fetch Execute c 2005-2010 Pearson Education Italia 1 Fetch: preleva la prossima istruzione 2 Decode: scomponi l’istruzione in operatore e operandi 3 Execute: applica l’operatore agli operandi Capitolo 1 - Computer, algoritmi e linguaggi 22 / 71 Hardware La parte fisica del computer c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 23 / 71 Hardware La parte fisica del computer Processore o unità centrale (CPU) Il dispositivo che esegue effettivamente l’operazione c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 23 / 71 Hardware La parte fisica del computer Processore o unità centrale (CPU) Il dispositivo che esegue effettivamente l’operazione Memoria centrale Suddivisa in celle della stessa dimensione (p.es., 4 byte) Ogni cella identificata da un indirizzo Tempo di accesso costante (circa 10 nanosecondi = 10−8 secondi) RAM: memoria volatile di lettura/scrittura; contiene i programmi in esecuzione e parte dei loro dati ROM: memoria permanente di sola lettura; contiene informazioni necessarie all’avvio del computer (BIOS) c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 23 / 71 Hardware (cont.) Memoria di massa: Hard-disk, CD, DVD, chiavi USB Tempo di accesso non costante (tranne per chiavi USB), tempo medio di accesso di molto superiore a RAM Informazione organizzata in files all’interno di un file-system c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 24 / 71 Hardware (cont.) Memoria di massa: Hard-disk, CD, DVD, chiavi USB Tempo di accesso non costante (tranne per chiavi USB), tempo medio di accesso di molto superiore a RAM Informazione organizzata in files all’interno di un file-system Periferiche Video, tastiera, mouse, scheda rete, stampante, . . . Permettono la comunicazione fra computer e mondo esterno c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 24 / 71 Hardware (cont.) Memoria di massa: Hard-disk, CD, DVD, chiavi USB Tempo di accesso non costante (tranne per chiavi USB), tempo medio di accesso di molto superiore a RAM Informazione organizzata in files all’interno di un file-system Periferiche Video, tastiera, mouse, scheda rete, stampante, . . . Permettono la comunicazione fra computer e mondo esterno Bus: Circuiti di connessione fra componenti c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 24 / 71 Software L’insieme di tutti i programmi utilizzabili dal computer c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 25 / 71 Software L’insieme di tutti i programmi utilizzabili dal computer Sistema operativo Mette a disposizione e amministra le risorse del computer Esecuzione comandi tramite shell o desktop Accesso alle risorse (CPU, memoria e periferiche) Condivisione ottimale delle risorse fra più processi utilizzatori c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 25 / 71 Software L’insieme di tutti i programmi utilizzabili dal computer Sistema operativo Mette a disposizione e amministra le risorse del computer Esecuzione comandi tramite shell o desktop Accesso alle risorse (CPU, memoria e periferiche) Condivisione ottimale delle risorse fra più processi utilizzatori Utility e SW di base Consentono all’utente di effettuare delle attività di gestione Copiatura e compressione file, sicurezza, sviluppo codice c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 25 / 71 Software L’insieme di tutti i programmi utilizzabili dal computer Sistema operativo Mette a disposizione e amministra le risorse del computer Esecuzione comandi tramite shell o desktop Accesso alle risorse (CPU, memoria e periferiche) Condivisione ottimale delle risorse fra più processi utilizzatori Utility e SW di base Consentono all’utente di effettuare delle attività di gestione Copiatura e compressione file, sicurezza, sviluppo codice Programmi applicativi c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 25 / 71 Linguaggio macchina e assembler Ogni processore ha un proprio linguaggio macchina con un proprio formato delle istruzioni c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 26 / 71 Linguaggio macchina e assembler Ogni processore ha un proprio linguaggio macchina con un proprio formato delle istruzioni Le istruzioni sono sequenze di bit che codificano: l’operazione da eseguire gli operandi su cui tale operazione deve essere eseguita c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 26 / 71 Linguaggio macchina e assembler Ogni processore ha un proprio linguaggio macchina con un proprio formato delle istruzioni Le istruzioni sono sequenze di bit che codificano: l’operazione da eseguire gli operandi su cui tale operazione deve essere eseguita Gli operandi sono: indirizzi di memoria RAM registri del processore costanti (p.es., 5) c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 26 / 71 Linguaggio macchina e assembler Ogni processore ha un proprio linguaggio macchina con un proprio formato delle istruzioni Le istruzioni sono sequenze di bit che codificano: l’operazione da eseguire gli operandi su cui tale operazione deve essere eseguita Gli operandi sono: indirizzi di memoria RAM registri del processore costanti (p.es., 5) Nota: Tutte le operazioni aritmetico-logiche vengono effettuate soltanto su operandi contenuti in registri del processore c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 26 / 71 Linguaggio macchina e assembler Ogni processore ha un proprio linguaggio macchina con un proprio formato delle istruzioni Le istruzioni sono sequenze di bit che codificano: l’operazione da eseguire gli operandi su cui tale operazione deve essere eseguita Gli operandi sono: indirizzi di memoria RAM registri del processore costanti (p.es., 5) Nota: Tutte le operazioni aritmetico-logiche vengono effettuate soltanto su operandi contenuti in registri del processore Il linguaggio assembler di un processore è la versione simbolica del linguaggio macchina c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 26 / 71 Un assembler “giocattolo” Istruzioni di trasferimento : LOAD R, x c 2005-2010 Pearson Education Italia STORE R, y ... Capitolo 1 - Computer, algoritmi e linguaggi 27 / 71 Un assembler “giocattolo” Istruzioni di trasferimento : LOAD R, x STORE R, y ... Istruzioni aritmetico-logiche ADD R1, R2 c 2005-2010 Pearson Education Italia MUL R1, R2 ... Capitolo 1 - Computer, algoritmi e linguaggi 27 / 71 Un assembler “giocattolo” Istruzioni di trasferimento : LOAD R, x STORE R, y ... Istruzioni aritmetico-logiche ADD R1, R2 MUL R1, R2 ... Istruzioni di controllo e di salto salto incondizionato salto condizionato JUMP alfa ... alfa:... c 2005-2010 Pearson Education Italia JZERO R1, alfa ... alfa:... Capitolo 1 - Computer, algoritmi e linguaggi 27 / 71 L’algoritmo di Euclide Calcola il massimo comun divisore (MCD) fra due numeri x e y (x ≥ y > 0) c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 28 / 71 L’algoritmo di Euclide Calcola il massimo comun divisore (MCD) fra due numeri x e y (x ≥ y > 0) 1. Calcola il resto della divisione di x per y 2. Se il resto è diverso da zero, ricomincia dal passo 1 utilizzando come x il valore attuale di y , e come y il valore del resto, altrimenti prosegui con il passo successivo 3. Il massimo comun divisore è uguale al valore attuale di y c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 28 / 71 Correttezza dell’algoritmo di Euclide L’algoritmo di Euclide può essere riscritto come Se x%y = 0 allora MCD(x,y) = y altrimenti MCD(x,y) = MCD(y,x%y) c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 29 / 71 Correttezza dell’algoritmo di Euclide L’algoritmo di Euclide può essere riscritto come Se x%y = 0 allora MCD(x,y) = y altrimenti MCD(x,y) = MCD(y,x%y) La parte “se . . . allora” è chiaramente corretta. Verifichiamo la correttezza della parte “altrimenti” c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 29 / 71 Correttezza dell’algoritmo di Euclide L’algoritmo di Euclide può essere riscritto come Se x%y = 0 allora MCD(x,y) = y altrimenti MCD(x,y) = MCD(y,x%y) La parte “se . . . allora” è chiaramente corretta. Verifichiamo la correttezza della parte “altrimenti” Dato che x > y possiamo scrivere x = yk + q dove k e q sono due interi positivi con q < y c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 29 / 71 Correttezza dell’algoritmo di Euclide L’algoritmo di Euclide può essere riscritto come Se x%y = 0 allora MCD(x,y) = y altrimenti MCD(x,y) = MCD(y,x%y) La parte “se . . . allora” è chiaramente corretta. Verifichiamo la correttezza della parte “altrimenti” Dato che x > y possiamo scrivere x = yk + q dove k e q sono due interi positivi con q < y Sia g = MCD(x, y ). Allora q divide g , infatti x yk + q yk q = = + g g g g c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 29 / 71 Correttezza dell’algoritmo di Euclide L’algoritmo di Euclide può essere riscritto come Se x%y = 0 allora MCD(x,y) = y altrimenti MCD(x,y) = MCD(y,x%y) La parte “se . . . allora” è chiaramente corretta. Verifichiamo la correttezza della parte “altrimenti” Dato che x > y possiamo scrivere x = yk + q dove k e q sono due interi positivi con q < y Sia g = MCD(x, y ). Allora q divide g , infatti x yk + q yk q = = + g g g g Dato che (yk)/g e (yk)/g + q/g sono entrambi interi, anche q/g è intero c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 29 / 71 Correttezza dell’algoritmo di Euclide L’algoritmo di Euclide può essere riscritto come Se x%y = 0 allora MCD(x,y) = y altrimenti MCD(x,y) = MCD(y,x%y) La parte “se . . . allora” è chiaramente corretta. Verifichiamo la correttezza della parte “altrimenti” Dato che x > y possiamo scrivere x = yk + q dove k e q sono due interi positivi con q < y Sia g = MCD(x, y ). Allora q divide g , infatti x yk + q yk q = = + g g g g Dato che (yk)/g e (yk)/g + q/g sono entrambi interi, anche q/g è intero Quindi g è anche il massimo comun divisore fra y e q = x%y c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 29 / 71 L’algoritmo di Euclide in assembler LOAD LOAD start DIV MUL LOAD SUB JZERO LOAD STORE STORE JUMP end LOAD STORE R1, 101 R2, 102 R1, R2 R1, R2 R2, 101 R2, R1 R2, end R1, 102 R1, 101 R2, 102 start R1, 102 R1, 103 x%y = x − bx/y cy c 2005-2010 Pearson Education Italia R1 <- 101 (input x) R2 <- 102 (input y) R1 <- R1/R2 (divisione intera) R1 <- R1*R2 (moltiplicazione) R2 <- 101 R2 <- R2-R1 (R2 = resto div.) IF R2=0 GOTO end R1 <- 102 101 <- R1 102 <- R2 GOTO start R1 <- 102 103 <- R1 Esempio: 8%3 = 8 − b8/3c3 Capitolo 1 - Computer, algoritmi e linguaggi 30 / 71 Svantaggi del linguaggio macchina È necessario conoscere i dettagli dell’architettura del processore utilizzato e il relativo linguaggio c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 31 / 71 Svantaggi del linguaggio macchina È necessario conoscere i dettagli dell’architettura del processore utilizzato e il relativo linguaggio Risulta impossibile trasportare i programmi da una macchina ad una differente c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 31 / 71 Svantaggi del linguaggio macchina È necessario conoscere i dettagli dell’architettura del processore utilizzato e il relativo linguaggio Risulta impossibile trasportare i programmi da una macchina ad una differente Il programmatore si specializza nell’uso di “trucchi” legati alle caratteristiche specifiche della macchina I programmi risultano difficili da comprendere e da modificare. c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 31 / 71 Svantaggi del linguaggio macchina È necessario conoscere i dettagli dell’architettura del processore utilizzato e il relativo linguaggio Risulta impossibile trasportare i programmi da una macchina ad una differente Il programmatore si specializza nell’uso di “trucchi” legati alle caratteristiche specifiche della macchina I programmi risultano difficili da comprendere e da modificare. La struttura logica del programma è nascosta Difficile comprendere il programma e correggerlo in presenza di errori c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 31 / 71 Richiamo L’esecutore di un programma opera ripetendo il ciclo Decode Fetch Execute c 2005-2010 Pearson Education Italia 1 Fetch: preleva la prossima istruzione 2 Decode: scomponi l’istruzione in operatore e operandi 3 Execute: applica l’operatore agli operandi Capitolo 1 - Computer, algoritmi e linguaggi 32 / 71 I linguaggi ad alto livello Linguaggi di programmazione Insiemi di regole per costruire sequenze di istruzioni (cioè programmi) che possono essere direttamente eseguite da una macchina c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 33 / 71 I linguaggi ad alto livello Linguaggi di programmazione Insiemi di regole per costruire sequenze di istruzioni (cioè programmi) che possono essere direttamente eseguite da una macchina Macchina fisica È il processore, cioè l’esecutore dei programmi in linguaggio macchina c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 33 / 71 I linguaggi ad alto livello Linguaggi di programmazione Insiemi di regole per costruire sequenze di istruzioni (cioè programmi) che possono essere direttamente eseguite da una macchina Macchina fisica È il processore, cioè l’esecutore dei programmi in linguaggio macchina Macchina virtuale (per un dato linguaggio L) È un programma (detto interprete) che svolge il ruolo di esecutore per i programmi nel linguaggio L c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 33 / 71 I linguaggi ad alto livello Linguaggi di programmazione Insiemi di regole per costruire sequenze di istruzioni (cioè programmi) che possono essere direttamente eseguite da una macchina Macchina fisica È il processore, cioè l’esecutore dei programmi in linguaggio macchina Macchina virtuale (per un dato linguaggio L) È un programma (detto interprete) che svolge il ruolo di esecutore per i programmi nel linguaggio L Linguaggi ad alto livello Linguaggi le cui istruzioni sono eseguibili da una macchina virtuale in grado di effettuare operazioni più complesse rispetto alle operazioni elementari dei processori reali c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 33 / 71 Compilatori e interpreti Compilatore È un programma che traduce un programma del linguaggio L in un programma equivalente nel linguaggio macchina c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 34 / 71 Compilatori e interpreti Compilatore È un programma che traduce un programma del linguaggio L in un programma equivalente nel linguaggio macchina Interprete È una macchina virtuale per un dato linguaggio. Opera ripetendo il ciclo 1 Fetch: legge la prossima istruzione del programma 2 Decode: traduce l’istruzione in corrispondenti istruzioni del linguaggio macchina 3 Execute: esegue le istruzioni del linguaggio macchina c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 34 / 71 Compilatori e interpreti Compilatore È un programma che traduce un programma del linguaggio L in un programma equivalente nel linguaggio macchina Interprete È una macchina virtuale per un dato linguaggio. Opera ripetendo il ciclo 1 Fetch: legge la prossima istruzione del programma 2 Decode: traduce l’istruzione in corrispondenti istruzioni del linguaggio macchina 3 Execute: esegue le istruzioni del linguaggio macchina Nota Un compilatore può anche tradurre un programma in un programma equivalente in un linguaggio diverso dal linguaggio macchina c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 34 / 71 Interpreti L’interprete “espande” ogni istruzione del linguaggio in una sequenza di istruzioni in linguaggio macchina c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 35 / 71 Interpreti L’interprete “espande” ogni istruzione del linguaggio in una sequenza di istruzioni in linguaggio macchina . . . y <- x - (x/y)*y . . . c 2005-2010 Pearson Education Italia LOAD R1 x LOAD R2 y DIV R1 R2 MUL R1 R2 LOAD R2 x SUB R2 R1 STO R2 y Capitolo 1 - Computer, algoritmi e linguaggi 35 / 71 Compilatori Programma Pascal Saluti.exe 0110010... ___________ _____ ________ _______ _________ program Saluti; _____________ _____ ________ _______ _________ 0110010... Saluti Compilatore Pascal per X Macchina X c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 36 / 71 Portabilità del sorgente Programma Pascal Indipendente dalla piattaforma program p (input,output); var x:integer; ... Compilatore per Windows Compilatore per Linux Compilatore per MacOs Eseguibile Eseguibile Eseguibile Windows c 2005-2010 Pearson Education Italia Linux Dipendente dalla piattaforma MacOS Capitolo 1 - Computer, algoritmi e linguaggi 37 / 71 Java Virtual Machine (JVM) Interprete (java) Saluti.java _____________ _____ ________ _______ _________ Compilatore (javac) Saluti 0110010... Saluti.class ___________ _____ ________ _______ _________ Il compilatore Java traduce il sorgente in un programma per il linguaggio bytecode La Java Virtual Machine è un interprete per il bytecode c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 38 / 71 Vantaggi: portabilità del bytecode Programma Java Indipendente dalla piattaforma Compilatore class Saluti{ ... } bytecode Interprete per Windows Interprete per Linux Interprete per MacOs Dipendente dalla piattaforma Windows c 2005-2010 Pearson Education Italia Linux MacOS Capitolo 1 - Computer, algoritmi e linguaggi 39 / 71 Vantaggi: leggerezza del bytecode Saluti.java _____________ _____ ________ _______ _________ Interprete (java) 0110010... Compilatore (javac) Network Saluti Saluti.class ___________ _____ ________ _______ _________ c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 40 / 71 Strumenti per la stesura dei programmi errori di compilazione programma sorgente compilatore programma oggetto errori del linker linker eseguibile librerie input output output ed errori di esecuzione c 2005-2010 Pearson Education Italia modifiche esecutore Capitolo 1 - Computer, algoritmi e linguaggi 41 / 71 Sommario: Computer, algoritmi e linguaggi 1 2 3 4 Computer, algoritmi e programmi Computer, algoritmi e programmi Evoluzione della programmazione Finalità del corso Rappresentazione dell’informazione Dal linguaggio macchina ai linguaggi ad alto livello La macchina di Von Neumann Componenti principali di un computer I linguaggi ad alto livello Java Virtual Machine (JVM) Strumenti per la stesura dei programmi La programmazione strutturata Le strutture di controllo fondamentali Variabili e assegnamenti Sintassi e semantica Grammatiche Lessico del linguaggio Java c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 42 / 71 Programmazione strutturata Metodologia di programmazione introdotta agli inizi degli anni settanta. La sequenza di esecuzione delle istruzioni (flusso di esecuzione) è controllata da tre strutture di controllo fondamentali: c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 43 / 71 Programmazione strutturata Metodologia di programmazione introdotta agli inizi degli anni settanta. La sequenza di esecuzione delle istruzioni (flusso di esecuzione) è controllata da tre strutture di controllo fondamentali: Sequenza permette di eseguire le istruzioni secondo l’ordine in cui sono scritte c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 43 / 71 Programmazione strutturata Metodologia di programmazione introdotta agli inizi degli anni settanta. La sequenza di esecuzione delle istruzioni (flusso di esecuzione) è controllata da tre strutture di controllo fondamentali: Sequenza permette di eseguire le istruzioni secondo l’ordine in cui sono scritte Selezione permette di scegliere l’esecuzione di un blocco di istruzioni tra due possibili in base al valore di una condizione c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 43 / 71 Programmazione strutturata Metodologia di programmazione introdotta agli inizi degli anni settanta. La sequenza di esecuzione delle istruzioni (flusso di esecuzione) è controllata da tre strutture di controllo fondamentali: Sequenza permette di eseguire le istruzioni secondo l’ordine in cui sono scritte Selezione permette di scegliere l’esecuzione di un blocco di istruzioni tra due possibili in base al valore di una condizione Iterazione permette di ripetere l’esecuzione di una o più istruzioni in base al valore di una condizione c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 43 / 71 Programmazione strutturata L’impiego di queste strutture migliora la leggibilità dei programmi Ogni struttura di controllo ha un solo punto di ingresso e un solo punto d’uscita Il flusso di esecuzione è evidente dalla struttura del codice c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 44 / 71 Programmazione strutturata L’impiego di queste strutture migliora la leggibilità dei programmi Ogni struttura di controllo ha un solo punto di ingresso e un solo punto d’uscita Il flusso di esecuzione è evidente dalla struttura del codice Teorema di Jacopini-Böhm (1966) Le tre strutture di controllo fondamentali (sequenza, iterazione e selezione) sono sufficienti per implementare qualunque algoritmo. c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 44 / 71 Programmazione strutturata L’impiego di queste strutture migliora la leggibilità dei programmi Ogni struttura di controllo ha un solo punto di ingresso e un solo punto d’uscita Il flusso di esecuzione è evidente dalla struttura del codice Teorema di Jacopini-Böhm (1966) Le tre strutture di controllo fondamentali (sequenza, iterazione e selezione) sono sufficienti per implementare qualunque algoritmo. Quindi una macchina virtuale per un linguaggio che comprende le tre strutture di controllo fondamentali è un computer universale. c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 44 / 71 Programmazione strutturata L’impiego di queste strutture migliora la leggibilità dei programmi Ogni struttura di controllo ha un solo punto di ingresso e un solo punto d’uscita Il flusso di esecuzione è evidente dalla struttura del codice Teorema di Jacopini-Böhm (1966) Le tre strutture di controllo fondamentali (sequenza, iterazione e selezione) sono sufficienti per implementare qualunque algoritmo. Quindi una macchina virtuale per un linguaggio che comprende le tre strutture di controllo fondamentali è un computer universale. Descriviamo le strutture di controllo utilizzando uno pseudo-codice c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 44 / 71 Sequenza Le istruzioni sono eseguite nello stesso ordine in cui compaiono nel programma, cioè secondo la sequenza in cui sono scritte. Example: Somma di due numeri leggi i numeri a, b calcola a + b scrivi il risultato c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 45 / 71 Selezione Sintassi SE condizione ALLORA blocco1 ALTRIMENTI blocco2 FINESE c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 46 / 71 Selezione Sintassi SE condizione ALLORA blocco1 ALTRIMENTI blocco2 FINESE Esecuzione (1) Viene valutata condizione c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 46 / 71 Selezione Sintassi SE condizione ALLORA blocco1 ALTRIMENTI blocco2 FINESE Esecuzione (1) Viene valutata condizione se è vera vengono eseguite le istruzioni del blocco1 c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 46 / 71 Selezione Sintassi SE condizione ALLORA blocco1 ALTRIMENTI blocco2 FINESE Esecuzione (1) Viene valutata condizione se è vera vengono eseguite le istruzioni del blocco1 se è falsa vengono eseguite quelle del blocco2 c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 46 / 71 Selezione Sintassi SE condizione ALLORA blocco1 ALTRIMENTI blocco2 FINESE Esecuzione (1) Viene valutata condizione se è vera vengono eseguite le istruzioni del blocco1 se è falsa vengono eseguite quelle del blocco2 (2) L’esecuzione procede con l’istruzione che segue immediatamente la fine del costrutto di selezione (FINESE) c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 46 / 71 Selezione (senza ALTRIMENTI) Sintassi SE condizione ALLORA blocco1 FINESE c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 47 / 71 Selezione (senza ALTRIMENTI) Sintassi SE condizione ALLORA blocco1 FINESE Esecuzione Viene valutata condizione: se è vera vengono eseguite le istruzioni del blocco1 c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 47 / 71 Selezione (senza ALTRIMENTI) Sintassi SE condizione ALLORA blocco1 FINESE Esecuzione Viene valutata condizione: se è vera vengono eseguite le istruzioni del blocco1 quindi l’esecuzione riprende dalla prima istruzione che segue il costrutto di selezione c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 47 / 71 Selezione (senza ALTRIMENTI) Sintassi SE condizione ALLORA blocco1 FINESE Esecuzione Viene valutata condizione: se è vera vengono eseguite le istruzioni del blocco1 quindi l’esecuzione riprende dalla prima istruzione che segue il costrutto di selezione se è falsa l’esecuzione prosegue direttamente dalla prima istruzione che segue il costrutto di selezione c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 47 / 71 Esempio Calcolo della divisione tra due numeri controllando che il divisore sia diverso da zero: leggi il dividendo e il divisore SE il divisore è diverso da zero ALLORA calcola dividendo/divisore scrivi il risultato ALTRIMENTI scrivi “errore: divisione per zero” FINESE c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 48 / 71 Esempio Calcolo della divisione tra due numeri controllando che il divisore sia diverso da zero: leggi il dividendo e il divisore SE il divisore è diverso da zero ALLORA calcola dividendo/divisore scrivi il risultato ALTRIMENTI scrivi “errore: divisione per zero” FINESE Le strutture di controllo possono essere innestate c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 48 / 71 Esempio: calcolo delle radici di ax 2 + bx + c = 0 leggi i valori dei parametri a, b, c calcola il discriminante ∆ = b 2 − 4ac SE il discriminante è minore di zero ALLORA scrivi “nessuna soluzione reale” ALTRIMENTI SE il discriminante è uguale a zero ALLORA calcola −b 2a scrivi “Due soluzioni coincidenti: ”, il risultato ALTRIMENTI scrivi “Due √ soluzioni: ”, ∆ calcola −b− e scrivi il risultato 2a√ −b+ ∆ calcola e scrivi il risultato 2a FINESE FINESE c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 49 / 71 Iterazione (schema 1) Sintassi ESEGUI blocco QUANDO condizione c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 50 / 71 Iterazione (schema 1) Sintassi ESEGUI blocco QUANDO condizione Esecuzione (1) Viene eseguito blocco c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 50 / 71 Iterazione (schema 1) Sintassi ESEGUI blocco QUANDO condizione Esecuzione (1) Viene eseguito blocco (2) Viene valutata condizione: c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 50 / 71 Iterazione (schema 1) Sintassi ESEGUI blocco QUANDO condizione Esecuzione (1) Viene eseguito blocco (2) Viene valutata condizione: se è vera si ritorna al punto (1) c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 50 / 71 Iterazione (schema 1) Sintassi ESEGUI blocco QUANDO condizione Esecuzione (1) Viene eseguito blocco (2) Viene valutata condizione: se è vera si ritorna al punto (1) se è falsa si prosegue con la prima istruzione scritta dopo il costrutto iterativo c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 50 / 71 Iterazione (schema 1) Sintassi ESEGUI blocco QUANDO condizione Esecuzione (1) Viene eseguito blocco (2) Viene valutata condizione: se è vera si ritorna al punto (1) se è falsa si prosegue con la prima istruzione scritta dopo il costrutto iterativo il blocco è eseguito almeno una volta termina quando la condizione diventa falsa c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 50 / 71 Esempio: somma dei primi 100 numeri interi P Calcolo iterativo, senza utilizzare la formula di Gauss ( ni=1 i = n(n+1) ). 2 poni il valore della somma a zero inizia a considerare il numero 1 ESEGUI aggiungi alla somma il numero che stai considerando considera il numero successivo QUANDO il numero che stai considerando non supera 100 scrivi la somma c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 51 / 71 Iterazione (schema 2) Sintassi QUANDO condizione ESEGUI blocco RIPETI c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 52 / 71 Iterazione (schema 2) Sintassi QUANDO condizione ESEGUI blocco RIPETI Esecuzione (1) Viene valutata la condizione: c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 52 / 71 Iterazione (schema 2) Sintassi QUANDO condizione ESEGUI blocco RIPETI Esecuzione (1) Viene valutata la condizione: se è vera, viene eseguito blocco quindi si torna al punto (1) c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 52 / 71 Iterazione (schema 2) Sintassi QUANDO condizione ESEGUI blocco RIPETI Esecuzione (1) Viene valutata la condizione: se è vera, viene eseguito blocco quindi si torna al punto (1) se è falsa, l’esecuzione riprende dalla prima l’istruzione che segue il costrutto iterativo c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 52 / 71 Iterazione (schema 2) Sintassi QUANDO condizione ESEGUI blocco RIPETI Esecuzione (1) Viene valutata la condizione: se è vera, viene eseguito blocco quindi si torna al punto (1) se è falsa, l’esecuzione riprende dalla prima l’istruzione che segue il costrutto iterativo il blocco può essere eseguito anche zero volte termina quando la condizione diventa falsa c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 52 / 71 Simulazione Il comportamento dello schema QUANDO...RIPETI può essere simulato combinando ESEGUI...QUANDO... e selezione: SE condizione ALLORA ESEGUI blocco QUANDO condizione FINESE c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 53 / 71 Variabili e assegnamenti Una variabile è un area di memoria che contiene un dato Il nome di una variabile è detto identificatore c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 54 / 71 Variabili e assegnamenti Una variabile è un area di memoria che contiene un dato Il nome di una variabile è detto identificatore Istruzione di assegnamento variabile ← espressione c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 54 / 71 Variabili e assegnamenti Una variabile è un area di memoria che contiene un dato Il nome di una variabile è detto identificatore Istruzione di assegnamento variabile ← espressione Esecuzione (1) Viene calcolato il valore dell’espressione scritta a destra del simbolo ← c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 54 / 71 Variabili e assegnamenti Una variabile è un area di memoria che contiene un dato Il nome di una variabile è detto identificatore Istruzione di assegnamento variabile ← espressione Esecuzione (1) Viene calcolato il valore dell’espressione scritta a destra del simbolo ← (2) Il risultato ottenuto è assegnato alla variabile (ovvero salvato nell’area di memoria corrispondente) il cui nome è scritto a sinistra del simbolo ←, eliminando l’eventuale valore precedentemente contenuto. Osservazione Molti linguaggi, tra cui anche Java, utilizzano per l’assegnamento il simbolo =, usato comunemente per indicare l’uguaglianza. c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 54 / 71 Esempio z y x 3 5 2 x←y + z c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 55 / 71 Esempio z y x 3 5 2 x←y + z 1 si valuta l’espressione y+z, recuperando i valori presenti in y e z e facendone la somma c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 55 / 71 Esempio z y x 3 2 5 x←y + z 1 si valuta l’espressione y+z, recuperando i valori presenti in y e z e facendone la somma 2 si pone il risultato nel contenitore di cui x è il nome dopo avere eliminato il valore precedentemente presente 7 c 2005-2010 Pearson Education Italia z y x 5 2 Capitolo 1 - Computer, algoritmi e linguaggi 55 / 71 Esempio k 3 k←k + 1 c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 56 / 71 Esempio k 3 k←k + 1 1 si valuta l’espressione k+1, recuperando il valore di k (3) e sommandogli 1 c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 56 / 71 Esempio k 3 k←k + 1 1 si valuta l’espressione k+1, recuperando il valore di k (3) e sommandogli 1 2 si pone il risultato nel contenitore di cui k è il nome dopo avere eliminato il valore precedentemente presente c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 56 / 71 Esempio k 3 k←k + 1 1 si valuta l’espressione k+1, recuperando il valore di k (3) e sommandogli 1 2 si pone il risultato nel contenitore di cui k è il nome dopo avere eliminato il valore precedentemente presente k 4 c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 56 / 71 Tipo Il tipo di una variabile specifica la classe di valori che questa può assumere l’insieme delle operazioni che possono essere effettuate su di essa. c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 57 / 71 Tipo Il tipo di una variabile specifica la classe di valori che questa può assumere l’insieme delle operazioni che possono essere effettuate su di essa. Ad esempio una variabile x di tipo intero può assumere come valori solo numeri interi su di essa possono essere effettuate soltanto le operazioni consentite per i numeri interi c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 57 / 71 Tipo Il tipo di una variabile specifica la classe di valori che questa può assumere l’insieme delle operazioni che possono essere effettuate su di essa. Ad esempio una variabile x di tipo intero può assumere come valori solo numeri interi su di essa possono essere effettuate soltanto le operazioni consentite per i numeri interi Il tipo è utile per allocare spazio sufficiente a memorizzare il valore di una variabile verificare in fase di compilazione la correttezza di un programma c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 57 / 71 Astrazioni Variabili Il concetto di variabile è un’astrazione del concetto di locazione di memoria L’assegnamento di un valore a una variabile è un’astrazione dell’istruzione STORE c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 58 / 71 Astrazioni Variabili Il concetto di variabile è un’astrazione del concetto di locazione di memoria L’assegnamento di un valore a una variabile è un’astrazione dell’istruzione STORE Tipi Sebbene tutte le variabili siano rappresentate nella memoria come sequenze di bit, tali sequenze possono essere interpretate diversamente in base ai tipi La nozione di tipo fornisce un’astrazione rispetto alla rappresentazione effettiva dei dati Il programmatore può utilizzare variabili di tipi differenti, senza necessità di conoscerne l’effettiva rappresentazione c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 58 / 71 Dichiarazione delle variabili Molti linguaggi richiedono di dichiarare le variabili utilizzate nel programma indicandone il tipo. c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 59 / 71 Dichiarazione delle variabili Molti linguaggi richiedono di dichiarare le variabili utilizzate nel programma indicandone il tipo. Vantaggi: accresce la leggibilità dei programmi diminuisce la possibilità di errori facilita la realizzazione di compilatori efficienti c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 59 / 71 Esempio: calcolo delle radici di ax 2 + bx + c = 0 variabili a, b, c, D, x, x1, x2: numeri reali leggi a, b, c D ← b2 - 4 * a * c SE D < 0 ALLORA scrivi “nessuna soluzione reale” ALTRIMENTI SE D == 0 ALLORA x ← - b / (2 * a) scrivi “Due soluzioni coincidenti: ”, x ALTRIMENTI √ x1 ← (- b - √D) / (2 * a) x2 ← (- b + D) / (2 * a) scrivi “Due soluzioni: ”, x1, x2 FINESE FINESE c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 60 / 71 Sommario: Computer, algoritmi e linguaggi 1 2 3 4 Computer, algoritmi e programmi Computer, algoritmi e programmi Evoluzione della programmazione Finalità del corso Rappresentazione dell’informazione Dal linguaggio macchina ai linguaggi ad alto livello La macchina di Von Neumann Componenti principali di un computer I linguaggi ad alto livello Java Virtual Machine (JVM) Strumenti per la stesura dei programmi La programmazione strutturata Le strutture di controllo fondamentali Variabili e assegnamenti Sintassi e semantica Grammatiche Lessico del linguaggio Java c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 61 / 71 Linguaggi di programmazione Sintassi Fornisce delle regole per la scrittura di programmi Esistono vari formalismi per descrivere la sintassi di un linguaggio (forme di Backus-Naur, carte sintattiche, . . . ) c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 62 / 71 Linguaggi di programmazione Sintassi Fornisce delle regole per la scrittura di programmi Esistono vari formalismi per descrivere la sintassi di un linguaggio (forme di Backus-Naur, carte sintattiche, . . . ) Semantica Determina il significato di un programma Ovvero, le operazioni attuate dalla macchina che esegue il programma (semantica operazionale) c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 62 / 71 Linguaggi di programmazione Sintassi Fornisce delle regole per la scrittura di programmi Esistono vari formalismi per descrivere la sintassi di un linguaggio (forme di Backus-Naur, carte sintattiche, . . . ) Semantica Determina il significato di un programma Ovvero, le operazioni attuate dalla macchina che esegue il programma (semantica operazionale) Solo i programmi sintatticamente corretti hanno una semantica, cioè possono essere eseguiti c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 62 / 71 Linguaggi di programmazione Sintassi Fornisce delle regole per la scrittura di programmi Esistono vari formalismi per descrivere la sintassi di un linguaggio (forme di Backus-Naur, carte sintattiche, . . . ) Semantica Determina il significato di un programma Ovvero, le operazioni attuate dalla macchina che esegue il programma (semantica operazionale) Solo i programmi sintatticamente corretti hanno una semantica, cioè possono essere eseguiti Quando il compilatore (o l’interprete) incontra un errore di sintassi nel codice si arresta segnalando il problema c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 62 / 71 Programmi e algoritmi PROGRAMMI PROGRAMMI CORRETTI PROGRAMMI TERMINANTI ALGORITMI Per codificare tutti gli algoritmi è necessario utilizzare i cicli La presenza dei cicli rende possibile scrivere programmi non terminanti (contenenti cicli infiniti), che quindi non codificano nessun algoritmo c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 63 / 71 Sintassi e semantica In astratto, la sintassi è definita da una grammatica c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 64 / 71 Sintassi e semantica In astratto, la sintassi è definita da una grammatica La grammatica è un modello generativo di tutti e soli i programmi sintatticamente corretti c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 64 / 71 Sintassi e semantica In astratto, la sintassi è definita da una grammatica La grammatica è un modello generativo di tutti e soli i programmi sintatticamente corretti Sintassi dei numeri reali (ad esempio 3.14...) <reale> ::= <sequenza_cifre> . <sequenza_cifre> <sequenza_cifre> ::= <cifra> | <cifra> <sequenza_cifre> <cifra> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 64 / 71 Grammatica G = (T , N, P, S) c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 65 / 71 Grammatica G = (T , N, P, S) T insieme finito dei simboli terminali, cioè dei simboli che costituiranno i programmi c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 65 / 71 Grammatica G = (T , N, P, S) T insieme finito dei simboli terminali, cioè dei simboli che costituiranno i programmi N insieme finito dei simboli non terminali, o metasimboli, utilizzati nella costruzione dei programmi c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 65 / 71 Grammatica G = (T , N, P, S) T insieme finito dei simboli terminali, cioè dei simboli che costituiranno i programmi N insieme finito dei simboli non terminali, o metasimboli, utilizzati nella costruzione dei programmi P insieme finito delle regole di produzione c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 65 / 71 Grammatica G = (T , N, P, S) T insieme finito dei simboli terminali, cioè dei simboli che costituiranno i programmi N insieme finito dei simboli non terminali, o metasimboli, utilizzati nella costruzione dei programmi P insieme finito delle regole di produzione S simbolo iniziale, S ∈ N ed è il punto di partenza nella costruzione dei programmi c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 65 / 71 Grammatica G = (T , N, P, S) T insieme finito dei simboli terminali, cioè dei simboli che costituiranno i programmi N insieme finito dei simboli non terminali, o metasimboli, utilizzati nella costruzione dei programmi P insieme finito delle regole di produzione S simbolo iniziale, S ∈ N ed è il punto di partenza nella costruzione dei programmi Linguaggio generato da G L’insieme di tutte le sequenze di simboli terminali ottenibili applicando le regole di produzione dell’insieme P, a partire dal simbolo iniziale S. c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 65 / 71 Esempio (1) T = {il, lo, la, cane, mela, gatto, mangia, graffia, ,} c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 66 / 71 Esempio (1) T = {il, lo, la, cane, mela, gatto, mangia, graffia, ,} (2) N = {frase, soggetto, verbo, complemento, articolo, nome} c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 66 / 71 Esempio (1) T = {il, lo, la, cane, mela, gatto, mangia, graffia, ,} (2) N = {frase, soggetto, verbo, complemento, articolo, nome} (3) P, regole espresse in BNF (forma di Backus-Naur): frase ::= soggetto verbo complemento soggetto ::= articolo nome articolo ::= il | la | lo nome ::= cane | mela | gatto verbo ::= mangia | graffia complemento ::= articolo nome | articolo nome , complemento c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 66 / 71 Esempio (1) T = {il, lo, la, cane, mela, gatto, mangia, graffia, ,} (2) N = {frase, soggetto, verbo, complemento, articolo, nome} (3) P, regole espresse in BNF (forma di Backus-Naur): frase ::= soggetto verbo complemento soggetto ::= articolo nome articolo ::= il | la | lo nome ::= cane | mela | gatto verbo ::= mangia | graffia complemento ::= articolo nome | articolo nome , complemento (4) S = frase. c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 66 / 71 Esempio di produzione frase soggetto Q Q Q Q complemento verbo @ @ articolo @ nome graffia articolo Q AA @ @ QQ A @ Q nome , complemento @ @ lo mela c 2005-2010 Pearson Education Italia lo gatto @ articolo nome il cane Capitolo 1 - Computer, algoritmi e linguaggi 67 / 71 Linguaggio Java: il lessico Alfabeto L’alfabeto utilizzato per scrivere i programmi si chiama Unicode, ed è un insieme di caratteri rappresentati su 16 bit. c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 68 / 71 Linguaggio Java: il lessico Alfabeto L’alfabeto utilizzato per scrivere i programmi si chiama Unicode, ed è un insieme di caratteri rappresentati su 16 bit. Parole riservate (o parole chiave) Sono parole che nel linguaggio hanno un significato predeterminato. Non possono essere utilizzate diversamente e non possono essere ridefinite. c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 68 / 71 Linguaggio Java: il lessico Alfabeto L’alfabeto utilizzato per scrivere i programmi si chiama Unicode, ed è un insieme di caratteri rappresentati su 16 bit. Parole riservate (o parole chiave) Sono parole che nel linguaggio hanno un significato predeterminato. Non possono essere utilizzate diversamente e non possono essere ridefinite. abstract catch do finally import new short this volatile assert char double float instanceof package static throw while c 2005-2010 Pearson Education Italia boolean class else for int private strictfp throws break const enum goto interface protected super transient byte continue extends if long public switch try case default final implements native return synchronized void Capitolo 1 - Computer, algoritmi e linguaggi 68 / 71 Linguaggio Java: il lessico (2) Identificatori Sono nomi impiegati all’interno del programma per indicare variabili, classi, riferimenti a oggetti, e cosı̀ via. Un identificatore è costituito da una sequenza di lettere e cifre che inizia con una lettera c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 69 / 71 Linguaggio Java: il lessico (2) Identificatori Sono nomi impiegati all’interno del programma per indicare variabili, classi, riferimenti a oggetti, e cosı̀ via. Un identificatore è costituito da una sequenza di lettere e cifre che inizia con una lettera Separatori Sono caratteri che permettono di separare o raggruppare parti di codice. ( ) { } [ ] c 2005-2010 Pearson Education Italia ; , . Capitolo 1 - Computer, algoritmi e linguaggi 69 / 71 Linguaggio Java: il lessico (2) Identificatori Sono nomi impiegati all’interno del programma per indicare variabili, classi, riferimenti a oggetti, e cosı̀ via. Un identificatore è costituito da una sequenza di lettere e cifre che inizia con una lettera Separatori Sono caratteri che permettono di separare o raggruppare parti di codice. ( ) { } [ ] ; , . Operatori Sono simboli o sequenze di simboli che denotano alcune operazioni. = == + += > <= -= < >= * *= ! != / /= ~ && & &= ? || | |= c 2005-2010 Pearson Education Italia : ++ ^ ^= -% %= << <<= >> >>= >>> >>>= Capitolo 1 - Computer, algoritmi e linguaggi 69 / 71 Linguaggio Java: il lessico (3) Letterali Sequenze di caratteri utilizzate all’interno dei programmi per rappresentare valori di tipi primitivi e stringhe. c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 70 / 71 Linguaggio Java: il lessico (3) Letterali Sequenze di caratteri utilizzate all’interno dei programmi per rappresentare valori di tipi primitivi e stringhe. Commenti /*. . . */ il compilatore ignora tutto il testo compreso tra questi caratteri; possono estendersi per più righe c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 70 / 71 Linguaggio Java: il lessico (3) Letterali Sequenze di caratteri utilizzate all’interno dei programmi per rappresentare valori di tipi primitivi e stringhe. Commenti /*. . . */ il compilatore ignora tutto il testo compreso tra questi caratteri; possono estendersi per più righe /**. . . */ il compilatore ignora tutto il testo compreso tra questi caratteri; possono estendersi per più righe. Sono chiamati commenti di documentazione, vengono interpretati da javadoc c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 70 / 71 Linguaggio Java: il lessico (3) Letterali Sequenze di caratteri utilizzate all’interno dei programmi per rappresentare valori di tipi primitivi e stringhe. Commenti /*. . . */ il compilatore ignora tutto il testo compreso tra questi caratteri; possono estendersi per più righe /**. . . */ il compilatore ignora tutto il testo compreso tra questi caratteri; possono estendersi per più righe. Sono chiamati commenti di documentazione, vengono interpretati da javadoc commenti a fine riga si aprono con la coppia di caratteri // e si chiudono alla fine della riga; il compilatore ignora il testo che inizia dai caratteri // fino alla fine della riga. c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 70 / 71 Il primo programma Java /* Il nostro primo programma */ class BuonInizio { // il metodo main public static void main(String[] args) { System.out.println("Ti auguro una buona giornata!"); } } Nota In Java, ogni istruzione deve trovarsi all’interno di una classe In ogni programma Java deve essere definito un metodo main (e non più di uno) che indica alla JVM dove iniziare la computazione BuonInizio.java c 2005-2010 Pearson Education Italia Capitolo 1 - Computer, algoritmi e linguaggi 71 / 71