Cos’è un Eccezione?

  • I programmi spesso si trovano ad operare in condizioni anomale:
    • Il programma riceve un dato sbagliato.
    • Tenta di stabilire una connessione remota che fallisce (es: time-out).
  • Anche errori del run-time system:
    • Divisione per zero.
    • Invocazione di un metodo su riferimento nullo.
    • Indice d'accesso fuori range nei vettori.
    • Accesso ad una istanza nulla.

Il concetto di eccezione

Chiamare una funzione con argomenti illegali è probabilmente un errore (andrebbe opportunamente segnalato).

Il range di una funzione a volte è tutto l’insieme dei valori del tipo di ritorno.

Le funzioni hanno a volte bisogno di segnalare al loro chiamante che non sono in grado di portare a termine il loro compito perché e successo un errore o si è presentato un caso eccezionale.

Una possibilità per gestire questi casi eccezionali è quella di far restituire al chiamante un valore di tipo variante, ma e più efficace avere un meccanismo per gestire le eccezioni trasmettendo il controllo direttamente al gestore dell’eccezione, o se tale gestore manca, facendo abortire l’esecuzione.

È nato: un meccanismo di astrazione che permetta a una funzione o di tornare un valore o terminare in modo eccezionale in caso di situazioni non «normali».

Il meccanismo interrompere l’esecuzione di un sottoprogramma e propagare l’errore ad un livello più alto del programma stesso. Figurativamente, l’eccezione viene lanciata in basso, e trappata, o catturata più in alto.

Le tre fasi dell’Eccezione

  • Sollevamento dell’eccezione (throwing exception) viene generato una segnalazione di un evento anomalo.
  • Cattura dell’eccezione (catching exception) un pezzo di codice cattura il segnale di eccezione per trattarla opportunamente.
  • Trattamento dell’eccezione (handling exception) informare l’utente dell’evento - cerca eventualmente di riparare - ripristinare uno stato consistente con la computazione in atto.

La propagazione dell'Eccezione

Se l’eccezione non viene intercettata e gestita dove si verifica, si propaga attraverso la gerarchia delle chiamate di metodi (ovvero lo stack dei record di attivazione). Vengono chiusi tutti i record di attivazione fino ad incontrare un blocco che gestisca l'eccezione. Se esso non viene trovato il programma si chiude, la chiusura del programma, per futili motivi, è da evitare in quanto c'è il rischio di perdita di importanti dati.

I Vantaggi

Ciò permette di scrivere il codice sorgente assumendo che non vi siano malfunzionamenti, demandando a routine specializzate il compito di risolvere eventuali problemi incontrati durante il percorso.

In contrasto con l’approccio di linguaggi meno evoluti come il C standard, dove in pratica ogni condizione di errore deve essere controllata “sul posto”, si ottiene un codice più chiaro e una gestione più logica degli errori.

Nel caso di linguaggio ad oggetti, le eccezioni sono degli oggetti come tutti gli altri ed è possibile quindi usarle per memorizzare una notevole mole di informazioni riguardo all’errore occorso.

Gli Svantaggi

Se non gestite correttamente possono far chiudere il programma e/o saltare una mole considerevole di istruzioni.

I costrutti sono spesso lenti e non ben ottimizzati.

results matching ""

    No results matching ""