Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Design by Contract with JML - Teil 2

Ähnliche Präsentationen


Präsentation zum Thema: "Design by Contract with JML - Teil 2"—  Präsentation transkript:

1 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 2
Übersicht Motivation Einführung Modellvariablen Modellmethoden Methoden ohne Seiteneffekte Praktisches Beispiel Weitere Konzepte Design by Contract with JML - Teil 2

3 Design by Contract with JML - Teil 2
I. Motivation Spezifikation soll abstrahieren Dokumentation Modularität Wartbarkeit Trennung von Code und Spezifikation wünschenswert Problem: Datenstrukturen von Implementierung abhängig Trennung Code - Spezifikation, Abstraktion (title vom paper) Paper von 2003 erwähnen Design by Contract with JML - Teil 2

4 Design by Contract with JML - Teil 2
I. Motivation Beispiel: public class Person { private String name; requires n != null && !n.equals(""); @ ensures n.equals(name); @*/ public Person(String n){ name=n; };} Namen nun lieber getrennt nach Vor- und Nachnamen speichern private String first_name; private String last_name; Spezifikation ist public! Trennung Code - Spezifikation, Abstraktion (title vom paper) Paper von 2003 erwähnen first_name=n.split(" ")[0]; last_name=n.split(" ")[1]; Design by Contract with JML - Teil 2

5 Design by Contract with JML - Teil 2
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 erhöht Umfang des Programmcodes Zweck der Methode nicht klar ersichtlich besser: Modellvariablen Alternativen - helper, query, nachteile… Design by Contract with JML - Teil 2

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

7 II. Einführung Modellvariablen
public class Person { private String first_name; private String last_name; public model instance String name; @ private represents name <- first_name+" "+last_name; @ @ requires n != null && !n.equals(""); @ ensures n.equals(name); @*/ public Person(String n){ first_name=n.split(" ")[0]; last_name=n.split(" ")[1]; };} Abstraktionsfunktion Modellvariablen, verhältnis in grafik, represents, abstraction function Design by Contract with JML - Teil 2

8 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 Vorteile, änderungen, private/public, interfaces Design by Contract with JML - Teil 2

9 Design by Contract with JML - Teil 2
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 Modellvariablen, verhältnis in grafik, represents, abstraction function Design by Contract with JML - Teil 2

10 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 Modellvariablen, verhältnis in grafik, represents, abstraction function Design by Contract with JML - Teil 2

11 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; } Modellvariablen, verhältnis in grafik, represents, abstraction function Design by Contract with JML - Teil 2

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

13 V. Praktisches Beispiel
private static Node set; public model static LinkedList sorted_list; @ private represents sorted_list <- In_Order_Treewalk(set); @ private model pure LinkedList In_Order_Treewalk(Node x) { @ … @ } @ ensures @ (\forall int i; 0 <= i && i < sorted_list.size(); @ sorted_list.itemAt(i) instanceof Integer) @ && (\forall int i; 0 < i && i < sorted_list.size(); @ ((Integer)sorted_list.itemAt((int)(i - 1))) @ .compareTo(sorted_list.itemAt(i)) <= 0) @ && sorted_list.contains(integer_to_add); @*/ public static void add(Integer integer_to_add){ } Code Beispiel liste->baum Design by Contract with JML - Teil 2

14 V. Praktisches Beispiel
Vorführung Beispiel….einführung vllt auf folien Design by Contract with JML - Teil 2

15 Design by Contract with JML - Teil 2
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 Ghost, refinement Design by Contract with JML - Teil 2

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


Herunterladen ppt "Design by Contract with JML - Teil 2"

Ähnliche Präsentationen


Google-Anzeigen