Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 9: Abstraktion.

Slides:



Advertisements
Ähnliche Präsentationen
Objektorientierte Programmierung
Advertisements

Programmierung II Prof. Dr. Michael Löwe
verweis-sensitive Grafiken
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.
FH-Hof Einbindung von JavaScript Anweisungen
Java: Objektorientierte Programmierung
Sortierverfahren Richard Göbel.
Java: Dynamische Datentypen
Java: Grundlagen der Objektorientierung
Dynamische Programmierung (2) Matrixkettenprodukt
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
WS Algorithmentheorie 08 – Dynamische Programmierung (2) Matrixkettenprodukt Prof. Dr. Th. Ottmann.
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Imperative Programmierung Funktionen und Parameter
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
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.
Die Skriptsprache Perl (8) Wolfgang Friebel DESY Zeuthen.
Klassen und Schnittstellen Klasse: Definiert Zustandsraum ihrer Instanzen vollständig (Implementierung der Struktur, soweit Voraussetzung für die Methoden-
Heute: Scherenzange zeichnen
Objektorientierte Modellierung
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.
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
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 Lecture 13: (Container-)Datenstrukturen.
Einführung in die Programmierung
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.
1. Verhalten der Objekte: Operationen Werden in den Klassen definiert Werden (i.d.R.) auf einem Objekt aufgerufen Wird das Empfängerobjekt genannt Weitere.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Programmierung Wintersemester 2008/09 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.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 15: Topologisches Sortieren Teil 1: Problemstellung und.
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.
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
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 Lektion 4: Die Schnittstelle einer Klasse.
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.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 2: Der Umgang mit Objekten I.
SOFTWARE TECHNOLOGY 2009/2010 Faculty of Electrical Engineering and Technical Informatics Budapest University of Technology and Economics OO problems 1.
Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014
Objektorientierte Modellierung mit UML
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 18: Mehr über Vererbung und Agenten.
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
Einführung in die Programmierung Prof. Dr. Bertrand Meyer
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
2 Datenabstraktion Geheimnisprinzip:
Java-Kurs Übung Besprechung der Hausaufgabe
Java-Kurs - 5. Übung Besprechung der Übungsaufgabe Klassen und Objekte
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 Lecture 18: Undo/Redo.
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 Lektion 9: Abstraktion.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Thomas H. Kolbe Einführung in die Programmierung mit Java 9. Vorlesung WS 2001/2002.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 6: Objekterzeugung.
Sichtbarkeit einschränken
Objektorientierte (OO) Programmierung
Christos, Kornelia, Jan Christos, Kornelia, Jan Entwicklungsumgebung Versteht unseren Java Programm Code Versteht unseren Java Programm.
1 Grundsätze objektorientierter Programmierung. Dr. Wolfram Amme, Grundsätze objektorientierter Programmierung, Informatik II, FSU Jena, SS Objektorientierte.
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 9: Abstraktion

2 Heutige Themen Abstraktion, vor allem funktionale Abstraktion Der Begriff der Routine Das Abschlusswort zu Features: Alle Featurekategorien Das Prinzip des einheitlichen Zugriffs (the Uniform Access principle) Abstraktionen und Kundenprivilegien Das Geheimnisprinzip

3 Routine: eine Abstraktion eines Algorithmus Abstrahieren heisst, die Essenz eines Konzeptes zu erfassen und Details und genaue Angaben zu ignorieren. Will heissen: Einige Informationen weglassen Dem Ergebnis der Abstraktion einen Namen geben. In der Programmierung: Datenabstraktion: Klasse Abstraktion eines (operativen) Algorithmus: Routine Eine Routine wird auch Methode genannt Oder Subprogramm oder Subroutine

4 Eine Routine ist eine der zwei Arten von Features…... die andere Art sind die Attribute Wir sind schon vielen Routinen begegnet, allerdings ohne den Namen zu kennen.

5 Eine Routine r (arg : TYPE ;...) -- Kopfkommentar. require Vorbedingung (Boolescher Ausdruck) do Rumpf (Instruktionen) ensure Nachbedingung (Boolescher Ausdruck) end

6 create_fancy_line -- Linie erschaffen und -- Stationen ausfüllen. do -- TODO -- BM, 26 Oct 2010 end Gebrauch von Routinen Von unten nach oben (bottom-up): Erfasse den existierenden Algorithmus, wenn möglich wiederverwendbar. Von oben nach unten (top-down): Platzhalter-Routinen Eine attraktive Alternative zu Pseudocode. build_a_line -- Imaginäre Linie bauen. do Paris.display Metro. highlight create_fancy_line end Methodologie: TODO Einträge sollten informativ sein

7 Prozedur: gibt kein Resultat zurück. Ergibt einen Befehl Aufrufe sind Instruktionen Funktion: gibt ein Resultat zurück f (arg : TYPE;...): RESULT_TYPE... (Der Rest wie zuvor)... Ergibt eine Abfrage Aufrufe sind Ausdrücke Zwei Arten von Routinen

8 Features: Die ganze Wahrheit Eine Klasse ist durch ihre Features charakterisiert. Jedes Feature ist eine Operation auf die korrespondierenden Elemente: Abfrage oder Befehl. Features sind der Leserlichkeit halber in verschiedene Kategorien eingeteilt. Klassenklauseln: Noten (Indexierung) Vererbung Erzeugung Feature (mehrere) Invariante Anatomie einer Klasse: Demo

9 Feature Feature Features: die ganze Wahrheit Befehl Abfrage Feature Funktion Kein Resultat Speicher Berechnung Kunden- Ansicht (Spezifikation) Interne Ansicht (Implementation) Gibt Resultat zurück Attribut Prozedur Speicher Berechnung Routine Feature

10 Das Prinzip des einheitlichen Zugriffs(*) Dem Kunden ist es egal, ob Sie etwas berechnen oder im Speicher nachschauen (*)Uniform access principle

11 Das Prinzip des einheitlichen Zugriffs: Beispiel balance = list_of_deposits. total – list_of_withdrawals. total list_of_deposits list_of_withdrawals balance list_of_deposits list_of_withdrawals (A2) (A1) Ein Aufruf wie z.B. your_account. balance könnte ein Attribut oder eine Funktion benutzen.

12 Das Prinzip des einheitlichen Zugriffs Dem Kunden ist es egal, ob Sie etwas berechnen oder im Speicher nachschauen

13 Das Prinzip des einheitlichen Zugriffs Eine Abfrage sollte für Kunden auf die gleiche Weise aufrufbar sein, egal ob sie als Attribut oder Funktion implementiert ist Etwas technischer ausgedrückt:

14 set_y set set_x Ein Objekt hat eine Schnittstelle x y

15 count first Ein Objekt hat eine Implementation x y set_y set set_x

16 Das Geheimnisprinzip x y set_y set set_x

17 class METRO_STATION feature x, y: REAL -- Koordinaten der Metrostation size: REAL -- Grösse des umschliessenden Rechtecks upper_left: POSITION -- Obere linke Position des umschliessenden Rechtecks adjust_positions -- Position des umschliessenden Rechtecks -- ändern do upper_left. set (x – size/2, y + size/2)... end Was Kunden tun können

18 class METRO_STATION feature x, y: REAL -- Koordinaten der Metrostation size: REAL -- Grösse des umschliessenden Rechtecks upper_left: POSITION -- Obere linke Position des umschliessenden Rechtecks of bounding square adjust_positions -- Position des umschliessenden Rechtecks -- ändern do upper_left. x := 3... end Was Kunden nicht tun können NICHT ERLAUBT!

19 Benutzen Sie Prozeduren! upper_left. set (3, upper_left. y ) upper_left. set_x (3 ) upper_left. move (3, h)

20 Abstraktion und Kundenprivilegien Lesezugriff, falls das Attribut exportiert ist a1. x ist ein Ausdruck! Eine Zuweisung a1. x := v wäre syntaktisch ungültig!! (Es würde einem Ausdruck etwas zuweisen, wie z.B: a + b := v ) Wenn Klasse A ein Attribut x hat, was darf eine Kundenklasse C mit a1.x tun, wobei a1 vom Typ A ist? a1 : A a1 C A (A)(A) (C )(C ) x x

21 Abstraktionsprinzipien anwenden Um Kunden Schreibprivilegien zu ermöglichen: Definieren Sie eine Setter-Prozedur, wie z.B. set_temperature (u : REAL) -- Setzt temperature auf u. do temperature := u ensure temperature_set: temperature = u end Kunden können diese wie folgt aufrufen: x. set_temperature (21.5)

22 Setter-Befehle voll ausnutzen set_temperature (u : REAL) -- Setzt Temperaturwert auf u. require not_under_minimum: u >= -273 not_above_maximum: u <= 2000 do temperature := u update_database ensure temperature_set: temperature = u end

23 Abstraktion und Kundenprivilegien Lesezugriff, falls das Attribut exportiert ist a1. x ist ein Ausdruck! Eine Zuweisung a1. x := v wäre syntaktisch ungültig!! (Es würde einem Ausdruck etwas zuweisen, wie z.B: a + b := v ) Wenn Klasse A ein Attribut x hat, was darf eine Kundenklasse C mit a1.x tun, wobei a1 vom Typ A ist? a1 : A a1 C A (A)(A) (C )(C ) x x

24 Exportieren (als public deklarieren) eines Attributes Ein Attribut exportieren heisst in Eiffel, (nur) seine Leserechte zu exportieren. Von ausserhalb erkennt man es nicht als Attribut, nur als Abfrage: es könnte auch eine Funktion sein. In C++, Java und C#, werden mit der public-Deklaration eines Attributs* x sowohl Schreib- als auch Leserechte exportiert: v := a1. x a1. x := v Dies führt dazu, dass es fast immer eine schlechte Idee ist, ein Attribut zu exportieren. * (field, member variable)

25 Feature Features: die ganze Wahrheit Befehl Abfrage Feature Funktion Kein Resultat Speicher Berechnung Kunden- Ansicht (Spezifikation) Interne Ansicht (Implementation) Gibt Resultat zurück Attribut Prozedur Speicher Berechnung Routine Feature

26 Getter-Funktionen In C++, Java und C# ist die Standardtechnik, um ein privates Attribut private_x zu exportieren, das Exportieren einer zugehörigen Getter-Funktion: x : T do Result := private_x end Eiffel braucht keine Getter-Funktionen: Man kann einfach das Attribut exportieren. Dies ist sicher: Das Attribut wird wie folgt exportiert: Nur Leserechte Ohne die Information, dass es ein Attribut ist. Es könnte auch eine Funktion sein. (Prinzip des einheitlichen Zugriffs)

27 Wir wollen beide Arten! (Eiffel-Syntax) Es ist möglich, eine Abfrage wie folgt zu definieren: temperature: REAL assign set_temperature Dann wird folgende Syntax x. temperature := 21.5 akzeptiert als Abkürzung für x. set_temperature (21.5) Erhält Verträge und andere ergänzende Operationen. In C# gibt es den Begriff des Property, welcher das gleiche Ziel verfolgt. Keine Zuweisung, sondern ein Prozedurenaufruf!

28 Status der Aufrufe in einem Kunden mit a1: A: Das Geheimnisprinzip (Information Hiding) class A feature f... g... feature {NONE} h, i... feature {B, C} j, k, l... feature {A, B, C} m, n... end a1. f, a1. g: in jedem Kunden gültig. a1. h: überall ungültig (auch in As eigenem Klassentext!) a1. j: nur in B, C und deren Nachkommen gültig (Nicht gültig in A!) a1. m: nur in A, B, C und deren Nachkommen gültig.

29 Das Geheimnisprinzip Das Geheimnisprinzip gilt nur für Benutzung durch Kunden, mittels qualifizierten Aufrufen oder Infix-Notation, z.B: a1. f Unqualifizierte Aufrufe (innerhalb einer Klasse) sind vom Geheimnisprinzip nicht betroffen: class A feature {NONE } h do... end feature f do...; h ;... end end

30 Ein Beispiel für selektiven Export LINKABLE exportiert ihre Features nach LINKED_LIST Exportiert sie nicht für den Rest der Welt. Kunden von LINKED_LIST müssen nichts über die LINKABLE –Zellen wissen. Haldenegg item right Central item right Haupt- bahnhof item right first_element active count3

31 class LINKABLE [G] feature {LINKED_LIST } put_right (...) do... end right : G do... end... end Diese Features werden selektiv nach LINKED_LIST und ihre Nachkommen exportiert. (Und zu keinen weiteren Klassen) Selektiv Exportieren

32 LINKABLE class LINKABLE feature {LINKED_LIST } item C : STRING -- Wert dieser Zelle right : LINKABLE -- Zelle, welche rechts von dieser Zelle -- angehängt ist (falls vorhanden) put_right (other : like Current) -- Setzt other rechts neben die aktuelle Zelle. do right := other ensure chained : right = other end Haldenegg item right

33 Was wir gesehen haben Die volle Kategorisierung von Features Routinen, Prozeduren, Funktionen Einheitlicher Zugriff Geheimnisprinzip Selektives Exportieren Setter- und Getter-Funktionen Eiffel: Assigner-Befehle

34 Leseaufgabe auf nächste Woche Kapitel über Syntax (11) Inheritance (16)