Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 4: Die Schnittstelle einer Klasse.

Slides:



Advertisements
Ähnliche Präsentationen
Blue J.
Advertisements

Kapitel 4 Datenstrukturen
Christos, Kornelia, Jan Christos, Kornelia, Jan Entwicklungsumgebung Versteht unseren Java Programm Code Versteht unseren Java Programm.
Christos, Kornelia, Jan Christos, Kornelia, Jan Entwicklungsumgebung Versteht unseren Java Programm Code Versteht unseren Java Programm.
Einführung Blue J.
Christos, Kornelia, Jan Christos, Kornelia, Jan Entwicklungsumgebung Versteht unseren Java Programm Code Versteht unseren Java Programm.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Algorithmentheorie 04 –Hashing
Kapitel 5 Stetigkeit.
Tricks mit Zahlen. Kapitel 2 © Beutelspacher Mai 2004 Seite 2 Idee / Aufgaben In jeder Woche stelle ich Ihnen einen Zaubertrick mit Zahlen vor. Ihre Aufgaben:
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
DVG Klassen und Objekte
UML Begleitdokumentation des Projekts
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Prof. Dr. Gerhard Schmidt pres. by H.-J. Steffens Software Engineering SS 2009Folie 1 Objektmodellierung Objekte und Klassen Ein Objekt ist ein Exemplar.
Bild 1.1 Copyright © Alfred Mertins | Signaltheorie, 2. Auflage Vieweg+Teubner PLUS Zusatzmaterialien Vieweg+Teubner Verlag | Wiesbaden.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lecture 13: (Container-)Datenstrukturen.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lecture 13: (Container-)Datenstrukturen.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Objektorientierte Konzepte/UML Geoinformation I Vorlesung 2 WS 2000/2001.
Generalisierung/Spezialisierung Subtypisierung/Vererbung
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Auslegung eines Vorschubantriebes
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 15: Topologisches Sortieren Teil 1: Problemstellung und.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 9: Abstraktion.
Einführung in die Programmierung Prof. Dr. Bertrand Meyer
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lecture 10: Das dynamische Modell und mehr zu Referenzen.
Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 2: Der Umgang mit Objekten I.
1. Entwicklungsumgebung 2. Kontextmenü 3. Compile 4. Objekt 5. Attribut 6. Klasse 7. Deklaration 8. Intialisierung.
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Analyse von Ablaufdiagrammen
Das Änderungssystem für TWS Definitionen
HORIZONT 1 XINFO ® Das IT - Informationssystem PL/1 Scanner HORIZONT Software für Rechenzentren Garmischer Str. 8 D München Tel ++49(0)89 / 540.
Publikation auf Knopfdruck Judith Riegelnig Michael Grüebler 19. Oktober 2010 / Statistiktage Neuenburg.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 7: Referenzen und Zuweisungen.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Vorlesung 5: Invarianten und Logik.
Einführung in die Programmierung Prof. Dr. Bertrand Meyer
Einführung in die Programmierung Prof. Dr. Bertrand Meyer
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 6: Objekterzeugung.
Aufgaben Version 1: Es soll eine Wetterstation mit folgenden zwei Anzeigen implementiert werden: Aktuelle Wetterbedingungen mit Temperatur und.
1. Entwicklungsumgebung 2. Kontextmenü 3. Compile 4. Objekt 5. Attribut 6. Klasse 7. Deklaration 8. Intialisierung.
Java Programmierung.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 2: Der Umgang mit Objekten I.
Managemententscheidungsunterstützungssysteme (Ausgewählte Methoden und Fallstudien) ( Die Thesen zur Vorlesung 3) Thema der Vorlesung Lösung der linearen.
CuP - Java Vierte Vorlesung Entspricht ungefähr Kapitel 2.1 des Skriptums Montag, 14. Oktober 2002.
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
Klassen und Klassenstruktur
Paul, Morten, Yannick Blue J. Entwicklungsumgebung  versteht Java Programmcode  Für die Entwicklung eigener Software  Durch die Programmierung.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 18: Mehr über Vererbung und Agenten.
Einführung in die Programmierung Prof. Dr. Bertrand Meyer
Einführung Blue J. Inhaltsverzeichnis  Definition  Vokabeln.
Monatsbericht Ausgleichsenergiemarkt Gas – Oktober
Kapitel 5Strukturen Information aus der realen Welt werden in einem informationsverarbeitenden System als Daten abgelegt. Diese stellen also eine (vereinfachte)
HG13_ Herzgen, Jung & Lorkowski1 Java Programmierung BlueJ Workshop.
IT2 – WS 2005/20061Nov 14, 2005 Visibility  public: Sichtbar in allen Paketen  protected: Sichtbar innerhalb des Pakets und in den Unterklassen  (default,
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 4: Die Schnittstelle einer Klasse.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 9: Abstraktion.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 6: Objekterzeugung.
Paul, Morten, Yannick Blue J. Entwicklungsumgebung  versteht Java Programmcode  Für die Entwicklung eigener Software  Durch die Programmierung.
Christos, Kornelia, Jan Christos, Kornelia, Jan Entwicklungsumgebung Versteht unseren Java Programm Code Versteht unseren Java Programm.
Einführung in die Programmierung Prof. Dr. Bertrand Meyer
 Präsentation transkript:

Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 4: Die Schnittstelle einer Klasse

2 Kunde, Versorger (client, supplier) Definitionen Ein Kunde (oder Klient) eines Softwaremechanismus ist ein System beliebiger Art (Softwareelement, nicht-Software-System, menschlicher Benutzer...) welches diesen nutzt. Für seine Kunden ist der Mechanismus ein Versorger.

3 Darstellung der Kunde-Beziehung (Siehe Diagramm-Tool von EiffelStudio) C S Kunde

4 Schnittstelle: Definition Eine Schnittstelle einer Menge von Softwaremechanismen ist die Beschreibung von Techniken, die es den Kunden ermöglicht, diese Mechanismen zu benutzen

5 Arten von Schnittstellen (interfaces) Benutzerschnittstelle: Kunden sind Menschen GUI (Graphical User Interface, häufig nur UI): Graphische Benutzeroberfläche (oder: Benutzerschnittstelle) Textschnittstellen, Befehlszeilen-Schnittstellen... Programmschnittstelle: Kunden sind andere Softwaresysteme API (Abstract* Program Interface): Programmierschnittstelle Wir befassen uns in dieser Vorlesung mit Programmierschnittstellen *Früher: Application

6 Eine graphische Benutzerschnittstelle (GUI)

7 Klassen Ein Objekt ist eine Softwaremaschine, die es Programmen erlaubt, auf eine Ansammlung von Daten zuzugreifen und diese zu verändern Objekte repräsentieren z.B. (in Traffic) Eine Stadt Eine Tramlinie Eine Route durch die Stadt Ein Element des GUIs, wie z.B ein Knopf (Button) Jedes Objekt gehört zu einer gewissen Klasse, die die anwendbaren Operationen (Features) definiert Beispiele: Die Klasse aller Städte Die Klasse aller Knöpfe etc.

8 Definition: Klasse Klasse Eine Klasse ist die Beschreibung einer Menge von möglichen Laufzeitobjekten, auf die die gleichen Features anwendbar sind Eine Klasse repräsentiert eine Kategorie von Dingen Ein Objekt repräsentiert eines dieser Dinge

9 Definitionen: Klasse, Instanz, generierende Klasse Instanz, generierende Klasse Falls ein Objekt O eines der durch die Klasse C beschriebenen Objekte ist: O ist eine Instanz von C C ist die generierende Klasse von O Eine Klasse repräsentiert eine Kategorie von Dingen Ein Objekt repräsentiert eines dieser Dinge

10 Objekte vs Klassen Klassen existieren nur im Softwaretext: Definiert durch einen Klassentext Beschreiben Eigenschaften von assoziierten Instanzen Objekte existieren nur zur Laufzeit: Sichtbar im Programmtext durch Namen, die Laufzeitobjekte bezeichnen Beispiele: Zurich_map, Polyterrasse, console

11 prepend animate append Ein Objekt hat eine Schnittstelle (interface)* count stations first last *von seiner generiender Klasse definiert

12 prepend animate append count first Ein Objekt hat eine Implementation* count stations first last *von seiner generiender Klasse definiert

13 Softwarekonstruktion Passende Klassen zu finden ist ein zentraler Teil des Softwaredesigns (Die Entwicklung der Architektur eines Programms) Die Details auszuarbeiten ist ein Teil der Implementation

14 Eine Klassenschnittstelle In dieser Vorlesung benutzen wir Schnittstelle im Sinne einer Programmierschnittstelle (nicht Benutzerschnittstelle). Wir schauen uns jetzt die Schnittstelle von SIMPLE_LINE (eine vereinfachte Version von LINE) an. Diese wird in EiffelStudio angezeigt. (Benutzen Sie den Interface Knopf.)

15 Eine Abfrage: count Wie lange ist diese Linie? Siehe Abfrage count Kopfkommentar: beschreibt den Zweck dieses Features. diese Linie: Die Instanz von SIMPLE_LINE, auf die count angewendet wird. Die Form einer Abfrage-Deklaration: feature_name : RÜCKGABE_TYP INTEGER : ein Typ, der ganze Zahlen bezeichnet (z.B. -23, 0, 256) count : INTEGER -- Anzahl der Stationen auf dieser Linie. Möglicherweise mit Featurerumpf

17 Stilregel: Kopfkommentare Denken Sie nicht einmal daran, ein Feature zu schreiben, ohne sofort einen Kopfkommentar zu verfassen, der den Zweck des Features erläutert

18 Ausdrücke und ihre Typen Zur Laufzeit hat jedes Objekt einen Typ: seine generierende Klasse Beispiele: LINE ist der Typ des Objektes, das Line8 referenziert INTEGER ist der Typ des Objektes, das Line8.count referenziert Im Programmtext hat jeder Ausdruck einen Typ Beispiele: LINE ist der Typ von Line8 INTEGER ist der Typ von Line8. count

19 Eine weitere Abfrage: i_th Welche ist die i-te Station einer Linie? Feature i_th i_th (i: INTEGER): STATION -- Die Station mit Index i auf dieser Linie. Es spielt keine Rolle welches die erste und welches die letzte Station ist. Traffic garantiert nur, dass die Reinfolge sich nicht ändert, selbst wenn neue Stationen hinzugefügt werden. In unserer Karte von Zürich ist die nördliche Endstation immer die Erste.

20 Zwei weitere Abfragen Welches sind die Stationen am Ende einer Linie? Eigenschaften jeder Linie l : l. first = l. i_th (1) l. last = l. i_th (l. count) first : STATION -- Erste Station. last : STATION -- Letzte Station.

21 Beispiele: die Klasse QUERIES class QUERIES inherit ZURICH_OBJECTS feature explore -- Abfragen auf Linien ausprobieren. do console. output (Line10. count) console. output (Line10. i_th (1)) console. output (Line10. i_th (Line10. count)) end

22 Ein Befehl: remove_all_segments Wir möchten Line10 von Grund auf neu bauen. Wir beginnen damit, indem wir alle Stationen löschen: Anmerkungen: Unsere Tramlinie hat immer mindestens eine Station, auch nach Anwendung des Befehls remove_all_segments Falls die Linie nur eine Station hat, bezeichnet sowohl first als auch last diese Station remove_all_segments -- Alle Stationen ausser der ersten entfernen.

23 Der Befehl append Neue Stationen zu einer Linie hinzufügen: append (s : STATION) -- s am Ende dieser Linie hinzufügen.

24 Die Klasse COMMANDS class COMMANDS inherit ZURICH_OBJECTS feature explore -- Die Linie 10 wiederherstellen. do Line10.remove_all_segments -- Es ist nicht nötig, Haldenbach hinzuzufügen. Line10.append (ETH_Universitaetsspital) Line10.append (Haldenegg) Line10.append (Central ) Line10.append (Bahnhofplatz_HB) -- Resultate anzeigen: console.output (Line10.count ) console.output (Line10.first.name ) end

25 Saubere Schnittstellen definieren Nicht jedes Feature ist mit jedem Argument auf jede Instanz anwendbar! Beispiel: Line10. i_th (200 ) ist falsch! Die Klassenschnittstelle muss präzise genug sein, um daraus ihre korrekte Anwendung abzuleiten

26 Erster Versuch… Informationen zum Kopfkommentar hinzufügen: Besser, aber immer noch nicht gut genug: Ein Kommentar ist nur eine informelle Erklärung Obige Einschränkung sollte eine verbindlichere Stellung in der Schnittstelle haben i_th (i : INTEGER): STATION -- Die i -te Station dieser Linie. -- (Achtung: benutze nur mit i zwischen 1 und count, inklusive.)

27 Verträge (contracts) Ein Vertrag ist eine semantische Bedingung, die den Gebrauch einer Feature- oder Klasseneigenschaft charakterisiert Drei Hauptarten: Vorbedingung (precondition) Nachbedingung (postcondition) Klasseninvariante (class invariant)

28 Eine Eigenschaft, die ein Feature von jedem Kunden erwartet i_th (i : INTEGER): STATION -- Die i-te Station dieser Linie Vorbedingung require nicht_zu_klein: i >= 1 nicht_zu_gross: i <= count Die Vorbedingung von i_th Ein Feature ohne die require Klausel ist immer anwendbar, als ob es folgende Klausel hätte: require immer_OK: True

29 Zusicherungen (assertions) nicht_zu_klein: i >= 1 Zusicherung Bedingung (condition) Zusicherungs-Etikett(*) (*) oder: Tag, Sprich: tääg

30 Das Vorbedingungsprinzip Ein Kunde, der ein Feature aufruft, ohne die Vorbedingung zu erfüllen, bezeichnet man als fehlerhafte (buggy) Software Ein Kunde, der ein Feature aufruft, muss sicherstellen, dass die Vorbedingung vor dem Aufruf erfüllt ist

31 Verträge Verträge erleichtern den Prozess der Fehlerbeseitigung (Debugging) Verträge sind auch nützlich als Dokumentation einer Schnittstelle

32 Nachbedingungen Vorbedingungen: Auflagen für Kunden Nachbedingungen: Nutzen für Kunden remove_all_segments -- Alle Stationen ausser der ersten entfernen. ensure nur_eine_bleibt: count = 1 beide_enden_gleich: first = last append (s : STATION ) -- s am Ende der Linie hinzufügen. ensure neue_station_ist_letzte: last = s eine_mehr: count = old count + 1 Wert des Ausdrucks zum Zeitpunkt des Aufrufs

33 Die old Notation Nur in Nachbedingungen verwendbar Bezeichnet den Wert eines Ausdrucks, den er beim Aufruf der Routine hatte Beispiel (in einer Klasse ACCOUNT): balance : INTEGER -- Aktueller Kontostand. deposit (v : INTEGER) -- Addiere v zum Kontostand. require positiv: v > 0 do … ensure addiert: balance = old balance + v end

34 Ein Feature muss sicherstellen, dass, sofern seine Vorbedingung zu Beginn seiner Ausführung erfüllt wurde, seine Nachbedingung am Schluss erfüllt ist. Das Nachbedingungsprinzip Ein Feature, welches seine Nachbedingung nicht erfüllen kann, nennt man fehlerhafte (buggy) Software

35 Was wir in dieser Vorlesung gesehen haben Klassen Objekte Den Begriff Schnittstelle GUI vs API Befehle und Abfragen Verträge: Vor- und Nachbedingungen (Zusicherungen) Verträge zur Fehlerbeseitigung und Dokumentation benutzen

36 Zu lesen auf nächste Woche: Kapitel 1 bis 6 Lesen Sie im Speziellen das Kapitel 5 (Logik), da wir nur kurz auf den in Diskrete Mathematik behandelten Teil eingehen werden und wir uns auf die Anwendungen in der Programmierung konzentrieren