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.

Slides:



Advertisements
Liknende presentasjoner
Repetisjon innkapsling static tabell av primitiv datatype LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring.
Advertisements

Tabeller av objekter Klassen ArrayList
C++ for Java-programmerere
Datafiler og serialisering Tekstfiler Scanner-klassen Binær overføring av data Direkte tilgang til filinnholdet Serialisering LC191D Videregående programmering.
Uke 10 - Sortering, og hvordan lage en klasse for et klassebibliotek 21 okt. 2003, Arne Maus Inst. for informatikk, UiO.
TIF seminar -Visual Basic (VBA) og RExcel Elisabeth Orskaug Norsk Regnesentral Oslo, 8. november 2011.
Kontrollstrukturer (Kapittel 3)
Unit testing Gruppe 2: Kjartan Haugen Jon Gunnar Bjørkmo
Java 12 Mer filbehandling - skrive til fil HashMap Et større eksempel Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet.
Tabeller – Arrays Lage frekvenstabell Norske Bokstaver
Mer sortering Mer Debugging Introduksjon til strukturer.
Java 4 Mer om forgreninger While-løkker Ole Christian Lingjærde
Eksempel: Administrasjon av biler. Eksempel •Program for å administrere informasjon om biler •Vi ser på tre deler: –Registrere biler: legge inn i tabell.
Objektorientert programmering Objektorientert systemutvikling
Objektorientert programmering i PHP del 2
IS-102 Klassedefinisjoner
Tema: Introduksjon Hvorfor Velocity? Installasjon Velocity VS. JSF / JSP Eksempler Oppsumering.
C# for javaprogrammerere
Generelt I/O if/else Funksjoner Lists Løkker Dictionaries Annet Listebehandling Klasser Python med noen algdat-anvendelser Åsmund Eldhuset asmunde *at*
En gang til!? .
Operativsystemer.  Tilstandsmaskiner kalles på engelsk Finite State Machines.  Tilstandsmaskiner er en metode til å beskrive systemer med logisk og.
Grunnleggende testteori
Om Øvelse 7 Stoff relatert til øvelse 7 Generering av tilfeldige tall Bruk ting vi har lært før.
Filer Finne minste Finne Største Beregne gjennomsnitt Variabler Tabeller – Arrays Lage frekvenstabell.
Utvider eksemplet om biler fra forrige gang med mer feilsjekk Tid og Dato.
Jæger: Robuste og sikre systemer INF150 Programmering torsdag 7.9 Bakgrunn for øvelse 2 Bruk av variabler i beregninger Ser på tekststrenger (3.4 Strings.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 2.10 Default values – standardverdier ved oppstart MER OM: Sub-prosedyrer og sub-funksjoner.
Gjennomgang av prøven Tidsangivelse. Prøven deles ut Vi fyller ut øvelsen sammen.
Å lage sikre klasser Unntaksklassene i Java-API-et Unntakshåndtering i databasesammenheng try-catch-finally-setningen Trelagsarkitektur; egen databaseklasse.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 4.9 Forrige gang til og med: 3.2 Visual Basic Events (60-73) Nå: Litt om Group Box, CheckBox.
Sortering og søk. Sortering av data som ligger på en fil Prisipielt to hovedmåter gjøre dette på: 1.Arbeide mot filen 1.Lese en linje, og lese de resterende.
INF150 Programmering mandag 11.9
Jæger: Robuste og sikre systemer INF150 Programmering torsdag 31.8 Kapittel 3: Grunnlag for programmering i Visual Basic.
Om øvelse 9 Vedlikehold av data Databaser. Øvelse 9 I øvelse 8 så vi på: –Registrering av informasjon om hjelpere To små utvidelser av øvelse 8: –Endring.
Jæger: Robuste og sikre systemer INF150 Programmering torsdag 5.10 MER OM: Lesing fra fil Unntakshåndtering Kap 8.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
INF 295 Algoritmer og datastrukturer Forelesning 2 - kapittel 1 Hans F. Nordhaug (Ola Bø)
Høgskolen i Oslo Webprogrammering Filbehandling i PHP.
Høgskolen i Oslo Web-programmering Feilhåndtering i PHP.
Dynamiske nettsider PHP Del 2 – Kontrollstrukturer.
Java 11 Programmering med og uten objekter: hva er forskjellen?
VI LAGER EN PLATEBUTIKK
Å lese tall fra en fil, klassen Scanner 1.Et Scanner-objekt kan knyttes til et strømobjekt eller til en streng. 2.Kan skanne teksten etter data av ulike.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 18.9 Lesing av data fra fil og skriving av data til fil. Side 411 – 4.. Kap 4.
Programmering sif8005. Praktisk informasjon  Innleveringsfrist øvinger: mandag kl  Alle øvinger er obligatoriske  Studass tilgjengelig 6 timer.
Tabeller Dette er en tabell, eller array. Den kan defineres sånn som dette: public int[] heltallsTabell = new int[11]; //Her er 11 tabellens lengde for.
Jæger: Robuste og sikre systemer INF150 Programmering Kapittel 2: Problemløsning Kapittel 3.1 og 3.2.
GPS simulator Et C# program som sender data fra en GPS fil til RS232 og simulerer en GPS engine. Tre linjer pr. sekund er satt opp.
1 Java Database Connectivity (JDBC) Norvald H. Ryeng
Object  Klassen i java  Alle klasser arver fra denne om ikke noe annet blir spesifisert  ArrayList.add(Object instans)  Alle elementer formes til Object.
Ekstra mange tips til Oblig 3! 12. mars 2007 Are Magnus Bruaset og Arild Waaler Inst. for informatikk, UiO.
INF1000 (Uke 14) Eksamen V06 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Arild Waaler.
Byggeklosser i java  Klassedefinisjon  Variabel deklarasjon  Metodedeklarasjoner  En ordentlig klasse  Spesielle/kryptiske skrivemåter  løkker og.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 25.9 MER OM: Sub-prosedyrer og sub-funksjoner Kap 4.
INF1000 (Uke 4) Mer om forgreninger, While-løkker
Inf1000 (Uke 5) Arrayer, filer og tekst
Finne feil - Debugging Introduksjon til sortering.
Kapittel 9 Polymorfi. 9.1 Sein binding Ofte er det perfekt match mellom typen til ein variabel og objektet han refererer til ChessPiece bishop;... bishop.
Jæger: Robuste og sikre systemer INF150 Programmering torsdag 14.9 Ulike måter for å lese inn og skrive ut data. Kap. 3.5 mer om if – setninger Ferdige.
Kapittel 10 Exceptions Handtering av exceptions Ein exception er eit objekt som representerer ein feil eller eit unntak Exceptions blir kasta av.
SPSS-kurs. Program Dagen vil bli delt inn i fire bolker: Bolk 1 - 9:30-10:30 – Åpne/lagre datasett, datatyper, definere variable. Bolk 2 – 10:45-11:30.
Kap. 9 – Computer Intelligence How Information Technology Is Conquering the World: Workplace, Private Life, and Society Professor Kai A. Olsen,
Oversikt Access Hva en bør beherske så langt. Tabeller Felt Typer (heltall, desimaltall, tekst, Boolean) Primary Key.
Kom i gang med Python Pål Hellesnes SYSTEMUTVIKLER
INF5110 – 23. april, 2013 Svar på noen oppgaver til kap
IS-102 Interaksjon med objekter
Begynnerkurs i Python Realfagskonferansen 2019 Henrik H. Løvold
IN3030 – Effektiv parallellprogrammering Uke 1 2. del, våren 2019
Utskrift av presentasjonen:

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

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

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?

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?

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?

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

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

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

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

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

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)

... 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å

... 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.

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.

... 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

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

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)

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

... 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

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

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

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

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

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

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)

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"

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)

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.