1 / 27

Objektorientierte Programmierung

Objektorientierte Programmierung. Proseminar Programmiersysteme 31.03.2004 Lehrstuhl für Programmiersysteme Prof. Gert Smolka Vortragender: Philipp Brendel Tutor: Andreas Rossberg. Gliederung. Konzepte objektorientierter Programmierung (OOP) Java Smalltalk Diskussion.

zion
Download Presentation

Objektorientierte Programmierung

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Objektorientierte Programmierung Proseminar Programmiersysteme 31.03.2004 Lehrstuhl für Programmiersysteme Prof. Gert Smolka Vortragender: Philipp Brendel Tutor: Andreas Rossberg

  2. Gliederung • Konzepte objektorientierter Programmierung (OOP) • Java • Smalltalk • Diskussion

  3. 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“

  4. 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

  5. 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

  6. 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

  7. 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

  8. 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

  9. 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

  10. 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.

  11. Konzepte der OOP- Subtyping - • Erweiterung des Typsystems mit Typrelation R um eine Subsumtionsregel, die Subtyping ermöglicht:

  12. Konzepte der OOP- Subtyping - Regeln für Subtyping von Records: Regel für Subtyping von Prozeduren:

  13. 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

  14. Java • Java ist klassenbasiert: Schemata, die die Implementierung von Objekten definieren, heißen Klassen • Klassen definieren Prozeduren (Methoden) und Daten (Felder oder Instanzvariablen)

  15. 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

  16. 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)

  17. 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.

  18. Smalltalk • entwickelt von Xerox PARC in den 1970er Jahren • Designziele: • simples Konzept • Flexibilität • Betriebssystem des DYNABOOK • von „Nichtprogrammierern“ verwendbar

  19. 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

  20. 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

  21. 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

  22. Smalltalk- Codebeispiel - Definition einer Zählerklasse in Smalltalk: Object subclass: #Counter instanceVariableNames: 'n' initialise (n = nil) ifTrue: [n ¬ 0] inc self initialise. n ¬ (n + 1) get self initialise. ­ n

  23. 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.

  24. Diskussion- Interessante Aspekte objektorientierter Programmierung - • Objektmetapher erleichtert Enkapsulierung • Zerlegung von Problemen ist in OOP „natürlich“ • Wiederverwendbarkeit von Code in verschiedenen Szenarien

  25. 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

  26. 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);}

  27. 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

More Related