Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Computer Networks Group Universität Paderborn Design by Contract with JML - Teil 2 Alexander Klaas Proseminar Assertions Prof. Dr. Heike Wehrheim Universität.

Ähnliche Präsentationen


Präsentation zum Thema: "Computer Networks Group Universität Paderborn Design by Contract with JML - Teil 2 Alexander Klaas Proseminar Assertions Prof. Dr. Heike Wehrheim Universität."—  Präsentation transkript:

1 Computer Networks Group Universität Paderborn Design by Contract with JML - Teil 2 Alexander Klaas Proseminar Assertions Prof. Dr. Heike Wehrheim Universität Paderborn

2 Design by Contract with JML - Teil 22 Übersicht I.Motivation II.Einführung Modellvariablen III.Modellmethoden IV.Methoden ohne Seiteneffekte V.Praktisches Beispiel VI.Weitere Konzepte

3 Design by Contract with JML - Teil 23 I. Motivation Spezifikation soll abstrahieren Dokumentation Modularität Wartbarkeit Trennung von Code und Spezifikation wünschenswert Problem: Datenstrukturen von Implementierung abhängig

4 Design by Contract with JML - Teil 24 I. Motivation Beispiel: public class Person { private String name; requires n != null && ensures public Person(String n){ name=n; };} Namen nun lieber getrennt nach Vor- und Nachnamen speichern private String first_name; private String last_name; first_name=n.split(" ")[0]; last_name=n.split(" ")[1]; Spezifikation ist public!

5 Design by Contract with JML - Teil 25 I. Motivation Lösungsansatz 1: Helfervariablen Im Beispiel: name wie gehabt zusätzlich beibehalten Nachteile: Speicherverbrauch selbst bei Kompilierung ohne JML muss konsistent gehalten werden kann nicht in interfaces verwendet werden Lösungsansatz 2: Abfragemethoden Im Beispiel: getFullName() konkateniert first_name und last_name Nachteile: erhöht Umfang des Programmcodes Zweck der Methode nicht klar ersichtlich besser: Modellvariablen

6 Design by Contract with JML - Teil 26 II. Einführung Modellvariablen Variablen, die in der Spezifikation deklariert werden Verhältnis zu echten Variablen mittels Abstraktionsfunktion Echte Variable Modellvariable Abstraktions- funktion Im Beispiel: Konkatenation

7 Design by Contract with JML - Teil 27 II. Einführung Modellvariablen public class Person { private String first_name; private String last_name; public model instance String private represents name <- requires n != null && ensures public Person(String n){ first_name=n.split(" ")[0]; last_name=n.split(" ")[1]; };} Abstraktionsfunktion

8 Design by Contract with JML - Teil 28 II. Einführung Modellvariablen Änderungen ohne Auswirkung auf Klienten ( represents Ausdrücke sind private ) Zweck einer Variable klar Transparent – ohne Auswirkung auf Implementierung auch in interfaces verwendbar

9 Design by Contract with JML - Teil 29 III. Modellmethoden Analog Methoden, die in Spezifikation mit Modifikator model deklariert werden Insbesondere für Abstraktionsfunktion benutzt als auch für Invarianten, Vor- und Nachbedingungen Darf keine Seiteneffekte haben => als pure gekennzeichnet

10 Design by Contract with JML - Teil 210 IV. Methoden ohne Seiteneffekte Da JML transparent auf die Implementierung sein soll, darf der Zustand des Programmes nicht beeinflusst werden Java-Zuweisungsausdrücke (=, ++, --) nicht erlaubt Methoden müssen als pure gekennzeichnet werden, um in JML verwendet werden zu können

11 Design by Contract with JML - Teil 211 IV. Methoden ohne Seiteneffekte Zusammen mit spec_public kann man echten Methoden und Variablen ansehen, wo sie genutzt werden Nur in Spezifikation ( model ), beides, oder nur in Implementierung Im Beispiel: Falls voller Name auch in Implementierung gebraucht wird, bietet sich eine Abfragemethode an: ensures … private pure String getFullName(){ return first_name+" "+last_name; }

12 Design by Contract with JML - Teil 212 V. Praktisches Beispiel Echte Variable Modellvariable Abstraktions- funktion Suchbaum Sortierte Liste In-Order- Treewalk Abstrakteres Beispiel: Erinnerung Suchbaum: Alle Elemente im linken Teilbaum kleiner, im rechten größer Durchlaufen In-Order gibt Elemente sortiert aus Quelle Grafik: Vorlesung Datenstrukturen und Algorithmen SS2005 bei Prof. Dr.rer.nat. Johannes Blömer,

13 Design by Contract with JML - Teil 213 V. Praktisches Beispiel private static Node set; public model static LinkedList private represents sorted_list <- private model pure LinkedList In_Order_Treewalk(Node x) (\forall int i; 0 <= i && i < sorted_list.itemAt(i) instanceof && (\forall int i; 0 < i && i < ((Integer)sorted_list.itemAt((int)(i - <= && public static void add(Integer integer_to_add){ … }

14 Design by Contract with JML - Teil 214 V. Praktisches Beispiel Beispiel Vorführung

15 Design by Contract with JML - Teil 215 VI. Weitere Konzepte Ghostvariablen: ohne Relation zu echten Variablen reine Hilfsvariablen z.B. in Modellmethode Refinement: induktiv von Spezifikation zu Implementierung Aus abstrakten Modellvariablen kann man später echte Variablen der Implementierung gewinnen JML: Modellvariablen werden vererbt

16 Design by Contract with JML - Teil 216 VI. Weitere Konzepte Beispiel Refinement: model instance String gender; protected boolean gen; protected represents gender <- (gen ? "female" : "male");


Herunterladen ppt "Computer Networks Group Universität Paderborn Design by Contract with JML - Teil 2 Alexander Klaas Proseminar Assertions Prof. Dr. Heike Wehrheim Universität."

Ähnliche Präsentationen


Google-Anzeigen