Ersetzbarkeit und Verhalten

Ähnliche Dokumente
Zusicherungen A01 OOP. Zusicherungen

OOP. Tagesprogramm. Zusicherungen Zusicherungen und Ersetzbarkeit

Ersetzbarkeit und Verhalten

Client-Server-Beziehungen

Client-Server-Beziehungen

Faustregeln zu Zusicherungen

Untertypen, Vererbung, Sichtbarkeit A01 OOP. Untertypen, Vererbung, Sichtbarkeit

Client-Server Beziehungen

Ersetzbarkeit, Client-Server Beziehungen

Das Ersetzbarkeitsprinzip

OOP. Tagesprogramm. Beziehungen zwischen Typen Vererbung Sichtbarkeit

Das Ersetzbarkeitsprinzip

1. In welchen Formen (mindestens zwei) kann man durch das Ersetzbarkeitsprinzip Wiederverwendung erzielen?

Arten von Klassen-Beziehungen

Ausnahmebehandlung in Java

14. Java Objektorientierung. Klassen, Vererbung, Kapselung

Objektorientierte Programmierung

Arten von Klassen-Beziehungen

Beispiel für überladene Methode

Programmierparadigmen

14. Java Objektorientierung

Algorithmen und Datenstrukturen

Verträge und objektorientierter Entwurf

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete. II.4.2 Abstrakte Klassen und Interfaces - 1 -

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke

Probeklausur: Programmierung WS04/05

Programmieren in Java

14. Java Objektorientierung

Klassen und Konstruktoren in Java

II.4.2 Abstrakte Klassen und Interfaces - 1 -

Programmierkurs Java

Programmierparadigmen A01 OOP. Programmierparadigmen

Zweck: sequentieller Zugriff auf Elemente eines Aggregats

Informatik II Übung 06. Benjamin Hepp 5 April 2017

Einführung in die Programmierung I Systematisches Programmieren. Thomas R. Gross. Department Informatik ETH Zürich

4. Vererbung. Idee der Vererbung. Wir wollen ein Verwaltungsprogramm für CDs und Videos entwickeln. Wir stellen uns dazu folgende Klassen vor:

II.4.5 Generische Datentypen - 1 -

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Software-Entwurfsmuster (weitere) A01 OOP. Software-Entwurfsmuster (weitere)

Polymorphie. 15. Java Objektorientierung II

Objektorientierte Programmierung

Zweck: sequentieller Zugriff auf Elemente eines Aggregats. mehrere Abarbeitungen des Aggregatinhalts

Tagesprogramm

Polymorphie. 15. Java Objektorientierung II

Vor- und Nachbedingungen in imperativen Programmen OOPM, Ralf Lämmel

Objektorientierte Verträge. OOPM, Ralf Lämmel

Qualitätssicherung in der Softwareentwicklung

4. Vererbung Die Klasse Object. Die Klasse Object

Tag 8 Repetitorium Informatik (Java)

Objektorientierte Verträge OOPM, Ralf Lämmel

Objektorientierte Konzepte

Kapitel 13. Abstrakte Methoden und Interfaces. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Java Kurs für Anfänger Einheit 5 Methoden

TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK

Softwaretechnik. Vorlesung 06: Design by Contract (Entwurf gemäß Vertrag) Peter Thiemann SS Universität Freiburg, Germany

Autotest. Automatische Testgenerierung mit Design by Contract. von Simon Greiner am 12. Juli 2007

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

IT I: Heute. abstrakte Methoden und Klassen. Interfaces. Interfaces List, Set und Collection IT I - VO 7 1

Programmierkurs C++ Abstrakte Klassen und Methoden

Objekt-orientierte Programmierung

Objektorientierte Programmierung Studiengang Medieninformatik

Grundlagen der Informatik 0

Programmieren II. Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz Institut für Angewandte Informatik

Vorkurs Informatik WiSe 15/16

Beispiel: die Klasse Brüche

Programmieren II. Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz Institut für Angewandte Informatik

Aufgabe 1.1. Wählen Sie jene Variablendeklarationen mit Initialisierungen aus, die in Java hinsichtlich der Typen korrekt sind:

Aufgabenblatt 4. Aufgabe 3. Aufgabe 1. Aufgabe 2. Prof. Dr. Th. Letschert Algorithmen und Datenstrukturen

Objektorientierte Sprachen

Polymorphie/Späte Bindung Abstrakte Klassen Interfaces. Polymorphie/Späte Bindung Abstrakte Klassen Interfaces

Algorithmen und Datenstrukturen 07

Programmieren 2 Java Überblick

Paket umfaßt alle Dateien bzw. Klassen im selben Ordner. Kürzer durch Import-Deklaration (am Dateianfang)

Konzepte der Programmiersprachen

API-Design. Do s and Don ts. Jochen Kraushaar

Softwaretechnik WS 16/17. Übungsblatt 01

Einführung in C# Teil 3. Matthias Nübling

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Interface. So werden Interfaces gemacht

Einstieg in die Informatik mit Java

Programmieren 1 09 Vererbung und Polymorphie

Programmieren in Java

14 Abstrakte Klassen, finale Klassen, Interfaces

Kapitel 5: Interfaces

Einführung in die Programmierung

Objektorientierte PL/SQL-Entwicklung Ein Erfahrungsbericht aus Sicht von JAVA-Entwicklern

Gliederung. n Teil I: Einleitung und Grundbegriffe. n Teil II: Imperative und objektorientierte Programmierung

Objektorientierung III

14 Abstrakte Klassen, finale Klassen, Interfaces. Auswertung von Ausdrücken. Beispiel. Abstrakte Methoden und Klassen

14 Abstrakte Klassen, finale Klassen, Interfaces

Informatik II. Übungsstunde 6. Distributed Systems Group, ETH Zürich

Vorausgesetzte Grundkenntnisse. Inhalt. Klassenhierarchie und Vererbung. Vererbung. Klassenhierarchie und Vererbung. Einführung in C# Teil 3

Transkript:

Ersetzbarkeit und Verhalten U ist Untertyp von T, wenn eine Instanz von U überall verwendbar ist, wo eine Instanz von T erwartet wird Struktur der Typen für Ersetzbarkeit nicht ausreichend Beispiel: void draw() // zeichne Bild void draw() // ziehe Revolver Ersetzbarkeit muss Verhalten berücksichtigen Design by Contract Objektorientierte Programmiertechniken, Zusicherungen 1

Client-Server-Beziehungen Server bietet Dienste an, Client nutzt Dienste Objekt ist gleichzeitig Client und Server Vertrag zwischen Client und Server: Client erfüllt Vorbedingungen eines Dienstes Server erfüllt Nachbedingungen eines Dienstes Server erfüllt Invarianten des Objekts Client + Server erfüllt History-Constraints des Objekts Dienst = Ausführung einer Methode Objektorientierte Programmiertechniken, Zusicherungen 2

Vorbedingung (Precondition) Verantwortlich: Client Wann: vor Methodenaufruf Was: hauptsächlich Eigenschaften von Argumenten Beispiel: Argument ist Array aufsteigend sortierter Zahlen manchmal auch (sichtbarer) Zustand des Servers Beispiel: abheben nicht aufrufen wenn Konto überzogen Objektorientierte Programmiertechniken, Zusicherungen 3

Nachbedingung (Postcondition) Verantwortlich: Server Wann: vor Rückkehr aus Methodenaufruf Was: Eigenschaften von Methodenergebnissen sowie Änderungen und Eigenschaften des Objektzustands Beispiel: Methode fügt Element (falls noch nicht vorhanden) in Menge ein. Ergebnis ist true falls Element bereits vorher in Menge war. Nachbedingung klingt oft wie Methodenbeschreibung Objektorientierte Programmiertechniken, Zusicherungen 4

Invariante Verantwortlich: Server Wann: vor und nach Ausführung von Methoden Was: unveränderliche Eigenschaften von Objekten/Variablen Beispiel: Guthaben am Sparbuch ist immer positive Zahl Gültigkeit der Invariante kann von Bedingungen abhängen Beispiel: zuverlaessig == false wenn Konto überzogen impliziert Nachbedingung Ausnahme: Variable kann von außen geschrieben werden Client UND Server für Invariante darauf verantwortlich Objektorientierte Programmiertechniken, Zusicherungen 5

Server-kontrollierter History-Constraint Verantwortlich: Server Wann: nach Ausführung von Methoden im Bezug zu Zustand vor Ausführung der Methoden Was: Einschränkungen auf der Veränderung von Variablen Beispiel: Zählerwert erhöht sich mit jedem Methodenaufruf Prüfung vor Methodenausführung von Natur aus unmöglich impliziert Nachbedingung Ausnahme: Variable kann von außen geschrieben werden Client UND Server gemeinsam verantwortlich Objektorientierte Programmiertechniken, Zusicherungen 6

Client-kontrollierter History-Constraint Verantwortlich: Client Wann: vor Methodenaufrufen Was: Einschränkungen auf der Reihenfolge von Aufrufen Beispiele: zuerst initialize, dann andere Methoden nach jedem Aufruf von A einer von B nötig Server kennt Reihenfolge oft nicht, Clients schon ein Client oder alle Clients bestimmen Reihenfolge Zusammenhang mit Synchronisation (Koordination) Objektorientierte Programmiertechniken, Zusicherungen 7

Beispiel zu klassischen Zusicherungen public class Konto { public int guthaben; public int ueberziehungsrahmen; // guthaben >= -ueberziehungsrahmen // einzahlen addiert summe zu guthaben; summe >= 0 public void einzahlen (int summe) { guthaben = guthaben + summe; // abheben zieht summe von guthaben ab; // summe >= 0; guthaben+ueberziehungsrahmen >= summe public void abheben (int summe) { guthaben = guthaben - summe; Objektorientierte Programmiertechniken, Zusicherungen 8

Beispiel zu History-Constraints public class Transaction { private int started = 0, committed = 0, aborted = 0; // number of corresponding transactions // can only increase one by one (server-controlled) // started >= committed + aborted (invariant) // for each invocation of start() returning x, either // commit(x) or abort(x) must be invoked exactly once public int start() {...; return started++; public void commit(int x) {...; committed++; public void abort(int x) {...; aborted++; Objektorientierte Programmiertechniken, Zusicherungen 9

Typen und Zusicherungen Zusicherungen gehören zu nominalen Typen Objekttyp besteht aus Schnittstelle (= Signatur) Name von Klasse / Interface Zusicherungen in Java Zusicherungen nur informal als Kommentare Überprüfung nur durch Programmierer trotzdem: Änderung von Zusicherung = Typänderung Auswirkungen auf andere Programmteile Objektorientierte Programmiertechniken, Zusicherungen 10

Genauigkeit von Zusicherungen Client verlässt sich nur darauf, was vom Server zugesagt Server verlässt sich nur darauf, was vom Client zugesagt Genauigkeit durch Programmierer(inn)en bestimmbar: genau: große Abhängigkeit zw. Client und Server ungenau: kleine Abhängigkeit zw. Client und Server Tipp: keine versteckten Zusicherungen Tipp: schwache Abhängigkeiten (= wenige Zusicherungen) Objektorientierte Programmiertechniken, Zusicherungen 11

Ersetzbarkeit und Verhalten (1) U ist nur dann Untertyp von T wenn gilt: Vorbedingungen in Untertypen sind schwächer oder gleich bei Vererbung: Verknüpfung mit ODER Nachbedingungen in Untertypen sind stärker oder gleich bei Vererbung: Verknüpfung mit UND Invarianten in Untertypen sind stärker oder gleich bei Vererbung: Verknüpfung mit UND von außen schreibbare Variable gleiche Invarianten Objektorientierte Programmiertechniken, Zusicherungen 12

Ersetzbarkeit und Verhalten (2) U ist nur dann Untertyp von T wenn gilt: Wenn Server-kontrollierte History-Constraints in T verhindern, dass eine Variable vom Zustand X in den Zustand Y kommt, dann müssen dies auch Constraints in U tun. U kann Zustandsänderungen stärker einschränken als T von außen schreibbare Variable gleiche Constraints Jede von Client-kontrollierten History-Constraints in T erlaubte Aufrufreihenfolge muss auch in U erlaubt sein. TraceSet(T) TraceSet(U) Menge aller Clients betrachten, nicht einzelnen Client Objektorientierte Programmiertechniken, Zusicherungen 13

Zusicherungen und Ersetzbarkeit (1) public class Set { public void insert (int x) { // inserts x into set iff not already there // x is in set immediately after invocation...; public boolean inset (int x) { // returns true if x is in set, otherwise false...;... public class SetWithoutDelete extends Set { // elements in the set always remain in the set Objektorientierte Programmiertechniken, Zusicherungen 14

Zusicherungen und Ersetzbarkeit (2) Set s =...; s.insert(41); dosomething(s); if (s.inset(41)) { dosomeotherthing(s); else { dosomethingelse(); SetWithoutDelete s =...; s.insert(41); dosomething(s); dosomeotherthing(s); // s.inset(41) always returns true Objektorientierte Programmiertechniken, Zusicherungen 15

Zusicherungen und Ersetzbarkeit (3) Tipp: nicht SetWithoutDelete verwenden, wo Set ausreicht (um andere künftige Erweiterungen zu ermöglichen) public class SetWithDelete extends Set { public void delete(int x) { // deletes x from the set if it is there...; Beispiele für Zusicherungen: Java API Dokumentation (siehe z.b. http://download.oracle.com/javase/7/docs/api/) Objektorientierte Programmiertechniken, Zusicherungen 16

Faustregeln zu Zusicherungen Zusicherungen sollen stabil sein (vor allem an Wurzel der Typhierarchie) keine unnötigen Details festlegen explizit im Programm stehen unmissverständlich formuliert sein während Programmentwicklung ständig überprüft werden Objektorientierte Programmiertechniken, Zusicherungen 17

Abstrakte Klassen Polygon ւ ց Triangle Square Hexagon public abstract class Polygon { public abstract void draw(); // draw polygon on screen public class Triangle extends Polygon { public void draw() {... // draw triangle on screen Zusicherungen auf abstrakten Methoden besonders wichtig! Objektorientierte Programmiertechniken, Zusicherungen 18

Interfaces Interfaces für Untertyprelationen sehr gut geeignet interface X interface Y ցւ interface Z class A ց class B Abstrakte Klassen gegenüber Interfaces nur dann zu bevorzugen, wenn Code vererbt werden soll Zusicherungen auf Interfaces besonders wichtig! Objektorientierte Programmiertechniken, Zusicherungen 19

Abstr. Klassen u. Interfaces verwenden Implementierungen oft nur in Klassen ohne Unterklassen abstrakte Klassen und Interfaces eher stabil Parametertypen sollen stabil sein sie sollen nicht mehr ausdrücken, als nötig (keine unnötigen Abhängigkeiten) abstrakte Klassen bzw. Interfaces leicht hinzuzufügen (z.b. verwendbar als Parametertypen für jeden Bedarf) Zusicherungen auf abstrakten Einheiten besonders wichtig Objektorientierte Programmiertechniken, Zusicherungen 20