Praktische Informatik 1

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

der Universität Oldenburg
Ein Beispiel in Java.
Real - Time Java Seminar Asynchrone Ereignisse und Asynchroner Kontrolltransfer in Real - Time Java Sönke Eilers.
Verteilte Software - Java - Prozedurale Programmierung 1
Ausnahmen HS Merseburg (FH) WS 06/07.
Threads Richard Göbel.
Java: Objektorientierte Programmierung
Java: Grundlagen der Objektorientierung
FH-Hof Fehlerbehandlung Richard Göbel. FH-Hof Konzept Fehler können mit dem Operator throw einer übergeordneten Funktion signalisiert werden. Parameter.
Exceptions. import java.sql.*; public class MyException{ boolean b; Statement stat; public MyException(){ b = stat.execute("xyz"); } Beim Übersetzen dieses.
Imperative Programmierung Funktionen und Parameter
Java-AG Ausnahmebehandlung Gerhard Gröger.
Programmieren mit JAVA
Programmieren mit JAVA
PRJ 2007/1 Stefan Dissmann Motivation Problem: Benutztes Objekt kennt den Kontext seiner Nutzung nicht. Daher kann es in besonderen Situationen keine Entscheidung.
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
DVG Ausnahmen. DVG Was sind Programmfehler? 4 Programm erzielt gar kein Ergebnis. 4 Berechnetes Ergebnis stimmt nicht mit dem erwarteten.
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
DVG Ausnahmen1 Ausnahmen. DVG Ausnahmen 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht.
DVG Klassen und Objekte
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
DVG Kommentare 1 Kommentare. 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht bis zum Ende der Zeile.
Das Roboterprojekt Einführung Der erste Entwurf Das Thread-Konzept Hindernisse Website.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Grundlagen der Programmierung
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Learning By Doing Ausnahmebehandlung Exceptions (Ausnahmebehandlung) Typische Fehlverhalten zur Laufzeit: s. Buch S. 287ff -Verwendung von null-Objekten.
Learning By Doing Parallelverarbeitung Multithreading (Nebenläufigkeit) Alte Idee der Parallelverarbeitung statt rein sequentieller Prozesse Parallelverarbeitung.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Letzte Chance!!! Exceptions Thread, Runnable Synchronized Wait, notify, notifyAll Thread States Semaphoren JCSP Swing JOMP Linearizability History Amdahl‘s.
Programmiervorkurs WS 2014/15 Methoden
Threads in Java Wiederholung der BS Grundlagen Alois Schütte AOSD1.
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
Muster nebenläufiger Programmierung concurrent Packet von Java Alois Schütte AOSD1.
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
Robuste Programme durch Ausnahmebehandlung
Prof. Dr. Alois Schütte Advanced System Programming 1 Das concurrent Paket 1 Überblick 2 Lock 3 Condition 4 Queue 5 Executors.
2 Nebenläufige Prozesse. 2.1 Programmstruktur und Prozesse private Prozess = Anweisungen + Daten gemeinsame Aber:Wie verhält sich das Konstrukt „Prozess“
Java-Kurs - 3. Übung Hausaufgabe Arrays For-Schleifen.
Ausnahmen Vorlesung besteht aus zwei Teilen Programmierung (4 SWS)
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Java-Kurs - 5. Übung Besprechung der Übungsaufgabe Klassen und Objekte
Threads in Java Threads  Sprachumfang von Java Der Java-Standard fordert nur die Unterstützung von Thread-Prioritäten. Es gibt keine Forderung bzgl.:
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/ Übungsaufgabe vom Logische Ausdrücke 1.true & false | true 2.(10>2)
Wieland Schwinger Softwareentwicklung 2 Assertions.
Abteilung für Telekooperation Softwareentwicklung 2 UE WS 2008/09 SE2UE_ Ausnahmen (Exceptions)
1 VE 11 Kruskal-Realisierung Listen. 2 Auf dem Weg zur Kruskal-Realisierung Vorüberlegungen: Der Graph könnte dargestellt werden als Menge von Knoten,
Dr. Wolfram Amme, Das Thread-Konzept in objektorientierten Programmiersprachen, Informatik II, FSU Jena, SS Thread-Konzept in objektorientierten.
, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/06 1 Beispiel class SpreadSheet { int cellA1, cellA2, cellA3; synchronized.
Java Programme nur ein bisschen objektorientiert.
Protokollieren, überwachen und verfolgen Vortrag zum Seminar „Aspektorientierte Programmierung“ von Andre Kaplick - 6. Juni 2016.
, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Exceptions in der Programmiersprache Java.
, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Synchronisation mit Monitoren Threads können in Java parallel ablaufen, oft.
Wie überwacht man Objekte im "Alltag" ?
Praktische Informatik 1
Konstruktoren.
Objektorientierung Gliederung von Daten und Funktionen zu Objekten
„Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen.“
JAVA lernen: Methoden.
Raphael Fischer Informatik II - Übung 06 Raphael Fischer
Cäsar-Verschlüsselung
Arrays in Java Ein Array ist eine Variable, die aus einer An-zahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
Grundkurs Informatik mit Java
Es gibt Klassen, die mit der Entwicklungsumgebung ausgeliefert werden
Cäsar-Verschlüsselung
Ausnahmen Exceptions Definition Ausnahmen erzeugen Ausnahmen abfangen
Definition Felder Konstruktor Methoden Beispiel
Implementieren von Klassen
 Präsentation transkript:

Praktische Informatik 1 Prof. Dr. H. Schlingloff 21. 1. 2008

7.4 Ausnahmebehandlung und Parallelität Typische Situation: Entwurf von Klassenbibliotheken für (spätere) Anwendungen Unzulässige Eingaben: z.B. top(empty()), div(x,0), … Wie geht man mit unzulässigen Werten um? ignorieren und Standardwert zurückgeben? zusätzliches boole‘sches Ergebnis „ok“? Programmabbruch? Java-Lösung: „Werfen“ einer Ausnahme Das „Fangen“ der Ausnahme liegt in der Verantwortung des Aufrufers Wenn er sich nicht darum kümmert, wird die Ausnahme „nach oben weitergereicht“

Die Ausnahmen gehören zur Signatur der Methode! static void f() throws Exception { Exception e = new Exception("Fehler1"); ... if (/*Fehler*/) throw e; } static void main(String[] args) { try { f(); } catch (Exception x) { System.out.println (x + " ist aufgetreten"); package Ausnahmen; public class Ausnahmebehandlung { static void f() throws Exception { Exception e = new Exception("Fehler1"); if (1==1) throw e; } public static void main(String[] args) { System.out.println("vor Aufruf"); try { f(); } catch (Exception x) { System.out.println (x + " ist aufgetreten"); Die Ausnahmen gehören zur Signatur der Methode!

Exception Ausnahme = Objekt der Klasse Exception Konstruktor ohne und mit Argument (String) Werfen einer Exception (throw) bewirkt die Beendigung der Methode und die Rückkehr zur Aufrufstelle Aufruf im try-Block wird von nachfolgenden Exception Handlern überwacht Der erste Exception Handler, dessen Parameter-Typ mit dem Typ der geworfenen Exception übereinstimmt, wird ausgeführt Nach Beendigung wird des Exception Handlers wird das Programm fortgesetzt Jede Ausnahme muss behandelt oder weitergereicht werden (Ausnahme folgt) f(); //geht nicht static void g() throws Exception { f(); }

Exception-Hierarchie Basisklasse aller Exceptions ist Throwable Davon abgeleitet sind Exception und Error Konvention: Exception für behebbare, Error für nicht vom Anwender behebbare Ursachen Von Exception werden u.a. IOException und RuntimeException abgeleitet RuntimeException und davon abgeleitete Klassen müssen nicht behandelt werden http://www.programmersbase.net/Content/Java/Content/Tutorial/Java/Exception.htm

Syntax try { // Anweisungen die Ausnahmen werfen könnten } catch(Typ1 Objekt1) { // Anweisungen für Ausnahme1 } catch(Typ2 Objekt2) { // Anweisungen für Ausnahme2 } finally { // Anweisungen für Endbehandlung }

Eigene Ausnahmen class MyException1 extends Exception{} public class Ausnahmebehandlung { static void f() throws MyException1, MyException2 { if (…) throw new MyException1(); else throw new MyException2(); } public static void main(String[] args) { try { f(); } catch (MyException1 x) { ... } catch (MyException2 x) { ... }; package Ausnahmen; class MyException1 extends Exception{} class MyException2 extends Exception{} public class Ausnahmebehandlung { static void f() throws MyException1, MyException2 { if (1==1) throw new MyException1(); else throw new MyException2(); } public static void main(String[] args) { System.out.println("vor Aufruf"); try { f(); } catch (MyException1 x) { System.out.println (x+„ - Handler1"); } catch (MyException2 x) { System.out.println („ Handler2: " + x); finally {System.out.println("Finally!");} };

Anmerkungen zu Ausnahmen Ausnahmen sollten NICHT zur Ablaufkontrolle missbraucht werden Ausnahmen von dieser Regel sind möglich und zulässig (z.B. Benutzereingaben) public MyException2(String s){super(s);} public MyException2(){System.out.println("Ex2");} class MyException1 extends RuntimeException{} } catch (Exception x) { System.out.println (x+„ - allg.-Handler");

Zusicherungen Assertions sind boole‘sche Ausdrücke Schlüsselwort assert expr; oder assert expr : expr; Beispiel: assert (i<liste.length()): "Index " + i + " falsch" Semantik: Verwendung als Vor- und Nachbedingungen von Methoden effiziente Methode zum Debuggen von Programmen in der Laufzeitumgebung ein- und ausschaltbar VM arguments: -enableassertions oder -ea

Parallelität Objektorientiertes Paradigma: Berechnung als Interaktion von Objekten mehrere Objekte existieren gleichzeitig anfangs gibt es nur das statische Main-Objekt main erzeugt Objekte, ruft diese auf jeder Aufruf ist blockierend, d.h. Aufrufer wartet folglich ist immer nur ein Objekt aktiv Parallelität: mehrere Handlungsstränge zur selben Zeit

Arten der Parallelität schwergewichtige Parallelität: mehrere Prozesse (tasks) gleichzeitig, werden vom Betriebssystem verwaltet, Kommunikation über spezielle BS-Mechanismen (pipes, sockets) leichtgewichtige Parallelität: mehrere Handlungsfäden (threads) innerhalb einer Task, Verwaltung vom Laufzeitsystem, Kommunikation über gemeinsame Variable

Threads in Java Zwei Arten der Definition Erweiterung der Klasse Thread mit Überlagerung der Methode run Implementierung der Schnittstelle Runnable mit neuer Methode run Definition eines objektlokalen Datenfelds t vom Typ Thread, Erzeugung eines zugehörigen Thread-Objektes Aufruf von t.start() führt zur Ausführung von run als separater Handlungsfaden

Beispiel (1) class Toe extends Thread { public void run() { System.out.println("Prozess Toe gestartet"); for (int i=0; i<10;i++) { System.out.println("Toe's i = " + i); }

Beispiel (2) class TicTac implements Runnable{ static int summe = 0; Thread faden; private int wer; public TicTac(int w) { faden = new Thread(this); wer=w;} public void run() { for(int i=1;i<10000000;i++) { if(wer==1) summe++; else summe --; }

Aufruf Ergebnis??? public static void main(String[] args) { TicTac tic = new TicTac(1); TicTac tac = new TicTac(2); Toe toe = new Toe(); toe.start(); tic.faden.start(); tac.faden.start(); try {tic.faden.join(); tac.faden.join(); } catch (Exception e) {} System.out.println("Summe=" + summe); } package Parallelität; class Toe extends Thread { public void run() { System.out.println("Prozess Toe gestartet"); for (int i=0; i<10;i++) { System.out.println("Toe's i = " + i); } class TicTac implements Runnable{ static int summe = 0; Thread faden; private int wer; public TicTac(int w) { faden = new Thread(this); wer=w;} System.out.println("Prozess T"+((wer==1)?"i":"a")+"c gestartet"); for(int i=1;i<10000000;i++) { if (i%1000000==0) { System.out.println("T"+((wer==1)?"i":"a")+"c's i = " + i/1000000); if(wer==1) summe++; else summe --; public static void main(String[] args) { TicTac tic = new TicTac(1); TicTac tac = new TicTac(2); Toe toe = new Toe(); tic.faden.start(); tac.faden.start(); toe.start(); System.out.println("alles gestartet!"); try {tic.faden.join(); tac.faden.join();} catch (Exception e) {} System.out.println("Summe=" + summe); Ergebnis???

Interpretation der Ergebnisse Prinzipiell werden die Aktionen in den Threads parallel und unabhängig voneinander ausgeführt Falls mehr Prozesse als Prozessoren existieren, muss die Rechenzeit aufgeteilt werden Zeitscheibenzuteilung: Jeder Thread erhält eine bestimmte Zeitspanne, bevor er unterbrochen wird. Dadurch kann es passieren, dass ein bereits Thread fertig ist, bevor der zweite überhaupt anfängt Interleaving: Durch parallelen Zugriff auf gemeinsame Variable können Werte verfälscht werden.

Interleaving siehe 20080123

Prozess-Zustände new vorhanden start execute laufend bereit suspend stop (deprecated) wartend sleep, wait notifyl beendet

Synchronisation von Prozessen start() – startet den Thread sleep(int i) – suspendiert den Prozess i ms wait() – Wartet auf den Eintritt eines Ereignisses notify() – benachrichtigt einen wartenden Thread notifyAll() – benachrichtigt alle wartenden Threads join() – wartet auf die Beendigung des Threads interrupt() – unterbricht die Ausführung eines Threads isInterrupted() – Test ob unterbrochen synchronized – exklusiver Ressourcenzugriff-Monitor