Felhantering TDDD78, TDDE30, 729A

Relevanta dokument
Felhantering 2017

Testning av program. Verklig modell för programutveckling

Felhantering 2016

Klassen javax.swing.timer

Felhantering 2015

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Föreläsning 12. Föreläsning 12. Rörliga figurer Klassen Timer Undantag Något om applets. Rörliga appletsfigurer Klassen Timer Undantag

OOP Objekt-orienterad programmering

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

Objektorienterad programmering

Föreläsnings 9 - Exceptions, I/O

Länkade strukturer, parametriserade typer och undantag

Kapitel 6 - Undantag

Objektorienterad Programmering (TDDC77)

F3: Recursive descent, tokenisering, avbildningar och undantag. Carl Nettelblad

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Kopiering av objekt i Java

Fördjupad Java. Undantagshantering. Fel

Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Undantagshantering. Fördjupad Java. Fel. Undantag. Fånga Undantag. Grupper av Undantag

Föreläsning 3 Innehåll. Generiska klasser. Icke-generisk lista ArrayList, skiss av implementering. Icke-generisk lista Risk för fel

Undantagshantering. Fördjupad Java. Undantag. Fel. Grupper av Undantag. Fånga Undantag

TDDC76 - Programmering och Datastrukturer

1 Comparator & Comparable

C++ Objektorientering - Klasser. Eric Elfving

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Undantag. Engelska: exceptions. Skansholm: exceptionella händelser

Att skriva till och läsa från terminalfönstret

Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1.

C++ Objektorientering - Klasser. Eric Elfving Institutionen för datavetenskap

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Tentamen FYTA11 Javaprogrammering

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

Typhierarkier del 1 Gränssnitt, ärvning mellan gränssnitt, ärvning mellan klasser

Felhantering. Andra brott mot språkets regler. Man kan också i programmet bryta mot ett antal olika regler som gäller. Exempelvis:

Testning och felhantering

Objektorienterad programmering

Objektorienterad Programmering DAT043. Föreläsning 4 23/1-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Kungl. Tekn. Högskolan Förel 1, bild 1 Föreläsning 1: Introduktion ffl Kursinnehåll ffl Javarepetition ffl Referenser ffl Nyckelordet static ffl Klass

TUTORIAL: KLASSER & OBJEKT

Repetition av OOP- och Javabegrepp

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Lösningsförslag, tentamen FYTA11 Javaprogrammering

Repetition av OOP- och Javabegrepp

Lösningar för tenta 2 DAT043,

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

Design by Contract, Exceptions. Objekt-orienterad programmering och design (DIT953) Johannes Åman Pohjola, 2018

Motivation. Programmeringsuppgift: En första ansats: Lagra info om anställda Håll reda på varje anställds närmaste chef. som också är en anställd!

4.4 Swing ett interaktivt grafiskt gränssnitt

Exceptions (undantag) Murach s: kap 7

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Javas Exceptions. DD2385 Programutvecklingsteknik Fler bilder till föreläsning 7 23/ Kort om Javas Exceptions Trådar i Java

Objekt, Klasser, Paket m. m.

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Föreläsning 14. Filhantering

Numeriska Metoder och Grundläggande Programmering för P1, VT2014

TDDD78, TDDE30, 729A Typhierarkier del 3 När och hur vill vi använda dem? Några Best Practices

Föreläsning 4 Programmeringsteknik DD1310. Felhantering. Syntax. try och except är reserverade ord som används för hantering av exekverings fel.

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

Minnestilldelning (allokering) och frigörande (avallokering) av minne

TDDD78 Objektorientering i Java, del 2

Språkkonventioner och redigering av tal.

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Objektorienterad Programmering (TDDC77)

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

Kursplanering för EE3D i kursen Programmering 1, 100p.

Design by Contract, Exceptions, Initialisering. Objekt-orienterad programmering och design (DIT952) Johannes Åman Pohjola, 2017

Översikt Föreläsning 1. Trivicalc. Vad är trivicalc? En cell. Områden på skärmen. SMD168/SMD135 Fredrik Bengtsson

725G61 - Laboration 4 Interaktion och I/O. Johan Falkenjack

Sammansatta datatyper Generics: Parametrisk polymorfism

Felsökning. Översikt. Felsökning (debugging) Kodstandard. Kommentarer. Kommentarer. Praktiska råd

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

Överlagring, static, testning, formella metoder och undantag! Förelasning 13!! TDA540 Objektorienterad Programmering!

TUTORIAL: SAMLING & KONSOLL

Övning från förra gången: readword

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

Föreläsning 14. Träd och filhantering

Språket Python - Del 2 Grundkurs i programmering med Python

Objektorienterad programmering i Java I

Objektinteraktion. Objektorienterad programmering Laboration 2. Syfte Att konstruera ett litet objektorienterat program med flera samverkande objekt.

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod överst i högra hörnet på alla papper.

TDDD78, TDDE30, 729A Grafik: Att "rita" egna komponenter

Programmering för språkteknologer II, HT2014. Rum

Tentamen ID1004 Objektorienterad programmering May 29, 2012

TDDD78, TDDE30, 729A Typhierarkier del 2 Vad krävs? Hur fungerar det?

Sammanfattning. Listor. List-manipulering. Matris. /home/lindahlm/activity-phd/teaching/11dd1310/exercise3/exercise3.py September 13, 20111

Dagens föreläsning Programmering i Lisp. - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning

Föreläsning 3 Innehåll

Diskutera Sortera objekt

Översikt. Skriva och läsa data. Kontrollflöde. Två sorters loopar. For-loop. For-loop

*Pekarvärden *Pekarvariabler & *

Dynamiskt minne. Vad är dynamiskt minne Motivering Hur gör man i C Övningar

Transkript:

Felhantering TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2019

Felhantering 2 Ofta antar vi att allt ska fungera Alla filer vi behöver finns går att öppna Tillräckligt mycket minne finns Servrar som vi kontaktar svarar men ibland går ju något fel! Filer saknas Minnet tar slut Servrar är inte tillgängliga Upptäck att ett fel har uppstått Hantera felet på något sätt Laga felet själv Signalera till någon annan

Exempel 4 Exempelproblem: Konvertera sträng till heltal Sträng: ( tecken) Första siffran är Andra siffran är Tredje siffran är Fjärde siffran är, ett heltal Hur går vi från tecken till heltal? Java använder Unicode har numeriskt värde har numeriskt värde 4 steg

Exempel 5 Kodexempel

Exempel 6 Utökning: Läs in ett positivt heltal från användaren ger alltid strängar, tecken för tecken Var alltid misstänksam mot användarens indata!

Upptäcka fel: Själv 7 Ibland kan användaren göra fel i inmatningen

Upptäcka fel: Själv (2) 8 Jonas

Upptäcka fel: Själv (3) 9 Ingen kan upptäcka det åt oss det är vi som måste hitta felet Ignorera? Nej Fel hittat: Felaktig input! Vad ska vi göra? Laga felet själva? Går inte! Signalera till anroparen!

Hur signalerar man fel? 10 Ett sätt att signalera: Speciella returvärden Metoden läser positiva heltal kan aldrig returneras "normalt" Kan användas som speciell "signal" Returvärden används t.ex. i C (): fel (): fel (): OK, fel (): filslut eller fel (testa med ferror() / feof())

Kontrollera returvärde 11 Nu måste anroparen upptäcka att något gick fel Det signaleras men man måste titta på signalen

Kontrollera returvärde (2) 12 Signalering med returvärden kan ge problem 1) Tänk om vi glömmer testa! Krasch: Array med negativ storlek 2) I parseanyinteger() (även negativa) finns inget "ledigt" returvärde som kan betyda "fel"

Kontrollera returvärde (3) 13 3) Jobbigt om det finns mellannivåer

Undantag 1: Intuitioner 15 Ett alternativ: 1. Inför speciella kontrollstrukturer för att signalera fel 2. Inför speciella kontrollstrukturer för att visa var felen kan hanteras 3. Låt felen automatiskt skickas vidare ända till hanteraren Metod som anropar, och vill hantera fel Metod som anropar Felsignalen kastas (throw) och fångas (catch) Mellanmetoderna avbryts istället för att returnera normalt Metod som anropar Metod som signalerar fel

Undantag 2: Signalera fel 16 Fel kallas undantag (exceptions) Fel hanteras separat Reservera inte returvärden, deklarera feltyper istället Fel kasta ett undantag (avbryter exekveringen, inget värde returneras)

Undantag 3: Att läsa kod signalering 17 Speciell syntax lättare att se var fel signaleras

Undantag 4: Att läsa kod felhantering 18 Gammal felhanterare: Vanlig villkorssats mitt i en funktion Exceptions: Egen kontrollstruktur, try / catch Felhanteringskod separeras från övrig kod

Undantag 5: Skicka vidare, automatiskt 19 Kan automatiseras för att vi vet vad som är en felsignal Fångas och hanteras här Fångas inte här skickas vidare Fångas inte här: Ligger inte inom try/catch Går automatiskt till anroparen

Undantag 6: Objekt 20 I Java är undantag objekt (som hanteras speciellt!) Typ: Subklass till Har fält, konstruktorer Kan lagra felinformation

Kontrakt 1: throws 22 Metoder deklarerar vilka undantag som kan kastas Ingår i kontraktet! "Jag lovar att inte signalera några andra fel än FileNotFoundException" Behöver inte titta i kod eller dokumentation för att se vilka fel som kan uppstå, hur de signaleras (): fel (): fel (): OK, fel (): filslut eller fel

Kontrakt 2: Underklasser 23 Vi vet: Subklasser måste lova minst lika mycket! Kompilatorn klagar: StreamReader lovade ju att bara IOException kan kastas!

Kontrakt 3: Efterlevnad 24 Kompilatorn kontrollerar att kontraktet efterlevs Måste fånga med try-catch: Eller tala om att fel kan skickas vidare: Med speciella "felvärden" kunde vi glömma att testa returvärdet

Kontrakt 4: Undantag (!) 25 kan inträffa nästan var som helst : Vissa allvarliga fel Ska fortfarande representeras som undantag, inte "krascha" Lättare att felsöka Ska normalt inte fångas Interna datastrukturer kan ha "förstörts", just eftersom man inte kan gardera sig mot det som kan inträffa var som helst Behöver inte deklareras ingår ej i kontrakt

Hantera 1: Fixa felet 27 Ibland kan man uppfylla kontraktet trots felet På lägre nivå uppstod ett fel På högre nivå var detta inte viktigt, målet nåddes ändå Måste inte informera någon men ibland vill man ändå logga felet

Hantera 2: Skicka vidare 28 Kan man inte uppfylla kontraktet måste anroparen informeras! Informera genom att inte fånga fel: IOException från FileOutputStream skickas automatiskt vidare

Hantera 3: Fånga och kasta om 29 Man kan alltid tillfälligt fånga upp felet Fånga upp felet, städa, kasta vidare samma objekt

Hantera 4: Gemensamt eller separat? 30 Mindre kod, lättare att läsa Vet på vilken rad felet uppstod Anpassa till situationen!

Hantera 5: Vad ska jag fånga? 31 Catch fångar fel av en typ och dess subtyper Fångar alla feltyper på en plats: Ser inte vilka fel som kan uppstå Hur vet man om varje feltyp hanteras rätt? Ange specifika fel som ska hanteras "Exception" är definitivt för brett: Fångar även RuntimeExceptions (null-pekare, ) Om man vill hantera flera feltyper på samma sätt

Felfel 1: Fånga och ignorera följdfel 32 Tror allt gick bra, men doc är fortfarande null NullPointerException Ofta inträffar kraschen långt senare svårt att hitta ursprungsfelet Vanligt felhanteringsfel: Skriver ut felmeddelande, informerar inte anroparen

Felfel 1b: Fånga och ignorera följdfel 33 men anroparen själv fångar felet, ignorerar det, fortsätter, och kraschar senare! Här är loadfile() korrekt

Undvik felhanteringsfel! 34 För att undvika problem, tänk alltid: Vad händer efter jag fångar upp felet? Uppfyller jag mina löften? Får någon reda på om jag inte uppfyller mina löften? Hur fortsätter exekveringen av programmet?

Vem informerar användaren? 36 Vi delar upp klasser i två kategorier De flesta klasser och metoder används bara av andra klasser Misslyckanden ska signaleras till anroparen Kan också loggas till loggfil (se java.util.logging.*) Vissa klasser och metoder tillhör användargränssnittet Får prata med användaren Textutmatning, GUI

Informera 2: Inte lågnivåklasser 37 Om användaren måste informeras: Inte av en lågnivåklass! Inte ens om klassen också informerar anroparen, som här Denna klass är ett verktyg, inte del av användargränssnittet (som kanske föredrar dialogruta)!

Informera 3: I rätt klass 38 Klasser i användargränssnittet kan själva informera användaren Kontraktet anpassas: saveorinform säger inte sparar definitivt filen.

Felfel 2: Fånga och gissa 39 Glöm att starta databasen också DatabaseException spendera tre timmar på att hitta rätt lösenord

Informera 4: På hög nivå 40 Ett välpolerat program visar (helst) inte råa felmeddelanden Anpassar dem till användaren

Informera 5: På låg nivå 41 Som utvecklare behöver vi mer detaljer! Finns i undantaget vi fångar men skriv inte bara ut det! Säger inget om var felet inträffade Skriv åtminstone ut en stack trace Om felet absolut inte kan inträffa ( when pigs fly ): Det kan det nog ändå Skriv åtminstone ut en stack trace Eller logga felet till fil!

Helt fel: Använda undantag i normalfall 43 Undantag ska användas i undantagsfall Här blir det en exception vid varje anrop!

Typer 1: Inbyggda undantagstyper 45 Undantagsklasser ska vara så specifika som möjligt, för att: Se exakt vilka problem som kan inträffa Fånga specifika fel, utan att fånga andra Ge förståeliga felmeddelanden Använd inbyggda feltyper där de passar! Exempel: Passar perfekt!

Typer 2: Skapa dina egna 46 Om det inte finns några passande typer? Gör inte så här: Kan inte särskiljas av programmet! Anroparen kan inte skilja user already exists från database error, osv. Skapa en egen undantagstyp!

Try-with-resources 1 48 Vissa resurser måste frigöras när de har använts Exempel: Databashantering frigör en statement efter användandet

Try-with-resources 2 49 Annat exempel: I/O med

Avslutande ord 51 As far as we know, our computer has never had an undetected error. Conrad H. Weisert