Il linguaggio C# Eventi ed eccezioni



Documenti analoghi
Concetti Base Eccezioni Eccezioni e Metodi Gerarchia di Eccezioni. Java: Eccezioni. Damiano Macedonio

Gestione Risorse Umane Web

Concetto di Funzione e Procedura METODI in Java

Visual Basic.NET La Gestione degli Errori di Federico BARBATI

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

Product Shipping Cost Guida d'installazione ed Utilizzo

Sistemi Operativi MECCANISMI E POLITICHE DI PROTEZIONE. D. Talia - UNICAL. Sistemi Operativi 13.1

MECCANISMI E POLITICHE DI PROTEZIONE 13.1

Progettazione : Design Pattern Creazionali

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

MANUALE MOODLE STUDENTI. Accesso al Materiale Didattico

MANUALE UTENTE Fiscali Free

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Funzioni in C. Violetta Lonati

Realizzazione di una classe con un associazione

Oggetti Lezione 3. aspetti generali e definizione di classi I

Gestione delle Eccezioni

Java: Compilatore e Interprete

Programmazione Orientata agli Oggetti in Linguaggio Java

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A Esercitazione. Programmazione Object Oriented in Java

Modulo 4: Ereditarietà, interfacce e clonazione

SOMMARIO... 3 INTRODUZIONE...

Excel. A cura di Luigi Labonia. luigi.lab@libero.it

La struttura dati ad albero binario

13. Chain of Responsibility

Il Gestore Eventi di OpenSPCoop i. Il Gestore Eventi di OpenSPCoop

M.U.T. Modulo Unico Telematico

Manuale Amministratore Legalmail Enterprise. Manuale ad uso degli Amministratori del Servizio Legalmail Enterprise

Reflection in Java. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A

QG Gestione Assenze. Inserimento per Classe. Per la gestione delle assenze accedere dal Menu Giornaliere->Assenze e Giustificazioni

Promemoria delle principali funzioni di Gestione utenti e prestiti in SOL

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

PRENOTAZIONI APPELLI ON LINE tramite SOL-SegreteriaOnLine

Fatturazione elettronica con WebCare

GESTIONE DEI PROCESSI

Test di unità con JUnit4

IBM SPSS Statistics per Mac OS - Istruzioni di installazione (Licenza per sito)

CHIUSURE di MAGAZZINO di FINE ANNO

Tricks & Tips. [Access] Tutorial - ActiveX - Controllo Tree View. - Michele de Nittis - Versione: 1 Data Versione: venerdì 30 agosto 2002

Esercitazione 4 JDBC

Chat. Connettersi a un server di chat. Modificare le impostazioni di chat. Ricevere impostazioni chat. Chat

PRODUZIONE PAGELLE IN FORMATO PDF

Gestione delle eccezioni in Java

14 - Packages. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

15 - Packages. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Guida Compilazione Piani di Studio on-line

Gestione delle informazioni necessarie all attività di validazione degli studi di settore. Trasmissione degli esempi da valutare.

Corso sul linguaggio Java

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

Versione 7.0 Taglie e Colori. Negozio Facile

CORSO ACCESS PARTE II. Esistono diversi tipi di aiuto forniti con Access, generalmente accessibili tramite la barra dei menu (?)

Algoritmi di Ricerca. Esempi di programmi Java

OSSIF WEB. Manuale query builder

T E O R I A D I P R O G E T T A Z I O N E D E L S O F T W A R E

MANUALE D'USO DEL PROGRAMMA IMMOBIPHONE

monitoraggio dei locomotori via Internet

Cliens Redigo Versione Aggiornamento al manuale.

Siti web centrati sui dati Architettura MVC-2: i JavaBeans

Il calendario di Windows Vista

Consiglio regionale della Toscana. Regole per il corretto funzionamento della posta elettronica

GUIDA AL SOCIAL CARE

flusso delle informazioni... 2 password... 3 password/ inserimento di una nuova richiesta... 4 le condizioni di vendita... 6

Portale tirocini. Manuale utente Per la gestione del Progetto Formativo

VERIFICHE E APPROVAZIONI CONTROLLO APPROVAZIONE

Informatica 3. Informatica 3. LEZIONE 6: Il controllo dell esecuzione. Lezione 6 - Modulo 1. Errori durante l esecuzione. Il controllo dell esecuzione

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a settembre 2011

MANUALE UTENTE. TeamPortal Liste Distribuzioni

Le caselle di Posta Certificata attivate da Aruba Pec Spa hanno le seguenti caratteristiche:

Main System Monitor Keyboard

Programma Gestione Presenze Manuale autorizzatore. Versione /08/2010. Area Sistemi Informatici - Università di Pisa

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

Direzione Centrale per le Politiche dell Immigrazione e dell Asilo

Architettura MVC-2: i JavaBeans

Uso di base delle funzioni in Microsoft Excel

per immagini guida avanzata Organizzazione e controllo dei dati Geometra Luigi Amato Guida Avanzata per immagini excel

Entrare nel sistema. Clicca su Entra per entrare nel sistema. PAGINA 1

per immagini guida avanzata Uso delle tabelle e dei grafici Pivot Geometra Luigi Amato Guida Avanzata per immagini excel

Operazioni di input/output. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

SPSS Statistics per Windows - Istruzioni di installazione per (Licenza per utenti singoli)

Inizializzazione, Assegnamento e Distruzione di Classi

Dipartimento per le Libertà Civili e l Immigrazione

Come si può vedere, la regola è stata fatta in modo da spostare tutti i messaggi di Spam nella cartella del cestino.

Progetto di Ingegneria del Software 2. SWIMv2

Figura 1 Le Icone dei file di Excel con e senza macro.

Domande Frequenti Autorizzazioni gas serra

Object Oriented Software Design

DATA BASE ON LINE (BANCA DATI MODULI SPERIMENTALI)

Elenchi Intrastat. Indice degli argomenti. Premessa. Operazioni preliminari. Inserimento manuale dei movimenti e presentazione

GUIDA ALLA PROMOZIONE SUL SITO

11/02/2015 MANUALE DI INSTALLAZIONE DELL APPLICAZIONE DESKTOP TELEMATICO VERSIONE 1.0

Prova d Esame Compito B

SQL/OLAP. Estensioni OLAP in SQL

Airone Gestione Rifiuti Funzioni di Esportazione e Importazione

Transcript:

Tecniche di Programmazione avanzata Corso di Laurea Specialistica in Ingegneria Telematica Università Kore Enna A.A. 2009-2010 Alessandro Longheu http://www.diit.unict.it/users/alongheu alessandro.longheu@diit.unict.it Il linguaggio C# Eventi ed eccezioni

Eventi C# offre un supporto nativo al concetto di EVENTO: un evento è qualcosa che un oggetto vuole notificare a qualche altro oggetto al verificarsi di una data attività Event sender (autore) l oggetto che scatena (raise, trigger) l evento, detto anche la sorgente dell evento. Event receiver (sottoscrittore) l oggetto per il quale l evento è determinante e che quindi desidera essere avvisato quando l evento si verifica. Event handler il metodo (dell event receiver) che viene eseguito all atto della notifica. 2

Eventi L'autore determina quando un evento viene generato; i sottoscrittori determinano quale azione viene eseguita in risposta all'evento. Un evento può avere più sottoscrittori. Uno sottoscrittore può gestire più eventi di più autori. Gli eventi senza sottoscrittore non sono mai chiamati. Gli eventi vengono comunemente utilizzati per segnalare azioni utente quali clic sui pulsanti o selezioni di opzioni di menu nell'interfaccia grafica. Quando un evento ha più sottoscrittori, i gestori eventi vengono richiamati in modo sincrono quando viene generato un evento. E possibile anche richiamare gli eventi in modo asincrono. Gli eventi possono essere utilizzati per sincronizzare i thread. Nella libreria di classi di.net Framework, gli eventi sono basati sul delegato EventHandler e sulla classe base EventArgs. 3

Eventi Quando si verifica l evento, il sender "notifica" in qualche modo tutti i receiver per farlo, invoca gli event handler dei vari receiver in genere, il sender non conosce né i receiver, né gli handler Per collegare sender e receiver/handler si sfrutta il meccanismo dei delegati per questo motivo, in C# un evento incapsula un delegato è quindi necessario dichiarare un tipo di delegato prima di poter dichiarare un evento. Gli eventi quindi utilizzano i delegati per fornire l'incapsulamento indipendente dai tipi dei metodi che verranno chiamati quando vengono generati 4

Eventi Un evento consente a una classe di notificare agli oggetti la necessità di eseguire un'azione Gli eventi vengono in genere utilizzati nelle interfacce utente grafiche Gli eventi vengono, in genere, dichiarati tramite i gestori eventi dei delegati Gli eventi possono chiamare metodi anonimi in sostituzione dei delegati 5

Dichiarazione Gli eventi dispongono di una firma che comprende un nome e un elenco di parametri, definita da un tipo di delegato il primo parametro è un oggetto che fa riferimento all'origine dell'evento il secondo è una classe che contiene i dati relativi all'evento. Comunque la firma di un evento può essere uguale a qualsiasi firma di delegato valida, purché restituisca void. public delegate void EventDelegate (object sender, System.EventArgs e); 6

Dichiarazione Per aggiungere un evento a una classe, è necessario utilizzare la parola chiave event e fornire un tipo di delegato e un nome per l'evento Gli eventi possono essere contrassegnati come public, private, protected, internal o protected internal Un evento può essere dichiarato statico mediante la parola chiave static. Un evento può essere contrassegnato come virtuale 7

Generazione di eventi Per generare un evento, la classe può chiamare il delegato, passando gli eventuali parametri correlati all'evento Gli eventi per i quali non sono disponibili gestori sono null le origini devono inoltre creare una copia dell'evento prima di eseguire tale controllo e generare l'evento 8

Registrazione creare un metodo per la ricezione di tale evento e quindi aggiungere un delegato per tale metodo all'evento stesso della classe. È innanzitutto necessario che la classe ricevente contenga un metodo con la stessa firma dell'evento, ad esempio la firma del delegato. Questo metodo, denominato gestore eventi, può quindi eseguire l'azione appropriata in risposta all'evento. 9

Eventi in C#: Sintassi Sintassi: [public] event TipoDiDelegato NomeEvento ; Esempio: public event EventHandler Changed; dove Changed è il nome del nuovo evento, che incapsula e controlla un delegato di tipo EventHandler. In pratica, Changed è un delegato, ma la keyword event ne limita la visibilità e le possibilità di utilizzo a quelle consone al concetto di evento. 10

Eventi in C#: Motivazioni per modellare gli eventi basterebbero i delegati MA così facendo chiunque potrebbe chiamare il delegato, ossia "scatenare" l'evento. Poiché ciò è inopportuno, C# introduce una specifica nozione di EVENTO un evento incapsula un delegato per disciplinarne l'uso un evento non può essere scatenato da chiunque perché l'accesso al delegato interno è protetto si introducono appositi operatori per aggiungere / togliere event receivers dalla "lista di notifica" dell'evento. 11

Eventi: Modello d'uso A seguito della definizione: public event TipoDiDelegato nomeevento ; quando si verifica l'evento nomeevento, viene chiamato il delegato TipoDiDelegato. Una volta dichiarato, l evento può essere trattato come un delegato di tipo speciale: può essere null se nessun event receiver si è registrato può essere associato a uno o più metodi da invocare. Limitazione rispetto ai delegati: benché l evento sia public, l invocazione dell evento può avvenire solo all interno della classe nella quale l evento è stato dichiarato. 12

Eventi: Modello d'uso Per questo motivo, per scatenare un evento è bene: definire un metodo protetto (virtuale) l'unico che chiama direttamente l'evento invocare sempre quello (mai l'evento direttamente) Esempio: definizione del metodo protetto: protected virtual void OnChanged(EventArgs e){ if (Changed!= null) Changed(this, e); } invocazione di questo da parte degli event senders OnChanged(EventArgs.Empty); o OnChanged(...); 13

Eventi: Modello d'uso Per agganciarsi a un evento (cioè iniziare a ricevere le notifiche di un evento), un event receiver deve: definire il metodo (event handler) che verrà invocato all atto della notifica dell evento: void ListChanged(object sender, EventArgs e){...} creare un delegato dello stesso tipo dell evento e farlo puntare al metodo event handler: EventHandler ListChangedHandler =new EventHandler(ListChanged); aggiungere questo delegato alla lista dei delegati associati all evento, utilizzando l operatore +=: List.Changed += ListChangedHandler ; 14

Eventi: Modello d'uso Per sganciarsi da un evento (cioè smettere di ricevere le notifiche di un evento), un event receiver deve togliere il delegato dalla lista dei delegati associati all evento, utilizzando l operatore -=, esempio: List.Changed -= ListChangedHandler ; poiché += e -= sono le uniche operazioni permesse su un evento fuori dalla classe dove esso è definito, dall'esterno è possibile solo aggiungere e rimuovere handler per l'evento, ma NON RECUPERARE NÉ MODIFICARE la lista degli event handlers (protezione). 15

Delegati Per Eventi In generale, i delegati alla gestione degli eventi hanno due parametri: la sorgente dell'evento e i dati dell'evento. La classe predefinita System.EventHandler è adatta a tutte quelle situazioni particolari in cui l'evento non genera dati, ossia in cui basta l'informazione "evento avvenuto" e la relativa sorgente. Di fatto, System.EventHandler è un delegato La classe System.EventArgs viene usata quando un evento non deve passare informazioni aggiuntive ai propri gestori. Se i gestori dell evento hanno bisogno di informazioni aggiuntive, è necessario derivare una propria classe da EventArgs e aggiungere i dati necessari. 16

Eventi: Esempio Globale Definire la classe dell'event source definisce l'evento e il relativo metodo OnEvent che lo scatena definisce il metodo pubblico che esprime il "normale job" della sorgente, durante il quale, prima o poi, nascono eventi. class MyEventSource { public event EventHandler evt; // evento è pubblico, ma non è scatenabile da fuori protected virtual void OnEvt(EventArgs args){ if (evt!=null) evt(this,args); // attiva l'evento } public void DoJob(){ // il normal job della sorgente OnEvt(EventArgs.Empty); //la sorgente prima o poi genera eventi } } } 17

Eventi: Esempio Globale Definire la classe dell'applicazione definisce il metodo event handler che gestisce l'evento crea la sorgente e associa l'event handler all'evento (pubblico) attiva il normale job della sorgente (se necessario) class Application { static void Main(string[] args){ MyEventSource src = new MyEventSource(); src.evt += new EventHandler(pippo); src.dojob(); } private static void pippo(object sender, EventArgs x){ Console.WriteLine("gestisco l'evento " + x + " generato da " + sender); } } 18

Esempi Vedere esempi allegati Altri esempi: http://msdn.microsoft.com/en-us/library/5z57dxz2.aspx http://msdn.microsoft.com/en-us/library/9aackb16.aspx Esercitazione: Realizzare un programma che permetta l inserimento di una serie di valori da tastiera, segnalando quando il valore medio corrente scende al di sotto di una certa soglia (utilizzare gli eventi) Implementare il modello del produttore-consumatore tramite eventi Un applicazione industriale deve monitorare la sicurezza di un impianto. Sono in tal senso presenti un sensore di temperatura ed uno di presenza esalazioni tossiche, che inviano opportuni eventi qualora vengono superati valori prefissati di temperatura o di concentrazione in ppm, rispettivamente (generare casualmente il valore istantaneo della grandezza). Un unico sistema di monitoraggio deve produrre messaggi di avviso al personale, indicando anche quante volte in totale sono scattati ciascuno dei due allarmi 19

Eccezioni in C# Le eccezioni in C# funzionano come in Java stessi costrutti try, catch, finally, throw stessa gerarchia delle eccezioni fondamentali Minime varianti è possibile evitare di specificare il nome dell oggetto eccezione in un catch se non lo si usa catch (IndexOutOfBoundException) { } è possibile usare una clausola catch senza parametri per catturare tutte le eccezioni di qualunque tipo catch { } non esiste più la clausola throws per dichiarare che un metodo può generare una eccezione Un nuovo concetto: istruzioni checked e unchecked per controllare o ignorare un eventuale overflow nei calcoli di una espressione o un blocco di istruzioni 20

Eccezioni in C# FileStream s = null; try { s = new FileStream(curName, FileMode.Open);... } catch (FileNotFoundException e) { Console.WriteLine("file {0} not found", e.filename); } catch (IOException) { Console.WriteLine("some IO exception occurred"); } catch { Console.WriteLine("some unknown error occurred"); } finally { if (s!= null) s.close(); } finally è sempre eseguita Il parametro Exception può essere omesso.in questo caso si assume System.Exception. Exception derivato da System.Exception. throw lancia l eccezione 21

Eccezioni in C# Proprietà e.message stringa; inizializzato da new Exception(msg); e.stacktrace stringa e.source sorgente dell eccezione e.targetsite nome del metodo che invia l eccezione Metodi e.tostring()... nome dell eccezione e traccia dello stack 22

Eccezioni in C# Cause di sollevamento di un eccezione: Operazione invalida (implicita): Divisione per 0, overflow degli indici, uso di un riferimento null usando throw (esplicita): throw new FunnyException(10); class FunnyException : ApplicationException { public int errorcode; public FunnyException(int x) { errorcode = x; } } usando un metodo che può emettere un eccezione, ma non la cattura: s = new FileStream(...); 23

Eccezioni in C# Firma dei metodi in caso di eccezioni: Java void mymethod() throws IOException {... throw new IOException();... } Il metodo invocante o cattura l eccezione IOException o specifica IOException nella propria firma C# void mymethod() {... throw new IOException();... } il metodo invocante può non gestire l eccezione. + semplice - meno robusto 24