Wieland Schwinger Softwareentwicklung 2 Assertions.

Slides:



Advertisements
Ähnliche Präsentationen
M a r c – o l i v e r p a h l Informatik I – Kapitel 7 Klassen und höhere Datentypen Zusammenfassung des Kapitel 7 Küchlin, Weber, Einführung in die Informatik,
Advertisements

der Universität Oldenburg
der Universität Oldenburg
Klassen - Verkettete Liste -
Einführung in die Programmierung Ausführbare Klassen
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
Verteilte Software - Java - Prozedurale Programmierung 1
Spec# Proseminar Assertions im SS 2007 Uni Paderborn Andreas Martens Betreuer: Dipl. Inform. Björn Metzler.
Ausnahmen HS Merseburg (FH) WS 06/07.
FH-Hof Fehlerbehandlung Richard Göbel. FH-Hof Konzept Fehler können mit dem Operator throw einer übergeordneten Funktion signalisiert werden. Parameter.
SWITCH - Anweisung.
IF-ELSE-IF-Ketten Weiter mit PP..
Ein Beispiel in Java.
Klassenvariable. Da man für jede Kuh bzw. jede Henne auf dem Markt den gleichen Preis für ein Liter Milch, bzw. den gleichen Preis für ein Ei bekommt,
Konstruktoren.
Objekte werden als Adressen (Referenzen) übergeben. Dies führt manchmal zu unerwarteten Ergebnissen...
WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
Objekte und Arbeitsspeicher
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
DO...WHILE Anweisung.
Imperative Programmierung Funktionen und Parameter
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
Projektplan: Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University.
Modulare Programmierung
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 Kommentare 1 Kommentare. 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht bis zum Ende der Zeile.
Java in 9 Folien Besser: Online-Buch Go to Java 2.
Thema: Fibonacci-Zahlen
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Rekursive Funktionen (Fakultät)
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Style Guidelines für Java und .NET
Unterprogramme in JAVA
Optimale Ursprungsgerade
EPROG Tutorium #3 Philipp Effenberger
Starten der Entwicklungsumgebung (IDE)
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.
Testtechniken-Praktikum WS 2005/06 1 Arbeiten mit JUnit Andreas Höfer Dr. Matthias Müller Mit Beiträgen von Johannes Link.
Programmiervorkurs WS 2014/15 Methoden
Programmiervorkurs WS 2014/15 Instanzmethoden
Übung Informatik I exercise01. 2 Inhaltsübersicht Nachbesprechung Übung 1 Individuelle Fragen/Bemerkungen.
Ausnahmen Vorlesung besteht aus zwei Teilen Programmierung (4 SWS)
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Java-Kurs - 6. Übung Besprechung der Hausaufgabe
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Java-Kurs - 5. Übung Besprechung der Übungsaufgabe Klassen und Objekte
Programmierkurs JavaUE 4 Anweisungen und ProgrammeDietrich BolesSeite 1 Programmierkurs Java Dr. Dietrich Boles Teil Imperative Programmierung Unterrichtseinheit.
Abteilung für Telekooperation Softwareentwicklung 2 UE WS 2008/09 SE2UE_ Ausnahmen (Exceptions)
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Java Programme nur ein bisschen objektorientiert.
Protokollieren, überwachen und verfolgen Vortrag zum Seminar „Aspektorientierte Programmierung“ von Andre Kaplick - 6. Juni 2016.
Objektorientierung in Java Java-Kurs LE 5.
Schwarz, Lubkoll : Javakurs LE Organisatorisches ● Wer sind wir? ● Was machen wir hier? ● Was haben wir davon? ● Was habt ihr davon?
Praktische Informatik 1
Objektorientierung Gliederung von Daten und Funktionen zu Objekten
Vererbung.
Hello World! Javakurs 2013 Arne Kappen
JAVA lernen: Methoden.
Aufgaben zu Rückgabewerten
Java-Kurs - 4. Übung weitere Kontrollstrukturen
Grundkurs Informatik mit Java
Implementieren von Klassen
Statische und Nichtstatische Methoden Properties / Eigenschaften
 Präsentation transkript:

Wieland Schwinger Softwareentwicklung 2 Assertions

Folie 2 Softwareentwicklung 2 Lernziehle  Assertions Wozu ? Ein- und Ausschalten Unterschiede zu Exceptions

Folie 3 Softwareentwicklung 2 Was sind Assertions  Assertions sind Zusicherungen  Verletzung der Zusicherung führt zu java.lang.AssertionError  Assertions sind boolsche Ausdrücke die mit assert eingeleitet werden  Die Überprüfung von Assertions kann mit "java -enableassertions" beim Ausführen ein- und ausgeschaltet werden.

Folie 4 Softwareentwicklung 2 Einfaches Assertions Beispiel /** * Sets the refresh rate. * rate refresh rate, in frames per second. IllegalArgumentException if rate <= 0 or * rate > MAX_REFRESH_RATE. */ public void setRefreshRate(int rate) { // Enforse specified pre-condition in public method if (rate MAX_REFRESH_RATE) throw new IllegalArgumentException("Illegal rate:" + rate); setRefreshInterval(1000/rate); } private void setRefreshInterval(int interval) { // confirm adherence to pre-condition in non-public method assert interval>0 && interval<=1000/MAX_REFRESH_RATE : "Interval is " + interval); // set the refresh rate.... }

Folie 5 Softwareentwicklung 2 Beispiel Kehrwert public class TestAssertionMain { public static void main(String args[]) { TestAssertions t = new TestAssertions(0.0); System.out.println(" Wert: " + t.getVal()); System.out.println(" Kehrwert : " + t.kehrwert() ); } public class TestAssertions { private double val; public TestAssertions(double x) {this.val = x;} public double getVal() {return this.val;} double kehrwert() { assert this.val > 0:"Nur werte <> 0 zulässig"; return (double)(1/val); } } // end class TestAssertions

Folie 6 Softwareentwicklung 2 Beispiel Kehrwert - Was passiert ? Wert: 0.0 Kehrwert : Infinity Mit Assertion-Statement: double kehrwert() { assert this.val > 0 : "Nur werte <> 0 zulässig"; return (double)(1/val); } Wert: 0.0 Kehrwert : Infinity Ohne Assertion: Mit Assertions enabled: Wert: 0.0 Exception in thread "main" java.lang.AssertionError: Nur werte <> 0 zulässig at TestAssertions.kehrwert(TestAssertions.java:23) at TestAssertionMain.main(TestAssertionMain.java:18)...java -enableassertions MeinJavaFile.java double kehrwert() { return (double)(1/val); }

Folie 7 Softwareentwicklung 2 Einschlaten von Assertions...java -enableassertions MeinJavaFile.java

Folie 8 Softwareentwicklung 2 Anwendung von Assertions  Flexible Laufzeitprüfung von pre- und post- conditions sowie Invarianten.  Diese werden nur geprüft, wenn es beim Aufruf auch verlangt wurde

Folie 9 Softwareentwicklung 2 Anwendung von Assertions  Immer dann, wenn durch einen Kommentar ein Zustand vermerkt ist. if (i % 3 == 0) {... } else if (i % 3 == 1) {... } else { //we know (i % 3 == 2)... } if (i % 3 == 0) {... } else if (i % 3 == 1) {... } else { assert i % 3 == 2 : i;... switch (month) { case 1: … case 2: … … case 12: … default: // never reached! } switch (month) { case 1: … case 2: … … case 12: … default: assert false; }

Folie 10 Softwareentwicklung 2 Wo sollen Asserts nicht verwendet werden!  Nicht zur Prüfung von Übergabeparametern in public-Methoden! So NICHT: public Employee(String name, double salary) { assert name != null : "invalid name"; assert salary >= 0 : "invalid salary"; this.name = name; this.salary = salary; } So schon: public double getTotalSalary() { assert getBoss() == null || salary < getBoss().getTotalSalary() * 0.8 : "salary too high"; return salary; }  Nicht zur Berechungen/Verarbeitungen, die das Programm in weiterer Folge für sein funktionieren benötigt, da asserts ev. ausgeschaltet werden und diese Berechnungen/Verarbeitungen dann nicht statt finden Weil hier ev. nicht zulässige Werte gesetzt werden würden, falls Überprüfung abgedreht wird Weil hier nur auf Werte zugegriffen wird, die von einer anderen Methode (setter) richtig gesetzt werden sollten (dh. man kann eh nichts mehr machen). Dh. ist diese Annahme verletzt, dann gibt es einen Fehler bei der internen Koordination der Methoden/Aufgaben