Client-Server-Beziehungen



Ähnliche Dokumente
Client-Server-Beziehungen

Ersetzbarkeit und Verhalten

Client-Server Beziehungen

Ersetzbarkeit, Client-Server Beziehungen

Zusicherungen A01 OOP. Zusicherungen

OOP. Tagesprogramm. Zusicherungen Zusicherungen und Ersetzbarkeit

Tagesprogramm

SEP 114. Design by Contract

Java Kurs für Anfänger Einheit 5 Methoden

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

Objektorientierte Programmierung

Prinzipien Objektorientierter Programmierung

Objektorientierte Programmierung

Java: Vererbung. Teil 3: super()

Einführung in die Programmierung für Wirtschaftsinformatik

Factory Method (Virtual Constructor)

Objektorientierte Programmierung. Kapitel 12: Interfaces

Gebundene Typparameter

BEISPIELKLAUSUR Softwareentwicklung:

Programmierkurs Java

Einführung in die Programmierung

Vorkurs C++ Programmierung

Programmieren in Java

Grundlagen von Python

Nathan Burgener. Design by Contract. Modul SWE

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:

Faustregeln zu Zusicherungen

Selbststudium OOP4 Auftrag

Klassenbeziehungen & Vererbung

Computeranwendung und Programmierung (CuP)

Kapitel 6. Vererbung

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

Typumwandlungen bei Referenztypen

5. Abstrakte Klassen

Design by Contract with JML

Übungen Programmieren 1 Felix Rohrer. Übungen

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Applet Firewall und Freigabe der Objekte

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Große Übung Praktische Informatik 1

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

Interaktionen zwischen Objekten durch Senden von Nachrichten und Reagieren auf empfangene Nachrichten

Einführung in die Programmierung

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

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Kapitel 6. Vererbung

Lösungsvorschläge. zu den Aufgaben im Kapitel 4

Invarianten und sichere Vererbung

Vererbung & Schnittstellen in C#

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

1. Teilklausur. Modul "OOPM Vorlesung/Übung" Gruppe A

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Gierhardt. 1 import javakara. JavaKaraProgram ; 3 public class Playit1 extends JavaKaraProgram. 4 { // Anfang von Playit1. 6 void gehezumbaum ( ) 7 {

Objektorientierte Programmierung OOP

Ein Blick voraus. des Autors von C++: Bjarne Stroustrup Conrad Kobsch

In dieser Aufgabe sollen Teile eines kleinen Pong-Spiels analysiert und implementiert werden. Gegeben sei dazu das folgende Szenario:

Institut für Programmierung und Reaktive Systeme 25. August Programmier-Labor Übungsblatt. int binarysearch(int[] a, int x),

Objektorientierte Programmierung

Kapitel 6. Vererbung

Software Engineering Klassendiagramme Assoziationen

Graphic Coding. Klausur. 9. Februar Kurs A

Software Engineering Interaktionsdiagramme

Codes und Informationsgehalt

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

Programmieren. 10. Tutorium 4./ 5. Übungsblatt Referenzen

Statuten in leichter Sprache

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Prof. Dr. Uwe Schmidt. 21. August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

Programmieren II Vererbung. Programmieren II Vererbung. Programmieren II Vererbung. Programmieren II Vererbung. Einleitende Bemerkungen

Einführung in die Java- Programmierung

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Folgende Einstellungen sind notwendig, damit die Kommunikation zwischen Server und Client funktioniert:

3. Konzepte der objektorientierten Programmierung

4. AuD Tafelübung T-C3

5. Tutorium zu Programmieren

Übungen zu Softwaretechnik

Java Einführung Abstrakte Klassen und Interfaces

Algorithmen und Datenstrukturen

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Fachdidaktik der Informatik Jörg Depner, Kathrin Gaißer

Der lokale und verteilte Fall

Car-Net über WLAN Aufbau einer Internet-Verbindung über WLAN zur Nutzung von Car-Net

2.4.3 Polymorphie (Wiederholung von Alp2)

Anleitung Typo3-Extension - Raumbuchungssystem

Spamfilter-Konfiguration für Outlook 2000 und höher

Probeklausur Softwareengineering SS 15

Einführung in die Java- Programmierung

Einführung in die Programmierung für NF

Prüfung Computation, Programming

Assertions (Zusicherungen)

1 Vom Problem zum Programm

Java Virtual Machine (JVM) Bytecode

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

OSF Integrator für Btracking und Salesforce Anleitung für die Nutzer

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

Übungsblatt 3: Algorithmen in Java & Grammatiken

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 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 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 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 Objektorientierte Programmierung, Zusicherungen 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 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 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. 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 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 gilt nicht für externes Schreiben von Variablen Objektorientierte Programmierung, Zusicherungen 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 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 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 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 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 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 14