Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

Feilhåndtering. Feil er uunngåelige! Erfaring viser at feil i dataprogrammer som består av mer enn noen få linjer ikke er til å unngå. For å få et godt.

Liknende presentasjoner


Presentasjon om: "Feilhåndtering. Feil er uunngåelige! Erfaring viser at feil i dataprogrammer som består av mer enn noen få linjer ikke er til å unngå. For å få et godt."— Utskrift av presentasjonen:

1 Feilhåndtering

2 Feil er uunngåelige! Erfaring viser at feil i dataprogrammer som består av mer enn noen få linjer ikke er til å unngå. For å få et godt program må vi forholde oss til feilsituasjoner. To strategier: 1. Unngå feil 2. Håndtere feil som du forventer oppstår

3 To strategier for å håndtere feil 1.Unngå feil Noen typer feil kan forhindres, disse er: a)Skrivefeil (syntaksfeil) – lett å forhindre b)Logiske feil – svært vanskelig å forhindre 2.Håndtere feil som du forventer oppstår Dette er feil som ikke kan unngås, men siden vi kan forvente dem kan vi gjøre klar kode som håndterer feilene. c) Run-time feil Skjer mens programmet kjører – umulig å forhindre

4 Eksempel på feil - 1 Private Sub (...) Handles Button1.Click Dim tabell(10) As Integer 'Legg inn tall i tabellen For i As Integer = 1 To 10 tabell(i) = CInt(i ^ 2) + 1 'tabellposisjonen opphøyet i andre + 1 Next End Sub Resultat: Hva er feil?

5 Eksempel på feil - 2 Private Sub (...) Handles Button1.Click Dim tabell(10) As Integer 'Legg inn tall i tabellen For i As Integer = 1 To 10 tabell(i) = CInt(i ^ 2) + 1 'tabellposisjonen opphøyet i andre + 1 End Sub Resultat: Programmet kan ikke startes/kjøresHva er feil?

6 Eksempel på feil - 3 Private Sub btnTest_Click(...) Handles btnTest.Click Dim tabell() As String Dim sr As IO.StreamReader = IO.File.OpenText("C:\test.txt") Dim i As Integer Do While sr.Peek <> -1 i += 1 ReDim tabell(i) tabell(i) = sr.ReadLine Loop MsgBox("Det var " & i & " linjer i filen") sr.close() End Sub Resultat: Hva er feil?

7 Eksempel på feil – 4 To like programmer oppdaterer samme fil Resultat: Hva er feil? Private Sub btnTest_Click(...) Handles btnTest.Click Dim sw As IO.StreamWriter = _ IO.File.AppendText("C:\test.txt") sw.WriteLine("Hei") MsgBox("Har skrevet til fil") sw.Close() End Sub Private Sub btnTest_Click(...) Handles btnTest.Click Dim sw As IO.StreamWriter = _ IO.File.AppendText("C:\test.txt") sw.WriteLine("Hei") MsgBox("Har skrevet til fil") sw.Close() End Sub

8 Tre typer feil a)Skrivefeil (syntaksfeil) – lett å forhindre b)Logiske feil – svært vanskelig å forhindre c)Run-time feil – umulig å forhindre Feil legges inn når vi skriver programmet Skjer mens programmet kjører. Skyldes omgivelsene. Kan forutsees men ikke forhindres

9 Håndtering av feil Som programmerer er det din oppgave å lage god kode, dvs. Lage kode som unngår skrivefeil og logiske feil Du må forutse mulige run-time feil og Lage kode som håndterer run-time feil

10 Skrivefeil = syntaksfeil = Kompileringsfeil Feil som gjør at vi ikke kan starte programmet kalles kompilatorfeil –Når du trykker F5 for å kjøre et program vil VB oversette programmet til maskinspråk (binærkode) som maskinen forstår og kan kjøre. Dersom VB ikke klarer å oversette koden du har skrevet gir den beskjed om en kompileringsfeil –F.eks: Skriv End If uten en If først

11 Håndtering av kompileringsfeil Dette hjelper Visual Basic oss med på en svært god måte. Prøv eksemplet på forrige ide: End If uten en If først

12 Run-Time feil Run-time feil skjer mens programmet kjører. Eksempel: Dim temperatur As Double = CDbl(txtTemp.Text) –Dersom brukeren oppgir noe annet en et tall medfører det run-time feil –Her blir programmet blir satt til å gjøre noe det ikke var laget for (designet for)

13 ... Run-Time feil Merk: Programmet MÅ kjøre for at vi skal oppdage denne feilen Når tekstfeltet inneholder en lovlig verdi så vil feilen aldri oppstå

14 ... Run-Time feil Vi kan ikke hindre at run-time feil skjer, MEN vi vet når vi kan forvente at de skjer. Som programmerer må vi legge inn kode som håndterer run-time feil.

15 Håndtering av run-time feil Ved Run-time feil vil programmet gjøre et unntak, en exception, dvs. at programmet leter etter kode som skal utføres i tilfelle feil. Dersom slik kode ikke finnes, krasjer prgrammet og brukeren må starte det på nytt. Dette kan føre til at data som er lagt inn går tapt og det er irriterende for brukerne. Du bør derfor legge inn kode som håndterer feil i de tilfeller du forventer at feil oppstår.

16 ... Håndtering av run-time feil: Try - Catch - Finally La programmet prøve (Try) koden som vi forventer kan feile — Dersom feil oppstår hopper programmet rett til et sted som fanger opp feil (Catch). Koden etter Catch utføres, og når den er ferdig vil eventuell kode som står etter Finally utføres. Til slutt kommer End Try

17 Eksempel på håndtering av Run-time feil I btnTest_click(): Sjekke at inndata er et tall – metode 1 Try Dim temperatur As Double = CDbl(txtTemp.Text) MsgBox(“Oppgitt temperatur er: " & temperatur) Catch MsgBox(“Vennligst oppgi temperatur som et tall") Finally MsgBox(“Prøv gjerne igjen") End Try

18 SPØRSMÅL PÅ FORELESNINGEN: Hvordan sjekke at inndata er et HELTALL? Try Dim temperatur As Integer = Convert.ToInt32(txtAvstand.Text) MsgBox(“Oppgitt temperatur er: " & temperatur) Catch MsgBox(“Vennligst oppgi temperatur som et heltall") txtTemp.Clear() Finally MsgBox(“Prøv gjerne igjen") End Try Kan bruke Convert-objektet i en Try-Catch. F.eks.: Convert.ToInt32(txtAvstand.Text) vil gi Exception dersom tekstboksen inneholder noe annet enn heltall. For desimaltall: Convert.ToDouble(txtAvstand.Text)

19 If IsNumeric(txtAvstand.Text) Then temperatur = CDbl(txtHoyde.Text) MsgBox(“Oppgitt temperatur er: " & temperatur) Else MsgBox(“Vennligst oppgi temperatur som et tall") End If MsgBox(“Prøv gjerne igjen") Eksempel på håndtering av Run-time feil I btnTest_click(): Sjekke at inndata er et tall – metode 2

20 ... Håndtering av run-time feil Sjekke at inndata er i gyldig område ' F.eks. Hastighet = avstand / tid. les inndata fra tekstbokser: If IsNumeric(txtAvstand.Text) Then avstand = CDbl(txtAvstand.Text) If avstand 1000 Then feil = True melding = ”Avstand må oppgis som et tall mellom 0 og 1000" End If Else feil = True melding = ”Avstand skal være et tall." End If ‘ tilsvarende som ovenfor gjøres for å få lest inn tid If feil = False then hastighet = avstand / tid Else MsgBox(melding) End If

21 Logiske feil Den tredje typen feil er logiske feil. Logiske feil er de vanskligste å oppdage Kalles BUGS Med logiske feil får du ingen varsel, programmet kjører men resulatet blir feil! Du må da granske koden i detalj for å finne feilen. (DEBUGGE) Bruker en DEBUGGER

22 Option Explicit – hjelper oss Tvinger oss til å delarere variabler før de brukes –Unngår logiske feil som f.eks: avstand = 100 tid = 2 hastighet = avstad / tid Hva er feil ovenfor? –Tips: sjekk variabelnavnene

23 Logisk feil – eksempel 1 Private Sub btnTest_Click(...) Handles btnTest.Click Dim minutes As Integer = 10 Dim kilometer As Double = 50 Dim timer As Double timer = minutes / 60 MsgBox(”Hastighet: " & KmiTimen(timer, kilometer) & ”km/t”) End Sub Function KmiTimen(ByVal kilometer As Double, ByVal timer As Double) As String KmiTimen = CStr(kilometer / timer) End Function

24 Logisk feil – eksempel 2 Private Sub btnTest_Click(...) Handles btnTest.Click Dim tabell() As String Dim sr As IO.StreamReader = IO.File.OpenText("C:\test.txt") Dim i As Integer Do While sr.Peek <> -1 i = i + 1 ReDim Preserve tabell(i) tabell(i) = sr.ReadLine Loop MsgBox("Det var " & i & " linjer i filen") End Sub

25 Logisk feil – eksempel 3 Private Sub btnTest_Click(...) Handles btnTest.Click Dim tabell() As String Try Dim sr As IO.StreamReader = IO.File.OpenText("C:\test.txt") Dim i As Integer Do While sr.Peek <> -1 i += 1 ReDim tabell(i) tabell(i) = sr.ReadLine sr.Close() Loop MsgBox("Det var " & i & " linjer i filen") Catch ex As Exception MsgBox("Filen finnes ikke") End Try End Sub

26 Objektorientering VB er objektorientert! F.eks. vi har brukt tekstbokser mye. –En tekstboks er et objekt txtTemp.Text = "100" 'gir verdi til Text-feltet til boksen Egenskapen "Text" får verdi. txtTemp.Clear() 'kaller opp et delprogram som tilhører tekstboksen Oppførselen "Clear" utføres. –Et objekt har egenskaper (variabler) og oppførsel (prosedyrer / funksjoner)

27 Strukturer Vi brukte strukturer for å samle informasjon om noe, f.eks. en person eller en bil Structure Bil Dim merke As String... End Structure 'Bruker denne strukturen: Dim enBil As Bil enBil.merke = "VW" Ser at egenskaper til bil settes på samme måte som en tekstboks: enBil.merke = "VW" og txtTemp.Text = "100"

28 Et Objekt defineres på samme måte som en Structure med noe i tillegg I tillegg til egenskaper har objekter oppførsel (prosedyrer/funksjoner). txtTemp.Clear() 'Clear er en subrutine som hører til tekstboks-objektet Vi kan legge inn prosedyrer eller funksjoner i en Struktur og har da grunnlaget for et objekt: egenskaper og oppførsel Dersom vi har både egenskaper og oppførsel med kalles strukturen en klasse (Class)

29 Klasser og objekter Class Bil Public merke As String '... flere egenskaper (variabler) Sub visMerke() MsgBox("Merket er: " & merke) End Sub '... flere oppførsler (prosedyrer eller funksjoner) End Class 'Bruker denne Klassen: Dim enBil As New Bil() enBil.merke = "VW" enBil.visMerke() Lager/Definerer en klasse (som vi gjorde for strukturer) Lager et objekt av klassen, og bruker dette objektet.


Laste ned ppt "Feilhåndtering. Feil er uunngåelige! Erfaring viser at feil i dataprogrammer som består av mer enn noen få linjer ikke er til å unngå. For å få et godt."

Liknende presentasjoner


Annonser fra Google