Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Wieland Schwinger Softwareentwicklung 2 Assertions.

Ähnliche Präsentationen


Präsentation zum Thema: "Wieland Schwinger Softwareentwicklung 2 Assertions."—  Präsentation transkript:

1 Wieland Schwinger (wieland.schwinger@jku.ac.at) Softwareentwicklung 2 Assertions

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

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

4 Folie 4 Softwareentwicklung 2 Einfaches Assertions Beispiel /** * Sets the refresh rate. * * @param rate refresh rate, in frames per second. * @throws 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.... }

5 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

6 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); }

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

8 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

9 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; }

10 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


Herunterladen ppt "Wieland Schwinger Softwareentwicklung 2 Assertions."

Ähnliche Präsentationen


Google-Anzeigen