Einführung in die Programmierung Prof. Dr. Bertrand Meyer

Slides:



Advertisements
Ähnliche Präsentationen
Blue J.
Advertisements

Objektorientierte Programmierung
Programmierung II Prof. Dr. Michael Löwe
Kapselung , toString , equals , Java API
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.
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
Java: Dynamische Datentypen
Java: Grundlagen der Objektorientierung
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
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.
Listen Prof. Dr. Christian Böhm in Zusammenarbeit mit Gefei Zhang
Objektorientierte Programmierung
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Prof. Dr. Gerhard Schmidt pres. by H.-J. Steffens Software Engineering SS 2009Folie 1 Objektmodellierung Objekte und Klassen Ein Objekt ist ein Exemplar.
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.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lecture 13: (Container-)Datenstrukturen.
1. Verhalten der Objekte: Operationen Werden in den Klassen definiert Werden (i.d.R.) auf einem Objekt aufgerufen Wird das Empfängerobjekt genannt Weitere.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Informatik 1 Letzte Übung.
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 Lecture 10: Das dynamische Modell und mehr zu Referenzen.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung.
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.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 6: Objekterzeugung.
Objektorientiertes Konstruieren
Java Programmierung.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 2: Der Umgang mit Objekten I.
Programmbereich, zu dem eine Deklaration gehört Arten von Gültigkeitsbereichen -Namespace : Deklarationen von Klassen, Interfaces, Structs, Enums, Delegates.
Variablen in Programmiersprachen
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.
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
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
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 7: Referenzen und Zuweisungen.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 9: Abstraktion.
Einführung in die Programmierung mit Java 5. Vorlesung WS 2002/2003 Institut für Kartographie und Geoinformation Prof.-Dr. Lutz Plümer, Dr. Gerhard Gröger,
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.
Objektorientierte (OO) Programmierung
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lecture 10: Das dynamische Modell und mehr zu Referenzen.
„Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen.“
OOP II.
Java-Kurs - 5. Übung Das Paradigma der Objektorientierung (OO)
Einführung in die Programmierung mit Java
Grundkurs Informatik 11-13
Arrays in Java Ein Array ist eine Variable, die aus einer An-zahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
Arrays in Java Ein Array ist eine Variable, die aus einer An-zahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
Algorithmen und Programmierung III
2. Vererbung und Kapselung
«Delegierter» Methoden Schablone Funktionszeiger
Definition Felder Konstruktor Methoden Beispiel
9. Vererbung und Polymorphie
Implementieren von Klassen
Objektorientierte Programmierung
 Präsentation transkript:

Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 9: Abstraktion

Heutige Themen Abstraktion, vor allem funktionale Abstraktion Der Begriff der Routine Das letzte Wort zu Features: alle Featurekategorien Das Prinzip des einheitlichen Zugriffs (Uniform Access Principle) Abstraktionen und Kundenprivilegien Das Geheimnisprinzip

Routine: eine Abstraktion eines Algorithmus Abstrahieren heisst, die Essenz eines Konzeptes zu erfassen und Details und 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

Eine Routine ist eine der zwei Featurekategorien… ... die andere Kategorie sind die Attribute. Wir sind schon zahlreichen Routinen (als Features) begegnet, allerdings ohne den Namen zu kennen

Eine Routine r (arg : TYPE ; ...) -- Kopfkommentar. require Vorbedingung (Boole‘scher Ausdruck) do Rumpf (Instruktionen) ensure Nachbedingung (Boole‘scher Ausdruck) 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_route -- Eine Route bauen und -- damit arbeiten. do create_opera_route Zurich add_route (Opera_route) Opera_route  reverse end create_opera_route -- Route erzeugen und -- Teilstrecken hinzufügen. do -- TODO -- BM, 4 Nov 2014 end Methodologie: “TODO”-Einträge sollten informativ sein

Zwei Arten von Routinen 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

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

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

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

Das Prinzip des einheitlichen Zugriffs: Beispiel saldo = liste_der_einzahlungen.total – liste_der_abhebungen.total liste_der_einzahlungen 200 300 500 1000 (A1) liste_der_abhebungen 800 100 100 liste_der_einzahlungen 200 300 500 1000 (A2) liste_der_abhebungen 800 100 100 saldo 1000 Ein Aufruf wie z.B. ihr_konto.saldo könnte ein Attribut oder eine Funktion benutzen

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

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

Ein Objekt hat eine Schnittstelle set x y set_x set_y

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

Das Geheimnisprinzip set x y set_x set_y

Was Kunden tun können class STATION feature name : STRING -- Name. position : VECTOR -- Position im Bezug auf das Stadtzentrum. set_position (new_x, new_y : REAL) -- Position setzen. do position set (new_x, new_y) end

Was Kunden nicht tun können class STATION feature name : STRING -- Name. position : VECTOR -- Position im Bezug auf das Stadtzentrum. set_position (new_x, new_y : REAL) -- Position setzen. do position x := new_x position y := new_y end NICHT ERLAUBT!

Benutzen sie «setter-Prozeduren» position set (3, position.y ) position set_x (3) position move (0, h)

Abstraktion und Kundenprivilegien Wenn Klasse A ein Attribut x hat, was darf eine Kundenklasse C mit a1.x tun, wobei a1 vom Typ A ist? C A a1 a1 : A x a1 x (C ) (A) 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 )

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 end Kunden können diese wie folgt aufrufen: x.set_temperature (21.5)

Setter-Befehle voll ausnutzen set_temperature (u : REAL) -- Setzt Temperaturwert auf u. require nicht_unter_minimum: u >= -273 nicht_über_maximum: u <= 2000 do temperature := u update_database ensure temperatur_gesetzt: temperature = u end

Abstraktion und Kundenprivilegien C A Wenn Klasse A ein Attribut x hat, was darf eine Kundenklasse C mit a1.x tun, wobei a1 vom Typ A ist? a1 a1 : A x a1 x (C ) (A) 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 )

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)

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

Getter-Funktionen In C++, Java und C# ist die Standardtechnik, um ein privates Attribut private_x zu exportieren, das Exportieren einer entsprechenden Getter-Funktion: x : T do Result := private_x end Eiffel braucht keine Getter-Funktionen: Man kann einfach das Attribut exportieren 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)

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”, womit das gleiche Ziel verfolgt wird Keine Zuweisung, sondern ein Prozedurenaufruf!

Das Geheimnisprinzip (Information Hiding) Status der Aufrufe in einem Kunden mit a1: A: 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.

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

Ein Beispiel für selektiven Export LINKABLE exportiert ihre Features an 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 Haupt- bahnhof first_element active count 3

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

LINKABLE class LINKABLE feature {LINKED_LIST } item: 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 verkettet: right = other end Haldenegg item right

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

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