• Non ci sono risultati.

Linguaggi di Programmazione:

N/A
N/A
Protected

Academic year: 2022

Condividi "Linguaggi di Programmazione:"

Copied!
3
0
0

Testo completo

(1)

1

Matteo Baldoni

Dipartimento di Informatica - Universita` degli Studi di Torino C.so Svizzera, 185 - I-10149 Torino (Italy) e-mail: [email protected] - URL: http://www.di.unito.it/~baldoni

Linguaggi di Programmazione:

Paradigmi di Programmazione

ECCEZIONI e THREAD (lucidi originali di Alberto Martelli)

Linguaggi di Programmazione: Paradigmi di Programmazione 2

Eccezioni

• Eccezioni: meccanismo per trattare condizioni eccezionali

– divisione per zero

– indice di array fuori dai limiti – ...

• L'esecuzione si blocca e viene sollevata (lanciata) una eccezione.

Linguaggi di Programmazione: Paradigmi di Programmazione 3

Eccezioni

class Ecc {

static int[] a = new int[2];

static void p() {a[4] = 5;}

public static void main (String[] args) { p();}

}

Eseguendo il main viene fornito il seguente messaggio di errore a run-time

Exception in "main"

java.lang.ArrayIndexOutOfBoundsException at Ecc.p (Ecc.java: 3)

at Ecc.main (Ecc.java: 5)

Linguaggi di Programmazione: Paradigmi di Programmazione 4

Classi eccezioni

• Una eccezione è un oggetto della classe Exception o di una sua sottoclasse.

Exception

RuntimeException

IndexOutOfBoundsExc. NullPointerExc.

ArithmeticExc.

Linguaggi di Programmazione: Paradigmi di Programmazione 5

throw

• Le eccezioni possono essere lanciate con: throw

<eccezione>

class Tabella { int n; int[] a;

void inserisci(int x) { if (n >= a.length - 1)

throw new RuntimeException("tabella piena");

...

public static void main (String[] args) { Tabella t = new Tabella(2);

t.inserisci(5); t.inserisci(8);

...

Runtime exception: tabella piena at Tabella.inserisci ...

at Tabella main ...

Linguaggi di Programmazione: Paradigmi di Programmazione 6

Catturare le eccezioni

• Chi lancia una eccezione non ha informazioni sufficienti per decidere cosa fare.

• Invece di bloccare comunque l'esecuzione, l'eccezione

può essere catturata ad un livello più alto da un

exception handler, che può decidere come continuare

l'esecuzione del programma dopo aver preso le misure

opportune.

(2)

2

Linguaggi di Programmazione: Paradigmi di Programmazione 7

Catturare le eccezioni

class Tabella { int n; int[] a;

void inserisci(int x) { if (n >= a.length - 1)

throw new RuntimeException("tabella piena");

...

public static void main (String[] args) { Tabella t = new Tabella(2);

try {

t.inserisci(5);

t.inserisci(8);

} catch(RuntimeException e) { System.out.println(e.getMessage());

}

Linguaggi di Programmazione: Paradigmi di Programmazione 8

try - catch

• In generale un exception handler ha la forma:

dove Tipo1, Tipo2, ... sono tipi di eccezioni.

try {

codice che può generare una eccezione } catch(Tipo1 id1) {

gestisce eccez. di Tipo1 } catch(Tipo2 id2) {

gestisce eccez. di Tipo2 }...

Linguaggi di Programmazione: Paradigmi di Programmazione 9

Come catturare le eccezioni

• Quando viene lanciata una eccezione, si interrompe l'esecuzione e si cerca dinamicamente, percorrendo all'indietro lo stack delle chiamate, il primo exception handler che ha una catch per il tipo dell'eccezione lanciata, e l'esecuzione riprende da quel punto.

• Nell'esempio precedente catch cattura qualunque eccezione a runtime.

• E' possibile definirsi una propria eccezione come sottoclasse di RuntimeException.

Linguaggi di Programmazione: Paradigmi di Programmazione 10

Eccezioni definite

class TabellaPiena extends RuntimeException { public int i;

public TabellaPiena(int n) {i=n;}

}

class Tabella {...

void inserisci(int x) { if (n >= a.length - 1) throw new TabellaPiena(x);

...

public static void main (String[] args) { Tabella t = new Tabella(2);

try {

...

} catch(TabellaPiena tp) {

System.out.println("La tabella è piena." + tp.i + " non è stato inserito");

}

Linguaggi di Programmazione: Paradigmi di Programmazione 11

throws

• Se un metodo può lanciare un'eccezione e non la cattura, deve segnalarlo con throws (tranne che per RuntimeException).

class Generica {

void m(String s) throws ClassNotFoundException { Class c = Class.forName(s);

...

Linguaggi di Programmazione: Paradigmi di Programmazione 12

Exception handler generale

• Il blocco di finally è eseguito sempre, anche se non sono sollevate eccezioni

try {

codice che può generare una eccezione } catch(Tipo1 id1) {

gestisce eccez. di Tipo1 } catch(Tipo2 id2) {

gestisce eccez. di Tipo2 }...

} finally {....}

(3)

3

Linguaggi di Programmazione: Paradigmi di Programmazione 13

Thread

• Thread: flusso sequenziale di controllo (esecuzione di istruzioni) in un programma.

• Nello stesso programma si possono far partire più thread che sono eseguiti concorrentemente.

• Tutti i thread condividono le stesse variabili del programma, a differenza dai processi che hanno ciascuno il proprio contesto.

• Nei computer a singola CPU la concorrenza viene simulata con una politica di scheduling che alterna l'esecuzione dei singoli thread.

Linguaggi di Programmazione: Paradigmi di Programmazione 14

Thread

• Una applicazione Java che usa i thread può eseguire più attività contemporaneamente. Esempio: aggiornare l'informazione grafica sull schermo e accedere alla rete.

• In alcuni casi i thread possono procedere in modo indipendente uno dall'altro (comportamento asincrono), in altri devono essere sincronizzati fra loro (es.

produttore - consumatore).

Linguaggi di Programmazione: Paradigmi di Programmazione 15

Come si crea un thread (1)

• Si definisce una classe che eredita da Thread e che implementa un metodo run().

• Quando si crea un oggetto di questa classe si esegue il suo metodo start() per far partire il thread.

class MioThread extends Thread { public void run() {

System.out.println("Sono il thread " + getName());

}}

....

MioThread t1 = new MioThread();

MioThread t2 = new MioThread();

t1.start();

t2.start();

Linguaggi di Programmazione: Paradigmi di Programmazione 16

Come si crea un thread (2)

• Si definisce una classe che implementa l'interfaccia

Runnable

che possiede il metodo

run.

class Esempio implements Runnable { public void run() {...}}

• Per attivare un thread:

Esempio es = new Esempio();

Thread t = new Thread(es), t.start();

Linguaggi di Programmazione: Paradigmi di Programmazione 17

Come si crea un thread (2)

class MioThread implements Runnable { public void run() {

System.out.println("Sono il thread " + Thread.currentThread().getName());

}}

....

MioThread mt = new MioThread();

Thread t1 = new Thread(mt);

Thread t2 = new Thread(mt);

t1.start();

t2.start();

Linguaggi di Programmazione: Paradigmi di Programmazione 18

Thread: sleep, wait, terminazione

• Dopo essere stato attivato, un thread può bloccarsi se – chiama il metodo sleep

– esegue una wait (riparte con notify) – sta aspettando una operazione di I/O

• Il thread si ferma quando la run termina.

• E' possibile assegnare priorità diverse ai thread.

Riferimenti

Documenti correlati

Nell’esercizio delle competenze attribuitegli, il Ministero svolgerà le attività di analisi, elaborazione e valutazione delle politiche economico-fiscali e delle

“Da vendersi dietro presentazione di ricetta medica veterinaria in triplice copia non ripetibile”; i medicinali prescritti dal medico veterinario per le somministrazioni ad

• Un esempio in cui vengono inseriti due valori e poi si calcola la loro somma. static void Main(string[]

class Managers extends Employee extends Sortable Extending two classes in Java is forbidden (no multiple inheritance!). So, we need interfaces

public static void main(String[] args) {. Rectangle box = new Rectangle(5, 10,

{ public static void main(String[] args) { int lit = 15000; // lire italiane double euro = 2.35; // euro!. // calcola il

public static void main(String[] args) {. Rectangle box = new Rectangle(5, 10,

public static void main(String[] args) throws IOException { String filename = “filename.txt”;. FileReader reader =