Einführung in die Programmierung für NF

Ähnliche Dokumente
Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 14/15. Kapitel 11. Fehler und Ausnahmen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 12. Fehler und Ausnahmen

Teil II. Objektorientierte Programmierung und objektorientierter Entwurf

1 Fehler-Objekte: Werfen, Fangen, Behandeln

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete! 4. Ausnahmen (Exceptions) II.4.

Exceptions. Prof. Dr. Margarita Esponda SS M. Esponda-Argüero

Beispiel: Methode mit einem Fehler. Diese Methode wird problematisch, wenn von außen eine Dauer von 0 Sekunden angegeben wird, etwa im Aufruf

Exception. 6. Exceptions. Die Klasse java.lang.exception. Fehlermeldung. Klassenname. Ort des Auftretens

Javakurs für Anfänger

Gliederung Grundlagen Schlüsselworte try-catch Fehlerobjekte Fehlerklassen Schlüsselwort finally Schlüsselwort throws selbst erstellte Exceptions

Java Fehlerbehandlung

Javakurs zu Informatik I. Henning Heitkötter

3. Exceptions. Hintergrund: Programmieren auf der Basis von Verträgen. Kundenklasse. Lieferantenklasse

Vererbung. Martin Wirsing. Ziele. Vererbung

Einführung in die Programmierung Blockkurs Java

5.13 Umgang mit Fehlern

Grundlagen der Informatik Ausnahmebehandlung & Threads

Programmieren in Java

Java I Vorlesung Exceptions

Kapitel 6. Vererbung

Kapitel 6. Vererbung

Java Einführung Methoden. Kapitel 6

Objektorientierte Programmierung. Kapitel 18: Exceptions II

Objektorientierte Programmierung. Kapitel 18: Exceptions II

Einführung in die Programmierung für NF

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

Kapitel 6. Vererbung

Einstieg in die Informatik mit Java

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Algorithmen und Datenstrukturen

Repetitorium Informatik (Java)

9. Fehlerbehandlung Advanced Programming Techniques. Wintersemester 2009 / 2010 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik

3 Objektorientierte Konzepte in Java

1. Sei der String s = new String( xyzzy ) gegeben. Welcher Aufruf verändert s?

Programmieren I + II Regeln der Code-Formatierung

Spec# Einführung. Formale Software-Entwicklung Seminar SS 07 Universität Karlsruhe Hilal Akbaba

Vorlesung Programmieren

Grundlagen der Informatik für Ingenieure I

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Objektorientierte Programmierung

3 Objektorientierte Konzepte in Java

3. Anweisungen und Kontrollstrukturen

Beispiel: DB-Mock (1/7)

Praktikum Informatik II Prof. Dr. Martin Trauth, Dr. Michael Männel

14. Tutorium zu Programmieren

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

SEP 114. Design by Contract

Große Übung Praktische Informatik 1

Fehler die bei der Programmerstellung passieren können teilweise vom Compiler erkannt werden

Programmiertechnik Klassenmethoden

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Klassenmethoden

Java Einführung Methoden in Klassen

7. Übung zu Algorithmen und Datenstrukturen

Java - Zahlen, Wahrheitswerte und Zeichen. Leibniz Universität IT Services Anja Aue

Kapitel 6. Kontrollstrukturen und Methoden im Kontext von Klassendeklarationen

3D Programmierpraktikum: Einführung in C++ - Teil 2

II.1.1. Erste Schritte - 1 -

5.5.8 Öffentliche und private Eigenschaften

Datenbankanwendungsprogrammierung Crashkurs Java

Grundlagen der Programmierung Prof. H. Mössenböck. 6. Methoden

1 Polymorphie (Vielgestaltigkeit)

Einstieg in die Informatik mit Java

C# Programmierung. Eine Einführung in das.net Framework. C# Programmierung - Tag 4: Kombination OOP/.NET

Präsentation Interfaces

Programmieren I. Kapitel 5. Kontrollfluss

Einstieg in die Informatik mit Java

Objektorientierte Programmierung

Synchronisation in Java. Invisible Web

Java I Vorlesung Vererbung und Sichtbarkeit

Java: Vererbung. Teil 3: super()

Programmieren in Java

Remote Method Invocation

Welche Informatik-Kenntnisse bringen Sie mit?

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

Distributed Computing Group

Java Vererbung. Inhalt

Test zu Grundlagen der Programmierung Leitung: Michael Hahsler. 21. November 2003

Sichtbarkeit & statische Methoden. Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben

Überschreiben von Methoden

Innere Klassen in Java

Universität Augsburg, Institut für Informatik Sommersemester 2005 Prof. Dr. Werner Kießling 15. Oktober 2005 Dr. Alfons Huhn, Timotheus Preisinger

Java - Programmierung - Objektorientierte Programmierung 1

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik. Jede Applikation braucht eine Klasse mit einer main-methode

einkonto.zahle(+100); //Transaktion Einzahlung einkonto.zahle(-20); //Transaktion Auszahlung einkonto.zahle(+30); //Transaktion Einzahlung

Vorlesung Programmieren

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Java-Schulung Grundlagen

Probeklausur: Programmierung WS04/05

Thread-Synchronisation in in Java. Threads Wechselseitiger Ausschluss Bedingte Synchronisation Beispiel: Warteschlangen

Remote Method Invocation

Programmierkurs. Manfred Jackel

Allgemeine Informatik II SS :30-13:30 Uhr

Javakurs für Anfänger

Gebundene Typparameter

Testen mit JUnit. Martin Wirsing. Ziele. in Zusammenarbeit mit Michael Barth, Philipp Meier und Gefei Zhang

5. Tutorium zu Programmieren

Transkript:

Einführung in die Programmierung für NF Fehler und Ausnahmen Valerie Holmeier Michael Kirsch

Direct Feedback Eure Mitarbeit ist mir wich@g Quiz nach den jeweiligen AbschniDen Jeder kann mitmachen App socra&ve auf Smartphone installieren Website h*p://b.socra&ve.com/login/student/ Raumname: EIPNF oder eipnf 6 Vererbung 2

Socra@ve 6 Vererbung 3

Ziele Fehlerquellen in Programmen und bei der Programmausführung verstehen Das Java- Konzept der Ausnahmen als Objekte kennenlernen Ausnahmen auslösen können Ausnahmen behandeln können 8 Fehler und Ausnahmen 4

ROBUSTE PROGRAMME 8 Fehler und Ausnahmen 5

Robuste Programme Wir beschäzigen uns hier nicht damit, wie man logische Fehler in einem Programm finden kann. Wir konzentrieren uns hier auf das Erkennen, Vermeiden und Behandeln von Ausnahmesitua@onen, die zu Laufzei`ehlern führen können. Unser Ziel ist es robuste Programme zu schreiben. Defini@on: Ein Programm heißt robust, falls es auch beim AuZreten von Fehlern sinnvoll reagiert. 8 Fehler und Ausnahmen 6

Robuste Programme Einführung von zusätzlicher Fallunterscheidung und Fehlermeldung! int x = Eingabe.intEinlesen("Geben Sie eine Zahl ein:");!!if(x<0){!!!system.out.println("falscher Eingabewert");!!else{!!!int y = Eingabe.intEinlesen("Geben Sie noch eine Zahl ein");!!!while(x>0)...! meidet Fehler durch Seiteneffekt 8 Fehler und Ausnahmen 7

Robuste Programme Besser: Kontrolliertes Auslösen von Ausnahmen!!int x = Eingabe.intEinlesen("Geben Sie eine Zahl ein:");!!if(!x>0) throw new IllegalArgumentException("NegativerEingabewert");!!int y = Eingabe.intEinlesen("Geben Sie noch eine Zahl ein");!!while(x!=0)...! Löst bei nega@vem x eine Ausnahme aus ( aprupte Teminierung! nicht robust) Exception thread "main! java.lang.illegalargumentexceptionerror: Negativer Eingabewert! 8 Fehler und Ausnahmen 8

Quiz I Ein Programm ist robust, wenn...? a) es keine Fehler enthält b) möglicherweise auzretende Fehler speziell behandelt werden c) es aus mindestens zehn Klassen besteht d) es mehrfach ohne Fehler gelaufen ist 8 Fehler und Ausnahmen 9

Quiz I Ein Programm ist robust, wenn...? a) es keine Fehler enthält b) möglicherweise auzretende Fehler speziell behandelt werden c) es aus mindestens zehn Klassen besteht d) es mehrfach ohne Fehler gelaufen ist 8 Fehler und Ausnahmen 10

FEHLER 8 Fehler und Ausnahmen 11

Fehlerarten Ein Programm kann aus vielerlei Gründen fehlerhaz sein. Man unterscheidet u.a.: Entwurfsfehler: Der Entwurf entspricht nicht den Anforderungen Programmierfehler: Das Programm erfüllt nicht die Spezifika@on Beispiel Entwurfsfehler: Anforderung:...Ein Kunde kann mehrere Bankkonten besitzen... FehlerhaZer Entwurf:, Customer 1 0..1 owner account BankAccount 8 Fehler und Ausnahmen 12

Fehlerarten Programmierfehler können auch unterschiedlicher Art sein: Syntaxfehler: Die kontex`reie Syntax des Programms ist nicht korrekt Beispiel: while(x >= 0) Typfehler: Ein Ausdruck oder eine Anweisung des Programms hat einen falschen Typ Beispiel: while(x > true) Ein/Ausgabefehler: z.b. wenn eine Klassendatei nicht gefunden wird Logischer Fehler: Das Programm erfüllt nicht die (Entwurfs- ) Spezifika@on Beispiel: Falsche Implemen@erung einer Sor@erfunk@on 8 Fehler und Ausnahmen 13

Fehler- und Ausnahmenklassen in Java In Java unterscheidet man zwischen Fehlern und Ausnahmen, die beide durch Objekte repräsen@ert werden. Fehler sind Instanzen der Klasse Error! Ausnahmen sind Instanzen der Klasse Exception! Fehler deuten auf schwerwiegende Probleme der Umgebung hin und können nicht sinnvoll behandelt werden, z.b. OutOfMemoryExcep@on Ausnahmen können vom Programmierer im Programm durch Ausnahmebehandlungen abgefangen werden 8 Fehler und Ausnahmen 14

Vererbungshierarchie der Fehlerklassen 8 Fehler und Ausnahmen 15

Die Klasse Throwable Ausnahme- und Fehler- Objekte enthalten Informa@onen über Ursprung und Ursache des Fehlers. Die Klasse Throwable, von der alle Fehlerklassen abgeleitet sind, verwaltet solche Informa@onen, z.b.: eine Nachricht zur Beschreibung des aufgetretenen Fehlers (Throwable(String message)) einen Schnappschuss des Aufrufstacks zum Zeitpunkt der Erzeugung des Objekts Nützliche Methoden in Throwable: String getmessage(): gibt die Fehlermeldung zurück void printstacktrace(): gibt den Aufrufstack des Fehlers aus 8 Fehler und Ausnahmen 16

Auslösung einer Run@meExcep@on und Ausgabe des Aufrufstacks public class Div0 {!!/** Die Methode m loest wegen der Division durch 0 eine! * ArithmeticException aus: */!!public static void m() {!!!intd = 0;!!!inta = 42 / d;!!!system.out.println("d= + d);!!!system.out.println("a= + a);!!}!!public static void main(string args[]) {!!!this.m();!!}! }! Java- Ausgabe mit Aufrufstack: Excep@onin thread "main" java.lang.arithme@cexcep@on: / by zero atdiv0.m(div0.java:6) atdiv0.main(div0.java:11) Der Aufrufstack enthält die Folge der Methodenaufrufe, die zum Fehler geführt haben 8 Fehler und Ausnahmen 17

Quiz II Welche Fehlerart zählt nicht zur Gruppe der Programmierfehler? a) Typfehler b) Syntaxfehler c) Logische Fehler d) Rechtschreibfehler 8 Fehler und Ausnahmen 18

Quiz II Welche Fehlerart zählt nicht zur Gruppe der Programmierfehler? a) Typfehler b) Syntaxfehler c) Logische Fehler d) Rechtschreibfehler 8 Fehler und Ausnahmen 19

Quiz III Welche der folgenden Aussagen triw auf den Aufrufstack zu? a) Die verursachende Excep@on steht in der ersten Zeile b) Die verursachende Excep@on steht in der letzten Zeile c) Zeigt alle Objekte, die im Heap liegen d) Kann midels showmystacktrace() angezeigt werden 8 Fehler und Ausnahmen 20

Quiz III Welche der folgenden Aussagen triw auf den Aufrufstack zu? a) Die verursachende Excep@on steht in der ersten Zeile b) Die verursachende Excep@on steht in der letzten Zeile c) Zeigt alle Objekte, die im Heap liegen d) Kann midels showmystacktrace() angezeigt werden 8 Fehler und Ausnahmen 21

Quiz IV Eine NullPointerExcep@on trid auf,... a) wenn auf ein Objekt zugegriffen wird, welches den Wert null hat b) wenn einer Variablen der Wert null zugewiesen wird c) wenn einem int der Wert null zugewiesen wird d) TriD nur in Verbindung mit MVC auf 8 Fehler und Ausnahmen 22

Quiz IV Eine NullPointerExcep@on trid auf,... a) wenn auf ein Objekt zugegriffen wird, welches den Wert null hat b) wenn einer Variablen der Wert null zugewiesen wird c) wenn einem int der Wert null zugewiesen wird d) TriD nur in Verbindung mit MVC auf 8 Fehler und Ausnahmen 23

AUSNAHMEN 8 Fehler und Ausnahmen 24

Kontrolliertes Auslösen von Ausnahmen MiDels der throw- Anweisung kann man eine Ausnahme auslösen. Syntax: throw exp;! Der Ausdruck exp muss eine Instanz einer von Throwable abgeleiteten Klasse (d.h. eine Ausnahme oder ein Fehlerobjekt) bezeichnen. Beispiel: throw new IllegalArgumentException("...");! Die Ausführung einer throw- Anweisung stoppt den Kontrollfluss der Methode und löst die von exp definierte Ausnahme aus. Die nachfolgenden Anweisungen im Rumpf der Methode werden nicht mehr ausgeführt (wie bei return). Es kommt zu einem Abbruch des Programms, wenn die Ausnahme nicht in einer übergeordneten Methode abgefangen und behandelt wird. 8 Fehler und Ausnahmen 25

GeprüZe Ausnahmen (Checked Excep@ons) GeprüZe Ausnahmen sind in Java alle Instanzen der Klasse Exception, die nicht Objekte der Klasse RuntimeException sind. Gibt es in einem Methodenrumpf eine throw- Anweisung mit einer geprüzen Ausnahme, dann muss das im Methodenkopf mit throws explizit deklariert werden. GeprüZe Ausnahmen müssen vom Aufrufer der Methode entweder behandelt werden oder wieder im Methodenkopf deklariert werden. Beispiele:!import java.io.ioexception;!!...!!public void m() throws IOException{!!!if(...) {!!!!throw new IOException();!!!}!!}!!public void n() throws IOException{!!!this.m();!!}! Man muss deklarieren, dass in dieser Methode die Ausnahme IOException auzreten kann. Da die IOException, die beim Aufruf von m() auzreten kann, hier nicht behandelt wird, muss die Methode selbst wieder eine throws- Klausel deklarieren. 8 Fehler und Ausnahmen 26

UngeprüZe Ausnahmen UngeprüZe Ausnahmen sind genau die Instanzen von RuntimeException. Beispiele: ArithmeticException, NullPointerException,... UngeprüZe Ausnahmen müssen nicht im Methodenkopf explizit deklariert werden (sie können es aber). UngeprüZe Ausnahmen müssen nicht behandelt werden (sie können es aber). 8 Fehler und Ausnahmen 27

Benutzerdefinierte Ausnahmeklassen MiDels Vererbung kann man eigene Ausnahmeklassen definieren. Beispiel: Klassen BankKonto und SparKonto. Es soll nicht möglich sein, ein SparKonto zu überziehen. Wir definieren dazu eine (checked) Excep@on, die beim Versuch das SparKonto zu überziehen, geworfen werden soll:!!!public class KontoUngedecktException extends Exception{!!!private double abhebung;!!!public KontoUngedecktException(String msg, double abhebung) {!!!!super(msg);!// Konstruktor von Exception nimmt Nachricht!!!!this.abhebung = abhebung;!!!}!!!public double getabhebung() {!!!!return abhebung;!!!}!!}! 8 Fehler und Ausnahmen 28

Auslösen einer benutzerdefinierten Ausnahme public class BankKonto{!!...!!public void abheben(double x) throws KontoUngedecktException{!!!kontoStand = kontostand-x;!!}! }!! public class SparKonto extends BankKonto{!!...!!public void abheben(double x) throws KontoUngedecktException{!!!if(getKontoStand() < x) {!!!!throw new KontoUngedecktException("Sparkonten dürfen nicht!!!überzogen werden.", x);!!!}!!!super.abheben(x);!!}! }! 8 Fehler und Ausnahmen 29

Behandlung von Ausnahmen Ausnahmebehandlung geschieht in Java mit Hilfe der try- Anweisung. Damit können Ausnahmen abgefangen werden.!!try{!!!// Block fuer normalen Code!!}!!catch(Exception1 e) {!!!// Ausnahmebehandlung fuer Ausnahmen vom Typ Exception1!!}!!catch(Exception2 e) {!!!// Ausnahmebehandlung fuer Ausnahmen vom Typ Exception2!!}! Zunächst wird der try- Block normal ausgeführt. TriD im try- Block keine Ausnahmesitua@on auf, so werden die beiden Blöcke zur Ausnahmebehandlung ignoriert. TriD im try- Block eine Ausnahmesitua@on auf, so wird die Berechnung dieses Blocks abgebrochen. Ist die Ausnahme vom Typ Exception1 oder Exception2, so wird der Block nach dem jeweiligen catch ausgeführt. Ansonsten ist die Ausnahme unbehandelt. 8 Fehler und Ausnahmen 30

Behandlung von Ausnahmen: Beispiel Konto public static void main(string[] args) {!!!!SparKonto konto = new SparKonto(5, 1);!// 5 Euro, 1% Zinsen!!! }!!String einlesebetrag = JOptionPane.showInputDialog( Betrag zum Abheben?");!!double betrag = Double.parseDouble( einlesebetrag);!!!!try{!!!konto.abheben(betrag);!!}!!catch(kontoungedecktexception e) {!!!System.out.println(e.getMessage());!!!System.out.println( Der Abhebungsbetrag " + e.getabhebung() +" war zu hoch.");!!}! 8 Fehler und Ausnahmen 31

Behandlung von Ausnahmen: finally Manchmal möchte man nach der Ausführungs eines try- Blocks bes@mmte Anweisungen ausführen, egal ob eine Ausnahme aufgetreten ist. Beispiel: Schließen einer im try- Block geöffneten Datei. Das kann man mit einem finally- Block erreichen, der in jedem Fall nach dem try- Block und der Ausnahmebehandlung ausgeführt wird.!try{!!!// Block fuer normalen Code!!}!!catch(Exception1 e) {!!!// Ausnahmebehandlung fuer Ausnahmen vom Typ Exception1!!}!!catch(Exception2 e) {!!!// Ausnahmebehandlung fuer Ausnahmen vom Typ Exception2!!}!!finally{!!!// Code, der in jedem Fall nach normalem Ende und nach!!!// Ausnahmebehandlung ausgefuehrt werden soll.!!}! 8 Fehler und Ausnahmen 32

Beispiel für finally Ablauf in einem Geldautomaten:! public static void main(string[] args) {!! }!!SparKonto konto = new SparKonto(5, 1);!!// 5 Euro, 1% Zinsen!!!!String einlesebetrag = JOptionPane.showInputDialog("Betrag zum Abheben?");!!double betrag = Double.parseDouble(einleseBetrag);!!!!try{!!!konto.abheben(betrag);!!}!!catch(KontoUngedecktException e) {!!!System.out.println(e.getMessage());!!!System.out.println("Der Abhebungsbetrag + e.getabhebung() +" war zu hoch. ");!!}!!!finally{!!!system.out.println("bitte entnehmen Sie ihre Karte. );!!}! 8 Fehler und Ausnahmen 33

Quiz V Nach jedem try... a) muss mindestens ein catch folgen b) muss mindestens ein catch und ein finally folgen c) dürfen maximal drei catch- Blöcke folgen d) kann ein catch auch weggelassen werden 8 Fehler und Ausnahmen 34

Quiz V Nach jedem try... a) muss mindestens ein catch folgen b) muss mindestens ein catch und ein finally folgen c) dürfen maximal drei catch- Blöcke folgen d) kann ein catch auch weggelassen werden 8 Fehler und Ausnahmen 35

Quiz VI Was ist der Unterschied zwischen final, finally und finalize? 8 Fehler und Ausnahmen 36

Quiz VI Was ist der Unterschied zwischen final, finally und finalize? final Variablen, die mit final deklarierten wurden, können nur einmal ini@alisiert werden und behalten den Wert bei 8 Fehler und Ausnahmen 37

Quiz VI Was ist der Unterschied zwischen final, finally und finalize? finally Dieser Codeblock wird beim Excep@on- Handling in jedem Fall durchlaufen, wenn es einen try- Block gibt. Finally ist op@onal. 8 Fehler und Ausnahmen 38

Quiz VI Was ist der Unterschied zwischen final, finally und finalize? finalize Wird von Garbage- Collector aufgerufen, wenn ein Objekt zerstört wird und ist somit das Gegenstück zum Konstruktor und wird demnach auch manchmal als Desktruktor bezeichnet. 8 Fehler und Ausnahmen 39

Zusammenfassung Ausnahmen werden in Java durch Objekte dargestellt. Methoden können Ausnahmen auslösen implizit durch einen Laufzei`ehler oderexplizit mit throw und damit abrupt terminieren. Ausnahmen können mit catch behandelt werden, so dass sie nicht zu einem Abbruch des Programms führen. Wir unterscheiden geprüze und ungeprüze Ausnahmen. GeprüZe Ausnahmen müssen abgefangen werden oder im Kopf der Methode wiederum deklariert werden. In jedem Fall ist es am Besten Ausnahmen zu vermeiden. Defensive Programme sehen auch für vermeidbare Ausnahmesitua@onen das Werfen von Ausnahmen vor (was dann hoffentlich nie nö@g ist). 8 Fehler und Ausnahmen 40

Vielen Dank für Ihre Aufmerksamkeit 8 Fehler und Ausnahmen 41