Objektorientierte Programmierung

Slides:



Advertisements
Ähnliche Präsentationen
C Sharp (C#) Martin Saternus Senior Student Partner
Advertisements

Objektorientierte Programmierung
der Universität Oldenburg
Objektorientierte Programmierung
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Kritische Betrachtung
der Universität Oldenburg
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Java: Grundlagen der Sprache
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 5 Polymorphismus Sommersemester 2003 Lars Bernard.
Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum Sitzung 5 Sitzung 5: Polymorphismus.
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Programmieren mit JAVA
Programmieren mit JAVA
Vererbung Spezialisierung von Klassen in JAVA möglich durch
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.
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
Zhaohan Chen SS061 SIMULA-an Algol Based Simulation Language geschrieben von: Zhaohan Chen Betreuer: Prof. Dr. Rainer Manthey.
Die Skriptsprache Perl (7)
Die Skriptsprache Perl (8) Wolfgang Friebel DESY Zeuthen.
C++ Vererbung und Polymorphie
DVG Einführung in Java1 Einführung in JAVA.
07-GraphischeObjekte Graphische Objekte in EMMA301Paint.
DVG Klassen und Objekte
© 2002 Dr. Cavelius - Ley - Pohlig - Taulien Programmierung im Netz und Internet: Einführung in die Programmiersprache Java Teil I 1 Klassen Objekte von.
Wizards & Builders GmbH Einführung in die objektorientierte Programmierung Norbert Abb.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
René Castillo Björn Bollensdorff Analysetechniken in der Softwaretechnik SS 2007 Featherweight Java Inside every large language is a small language struggling.
Einführung in die Programmierung Wintersemester 2013/14 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung
Objektorientiertes Programmieren
CuP - Java Elfte Vorlesung Montag, 11. November 2002.
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 2011/12 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
ObjektOrientiertes Programmieren
Objektorientierte Programmierung
EPROG Tutorium #4 Philipp Effenberger
EPROG Tutorium #6 Philipp Effenberger
EPROG Tutorium #5 Philipp Effenberger
Wilfried Imrich CuP - Java Erste Vorlesung Entspricht ungefähr Kapitel 1.1 des Skriptums Wilfried Imrich Montanuniversität Leoben Freitag, 4. Oktober 2002.
Objektorientierung.
Polymorphie (Vielgestaltigkeit). Wenn eine Methode, wie z.B. print für verschiedene Programmteile steht (und z.B. einmal Objekte verschiedener Klassen.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold.
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Java-Kurs Übung Besprechung der Hausaufgabe Vererbung
Java-Kurs Übung Besprechung der Hausaufgabe
Java-Kurs - 5. Übung Besprechung der Übungsaufgabe Klassen und Objekte
Java-Kurs Übung Besprechung der Hausaufgabe Vererbung
Einführung in die Programmierung mit Java
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 5. Vorlesung WS 2002/2003.
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.
Vortrag Einführung in AspectJ. Gliederung 1 Einleitung 2 Querschnittsfunktionalitäten in AspectJ 2.1 Sprachelemente 3 Beispiel 4 Join Point Modell 5 Weaving.
Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS Auflösung von Konflikten bei Mehrfachvererbung Umbenennung mehrdeutiger Methoden.
1 Grundsätze objektorientierter Programmierung. Dr. Wolfram Amme, Grundsätze objektorientierter Programmierung, Informatik II, FSU Jena, SS Objektorientierte.
1 Eine Einführung in die objektorientierte Programmierung.
Vererbung in Java. public abstract class Form { protected int breite; protected int hoehe; protected String farbe; /** * Erzeuge eine Form der Breite.
© Tenbusch Oberstufenzentrum Informations- und Medizintechnik Objektorientierte Programmierung mit Java.
„Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen.“
OOP II.
9. Vererbung und Polymorphie
Implementieren von Klassen
Grundkurs Informatik 11-13
 Präsentation transkript:

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

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“

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

Konzepte der OOP - Ein Beispiel in ML - Implementierung eines Zählers mit Prozeduren zur Abfrage (get) und Erhöhung (inc) Realisierung durch Prozedur newCounter : unit -> counter zur Erzeugung neuer Objekte des Typs counter

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

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

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

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‘

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.

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

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

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

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

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

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)

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.

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

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

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

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

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 ­ n

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.

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

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 Methode boolean equal (Point2D q) Klasse Point3D erbt von Point2D und implementiert boolean equal (Point3D q) Þ Point3D ist kein Subtyp von Point2D

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

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