Exceptions Hoofdstuk 17 Hoofdstuk 17.

Slides:



Advertisements
Verwante presentaties
KINN 2010 •OOP •O Object •O Georiënteerd •P Programmeren.
Advertisements

 De Robot  Het Programma  Film By Martijn Hazenboom.
Gegevensstructuren: list boxen en lijsten
Objecten Hoofdstuk 6 Hoofdstuk 6 Hoofdstuk 6 1.
VBA en VBS Een introductie.
Instructie Programmeren Debuggen 5JJ70. Debuggen: Wat is het probleem Je programma compileert, maar werkt niet zoals verwacht, wat nu? Vraag je af: wat.
Computervaardigheden Hoofdstuk 4 — Scripting (Let op: dit is enkel voor studenten Biologie.)
Hoofdstuk 5: Bestanden.
Hoofdstuk 6: Controle structuren
Inleiding Informatica Prof. Dr. O. De Troyer Hoofdstuk 10: Omgaan met problemen.
PLDA – Connectiviteit Rudolf de Schipper Geoffroy Fauveaux 09/11/2004.
1 Datastructuren Sorteren: alleen of niet alleen vergelijkingen College 5.
Les 2 Basisbouwstenen (deel 1)
Verdieping Programmeren in Java - deel 1 college 6 mei 2001.
Klassen schrijven Hoofdstuk 10. Visual Basic.NET voor studenten2 In dit hoofdstuk … Hoe schrijf je een klasse Constructormethodes Public methoden Variabelen.
Herhaling: For, While en Do
Overerving Hoofdstuk 11 Hoofdstuk 11.
Methoden en argumenten
Visual Basic .NET voor studenten
Consoleprogramma’s Hoofdstuk 19. Visual Basic.NET voor studenten2 In dit hoofdstuk … Hoe consoletoepassingen maken In- en uitvoer bij consoleprogramma’s.
Bestanden Hoofdstuk 18 Hoofdstuk 18.
Visual Basic.
Opgave 2a nMet een InputStream lees je bytes uit een binare file nMet een Reader lees je characters uit een tekstfile.
, 17h30Recursie 1 Inleiding tot recursie Karel Popelier.
Internetapplicaties - VII Error Handling 1 Internetapplicaties Deel 7: Error Handling.
Visual Basic 2005/2008 OOP in praktijk André Obelink - MCSD, MVP Web: Web: -
KINN 2010 OOP O Object O Georiënteerd P Programmeren.
PHP & MYSQL LES 02 PHP & FORMULIEREN. PHP & MYSQL 01 PHP BASICS 02 PHP & FORMULIEREN 03 PHP & DATABASES 04 CMS: BEST PRACTICE.
Testen Hoofdstuk 22. Visual Basic.NET voor studenten2 Inleiding Testen hebben als doel het ontdekken van bugs Het is echter onmogelijk om met testen te.
Visual Basic.NET voor studenten De VB- ontwikkelomgeving Hoofdstuk 2.
Slide 1Programmatuur voor real-time controleYolande Berbers RTPReal-Time Programmatuur hoofdstuk 6: uitzonderingen en de behandeling van uitzonderingen.
Programmeerstijl Hoofdstuk 21. Visual Basic.NET voor studenten2 Inleiding Belang van een goede programmeerstijl:  Programma’s worden door meerdere mensen.
Debuggen Hoofdstuk 9 Hoofdstuk 9.
Les 7 Multiple Document Interface Programmeren met Visual Basic Karl Moens.
Arrays Hoofdstuk 14 Hoofdstuk 14.
Objectgeoriënteerd Ontwerp
Interfaces Hoofdstuk 23 Hoofdstuk 23.
Polymorfisme: inleiding Hello me, meet the real me…
Variabelen en berekeningen
Visual Basic.NETPag.1 Hoofdstuk 8 – Fout afhandeling Inleiding Structured Exception Handling Hoe fouten opvangen Geen foutafhandeling Alle fouten opvangen.
Les 3 Basisbouwstenen (deel 2) Programmeren met Visual Basic Karl Moens.
Animatie nAnimatie: “tekenfilm” programma toont automatisch veranderende beelden nGemakkelijk te programmeren met gebruik van de klasse Thread “draadje”
Hoofdstuk 6 – Objectgeoriënteerd Programmeren: Overerving
Hoofdstuk 3 - Conditionele logica
Tweedimensionale arrays
Programmeercursus O.O.P. met VISUAL BASIC.NET
Hoofdstuk 10.3 Tekst-editor: MDI-interface Dialogen Files lezen Abstracte klassen.
Encapsulatie: Every man is an island upon himself.
Bewerkingen met Strings
Polymorfie Hoofdstuk 24. Visual Basic.NET voor studenten2 Inleiding Polymorfie zorgt ervoor dat een gegeven object verschillende “vormen” kan aannemen.
Java Objectgeoriënteerd Programmeren in Java met BlueJ
Docentinstructie: Het is aan te bevelen de eerste dia’s klassikaal te tonen en met uitleg te bespreken. Als na zes dia’s een korte demo van Celsius/Fahrenheit.
Variabelen. Wat zijn variabelen? In een programmeertaal zijn er “dingen” nodig die ervoor zorgen dat het programma informatie voor korte of langere tijd.
OOP en.NET. Objecten Is geen ‘nieuw’ mysterieus woord Overal om ons heen zien we objecten: – TV – Computer – Auto – Wasmachine – ….
Loops en errors Array's Random try catch for loop while loop do while loop.
GEGEVENSSTRUCTUREN IN.NET. Inleiding  Enumerated type  Structure  Collecties  Typed collections  Untyped collections.
Java voor beginners Doel: Een spel maken in LWJGL Door: Jim van Leeuwen.
Bestanden Lezen Schrijven Afbeeldingen. Bestandstypen.txt.png eigen.
De definitie van een object. Een object is een verzameling van eigenschappen en bewerkingen. Veel voorkomende objecten zijn: D (display) Gui (user interface)
ISensorEventListener
Gameprogrammeren: Herhalingen
Voorbeeld: Simulatie van bewegende deeltjes
Voortborduren op eerder gedaan werk
Gameprogrammeren: Exceptions
Opdrachten herhalen public void tekenScherm (object o, PEA pea)
Small Basic Console deel 2
SQL Les February 2019.
Software Development fundamentals
Software Development fundamentals
Software Development fundamentals
Transcript van de presentatie:

Exceptions Hoofdstuk 17 Hoofdstuk 17

Visual Basic .NET voor studenten In dit hoofdstuk … Wat is een exception? Waarom zijn ze nuttig? De VB exception faciliteiten. Visual Basic .NET voor studenten

Visual Basic .NET voor studenten Inleiding Exception  er is een fout opgetreden Exception handling  afhandelen van de fout op een gecontroleerde manier Voorbeelden: Ongeldige invoer (bv. een letter i.p.v. een getal) Netwerkproblemen (bv. DNS fout) Schijfproblemen (bv. bestand niet gevonden) Hardwareproblemen (bv. geen papier) Visual Basic .NET voor studenten Hoofdstuk 17

Visual Basic .NET voor studenten Inleiding Syntaxfouten Bekijk je fouten in de “Error List” Visual Basic .NET voor studenten Hoofdstuk 17

Visual Basic .NET voor studenten Inleiding Run-time fouten een onmogelijke operatie Niet gedetecteerd door de compiler Bv: deling door nul Logische fouten Programma produceert foute resultaten Niet altijd een crash tot gevolg! Bv: oneindige lussen Enkel op te lossen door uitvoerig te testen Visual Basic .NET voor studenten Hoofdstuk 17

Visual Basic .NET voor studenten Inleiding Voorstelling programma met een “normale” werking. Als er nooit fouten zouden optreden is dit correct: ... methodeA() methodeB() ... Visual Basic .NET voor studenten Hoofdstuk 17

Visual Basic .NET voor studenten Inleiding Robuust programma: omgaan met fouten op de “oude” manier ... status = methodeA() if status = 1 Then ‘handel fouten van type 1 af Elseif status = 2 Then ‘handel fouten van type 2 af End If methodeB() ‘ook hier weer een If structuur Ingewikkeld Niet overzichtelijk Visual Basic .NET voor studenten Hoofdstuk 17

Visual Basic .NET voor studenten Inleiding Er is dus een nieuwe manier nodig om fouten op een elegante manier af te handelen  Exception mechanisme Merk op: VB6 had nog een ander mechanisme (On Error Goto …) Dit noemt men Unstructured Exception Handling Niet (meer) gebruiken!! Visual Basic .NET voor studenten Hoofdstuk 17

Visual Basic .NET voor studenten Jargon Als een fout zich voordoet in het programma: Wordt er door de runtime omgeving of door de methode zelf een speciaal object aangemaakt Men zegt dat een exception opgegooid wordt (eng: to throw) Hoe afhandelen: Op de gepaste locatie kan men deze exception opvangen (dus niet altijd vlak erna met een If) (eng: to catch) Sleutelwoorden: Throw, Try, Catch, Finally Visual Basic .NET voor studenten Hoofdstuk 17

Een Try-Catch voorbeeld Demo Exception Square Visual Basic .NET voor studenten Hoofdstuk 17

Een Try-Catch voorbeeld Private Sub Button1_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles Button1.Click Dim side As Double Try side = Double.Parse(TextBox1.Text) Label1.Text = "Area is " & _ CStr(side * side) _ & " sq units" Catch exceptionObject As FormatException Label1.Text = "Error in side: re-enter" End Try End Sub .NET Framework methode om Strings om te zetten naar Double getallen Binnen het Try blok kan zich een FormatException voordoen, nl: Parse (zie Help!) De exception wordt afgehandeld in het Catch block Visual Basic .NET voor studenten Hoofdstuk 17

Visual Basic .NET voor studenten Try-Catch: regels Zet een Try blok rond de code die je wil controleren op fouten Als in een statement een exception optreedt, stopt de uitvoering onmiddellijk Er wordt gesprongen naar het Catch blok, waar de exception afgehandeld wordt Als de exception niet wordt opgevangen, wordt deze doorgegooid naar de oproepende methode Als ook deze ze niet kan opvangen  weer doorgooien Uiteindelijk kom je uit bij de Main() procedure  stack trace Demo: Exception Square 2 Visual Basic .NET voor studenten Hoofdstuk 17

Een Try-Catch voorbeeld ... Try Calculate() Catch exceptionObject As FormatException MessageBox.Show(exceptionObject.ToString) Label1.Text = "Error in side: re-enter" End Try Private Sub Calculate() Dim side As Double = Double.Parse(TextBox1.Text) Label1.Text = "Area is " & CStr(side * side) _ & " sq units" End Sub Visual Basic .NET voor studenten Hoofdstuk 17

Visual Basic .NET voor studenten Het exception object Bevat nuttige informatie over de aard van de fout Tip: lees deze informatie, dit zal je helpen bij het debuggen! Properties Message : kort bericht StackTrace : hierarchie van methodes die geleid hebben tot de exception Zie ook: Source, TargetSite, InnerException Methode ToString() : String voorstelling van deze exception Visual Basic .NET voor studenten Hoofdstuk 17

Visual Basic .NET voor studenten Classificatie Visual Basic .NET voor studenten Hoofdstuk 17

Meerdere exceptions in 1 Catch ... Try SomeOperationWithIO() Catch exceptionObject As FileNotFoundException MessageBox.Show(“File Not Found, choose other file”) Catch exceptionObject As EndOfStreamException MessageBox.Show(“End of Stream: file corrupt”) End Try Ofwel alle specifieke gevallen opvangen, zodat je een foutafhandeling hebt per geval Ofwel 1 catch die alle subklassen van IOException behandelt. Dit is naar de gebruiker toe soms minder duidelijk (Bestand niet gevonden of End of Stream ?) ... Try SomeOperationWithIO() Catch exceptionObject As IOException MessageBox.Show(“IOException occurred”) End Try Visual Basic .NET voor studenten Hoofdstuk 17

Combinatie van Catch blokken ... Dim bottom As Integer Dim top As Integer = 100 Try bottom = Integer.Parse(TextBox1.Text) MessageBox.Show( _ "Dividing into 100 gives " & CStr(top \ bottom)) Catch exceptionObject As DivideByZeroException MessageBox.Show("Error - zero:re-enter data") Catch exceptionObject As FormatException MessageBox.Show("Error in number: re-enter") Catch exceptionObject As SystemException MessageBox.Show(exceptionObject.ToString()) End Try Vang elk type van Exception afzonderlijk op Regel: hoe algemener de exception (SystemException), hoe later opvangen in het Try-Catch statement (waarom?) Visual Basic .NET voor studenten Hoofdstuk 17

Visual Basic .NET voor studenten Samenvatting Methode1() Methode2() Methode3()  Exception treedt op Uitvoering van Methode3() wordt onmiddellijk gestopt Als er een Catch statement is, die deze Exception (of een superklasse ervan) opvangt, wordt deze uitgevoerd. De uitvoering gaat vervolgens verder na End Try Als er geen Catch statement is, gaat de Exception naar de oproeper (Methode2()), indien deze ook geen Catch statement heeft naar Methode1(), enz. Als er helemaal geen Catch wordt gevonden, breekt het programma af met een foutmelding. Exception propagation (voortplanting) Visual Basic .NET voor studenten Hoofdstuk 17

Opgooien: een inleiding ... MessageBox.Show(CStr(WordToNumber("hXndred"))) Private Function WordToNumber(ByVal word As String) _ As Integer Dim result As Integer = 0 If word = "ten" Then result = 10 ElseIf word = "hundred" Then result = 100 ElseIf word = "thousand" Then result = 1000 Else Throw New FormatException("Wrong input: WordToNumber") End If Return result End Function Visual Basic .NET voor studenten Hoofdstuk 17

Visual Basic .NET voor studenten Hoe afhandelen Zinvolle foutmelding naar de gebruiker toe, eventueel vragen om nieuwe invoer Bij waarschijnlijke bugs, exceptions loggen naar bestanden of Event logs Nooit lege Catch statements schrijven om exceptions te “verbergen” Visual Basic .NET voor studenten Hoofdstuk 17

Visual Basic .NET voor studenten Finally ... Try conn = OpenConnectieNaarDB() conn.executeSQLStatements() reportResults() Catch exceptionObject As SQLException MessageBox.Show(“Illegal SQL statement") Finally conn.closeConnection() End Try Een Finally clause wordt altijd uitgevoerd, ongeacht of er nu een exception was of niet. Dit wordt vaak gebruikt bij het opruimen van resources zoals databaseconnecties Visual Basic .NET voor studenten Hoofdstuk 17

Zelf exceptions schrijven In bepaalde omstandigheden zijn de ingebouwde exceptions van het .NET framework onvoldoende Bijvoorbeeld, je wil fouten die voor een bepaalde toepassing specifiek zijn, op dezelfde manier met exceptions afhandelen Hoe? Schrijf zelf een klasse die overerft van ApplicationException Visual Basic .NET voor studenten Hoofdstuk 17

Zelf exceptions schrijven Public Class InvalidEmailException Inherits ApplicationException Public Sub New(ByVal message As String) MyBase.New(message) End Sub End Class Voorzie steeds een constructor die een message parameter doorgeeft. Dit is de eigenlijke foutmelding Visual Basic .NET voor studenten Hoofdstuk 17

Zelf exceptions schrijven Try check() Catch ex As InvalidEmailException MessageBox.Show(ex.Message) End Try Private Sub check() Dim email As String = TextBox1.Text Dim atIndex As Integer = email.IndexOf("@") If atIndex = -1 Then Throw New InvalidEmailException(email & _ " is geen geldig emailadres, geen @ teken") Else atIndex = email.IndexOf("@", atIndex + 1) If atIndex <> -1 Then " is geen geldig emailadres, bevat meer dan één @ teken") End If End Sub Visual Basic .NET voor studenten Hoofdstuk 17

ErrorProvider component Een nieuwe UI component om aan te geven welke invoervelden op een form ongeldig zijn Gebruik: sleep een ErrorProvider op een form vanuit de toolbox Methode: setError(component, message) Visual Basic .NET voor studenten Hoofdstuk 17

Visual Basic .NET voor studenten Voorbeeld Try check() ErrorProvider1.SetError(TextBox1, "") Catch ex As InvalidEmailException ErrorProvider1.SetError(TextBox1, ex.Message) End Try Visual Basic .NET voor studenten Hoofdstuk 17