java: concetti e costrutti base lezione 18 programmazione midi (prof. luca a. ludovico)

22
Java: concetti e costrutti base Lezione 18 Programmazione MIDI (Prof. Luca A. Ludovico)

Upload: bice-guerra

Post on 02-May-2015

228 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Java: concetti e costrutti base Lezione 18 Programmazione MIDI (Prof. Luca A. Ludovico)

Java: concetti e costrutti base

Lezione 18

Programmazione MIDI (Prof. Luca A. Ludovico)

Page 2: Java: concetti e costrutti base Lezione 18 Programmazione MIDI (Prof. Luca A. Ludovico)

JAVATipizzazione

Programmazione MIDI (Prof. Luca A. Ludovico)18. Java: concetti e costrutti base

Page 3: Java: concetti e costrutti base Lezione 18 Programmazione MIDI (Prof. Luca A. Ludovico)

Tipizzazione (type system)

• Java è un linguaggio «type safe»: previene o avvisa rispetto agli errori di tipo

• Un errore di tipo è un comportamento errato o non desiderabile del programma causato da una discrepanza tra diversi tipi di dato riguardo alle costanti, variabili e metodi (funzioni) del programma

• Un linguaggio è considerato type safe se tutti gli errori di tipo vengono rivelati sempre tramite l’operazione di type check

Programmazione MIDI (Prof. Luca A. Ludovico)18. Java: concetti e costrutti base

Page 4: Java: concetti e costrutti base Lezione 18 Programmazione MIDI (Prof. Luca A. Ludovico)

Esempi di errori di tipo

• Assegnare a una variabile una costante del tipo errato

• Invocare una funzione con tipi di dato errati

• Superare i limiti di un array (out of bound)

• Invocare un metodo inesistente di un oggetto

• Accedere ad un campo dati inesistente di un oggetto

Programmazione MIDI (Prof. Luca A. Ludovico)18. Java: concetti e costrutti base

Page 5: Java: concetti e costrutti base Lezione 18 Programmazione MIDI (Prof. Luca A. Ludovico)

Esempio

public class EsempioTipizzazione

{

public static void main(String[] args)

{

int a;

// Dichiara la variabile intera a

a = 3.5;

// ERRORE! Il valore 3.5 è numerico a virgola

// mobile, la variabile a invece è intera

}

}

Programmazione MIDI (Prof. Luca A. Ludovico)18. Java: concetti e costrutti base

Page 6: Java: concetti e costrutti base Lezione 18 Programmazione MIDI (Prof. Luca A. Ludovico)

Type check

• Il type check è il controllo dei tipi e del loro corretto utilizzo

• In generale può avvenire a compile-time o a run-time:– a compile-type, esso produce un eseguibile già controllato che

non richiede controlli a run-time. Ciò permette un'esecuzione più veloce del programma, a fronte di controlli più severi e limitanti;

– a run-time, il programmatore ha più libertà ma i controlli vengono eseguiti solo se una porzione di codice viene eseguita, quindi il codice può nascondere un errore che emergerà in altri utilizzi del programma.

• In Java il type check ha luogo a compile-time

Programmazione MIDI (Prof. Luca A. Ludovico)18. Java: concetti e costrutti base

Page 7: Java: concetti e costrutti base Lezione 18 Programmazione MIDI (Prof. Luca A. Ludovico)

Tipizzazione statica

• Java è un linguaggio a tipizzazione statica: il tipo di ogni variabile (numerico intero, numerico a virgola mobile, carattere, ecc.) viene stabilito direttamente nel codice sorgente dove viene assegnato esplicitamente per mezzo di parole chiave apposite (manifest typing)

• Il programma mantiene in una tabella dei valori tutte le variabili dichiarate dal programmatore, insieme al loro tipo e al valore corrente. Un tentativo di assegnamento di un valore di tipo diverso da quello di una variabile causa un errore terminale.

Programmazione MIDI (Prof. Luca A. Ludovico)18. Java: concetti e costrutti base

Page 8: Java: concetti e costrutti base Lezione 18 Programmazione MIDI (Prof. Luca A. Ludovico)

Tipi primitivi e tipi strutturati

• Il linguaggio distingue:– tipi primitivi (che definiscono valori atomici)– tipi strutturati (che definiscono strutture dati composte).

• I tipi primitivi sono detti anche tipi atomici e tipi base. Sono definiti nelle specifiche di linguaggio: di ognuno sono noti a priori l'insieme dei valori ammessi e gli operatori supportati.

• I tipi strutturati sono anche tipi riferimento, cioè definiscono oggetti, e sono classi o interfacce.

Programmazione MIDI (Prof. Luca A. Ludovico)18. Java: concetti e costrutti base

Page 9: Java: concetti e costrutti base Lezione 18 Programmazione MIDI (Prof. Luca A. Ludovico)

Tipi primitivi (tipi base)

Programmazione MIDI (Prof. Luca A. Ludovico)18. Java: concetti e costrutti base

Tipo Descrizione

Classe contenitore

(vedi prossima slide)

byte intero con segno a 8 bit Byte

short intero con segno a 16 bit Short

int intero con segno a 32 bit Integer

long intero con segno a 64 bit Long

floatvirgola mobile a 32 bit singola precisione (standard IEEE 754)

Float

doublevirgola mobile a 64 bit doppia precisione (standard IEEE 754)

Double

charcarattere singolo Unicode (intero senza segno a 16 bit)

Character

boolean true o false Boolean

Page 10: Java: concetti e costrutti base Lezione 18 Programmazione MIDI (Prof. Luca A. Ludovico)

Classi wrapper per i tipi base

• I valori dei tipi base non sono oggetti. Tuttavia, per ogni tipo base è definita una corrispondente classe (definita in gergo tipo wrapper o tipo contenitore) nel package java.lang, la quale permette di incapsulare dentro un oggetto un valore di tipo primitivo.

• Opportuni metodi della classe wrapper permettono di ottenere l'oggetto che incapsula un certo valore, e il valore incapsulato da un certo oggetto.

• Dalla versione 5.0 in poi, sono supportati l'autoboxing e l'unboxing, che permettono di convertire da tipo primitivo a corrispondente classe wrapper e viceversa.– Non si tratta di una vera conversione, ma di una sintassi che «nasconde» la

creazione di un oggetto della classe wrapper

Programmazione MIDI (Prof. Luca A. Ludovico)18. Java: concetti e costrutti base

Page 11: Java: concetti e costrutti base Lezione 18 Programmazione MIDI (Prof. Luca A. Ludovico)

Tipi strutturati (tipi riferimento)

• I tipi strutturati includono le classi per la gestione delle stringhe, gli array e le collezioni (liste, mappe, ecc.)

• In generale i tipi strutturati sono definiti dall'utente (user-defined), cioè dal programmatore. Al contrario i tipi base sono predefiniti (built-in)

• Fanno eccezione le classi degli array, definite nelle specifiche di linguaggio pur trattandosi di tipi strutturati

Programmazione MIDI (Prof. Luca A. Ludovico)18. Java: concetti e costrutti base

Page 12: Java: concetti e costrutti base Lezione 18 Programmazione MIDI (Prof. Luca A. Ludovico)

Array

• Un array (o vettore) è una struttura dati complessa, statica e omogenea, usata in molti linguaggi di programmazione

Indice

Celle

• Contiene contemporaneamente più valori dello stesso tipo, che è detto tipo base dell’array

• Ogni posizione nell’array è detta cella e può contenere uno e un solo valore

• Le celle di un array sono identificate da un numero intero detto indice che parte da 0 per la prima cella

Programmazione MIDI (Prof. Luca A. Ludovico)18. Java: concetti e costrutti base

0 1 2 3 4 5 6 7 8 9

13 25 0 -5 11 56 3 -46 -12 67

Page 13: Java: concetti e costrutti base Lezione 18 Programmazione MIDI (Prof. Luca A. Ludovico)

Dichiarazione di array

• Per dichiarare un array: tipoBase[] nomeArray;

• Per specificare la dimensione, cioè il numero di celle: nomeArray = new tipoBase[numCelle];– In Java, la dimensione si può recuperare con il metodo length

• Scrittura compattatipoBase[] nomeArray = new tipoBase[numCelle];

• Per accedere alla cella ad un dato indice:System.out.println(nomeArray[indice]); (lettura)nomeArray[indice] = valore; (assegnamento, scrittura)

Programmazione MIDI (Prof. Luca A. Ludovico)18. Java: concetti e costrutti base

Page 14: Java: concetti e costrutti base Lezione 18 Programmazione MIDI (Prof. Luca A. Ludovico)

Inizializzazione di array

• I valori delle celle possono essere preimpostati in fase di dichiarazione con la sintassi (valida per int, char e string):tipoBase[] nomeArray = {val1, val2, …, valN};

• Per altri tipi base (ad esempio boolean):tipoBase[] nomeArray = new tipoBase[] {val1, val2, …, valN};

• Non è necessario dimensionare esplicitamente l’array perché la dimensione viene evinta dal numero di valori elencati.

• Si ricordi che si tratta di una struttura dati statica, le cui dimensioni dopo la dichiarazione non possono variare.

Programmazione MIDI (Prof. Luca A. Ludovico)18. Java: concetti e costrutti base

Page 15: Java: concetti e costrutti base Lezione 18 Programmazione MIDI (Prof. Luca A. Ludovico)

Array multidimensionali

• Un array può avere più di una dimensione. In tal caso spesso viene spesso definito matrice (per similitudine con il significato matematico)

• Un array multidimensionale ha due (o più) indici. Ogni indice rappresenta una dimensione. Ogni elemento è identificato dalla combinazione di valori di tutti gli indici del vettore.

• Esempi di dichiarazione e assegnamento:tipoBase[][] nomeArray = new tipoBase[dim1][dim2]; nomeArray[indice1][indice2] = valore;

Piè di pagina: spazio libero per eventuale nome struttura o altro

Page 16: Java: concetti e costrutti base Lezione 18 Programmazione MIDI (Prof. Luca A. Ludovico)

JAVAStrutture di controllo

Programmazione MIDI (Prof. Luca A. Ludovico)18. Java: concetti e costrutti base

Page 17: Java: concetti e costrutti base Lezione 18 Programmazione MIDI (Prof. Luca A. Ludovico)

Strutture di controllo

• La sintassi Java è derivata da C/C++

• Strutture di controllo selettive:– if … else– switch … case

• Strutture di controllo iterative– while– do … while – for– for each [agisce su un array o collezione]

Programmazione MIDI (Prof. Luca A. Ludovico)18. Java: concetti e costrutti base

Page 18: Java: concetti e costrutti base Lezione 18 Programmazione MIDI (Prof. Luca A. Ludovico)

Switch … case

• Utile per selezionare una tra diverse alternative sulla base di uno specifico valore int, short, byte o char – String è ammesso solo da Java 7 in poi

• Forma base:switch (espressione)

{

case costante1: istruzioniRamo1; break;

case costante2: istruzioniRamo2; break;

...

default: istruzioniRamoDefault; break;

}

Programmazione MIDI (Prof. Luca A. Ludovico)18. Java: concetti e costrutti base

Page 19: Java: concetti e costrutti base Lezione 18 Programmazione MIDI (Prof. Luca A. Ludovico)

Switch … case

• Ogni gruppo di righe di codice che inizia con la parola riservata case e termina con break è un case group.

• La parola case è seguita da un valore costante (tipizzato come la variabile nello switch) e da “:”

• La parola chiave break provoca l’uscita dal costrutto

• Il gruppo default è opzionale, e viene invocato solo se non si trova corrispondenza con altri rami

Programmazione MIDI (Prof. Luca A. Ludovico)18. Java: concetti e costrutti base

Page 20: Java: concetti e costrutti base Lezione 18 Programmazione MIDI (Prof. Luca A. Ludovico)

Array e strutture di controllo iterativo

• Lettura iterativa di tutti gli elementi di un array– while o for, basandosi sulla dimensione dell’array– foreach, ciclando su tutti gli elementi dell’array

Programmazione MIDI (Prof. Luca A. Ludovico)18. Java: concetti e costrutti base

Page 21: Java: concetti e costrutti base Lezione 18 Programmazione MIDI (Prof. Luca A. Ludovico)

Gestione delle eccezioni

• La gestione delle eccezioni in Java viene trattata dalla sintassi try ... catch ... finally simile a quella del C++

int firstArg;

if (args.length > 0) {

try {

firstArg = Integer.parseInt(args[0]);

}

catch (NumberFormatException e) {

System.err.println("Argument must be an integer");

System.exit(1);

}

}

Programmazione MIDI (Prof. Luca A. Ludovico)18. Java: concetti e costrutti base

Page 22: Java: concetti e costrutti base Lezione 18 Programmazione MIDI (Prof. Luca A. Ludovico)

Esempi della lezione

• MIDIPitchArray.java– array

• MIDIPitchToName.java– costrutto switch … case– argomenti del main

• MIDIPitchScale.java– costrutti if … else, for e for each– applicazione di algoritmi semplici

• BinaryParser.java– funzioni sulle stringhe– gestione delle eccezioni con try ... catch

Programmazione MIDI (Prof. Luca A. Ludovico)18. Java: concetti e costrutti base