Serialisierung Proseminar Programmiersysteme Betreuer: Guido Tack Benedict Fehringer.
Objektorientierte Programmierung Proseminar Programmiersysteme 31.03.2004 Lehrstuhl für...
-
Upload
ada-stiegler -
Category
Documents
-
view
103 -
download
1
Transcript of Objektorientierte Programmierung Proseminar Programmiersysteme 31.03.2004 Lehrstuhl für...
![Page 1: Objektorientierte Programmierung Proseminar Programmiersysteme 31.03.2004 Lehrstuhl für Programmiersysteme Prof. Gert Smolka Vortragender: Philipp Brendel.](https://reader035.fdocument.pub/reader035/viewer/2022070310/55204d6449795902118ba67e/html5/thumbnails/1.jpg)
Objektorientierte Programmierung
Proseminar Programmiersysteme 31.03.2004
Lehrstuhl für Programmiersysteme Prof. Gert Smolka
Vortragender: Philipp Brendel
Tutor: Andreas Rossberg
![Page 2: Objektorientierte Programmierung Proseminar Programmiersysteme 31.03.2004 Lehrstuhl für Programmiersysteme Prof. Gert Smolka Vortragender: Philipp Brendel.](https://reader035.fdocument.pub/reader035/viewer/2022070310/55204d6449795902118ba67e/html5/thumbnails/2.jpg)
Gliederung
• Konzepte objektorientierter Programmierung (OOP)
• Java
• Smalltalk
• Diskussion
![Page 3: Objektorientierte Programmierung Proseminar Programmiersysteme 31.03.2004 Lehrstuhl für Programmiersysteme Prof. Gert Smolka Vortragender: Philipp Brendel.](https://reader035.fdocument.pub/reader035/viewer/2022070310/55204d6449795902118ba67e/html5/thumbnails/3.jpg)
Konzepte der OOP- Objektbegriff -
• Erste OOP: Simula 67
– entwickelt am Norwegian Computing Center um 1960
– dient zur Programmierung ereignisbasierter Simulationen
– erfordet Datenstruktur zur Repräsentation unterschiedlicher „Ereignisse“
![Page 4: Objektorientierte Programmierung Proseminar Programmiersysteme 31.03.2004 Lehrstuhl für Programmiersysteme Prof. Gert Smolka Vortragender: Philipp Brendel.](https://reader035.fdocument.pub/reader035/viewer/2022070310/55204d6449795902118ba67e/html5/thumbnails/4.jpg)
Konzepte der OOP- Objektbegriff -
• Ein Objekt vereint Daten und Prozeduren, die auf diesen Daten operieren, in einem Wert
• Eigenschaften, die den meisten klassenbasierten objektorientierten Programmiersprachen gemein sind:– Enkapsulierung– Vererbung– dynamische Bindung– Subtyping
![Page 5: Objektorientierte Programmierung Proseminar Programmiersysteme 31.03.2004 Lehrstuhl für Programmiersysteme Prof. Gert Smolka Vortragender: Philipp Brendel.](https://reader035.fdocument.pub/reader035/viewer/2022070310/55204d6449795902118ba67e/html5/thumbnails/5.jpg)
Konzepte der OOP- Ein Beispiel in ML -
• Implementierung eines Zählers mit Prozeduren zur Abfrage (get) und Erhöhung (inc)
• Realisierung durch ProzedurnewCounter : unit -> counterzur Erzeugung neuer Objekte des Typs counter
![Page 6: Objektorientierte Programmierung Proseminar Programmiersysteme 31.03.2004 Lehrstuhl für Programmiersysteme Prof. Gert Smolka Vortragender: Philipp Brendel.](https://reader035.fdocument.pub/reader035/viewer/2022070310/55204d6449795902118ba67e/html5/thumbnails/6.jpg)
Konzepte der OOP- Ein Beispiel in ML -
type counter = { get:unit -> int, inc:unit -> unit }
fun newCounter () = let
val n = ref 0
in
{
get = fn () => !n,
inc = fn () => n := !n + 1
}
end
> newCounter = fn : unit -> counter
![Page 7: Objektorientierte Programmierung Proseminar Programmiersysteme 31.03.2004 Lehrstuhl für Programmiersysteme Prof. Gert Smolka Vortragender: Philipp Brendel.](https://reader035.fdocument.pub/reader035/viewer/2022070310/55204d6449795902118ba67e/html5/thumbnails/7.jpg)
Konzepte der OOP- Ein Beispiel in ML -
Enkapsulierung:• Verbergung der Referenz n, die den Zählerstand enthält• Zugriff auf Zählerstand nur durch offengelegte
Prozeduren:
- val c = newCounter ()> val c = {...} : counter- val i = #get(c) ()> val i = 0 : int- #inc(c) ()> val it = () : unit- val j = #get(c) ()> val j = 1 : int
![Page 8: Objektorientierte Programmierung Proseminar Programmiersysteme 31.03.2004 Lehrstuhl für Programmiersysteme Prof. Gert Smolka Vortragender: Philipp Brendel.](https://reader035.fdocument.pub/reader035/viewer/2022070310/55204d6449795902118ba67e/html5/thumbnails/8.jpg)
Konzepte der OOP- Ein Beispiel in ML -
• Erweiterung des Zählers um eine Reset-Prozedur:type reset_counter = { get:unit -> int, inc:unit -> unit,
reset:unit -> unit }fun newResetCounter () = let
val n = ref 0 in { get = fn () => !n, inc = fn () => n := !n + 1, reset = fn () => n := 0 } end
![Page 9: Objektorientierte Programmierung Proseminar Programmiersysteme 31.03.2004 Lehrstuhl für Programmiersysteme Prof. Gert Smolka Vortragender: Philipp Brendel.](https://reader035.fdocument.pub/reader035/viewer/2022070310/55204d6449795902118ba67e/html5/thumbnails/9.jpg)
Konzepte der OOP- Ein Beispiel in ML -
• Subtyping: Werte vom Typ reset_counter sind gültige Argumente für Prozeduren, die Werte vom Typ counter erwarten (in idealisiertem ML-Dialekt).
• Dynamische Bindung: Der in einer solchen Prozedur ausgeführte Code hängt von der Implementierung des Arguments ab.
- fun f (c:counter) = #inc(c) () ; #get(c) ()
> val f = fn : counter -> int
- val (c, c‘) = (newCounter (), newResetCounter())
> val c = {...} : counter
val c‘ = {...} : reset_counter
- f c
> val it = 1 : int
- f c‘
> val it = 1 : int
![Page 10: Objektorientierte Programmierung Proseminar Programmiersysteme 31.03.2004 Lehrstuhl für Programmiersysteme Prof. Gert Smolka Vortragender: Philipp Brendel.](https://reader035.fdocument.pub/reader035/viewer/2022070310/55204d6449795902118ba67e/html5/thumbnails/10.jpg)
Konzepte der OOP- Subtyping -
• Ein Typ σ ist ein Subtyp eines Typs τ (σ ≤ τ), wenn in jedem Kontext, der einen Wert des Typs τ erwartet, ein Wert des Typs σ verwendet werden kann
• Subtyping definiert eine Relation ≤ Typ Typ, die folgende Eigenschaften aufweist:– Reflexivität– Transitivität– Antisymmetrie
Die Subtypingrelation ist also eine Teilordnung.
![Page 11: Objektorientierte Programmierung Proseminar Programmiersysteme 31.03.2004 Lehrstuhl für Programmiersysteme Prof. Gert Smolka Vortragender: Philipp Brendel.](https://reader035.fdocument.pub/reader035/viewer/2022070310/55204d6449795902118ba67e/html5/thumbnails/11.jpg)
Konzepte der OOP- Subtyping -
• Erweiterung des Typsystems mit Typrelation R um eine Subsumtionsregel, die Subtyping ermöglicht:
Rt
Rt
),(
),,(
![Page 12: Objektorientierte Programmierung Proseminar Programmiersysteme 31.03.2004 Lehrstuhl für Programmiersysteme Prof. Gert Smolka Vortragender: Philipp Brendel.](https://reader035.fdocument.pub/reader035/viewer/2022070310/55204d6449795902118ba67e/html5/thumbnails/12.jpg)
Konzepte der OOP- Subtyping -
}{}...{ 111 nn }...{}...,{
:},...,1{
11 nn
iini
''
''
Regeln für Subtyping von Records:
Regel für Subtyping von Prozeduren:
![Page 13: Objektorientierte Programmierung Proseminar Programmiersysteme 31.03.2004 Lehrstuhl für Programmiersysteme Prof. Gert Smolka Vortragender: Philipp Brendel.](https://reader035.fdocument.pub/reader035/viewer/2022070310/55204d6449795902118ba67e/html5/thumbnails/13.jpg)
Java
• Entwickelt von SUN Microsystems um 1990
Designziele:– Offenheit: Klassen werden nach Bedarf zur Laufzeit
geladen (dynamisches Linking), Objekttypen können zur Laufzeit im- und exportiert werden
– Portabilität: Programme werden zu Bytecode kompiliert und laufen auf einer virtuellen Maschine
– Sicherheit: Mechanismen zur Verhinderung von Sicherheitsverletzungen sind Bestandteil von Java
![Page 14: Objektorientierte Programmierung Proseminar Programmiersysteme 31.03.2004 Lehrstuhl für Programmiersysteme Prof. Gert Smolka Vortragender: Philipp Brendel.](https://reader035.fdocument.pub/reader035/viewer/2022070310/55204d6449795902118ba67e/html5/thumbnails/14.jpg)
Java
• Java ist klassenbasiert: Schemata, die die Implementierung von Objekten definieren, heißen Klassen
• Klassen definieren Prozeduren (Methoden) und Daten (Felder oder Instanzvariablen)
![Page 15: Objektorientierte Programmierung Proseminar Programmiersysteme 31.03.2004 Lehrstuhl für Programmiersysteme Prof. Gert Smolka Vortragender: Philipp Brendel.](https://reader035.fdocument.pub/reader035/viewer/2022070310/55204d6449795902118ba67e/html5/thumbnails/15.jpg)
Java
• jedes Objekt ist eine Instanz einer Klasse
• instanzerzeugende Prozeduren heißen Konstruktoren
• Enkapsulierung erfolgt durch Zugriffsmodifizierer (public, private, protected und package), die für jede Methode und jedes Feld wählbar sind
![Page 16: Objektorientierte Programmierung Proseminar Programmiersysteme 31.03.2004 Lehrstuhl für Programmiersysteme Prof. Gert Smolka Vortragender: Philipp Brendel.](https://reader035.fdocument.pub/reader035/viewer/2022070310/55204d6449795902118ba67e/html5/thumbnails/16.jpg)
Java
• Vererbung: Jede Klasse erbt von genau von einer Oberklasse, deren Code sie weiterverwenden oder spezialisieren kann
• Die Subtypingrelation ist durch die Vererbungshierarchie gegeben: ein Objekt wird als Instanz aller seiner Oberklassen betrachtet(Nominelles Subtyping im Gegensatz zum strukturellen Subtyping des ML-Beispiels)
![Page 17: Objektorientierte Programmierung Proseminar Programmiersysteme 31.03.2004 Lehrstuhl für Programmiersysteme Prof. Gert Smolka Vortragender: Philipp Brendel.](https://reader035.fdocument.pub/reader035/viewer/2022070310/55204d6449795902118ba67e/html5/thumbnails/17.jpg)
Java- Codebeispiel -
Definition einer Zählerklasse in Java: class Counter extends Object { private int n; public Counter() { n = 0; } public int get() { return n; } public void inc() { n = n + 1; } }Verwendung der Klasse: Counter c = new Counter(); int i = c.get(); c.inc(); int j = c.get();Am Ende des Beispiels hat i den Wert 0 und j den Wert 1.
![Page 18: Objektorientierte Programmierung Proseminar Programmiersysteme 31.03.2004 Lehrstuhl für Programmiersysteme Prof. Gert Smolka Vortragender: Philipp Brendel.](https://reader035.fdocument.pub/reader035/viewer/2022070310/55204d6449795902118ba67e/html5/thumbnails/18.jpg)
Smalltalk
• entwickelt von Xerox PARC in den 1970er Jahren
• Designziele:– simples Konzept– Flexibilität– Betriebssystem des DYNABOOK– von „Nichtprogrammierern“ verwendbar
![Page 19: Objektorientierte Programmierung Proseminar Programmiersysteme 31.03.2004 Lehrstuhl für Programmiersysteme Prof. Gert Smolka Vortragender: Philipp Brendel.](https://reader035.fdocument.pub/reader035/viewer/2022070310/55204d6449795902118ba67e/html5/thumbnails/19.jpg)
Smalltalk
• äußerst einfaches und elegantes Konzept: „Alles ist ein Objekt“
• Programme werden ausgeführt, indem sogenannte Nachrichten an Objekte geschickt werden, die diese behandeln
• äußerst einfache Syntax
![Page 20: Objektorientierte Programmierung Proseminar Programmiersysteme 31.03.2004 Lehrstuhl für Programmiersysteme Prof. Gert Smolka Vortragender: Philipp Brendel.](https://reader035.fdocument.pub/reader035/viewer/2022070310/55204d6449795902118ba67e/html5/thumbnails/20.jpg)
Smalltalk
• Komplexität durch umfangreiche Klassenbibliothek
• Beispiel für konsequente Einhaltung der Objektmetapher:
– Klassen sind Objekte, Instantiierung durch Senden einer Nachricht an Klassenobjekt
– Klassen werden durch Senden einer Nachricht an ein Metaclass-Objekt erzeugt
![Page 21: Objektorientierte Programmierung Proseminar Programmiersysteme 31.03.2004 Lehrstuhl für Programmiersysteme Prof. Gert Smolka Vortragender: Philipp Brendel.](https://reader035.fdocument.pub/reader035/viewer/2022070310/55204d6449795902118ba67e/html5/thumbnails/21.jpg)
Smalltalk
• Enkapsulierung ist fest vorgegeben: Methoden sind öffentlich, Instanzvariablen sind geschützt
• Dynamische Typisierung
• Objekte haben die Möglichkeit, individuell auf unbekannte Nachrichten zu reagieren, indem sie die Nachricht doesNotUnderstand implementieren
![Page 22: Objektorientierte Programmierung Proseminar Programmiersysteme 31.03.2004 Lehrstuhl für Programmiersysteme Prof. Gert Smolka Vortragender: Philipp Brendel.](https://reader035.fdocument.pub/reader035/viewer/2022070310/55204d6449795902118ba67e/html5/thumbnails/22.jpg)
Smalltalk- Codebeispiel -
Definition einer Zählerklasse in Smalltalk:Object subclass: #Counter
instanceVariableNames: 'n'
initialise
(n = nil) ifTrue: [n 0]
incself initialise.
n (n + 1)
getself initialise.
n
![Page 23: Objektorientierte Programmierung Proseminar Programmiersysteme 31.03.2004 Lehrstuhl für Programmiersysteme Prof. Gert Smolka Vortragender: Philipp Brendel.](https://reader035.fdocument.pub/reader035/viewer/2022070310/55204d6449795902118ba67e/html5/thumbnails/23.jpg)
Smalltalk- Codebeispiel -
Verwendung der Klasse:
c Counter new.
i c get.
c inc.
j c get.
Am Ende des Beispiels hat i den Wert 0 und j den Wert 1.
![Page 24: Objektorientierte Programmierung Proseminar Programmiersysteme 31.03.2004 Lehrstuhl für Programmiersysteme Prof. Gert Smolka Vortragender: Philipp Brendel.](https://reader035.fdocument.pub/reader035/viewer/2022070310/55204d6449795902118ba67e/html5/thumbnails/24.jpg)
Diskussion- Interessante Aspekte objektorientierter Programmierung -
• Objektmetapher erleichtert Enkapsulierung
• Zerlegung von Problemen ist in OOP „natürlich“
• Wiederverwendbarkeit von Code in verschiedenen
Szenarien
![Page 25: Objektorientierte Programmierung Proseminar Programmiersysteme 31.03.2004 Lehrstuhl für Programmiersysteme Prof. Gert Smolka Vortragender: Philipp Brendel.](https://reader035.fdocument.pub/reader035/viewer/2022070310/55204d6449795902118ba67e/html5/thumbnails/25.jpg)
Diskussion- Probleme der OOP -
• Mehrfachvererbung:– Was geschieht, wenn dieselbe Methode von mehreren
Oberklassen geerbt werden soll?
– Wie geht man vor, wenn zweimal von derselben Klasse geerbt wird?
• „Inheritance is not subtyping“: Subklassen sind oft keine Subtypen, Beispiel:– Klasse Point2D besitzt Methodeboolean equal (Point2D q)
– Klasse Point3D erbt von Point2D und implementiertboolean equal (Point3D q)
Point3D ist kein Subtyp von Point2D
![Page 26: Objektorientierte Programmierung Proseminar Programmiersysteme 31.03.2004 Lehrstuhl für Programmiersysteme Prof. Gert Smolka Vortragender: Philipp Brendel.](https://reader035.fdocument.pub/reader035/viewer/2022070310/55204d6449795902118ba67e/html5/thumbnails/26.jpg)
Diskussion
• Binary-Methods-Problem: Im Gegensatz zu prozeduraler Programmierung fällt der Objektzugriff bei OOP einseitig aus:
Point.add(Point q){ return new Point (this.x + q.x, this.y + q.y);}
![Page 27: Objektorientierte Programmierung Proseminar Programmiersysteme 31.03.2004 Lehrstuhl für Programmiersysteme Prof. Gert Smolka Vortragender: Philipp Brendel.](https://reader035.fdocument.pub/reader035/viewer/2022070310/55204d6449795902118ba67e/html5/thumbnails/27.jpg)
Literatur
• John C. Mitchell: Concepts in Programming Languages. Cambridge University Press 2003
• Kim Bruce, Luca Cardelli, Giuseppe Castagna, Hopkins Objects Group, Gary T. Leavens, Benjamin Pierce: On Binary Methods, Theory And Practice of Object Systems.
• Richard P. Gabriel, Objects Have Failed, OOPSLA Debate 2002
• William Cook, Walter Hill, Peter Canning, Inheritance Is Not Subtyping. Principles of Programming Languages (POPL) 1990