1 / 29

Feilhåndtering

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 program må vi forholde oss til feilsituasjoner. To strategier: 1. Unngå feil 2. Håndtere feil som du forventer oppstår.

kapono
Download Presentation

Feilhåndtering

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 • Unngå feil Noen typer feil kan forhindres, disse er: • Skrivefeil (syntaksfeil) – lett å forhindre • Logiske feil – svært vanskelig å forhindre • 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 feilSkjer 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 Hva er feil? Resultat:

  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øres Hva 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 – 4To like programmer oppdaterer samme fil 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 Resultat: Hva er feil?

  8. Tre typer feil • Skrivefeil (syntaksfeil) – lett å forhindre • Logiske feil – svært vanskelig å forhindre • 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 feilI 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. Eksempel på håndtering av Run-time feilI btnTest_click(): Sjekke at inndata er et tall – metode 2 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")

  20. ... Håndtering av run-time feilSjekke 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 < 0 Or 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 boksenEgenskapen "Text" får verdi. • txtTemp.Clear() 'kaller opp et delprogram som tilhører tekstboksenOppfø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.

More Related