Client-Server-Beziehungen

Ähnliche Dokumente
Ersetzbarkeit und Verhalten

Client-Server-Beziehungen

Faustregeln zu Zusicherungen

Client-Server Beziehungen

Ersetzbarkeit, Client-Server Beziehungen

Arten von Klassen-Beziehungen

Arten von Klassen-Beziehungen

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

Tagesprogramm

Info B VL 8: Abstrakte Klassen & Interfaces

Beispiel für überladene Methode

Programmieren 2 Java Überblick

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

Theorie zu Übung 8 Implementierung in Java

Objektorientierte Programmierung. Kapitel 12: Interfaces

Java Kurs für Anfänger Einheit 5 Methoden

Gebundene Typparameter

Probeklausur: Programmierung WS04/05

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

6. Globalübung (zu Übungsblatt 8)

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

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

II.4.1 Unterklassen und Vererbung - 1 -

Kapitel 6. Vererbung

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Interfaces

Vererbung. Vererbung von Methoden und Instanzvariablen. Vererbung als Realisierung einer is-a Beziehung.

Programmierkurs C++ Abstrakte Klassen und Methoden

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Invarianten und sichere Vererbung

1 Abstrakte Klassen, finale Klassen und Interfaces

Kapitel 6. Vererbung

Kapitel 6. Vererbung

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

VIII: Vererbung. Unterklassen einer Klasse. Vererbung von Methoden und Instanzvariablen. Überschreiben von Methoden

1. Abstrakte Klassen

Programmieren I. Kapitel 8. Vererbung

Arten des universellen Polymorphismus

Prinzipien Objektorientierter Programmierung

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

2.4.3 Polymorphie (Wiederholung von Alp2)

Programmieren in Java

Klassenbeziehungen & Vererbung

1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)

Objektorientierte Sprachen

Einstieg in die Informatik mit Java

In C und Java müssen Variablen und Methodenergebnisse durch Typangaben erläutert werden. Welche der folgenden Aussagen sind korrekt und welche nicht:

Einführung in die Programmierung für NF. Vererbung

JAVA für Nichtinformatiker - Probeklausur -

Algorithmen und Programmierung II

Java Einführung Abstrakte Klassen und Interfaces

Javakurs für Anfänger

Kapitel 1 - Widerholungsfragen

Java für Computerlinguisten

Kapitel 4: Klassen und Unterklassen

3 Objektorientierte Konzepte in Java

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik

Einführung in die Programmierung

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Anwendungsentwicklung mit Java. Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie

Java I Vorlesung Vererbung und Sichtbarkeit

AuD-Tafelübung T-B5b

Vererbung & Schnittstellen in C#

SEP 114. Design by Contract

Einführung in die Informatik

JAVA - Methoden - Rekursion

Repetitorium Informatik (Java)

Probeklausur: Programmierung WS04/05

Musterlösung Stand: 5. Februar 2009

3 Objektorientierte Konzepte in Java

Softwaretechnik WS 16/17. Übungsblatt 01

Einstieg in die Informatik mit Java

Objektorientierte Programmierung

C++ Klassen, Vererbung. Philipp Lucas. Sebastian Hack. Wintersemester 2008/09. saarland.

Arten des universellen Polymorphismus

Abschnitt 9: Schnittstellen: Interfaces

Innere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

JAVA - Methoden

5.5.8 Öffentliche und private Eigenschaften

Präsentation Interfaces

Java programmieren mit JavaKara. Eine Zusammenfassung in Beispielen

Übersicht. Vorstellung des OO-Paradigmas

Vererbung. Was versteht man unter dem Begriff Vererbung?

Interfaces und Vererbung

OOP und Angewandte Mathematik. Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik

Informatik II Musterlösung

Typumwandlungen bei Referenztypen

ALP II Dynamische Datenmengen

Parallele und funktionale Programmierung Wintersemester 2015/ Übung Abgabe bis , 10:00 Uhr

Java Schulung (Java 2 Java Development Kit 5 / 6)

Objektorientierte Programmierung

Algorithmen und Datenstrukturen 07

Javakurs für Anfänger

Vererbung. Martin Wirsing. Ziele. Vererbung

Informatik II (D-ITET) Übungsstunde 6

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

Java I Vorlesung Collections

Beispiel: Zwischen der Oberklasse und der abgeleiteten Klasse besteht eine ist ein Beziehung. Eine abgeleitete Klasse stellt eine Spezialisierung der

Statische und Nichtstatische Methoden Properties/ Eigenschaften

Programmieren in Java

Transkript:

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 sichert Invarianten des Objekts zu Dienst entspricht der Ausführung einer Methode Vor-, Nachbedingungen, Invarianten sind Zusicherungen Objektorientierte Programmierung, Zusicherungen und abstrakte Klassen 1

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 Programmierung, Zusicherungen und abstrakte Klassen 2

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 Programmierung, Zusicherungen und abstrakte Klassen 3

Invariante Verantwortlich: Server Wann: vor und nach Ausführung von Methoden Was: unveränderliche Eigenschaften von Objekten Beispiel: Guthaben am Sparbuch ist immer positive Zahl Gültigkeit der Invariante kann von Bedingungen abhängen Beispiel: zuverlässig == false wenn Konto überzogen Invarianten implizieren Nachbedingungen Ausnahme: Schreiben externer Variablen Client und Server verantwortlich Objektorientierte Programmierung, Zusicherungen und abstrakte Klassen 4

Beispiel zu Zusicherungen 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 Programmierung, Zusicherungen und abstrakte Klassen 5

Typen und Zusicherungen Zusicherungen gehören zu Typen Objekttyp besteht aus Name von Klasse / Interface Schnittstelle (= Signatur) Zusicherungen auf Methoden Zusicherungen informal als Kommentare (in Java) Überprüfung der Zusicherungen durch Programmierer Änderungen von Zusicherungen Typänderungen (Auswirkungen auf andere Programmteile) Objektorientierte Programmierung, Zusicherungen und abstrakte Klassen 6

Genauigkeit von Zusicherungen Clients dürfen sich nur auf das verlassen, was in Schnittstellen und Zusicherungen vom Server zugesagt wird. Server dürfen sich nur auf das verlassen, was in Schnittstellen und Zusicherungen vom Client zugesagt wird. Genauigkeit durch ProgrammiererInnen bestimmbar: genau: große Abhängigkeit zw. Client und Server ungenau: kleine Abhängigkeit zw. Client und Server Tipp: nicht zu viele Zusicherungen (Abhängigkeiten) Tipp: keine versteckten Zusicherungen Objektorientierte Programmierung, Zusicherungen und abstrakte Klassen 7

Ersetzbarkeit und Verhalten S ist nur dann Untertyp von T wenn gilt: Vorbedingungen in T implizieren Vorbedingungen in S Vorbedingungen in Untertypen sind schwächer bei Vererbung: Verknüpfung mit ODER Nachbedingungen in S implizieren Nachbedingungen in T Nachbedingungen in Untertypen sind stärker bei Vererbung: Verknüpfung mit UND Invarianten in S implizieren Invarianten in T Invarianten in Untertypen sind stärker bei Vererbung: Verknüpfung mit UND extern schreibbare Variablen: Invarianten unverändert Objektorientierte Programmierung, Zusicherungen und abstrakte Klassen 8

Zusicherungen und Ersetzbarkeit (1) 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...; class SetWithoutDelete extends Set { // elements in the set always remain in the set Objektorientierte Programmierung, Zusicherungen und abstrakte Klassen 9

Zusicherungen und Ersetzbarkeit (2) Set s = new Set(); s.insert(41); dosomething(s); if (s.inset(41)) { dosomeotherthing(s); else { dosomethingelse(); SetWithoutDelete s = new SetWithoutDelete(); s.insert(41); dosomething(s); dosomeotherthing(s); // s.inset(41) always returns true Objektorientierte Programmierung, Zusicherungen und abstrakte Klassen 10

Zusicherungen und Ersetzbarkeit (3) Tipp: nicht SetWithoutDelete verwenden, wo Set ausreicht (um andere künftige Erweiterungen zu ermöglichen) class SetWithDelete extends Set { public void delete (int x) { // deletes x from the set if it is there...; Objektorientierte Programmierung, Zusicherungen und abstrakte Klassen 11

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 Programmierung, Zusicherungen und abstrakte Klassen 12

Abstrakte Klassen Polygon ւ ց Triangle Square Hexagon abstract class Polygon { public abstract void draw(); // draw polygon on screen class Triangle extends Polygon { public void draw() { // draw a triangle on the screen...; Objektorientierte Programmierung, Zusicherungen und abstrakte Klassen 13

Verwendung abstrakter Klassen Implementierungen oft 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 leicht hinzuzufügen (z.b. verwendbar als Parametertypen für jeden Bedarf) Objektorientierte Programmierung, Zusicherungen und abstrakte Klassen 14

Interfaces interface X { static final double PI = 3.14159d; double foox(); interface Y { double fooy(); interface Z extends X, Y { double fooz(); Objektorientierte Programmierung, Zusicherungen und abstrakte Klassen 15

Unterschiede zu abstrakten Klassen Schlüsselwort interface statt abstract class alles implizit public daher public nicht nötig alle Methoden abstrakt daher abstract nicht nötig keine Variablen, nur Konstanten (static final...) static und final in Methodendeklarationen verboten nach extends können mehrere Namen von Interfaces stehen Mehrfachvererbung Objektorientierte Programmierung, Zusicherungen und abstrakte Klassen 16

Klassen implementieren Interfaces class A implements X, Y { double factor = 2.0d; public double foo() { return PI; public double foox() { return factor * PI; public double fooy() { return factor * foox(); class B extends A implements Z { public double fooy() { return 3.3d * foo(); public double fooz() { return factor / foox(); Objektorientierte Programmierung, Zusicherungen und abstrakte Klassen 17

Interfaces und Untertyprelationen Interfaces für Untertyprelationen 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 abstrakten Methoden (Interfaces) wichtig! Objektorientierte Programmierung, Zusicherungen und abstrakte Klassen 18