Einführung in das objektorientierte Programmieren

227
Objektorientiertes Progra mmieren - Nils Schmeißer 1 Abteilung Kommunikation und Datenverarbeit Abteilung Kommunikation und Datenverarbeit Einführung in das objektorientierte Programmieren Nils Schmeißer Nils Schmeißer Abteilung Kommunikation und Abteilung Kommunikation und Datenverarbeitung Datenverarbeitung Forschungszentrum Rossendorf e.V. Forschungszentrum Rossendorf e.V.

description

Einführung in das objektorientierte Programmieren. Nils Schmeißer Abteilung Kommunikation und Datenverarbeitung Forschungszentrum Rossendorf e.V. Inhalt. Programmiersprachen Der objektorientierte Programmierstil Begriffsbestimmung, Theorie, Anwendung OO Sprachen - PowerPoint PPT Presentation

Transcript of Einführung in das objektorientierte Programmieren

Page 1: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

1

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Einführung in das objektorientierte Programmieren

Nils SchmeißerNils Schmeißer

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Forschungszentrum Rossendorf e.V.Forschungszentrum Rossendorf e.V.

Page 2: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

2

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Inhalt ProgrammiersprachenProgrammiersprachen Der objektorientierte ProgrammierstilDer objektorientierte Programmierstil

– Begriffsbestimmung, Theorie, AnwendungBegriffsbestimmung, Theorie, Anwendung OO SprachenOO Sprachen

C++ und Standardbibliotheken (STL, MFC)C++ und Standardbibliotheken (STL, MFC) Turbo-PASCAL, Java, Smalltalk, Eiffel, OberonTurbo-PASCAL, Java, Smalltalk, Eiffel, Oberon

andere OO Systemeandere OO Systeme

Page 3: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

3

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Literatur– „„A Theory of Objects“A Theory of Objects“; M. Abadi, L. Cardelli; M. Abadi, L. Cardelli– „„Eiffel: The Language“Eiffel: The Language“; B. Meyer; B. Meyer– „„Programming in Oberon: Steps beyond Programming in Oberon: Steps beyond

Pascal and Modula“Pascal and Modula“; M. Reiser, N. Wirth; M. Reiser, N. Wirth– ““The C++ Programming Language”The C++ Programming Language”;;

B. StroustrupB. Stroustrup– „„Java - Die Programmiersprache“Java - Die Programmiersprache“;;

K. Arnold, J. GoslingK. Arnold, J. Gosling– „„Objektorientierte Datenbanken“Objektorientierte Datenbanken“; A. Heuer; A. Heuer

Page 4: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

4

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Andere Quellen

Unterlagen zum OOP/C++-Kurs:Unterlagen zum OOP/C++-Kurs:http://www.fz-rossendorf.de/FVTK/MITARB/schmei/doc/CPP-Kurshttp://www.fz-rossendorf.de/FVTK/MITARB/schmei/doc/CPP-Kurs

Unterlagen zum C-Kurs:Unterlagen zum C-Kurs:http://www.fz-rossendorf.de/FVTK/MITARB/schmei/doc/C-Kurshttp://www.fz-rossendorf.de/FVTK/MITARB/schmei/doc/C-Kurs

Page 5: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

5

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Geschichte der Programmierspr.

1955

1960

1970

1980

1985

1990

Assembler

FORTRAN

Algol68

Modula

Turbo-Pascal 5.5

Oberon

Ada

Ada95

Pascal

BC PL

C

C++

Simula

Java

Sketchpad

Smalltalk

Smalltalk 80

Eiffel

Page 6: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

6

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Programmiersprachen imperative Sprachenimperative Sprachen

Ada, ALGOL, BASIC, C, COBOL, FORTRAN, Modula-2, Ada, ALGOL, BASIC, C, COBOL, FORTRAN, Modula-2, PL/1, Pascal, Simula, SnobolPL/1, Pascal, Simula, Snobol

funktionale und applikative Sprachenfunktionale und applikative Sprachen Lisp, LogoLisp, Logo

prädikative Sprachenprädikative Sprachen PrologProlog

objektorientierte Sprachenobjektorientierte Sprachen Smalltalk, Eiffel, Oberon, Java, Turbo-Pascal, C++, Smalltalk, Eiffel, Oberon, Java, Turbo-Pascal, C++,

Fortran2000Fortran2000

Page 7: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

7

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

imperative Sprachen 1 ein Programm besteht aus einer Menge ein Programm besteht aus einer Menge

von von BefehlenBefehlen BASIC:BASIC: 1010 let n=...let n=...

2020 gosub 50gosub 503030 nf=nfaknf=nfak4040 endend5050 let nfak=1let nfak=16060 for i=1 to nfor i=1 to n7070 nfak=nfak*i nfak=nfak*i8080 next inext i9090 returnreturn

Page 8: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

8

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

imperative Sprachen 2

prozedurale Sprachen gruppieren prozedurale Sprachen gruppieren Befehle in UnterprogrammenBefehle in Unterprogrammen

C:C: int fac(int n) {int fac(int n) { if (n==0) return 1; if (n==0) return 1; return n*fac(n-1); return n*fac(n-1);}}......nf=fac(n);nf=fac(n);

Page 9: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

9

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

funktionale und applikative Sp. ein Programm besteht aus einer Menge von ein Programm besteht aus einer Menge von

Funktionen und deren AnwendungFunktionen und deren Anwendung Lisp:Lisp: (fac (n)(fac (n)

(cond (cond ((equal n 0) 1) ((equal n 0) 1)

(times n (fac (times n (fac (difference n 1) (difference n 1)

) ) ) ) ) )))......(fac n)(fac n)

Page 10: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

10

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

prädikative Sprachen

in prädikativen Sprachen wird eine in prädikativen Sprachen wird eine Menge von Fakten und Regeln Menge von Fakten und Regeln vorgegebenvorgegeben

Prolog:Prolog: fac(0,1).fac(0,1).fac(n,f) -> fac(n-fac(n,f) -> fac(n-

1,f/n).1,f/n).

Page 11: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

11

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

objektorientierte Sprachen 1

alle zum Lösen eines Problems nötigen alle zum Lösen eines Problems nötigen Informationen werden als Informationen werden als ObjekteObjekte aufgefaßtaufgefaßt

Objekte empfangen und versenden Objekte empfangen und versenden NachrichtenNachrichten

Integer a

value

*

Integer b

value

*

Integer a,b; a * bInteger a,b; a * b

Page 12: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

12

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

objektorientierte Sprachen 2 Smalltalk:Smalltalk: Object subclass: #IntegerObject subclass: #Integer

instanceVariableNames: ’value’instanceVariableNames: ’value’facfac nfak:=Integer new. nfak:=Integer new. [0=value] [0=value] ifTrue: [ nfak set: 1. ] ifTrue: [ nfak set: 1. ] ifFalse: [ nfak set: ifFalse: [ nfak set: (((self minus: 1) fac: ) (((self minus: 1) fac: ) times: value ). ] times: value ). ] ^nfak. ^nfak.!!

n:=(Integer new) set: ...n:=(Integer new) set: ...n fac.n fac.

Page 13: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

13

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Der objektorientierte P.-Stil

Basiskonzept (abstrakter Datentyp)Basiskonzept (abstrakter Datentyp) BegriffsbestimmungBegriffsbestimmung

Objekt, Klasse, Instanz, Attribut, MethodeObjekt, Klasse, Instanz, Attribut, Methode VererbungVererbung PolymorphiePolymorphie

OOD (object oriented development)OOD (object oriented development) Kriterien für OO SprachenKriterien für OO Sprachen

Page 14: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

14

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

abstrakter Datentyp 1

das Basiskonzept der objektorientierten das Basiskonzept der objektorientierten Programmierung bildet der abstrakte Programmierung bildet der abstrakte Datentyp (ADT)Datentyp (ADT)

ein ADT wird definiert durch:ein ADT wird definiert durch: seinen Wertebereich (Sorte)seinen Wertebereich (Sorte) die, über dem Wertebereich erklärten die, über dem Wertebereich erklärten

OperationenOperationen eine Menge von Vorbedingungeneine Menge von Vorbedingungen eine Menge von Axiomeneine Menge von Axiomen

Page 15: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

15

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

abstrakter Datentyp 2

eine Sorte kann formal als Struktur eine Sorte kann formal als Struktur dargestelltdargestellt

Beispiel:Beispiel: koordkoord==sortsort IntegerInteger x; x; IntegerInteger y; y;endend;;

bzw.bzw.koord=x:Integer+y:Integerkoord=x:Integer+y:Integer

KomponentenKomponenten

Page 16: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

16

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

abstrakter Datentyp 3

einem ADT werden Operationen (die einem ADT werden Operationen (die nicht notwendig nur Operanden vom nicht notwendig nur Operanden vom Sortentyp enthalten) zugeordnetSortentyp enthalten) zugeordnet

Beispiel:Beispiel: vec=vec=ADTADT(koord)(koord) SetXSetX:(vec,Integer);:(vec,Integer); ++:(vec,vec)->vec;:(vec,vec)->vec; normnorm:(vec)->Integer;:(vec)->Integer;endend;;

Page 17: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

17

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

abstrakter Datentyp 4

zur vollständigen Beschreibung eines zur vollständigen Beschreibung eines ADT’s gehören zusätzlichADT’s gehören zusätzlich

die Vorbedingungendie Vorbedingungen

prepre: x=0; y=0;: x=0; y=0;

eine Menge von Axiomen (Spezifikationen), dieeine Menge von Axiomen (Spezifikationen), diedas Verhalten der Operationen festlegendas Verhalten der Operationen festlegen

+ (vec a,vec b) =(x=a.x+b.x,y=a.y+b.y)+ (vec a,vec b) =(x=a.x+b.x,y=a.y+b.y)

Page 18: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

18

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

abstrakter Datentyp 5 Beschreibung nach Meyer:Beschreibung nach Meyer:

TYPETYPE vec[koord]vec[koord]FUNCTIONSFUNCTIONS SetXSetX:: vec[koord] x Integer->vec[koord]vec[koord] x Integer->vec[koord]

++:: vec[koord] x vec[koord] -> vec[koord]vec[koord] x vec[koord] -> vec[koord]normnorm:: vec[koord] -> Integervec[koord] -> Integer

CONDITIONSCONDITIONSAXIOMSAXIOMS FOR ALL FOR ALL i:Integer,a,b,c:vec[koord]:i:Integer,a,b,c:vec[koord]:

SetXSetX(a,i) = a.x := i(a,i) = a.x := i++(a,b) = c: ( c.x:=a.x+b.x, (a,b) = c: ( c.x:=a.x+b.x, c.y:=a.y+b.y ) c.y:=a.y+b.y )normnorm(a) = max(a.x , a.y)(a) = max(a.x , a.y)

Page 19: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

19

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

abstrakter Datentyp 6

abstrakte Datentypen werden als abstrakte Datentypen werden als KlassenKlassen implementiert implementiert

Beispiel:Beispiel:classclass vec vec isis Integer x,y; Integer x,y; vec vec ++ (vec a,vec b) (vec a,vec b) isis return vec(a.x+b.x,a.y+b.y); return vec(a.x+b.x,a.y+b.y); endend;;endend;;

Page 20: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

20

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Begriffsbestimmung 1

ObjektObjekt: eigenständiges Individuum mit : eigenständiges Individuum mit

– charakteristischen Eigenschaftencharakteristischen Eigenschaften– einem inneren Zustandeinem inneren Zustand– AttributenAttributen– MethodenMethoden

Page 21: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

21

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Beispiel „„Kreis“:Kreis“:

– charakteristische Eigenschaften:charakteristische Eigenschaften: alle Punkte des Kreises habe den gleichen alle Punkte des Kreises habe den gleichen

Abstand zum MittelpunktAbstand zum Mittelpunkt

– innerer Zustand:innerer Zustand: sichtbar/unsichtbarsichtbar/unsichtbar

– Attribute:Attribute: Position, Radius, FarbePosition, Radius, Farbe

– MethodenMethoden Darstellen (Zeichnen), VerschiebenDarstellen (Zeichnen), Verschieben

Page 22: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

22

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Begriffsbestimmung 2

KlasseKlasse::ist die Vereinigung und formale ist die Vereinigung und formale Beschreibung aller Objekte mit gleichen Beschreibung aller Objekte mit gleichen EigenschaftenEigenschaften– Klassen können als Implementation Klassen können als Implementation

abstrakter Datentypen aufgefaßt werdenabstrakter Datentypen aufgefaßt werden– Klassen werden auch als “Objektfabriken” Klassen werden auch als “Objektfabriken”

bezeichnetbezeichnet

Page 23: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

23

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Beispiel

class Kreisklasse is Punkt Mittelpunkt; Real Radius; Color Farbe; Kreis New(Punkt M0,Real R0,Color C0); Zeichnen(); Verschieben(Punkt NeuerMittelpunkt);end;

Page 24: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

24

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Begriffsbestimmung 3

eine eine InstanzInstanz ist die konkrete ist die konkrete Realisierung eines Objektes einer Realisierung eines Objektes einer KlasseKlasse– eine Instanz ist genau ein Objekteine Instanz ist genau ein Objekt– Instanzen haben einen Gültigkeitsbereich Instanzen haben einen Gültigkeitsbereich

(Lebensbereich)(Lebensbereich)– Instanzen werden durch einen Instanzen werden durch einen KonstruktorKonstruktor

erzeugt und einen erzeugt und einen DestruktorDestruktor zerstört zerstört

Page 25: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

25

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Beispiel

obwohl k1 und k2 die gleichen obwohl k1 und k2 die gleichen Attributwerte haben, sind es Attributwerte haben, sind es voneinander verschiedene Objektevoneinander verschiedene Objekte

programprogram p1 p1 isis Kreis Kreis k3k3==KreisklasseKreisklasse::New::New((4,5),3,Grün);((4,5),3,Grün); subprogram ps1 issubprogram ps1 is Kreis k1=Kreisklasse::New((1,2),3,Rot);Kreis k1=Kreisklasse::New((1,2),3,Rot); Kreis k2=Kreisklasse::New((1,2),3,Rot);Kreis k2=Kreisklasse::New((1,2),3,Rot); ...... end;end;......endend;;

Page 26: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

26

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Begriffsbestimmung 4

AttributeAttribute sind die Variablen, die den sind die Variablen, die den inneren Zustand eines Objektes inneren Zustand eines Objektes beschreibenbeschreiben

Attribute korrespondieren in ihrer Attribute korrespondieren in ihrer Bedeutung mit den Sorten des Bedeutung mit den Sorten des abstrakten Datentypsabstrakten Datentyps

die zugehörige Klasse heißt die zugehörige Klasse heißt KomponentenklasseKomponentenklasse

Page 27: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

27

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Beispiel

die Klasse „Punktklasse“ ist eine die Klasse „Punktklasse“ ist eine Komponentenklasse von „Kreisklasse“Komponentenklasse von „Kreisklasse“

classclass KreisklasseKreisklasse isis PunktPunkt Mittelpunkt; Mittelpunkt; Real Radius;Real Radius; ......endend;;

classclass PunktklassePunktklasse isis ......endend;;

Page 28: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

28

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Begriffsbestimmung 5 MethodenMethoden sind die über einer Klasse sind die über einer Klasse

erklärten und ihr zugeordneten erklärten und ihr zugeordneten OperationenOperationen

zwei spezielle Methodenzwei spezielle Methoden– Konstruktor: generiert eine InstanzKonstruktor: generiert eine Instanz– Destruktor: zerstört eine InstanzDestruktor: zerstört eine Instanz

ein Methodenaufruf ist Teil einer ein Methodenaufruf ist Teil einer NachrichtNachricht, die an ein Objekt versandt , die an ein Objekt versandt wirdwird

Page 29: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

29

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Beispiel

die gesamte, an k3 versendete die gesamte, an k3 versendete Nachricht lautet:Nachricht lautet:

k3: „Verschiebe (dich) nach (7,8)“k3: „Verschiebe (dich) nach (7,8)“

program p1 isprogram p1 is Kreis k3=Kreisklasse::New((4,5),3,Grün);Kreis k3=Kreisklasse::New((4,5),3,Grün); ...... k3 k3 .. VerschiebenVerschieben(((7,8)(7,8)) ;) ;end;end;

Page 30: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

30

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Vererbung 1

VererbungVererbung ist die Weitergabe von ist die Weitergabe von Eigenschaften (Attributen und Eigenschaften (Attributen und Methoden) einer Methoden) einer BasisklasseBasisklasse an eine an eine abgeleitete Klasseabgeleitete Klasse

die Weitergabe von Werten ist ebenfalls die Weitergabe von Werten ist ebenfalls möglich (möglich (KlonenKlonen))

Page 31: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

31

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Vererbung 2

Vererbung gibt es in verschiedenen Vererbung gibt es in verschiedenen Ausprägungen:Ausprägungen:

SpezialisierungSpezialisierung: Objektmenge der Unterklasse : Objektmenge der Unterklasse ist Teilmenge der Objektmenge der Oberklasseist Teilmenge der Objektmenge der Oberklasse

Is-a HierarchieIs-a Hierarchie: wie Spezialisierung: wie Spezialisierung TyphierarchieTyphierarchie: jedes Objekt des Untertyps : jedes Objekt des Untertyps

verhält sich wie ein Objekt des Obertypsverhält sich wie ein Objekt des Obertyps KlassenhierarchieKlassenhierarchie: Vererbung der : Vererbung der

ImplementationImplementation

Page 32: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

32

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Beispielclassclass EllipsenklasseEllipsenklasse isis Punkt Mittelpunkt;Punkt Mittelpunkt; Real a,b;Real a,b; Ellipse New(Punkt M0,Real a0,Real b0);Ellipse New(Punkt M0,Real a0,Real b0); Verschieben(Punkt NeuerMittelpunkt);Verschieben(Punkt NeuerMittelpunkt);endend;;

subclasssubclass KreisklasseKreisklasse ofof EllipsenklasseEllipsenklasse isis Punkt Mittelpunkt;Punkt Mittelpunkt; Real a,b; // a=bReal a,b; // a=b Kreis New(Punkt M0,Real R0);Kreis New(Punkt M0,Real R0); Verschieben(Punkt NeuerMittelpunkt);Verschieben(Punkt NeuerMittelpunkt);endend;;

Page 33: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

33

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Vererbung 3

es wird ebenfalls zwischen einfacher es wird ebenfalls zwischen einfacher und mehrfacher Vererbung und mehrfacher Vererbung unterschiedenunterschieden

x x x

x x

BasisklasseBasisklasse Basisklasse2Basisklasse2Basisklasse1Basisklasse1

Page 34: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

34

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Vererbung 4 speziell auf die Weitergabe von speziell auf die Weitergabe von

Methoden bezogen istMethoden bezogen ist– ErsetzungErsetzung: das vollständige Überschreiben : das vollständige Überschreiben

einer Methodeeiner Methode– VerfeinerungVerfeinerung: die ererbte Methode wird : die ererbte Methode wird

innerhalb der neuen Methode gerufeninnerhalb der neuen Methode gerufen– DelegationDelegation: die Ausführung einer Methode : die Ausführung einer Methode

wird an ein Objekt der Oberklasse (Prototyp) wird an ein Objekt der Oberklasse (Prototyp) weitergereicht weitergereicht

Page 35: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

35

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Beispiel Ellipsenklasse::Skalieren(Real fa,Real fb)isEllipsenklasse::Skalieren(Real fa,Real fb)is

a=a*fa; b=b*fb; end; a=a*fa; b=b*fb; end; ErsetzungErsetzung::

Kreisklasse::Skalieren(Real f) isKreisklasse::Skalieren(Real f) is a=a*f; b=b*f; end; a=a*f; b=b*f; end;

VerfeinerungVerfeinerung::Kreisklasse::Skalieren(Real f) isKreisklasse::Skalieren(Real f) is Ellipsenklasse::(f,1.0); b=b*f; Ellipsenklasse::(f,1.0); b=b*f;end;end;

DelegationDelegation::Kreisklasse::Skalieren(Real f) isKreisklasse::Skalieren(Real f) is Ellipsenklasse::(f,f); Ellipsenklasse::(f,f);end;end;

Page 36: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

36

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Vererbung 5

manchmal kann es sinnvoll sein, die manchmal kann es sinnvoll sein, die Erzeugung von Instanzen bestimmter Erzeugung von Instanzen bestimmter Klassen zu verbieten (Festlegung eines Klassen zu verbieten (Festlegung eines Konzeptes); solche Klassen werden Konzeptes); solche Klassen werden abstrakte (Basis-)Klassenabstrakte (Basis-)Klassen genannt genannt

Page 37: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

37

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Beziehungen zwischen Klassen 1

erbt eine Klasse B von einer Klasse A, erbt eine Klasse B von einer Klasse A, so heißt A so heißt A BasisklasseBasisklasse oder oder SuperklasseSuperklasse von B, B heißt von B, B heißt SubklasseSubklasse

B genügt der B genügt der is-a Relationis-a Relation (B is-a A) (B is-a A)

AABB

Page 38: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

38

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Beziehungen zwischen Klassen 2

besitzt eine Klasse A ein Attribut vom besitzt eine Klasse A ein Attribut vom Typ der Klasse C, so heißt C Typ der Klasse C, so heißt C Komponentenklasse von AKomponentenklasse von A

A genügt der A genügt der has-a Relationhas-a Relation (A has-a C) (A has-a C)

CCAA

Page 39: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

39

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Beziehungen zwischen Klassen 3

benutzt eine Klasse A eine Instanz der benutzt eine Klasse A eine Instanz der Klasse D, so genügt A derKlasse D, so genügt A deruse-a Relationuse-a Relation (A use-a D) (A use-a D)

die Relationen sind vererbbar, alsodie Relationen sind vererbbar, alsoB has-a C und B use-a DB has-a C und B use-a D

DDAA

Page 40: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

40

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Polymorphie 1

die Methode die Methode SwitchUp() kann in vielen kann in vielen verschiedenen Formen auftreten, sie heißt verschiedenen Formen auftreten, sie heißt polymorphpolymorph

classclass Gear Gear isis SwitchUpSwitchUp() () isis ... ... endend;;endend;;subclasssubclass ManualGear ManualGear ofof Gear Gear isis SwitchUpSwitchUp() () isis ... ... endend;;endend;;subclasssubclass AutomaticGear AutomaticGear ofof Gear Gear isis SwitchUpSwitchUp() () isis ... ... endend;;endend;;

Page 41: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

41

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Polymorphie 2

neben dem neben dem universellen universellen PolymorphismusPolymorphismus (vorhergehende Folie) (vorhergehende Folie) gibt es den gibt es den ad-hoc Polymorphismusad-hoc Polymorphismus

Integer Trunc(Integer x);Integer Trunc(Integer x);Integer Trunc(Real x);Integer Trunc(Real x);

ad-hoc P. basiert auf dem Konzept der ad-hoc P. basiert auf dem Konzept der impliziten Typkonversionimpliziten Typkonversion

Page 42: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

42

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Polymorphie 3

das Konzept der Polymorphie erlaubt das Konzept der Polymorphie erlaubt somit unterschiedliche Sichtweisen auf somit unterschiedliche Sichtweisen auf ObjekteObjekte

Beispiel:Beispiel:– eine Instanz der Klasse eine Instanz der Klasse ManualGearManualGear ist ist

ebenfalls mit den Eigenschaften der Klasse ebenfalls mit den Eigenschaften der Klasse GearGear ausgestattet, kann also wie eine ausgestattet, kann also wie eine solche agierensolche agieren

Page 43: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

43

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Polymorphie 4

eine Variable vom Typ einer eine Variable vom Typ einer Superklasse kann somit auch eine Superklasse kann somit auch eine Instanz vom Typ einer Subklasse Instanz vom Typ einer Subklasse aufnehmenaufnehmen

Beispiel:Beispiel: Gear g;Gear g;g=g=newnew ManualGear; ManualGear;

Page 44: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

44

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Bindung 1

der Bindungsmechanismus beschreibt, der Bindungsmechanismus beschreibt, wie eine Methode einer Klasse wie eine Methode einer Klasse aufgerufen wirdaufgerufen wird

verschiedene Bindungskonzepte verschiedene Bindungskonzepte erlauben eine effiziente Wiederver-erlauben eine effiziente Wiederver-wendung bzw. gemeinsame Nutzung wendung bzw. gemeinsame Nutzung von Code auf sehr elegante Art und von Code auf sehr elegante Art und WeiseWeise

Page 45: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

45

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Bindung 2 statische Bindungstatische Bindung::

– während der Übersetzung wird die während der Übersetzung wird die Klassenzugehörigkeit der Instanz bestimmt Klassenzugehörigkeit der Instanz bestimmt und daraus die zu rufende Methode ermitteltund daraus die zu rufende Methode ermittelt

Beispiel:Beispiel: ManualGearManualGear g= g=newnew ManualGear; ManualGear;g.SwitchUp();g.SwitchUp();

ruft die Methode der Klasse ruft die Methode der Klasse ManualGearManualGearGearGear g= g=newnew ManualGear; ManualGear;g.SwitchUp();g.SwitchUp();

die der Klasse die der Klasse GearGear

Page 46: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

46

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Bindung 3 dynamische (späte) Bindungdynamische (späte) Bindung::

– die Klassenzugehörigkeit der Instanz wird die Klassenzugehörigkeit der Instanz wird erst zur Laufzeit bestimmterst zur Laufzeit bestimmt

Beispiel:Beispiel: ManualGearManualGear g= g=newnew ManualGear; ManualGear;g.SwitchUp();g.SwitchUp();

ruft die Methode der Klasse ruft die Methode der Klasse ManualGearManualGearGearGear g= g=newnew ManualGear; ManualGear;g.SwitchUp();g.SwitchUp();

ruft ebenfallsruft ebenfalls die der Klasse Manualdie der Klasse ManualGearGear

Page 47: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

47

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Bindung 4 späte Bindung wird nicht von allen späte Bindung wird nicht von allen

Sprachen unterstütztSprachen unterstützt standardmäßig wird eine Methode standardmäßig wird eine Methode

statisch gebundenstatisch gebunden dynamisch zu bindende Methoden dynamisch zu bindende Methoden

werden durch ein spezielles werden durch ein spezielles Schlüsselwort (meist “virtual”) Schlüsselwort (meist “virtual”) gekennzeichnetgekennzeichnet

“virtuelle Methoden”“virtuelle Methoden”

Page 48: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

48

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Bindung 5classclass GearGear isis Init();Init(); virtualvirtual SwitchUp() SwitchUp() isis ... ... endend;;endend;;subclasssubclass ManualGearManualGear ofof GearGear isis Init();Init(); virtualvirtual SwitchUp() SwitchUp() isis ... ... endend;;endend;;

GearGear g = g = newnew ManualGearManualGear;;

g.Init();g.Init(); // Gear::Init // Gear::Initg.SwitchUp(); // ManualGear::SwitchUpg.SwitchUp(); // ManualGear::SwitchUp

Page 49: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

49

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Beispiel 1

ein Verfahren zum Lösen von ein Verfahren zum Lösen von GleichungssystemenGleichungssystemen

A x = b A x = b

wird implementiertwird implementiert ist A dünn besetzt, so werden die nicht-0 ist A dünn besetzt, so werden die nicht-0

Elemente normalerweise als Liste abgelegt, um Elemente normalerweise als Liste abgelegt, um Speicherplatz zu sparenSpeicherplatz zu sparen der Löser müßte neu implementiert werden der Löser müßte neu implementiert werden

Page 50: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

50

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Beispiel 2 die Neuimplementation ist nicht nötig, die Neuimplementation ist nicht nötig,

wenn der Löser überwenn der Löser überclassclass MatrixMatrix isis int n,m; int n,m; Datatype data[maxz][maxs]; Datatype data[maxz][maxs]; virtualvirtual real real GetGet(int z,int s);(int z,int s); virtualvirtual void void SetSet(int z,int s,real v); (int z,int s,real v); endend;;

erklärt wirderklärt wirdMatrix Matrix SolverSolver(Matrix A,Matrix b);(Matrix A,Matrix b);

Page 51: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

51

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Beispiel 3Matrix Matrix SolverSolver(Matrix A,Matrix b) (Matrix A,Matrix b) isis int i,j,k;int i,j,k; real f;real f; Matrix x = new Matrix;Matrix x = new Matrix; for k = 0 to for k = 0 to A.nA.n do begin do begin if abs(A.Get(k,k))<eps then swap();if abs(A.Get(k,k))<eps then swap(); for i = k+1 to A.n do beginfor i = k+1 to A.n do begin f=A.Get(i,k)/A.Get(k,k);f=A.Get(i,k)/A.Get(k,k); forfor j = k+1 j = k+1 toto A.mA.m dodo A.Set(i,j,A.Get(i,j)-f*A.Get(k,j))A.Set(i,j,A.Get(i,j)-f*A.Get(k,j));; b.Set(i,b.Get(i)-f*b.Get(k));b.Set(i,b.Get(i)-f*b.Get(k)); end;end; end;end; … … return x;return x;end;end;

Page 52: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

52

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Beispiel 4

eine dünn besetzte Matrix kann dann eine dünn besetzte Matrix kann dann z.B. alsz.B. als

subclasssubclass SparseMatrixSparseMatrix ofof MatrixMatrix isis int n,m; int n,m; Datalist data; Datalist data; virtualvirtual real real GetGet(int z,int s);(int z,int s); virtualvirtual void void SetSet(int z,int s,real v); (int z,int s,real v); endend;;

erklärt werdenerklärt werden

Page 53: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

53

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Beispiel 5

der Löser kann auch dann auf der Löser kann auch dann auf SparseMatrix Objekte angewandt SparseMatrix Objekte angewandt werden, wenn sein Quelltext nicht werden, wenn sein Quelltext nicht verfügbar ist (Bibliothek)verfügbar ist (Bibliothek)

MatrixMatrix A = A = newnew SparseMatrixSparseMatrix;;Matrix b = new Matrix;Matrix b = new Matrix;Matrix x;Matrix x;......x=Solver(A,b);x=Solver(A,b);

Page 54: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

54

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Zusammenfassung– abstrakter Datentypabstrakter Datentyp

Sorten, zugeordnete OperationenSorten, zugeordnete Operationen

– KlassenkonzeptKlassenkonzept Klasse, Instanz, ObjektKlasse, Instanz, Objekt

– VererbungVererbung einfach, mehrfacheinfach, mehrfach

– PolymorphiePolymorphie– BindungBindung

statische und späte Bindung, virtuelle Methodestatische und späte Bindung, virtuelle Methode

Page 55: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

55

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Und warum das Ganze?

Programme sollen:Programme sollen:– sichersicher– saubersauber– wiederverwendbarwiederverwendbar– lesbarlesbar

– schnellschnell

seinsein

Page 56: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

56

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Softwareentwurf 1

ModularisierungModularisierung nach Funktionen:nach Funktionen:

» Funktionensammlungen, BibliothekenFunktionensammlungen, Bibliotheken

nach Daten bzw. Objekten:nach Daten bzw. Objekten:» KlassenpoolKlassenpool

Top-down EntwurfTop-down Entwurf Anwendung abstrakte FunktionAnwendung abstrakte Funktion Zerlegung festgelegter SystementwurfZerlegung festgelegter Systementwurf

Page 57: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

57

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Softwareentwurf 2 Object Oriented DesignObject Oriented Design

Identifiziere ObjekteIdentifiziere Objekte Beschreibe ObjekteBeschreibe Objekte Beziehungen und Gemeinsamkeiten zwischen Beziehungen und Gemeinsamkeiten zwischen

ObjektenObjekten KlassenbildungKlassenbildung Beziehungen zwischen KlassenBeziehungen zwischen Klassen KlassenhierarchieKlassenhierarchie MethodenimplementationMethodenimplementation Programm aus Objektbeschreibung Programm aus Objektbeschreibung

Page 58: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

58

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Kriterien für OO-Sprachen 1

nach Meyernach Meyer Modularisierung nach ObjektenModularisierung nach Objekten Abstrakte DatentypenAbstrakte Datentypen Freispeicherverwaltung (! C++)Freispeicherverwaltung (! C++) Module, Klassen und StandardtypenModule, Klassen und Standardtypen VererbungVererbung Polymorphismus und dynamische BindungPolymorphismus und dynamische Bindung Mehrfachvererbung (! Smalltalk)Mehrfachvererbung (! Smalltalk)

Page 59: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

59

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Kriterien für OO-Sprachen 2

nach Wegnernach Wegner ObjekteObjekte KlassenKlassen VererbungVererbung

Strenge TypisierungStrenge Typisierung Abstrakte DatentypenAbstrakte Datentypen NebenläufigkeitNebenläufigkeit PersistenzPersistenz

Page 60: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

60

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

OO-Sprachen

““bedeutend”bedeutend”– Turbo-Pascal, DelphiTurbo-Pascal, Delphi, , C++C++, , JavaJava, ,

Smalltalk-80, Oberon-2, Eiffel, Ada 95Smalltalk-80, Oberon-2, Eiffel, Ada 95 weniger bedeutendweniger bedeutend

– CLOS, Modula-3, Objective-C, Python, CLOS, Modula-3, Objective-C, Python, Sather, Simula, Tcl/Tk, VBScript, Visual Sather, Simula, Tcl/Tk, VBScript, Visual Basic, Objective-PascalBasic, Objective-Pascal

Page 61: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

61

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

C++

Einführung in die Sprache undEinführung in die Sprache und

Nutzung der OO EigenschaftenNutzung der OO Eigenschaften

Page 62: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

62

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

C++

1980-87 von B. Stroustrup bei AT&T 1980-87 von B. Stroustrup bei AT&T entwickeltentwickelt

1989 ANSI Standard1989 ANSI Standard C++ ist ein „besseres C“C++ ist ein „besseres C“ C++ implementiert den gesamten C C++ implementiert den gesamten C

Sprachumfang +Sprachumfang + Klassen, Vererbung, späte BindungKlassen, Vererbung, späte Bindung

Page 63: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

63

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Sprachbeschreibung für die nächsten Folien soll folgende für die nächsten Folien soll folgende

Notation gelten:Notation gelten: Schlüsselwörter Schlüsselwörter werden gelb dargestelltwerden gelb dargestellt MetavariableMetavariable, die beliebige andere syntaktische , die beliebige andere syntaktische

Strukturen verkörpern, werden kursiv gesetztStrukturen verkörpern, werden kursiv gesetzt in in [ ][ ] geklammerte Spracheinheiten sind geklammerte Spracheinheiten sind

optional zu verwendenoptional zu verwenden Code wird in Courier angegebenCode wird in Courier angegeben

Page 64: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

64

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

C Grundlagen 1 typisierte proz. imperative Sprachetypisierte proz. imperative Sprache alle Variablen und Funktionen müssen alle Variablen und Funktionen müssen

deklariert und definiert werdendeklariert und definiert werden– Deklarationen:Deklarationen:

vardecl ::= vardecl ::= [[ aspec aspec ] [] [ constconst ]] typename varname typename varname ;;aspec ::= aspec ::= externextern || staticstatic || registerregister

Standardtypen: int, float, double, charStandardtypen: int, float, double, char– Erweiterung: Erweiterung: [[ signedsigned || unsignedunsigned ] [] [ longlong ]] stdtype stdtype

Felder xFelder x[ ][ ], Referenzen , Referenzen **x;x;

Page 65: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

65

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

C Grundlagen 2

StrukturenStrukturenstrukt ::= strukt ::= structstruct {{ komp1 ... kompn komp1 ... kompn }} varname varname ;;

Beispiel:Beispiel: structstruct {{ int x,y; int x,y; int color; int color; }} pointpoint;;

pointpoint.x=5;.x=5;

InstanzInstanz

Page 66: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

66

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

C Grundlagen 3

TypdefinitionenTypdefinitionentypdef ::= typdef ::= typedeftypedef typedescr typename typedescr typename ;;

Beispiel:Beispiel:typedeftypedef struct { struct { struct struct PointPoint { { int x,y; int x,y; int x,y; int x,y;

int color; int color; int color; int color;} } PointPoint ;; };};

PointPoint p p;;

Page 67: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

67

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

C Grundlagen 4

SteuerstrukturenSteuerstrukturen– VerzweigungVerzweigung

verzw ::= verzw ::= ifif (( cond cond )) anw anw [[ elseelse anw anw ]]

– SchleifeSchleife

forloop ::= forloop ::= for (for ( zuw zuw ;; cond cond ;; iter iter )) anw anw awhile ::= awhile ::= dodo block block whilewhile (( cond cond ) ;) ; nwhile ::= nwhile ::= while (while ( cond cond )) anw anw

Page 68: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

68

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

C Grundlagen 5

ifif ((x>=0x>=0)) abs=x;abs=x; elseelse abs=-x;abs=-x;

forfor ((i=0;i<n;i++i=0;i<n;i++)) s=s+i;s=s+i;

dodo { { xn=x-f(x)/fp(x);xn=x-f(x)/fp(x); x=xn;x=xn;} } whilewhile ((abs(f(x))>0.2abs(f(x))>0.2));;

whilewhile ((locklock)) ;;

Page 69: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

69

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

C Grundlagen 6 FunktionsdefinitionenFunktionsdefinitionen

fdefdecl ::= aspec rettype fname fdefdecl ::= aspec rettype fname (( [[ arglist arglist ]] ) ;) ;fdef ::= rettype fname fdef ::= rettype fname (( [[ arglist arglist ]] )) block block

Beispiel:Beispiel:externextern int int factfact((int xint x););int int factfact((int xint x) {) { if (x==0) return 1; if (x==0) return 1; return x*fact(x-1); return x*fact(x-1);}}

– eine nicht-eine nicht-voidvoid Funktion muß Funktion muß immer immer einen einen Wert zurückgeben (Wert zurückgeben (returnreturn value value;;))

Page 70: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

70

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

C Grundlagen 7: Modulkonzept

#include <header.h>int main() {

return fct(3);}

int fct(int c) {return c;

}

int fct(int);

Header.h

Modul1.c Modul2.c

ApplikationApplikation

Page 71: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

71

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

C++ Spezifika

neue Operatorenneue Operatoren– newnew und und deletedelete

ad-hoc Polymorphismusad-hoc Polymorphismus– Funktions- und OperatorüberladungFunktions- und Operatorüberladung

KlassenKlassen TemplatesTemplates StreamsStreams

Page 72: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

72

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

neue Operatoren in C++ 1

new new – allokiert die benötigte Menge Speicher für allokiert die benötigte Menge Speicher für

ein „Objekt“ vom angegebenen Typein „Objekt“ vom angegebenen Typ– konstruiert die angegebene Anzahl von konstruiert die angegebene Anzahl von

InstanzenInstanzen deletedelete

– zerstört die referenzierten Instanzenzerstört die referenzierten Instanzen– gibt einen reservierten Speicherbereich freigibt einen reservierten Speicherbereich frei

Page 73: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

73

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

neue Operatoren in C++ 2

Beispiel:Beispiel:

int *int *xx;; int n,*int n,*feldfeld;;xx==newnew int; int; feldfeld==newnew int [n]; int [n];...... ......deletedelete xx;; deletedelete feldfeld;;

xx feldfeld

Page 74: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

74

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

neue Operatoren in C++ 3

Problem:Problem:

int *x=new int;int *x=new int;......x=new int;x=new int;

xx

Page 75: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

75

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Beispieltypedef struct {typedef struct { int n,m;int n,m; double **data;double **data;} Matrix;} Matrix;

Matrix NewMatrix(int n0,int m0) {Matrix NewMatrix(int n0,int m0) { Matrix Matrix MM;; M.nM.n=n0; =n0; M.mM.m=m0;=m0; M.dataM.data = = newnew double* [ double* [M.nM.n];]; for (int i=0;i<M.n;i++)for (int i=0;i<M.n;i++) M.data[i]M.data[i] = = newnew double [ double [M.mM.m];]; return M;return M;}}

Page 76: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

76

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

ad-hoc Polymorphismus 1

Funktionen oder Operatoren, die sich Funktionen oder Operatoren, die sich nur durch ihre Semantik nur durch ihre Semantik (Definitionsbereich), nicht aber durch (Definitionsbereich), nicht aber durch ihre Syntax unterscheiden heißenihre Syntax unterscheiden heißenad-hoc polymorphad-hoc polymorph

Beispiel:Beispiel: int abs(int)int abs(int)double abs(double);double abs(double);

Page 77: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

77

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Funktionsüberladung

eine vorhandene Funktion eine vorhandene Funktion

F:AF:A11xAxA22x…xAx…xAnn W WAA

wird durch eine neue Definitionwird durch eine neue Definition

F:BF:B11xBxB22x…xBx…xBmm W WBB

überladen (Aüberladen (A11xAxA22x…xAx…xAnn=B=B11xBxB22x…xBx…xBmm)) z.B.:z.B.: int sum(int a,int b);int sum(int a,int b);

double sum(double a,double b);double sum(double a,double b);

Page 78: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

78

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

ad-hoc Polymorphismus 2

Typkonversion:Typkonversion: integral promotionintegral promotion: Aufzählungstypen können : Aufzählungstypen können

ohne Einschränkung ev. unter Informations-ohne Einschränkung ev. unter Informations-verlust ineinander konvertiert werdenverlust ineinander konvertiert werden

integral conversionintegral conversion: int unsigned type wird im : int unsigned type wird im 2er-Komplement das Bitmuster beibehalten2er-Komplement das Bitmuster beibehalten

float-doublefloat-double: ggf. unter Stellenverlust: ggf. unter Stellenverlust floating-integralfloating-integral: Streichung von : Streichung von

Nachkommastellen (Keine Rundung!)Nachkommastellen (Keine Rundung!)

Page 79: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

79

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

ad-hoc Polymorphismus 3 existiert eine Funktion in mehr als einer existiert eine Funktion in mehr als einer

Form, so wird aus den Typen der Form, so wird aus den Typen der aktuellen Parameter der aktuellen Parameter der best matchbest match bestimmtbestimmtNiveauNiveau KonversionKonversion 11 exact match, einfache Konversionexact match, einfache Konversion 22 promotions, float-doublepromotions, float-double 33 Standard Konversionen, KlassenzeigerStandard Konversionen, Klassenzeiger

KlassenreferenzKlassenreferenz 44 Nutzerdefinierte KonversionNutzerdefinierte Konversion 55 ellipsis conversionellipsis conversion

Page 80: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

80

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

ad-hoc Polymorphismus 4 Beispiel:Beispiel:

int round(int x);int round(int x);int round(float x);int round(float x);– round(4);round(4);

O.K. O.K. – round(1.2);round(1.2);

Konflikt, da 1.2 double Konstante und Konflikt, da 1.2 double Konstante und integral-integral-promotionpromotion und und float-doublefloat-double auf selbem Niveau auf selbem Niveau

– round((float)1.2);round((float)1.2); O.K.O.K.

Page 81: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

81

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

ad-hoc Polymorphismus & ADT

definieren Sie Ihre Datenstrukturen als definieren Sie Ihre Datenstrukturen als neue Typenneue Typen

erklären Sie Ihre Algorithmen als erklären Sie Ihre Algorithmen als Funktionen über diesen DatentypenFunktionen über diesen Datentypen

Beispiel: verwenden SieBeispiel: verwenden Sietypedef double vec[3];typedef double vec[3];double norm(vec a);double norm(vec a);

anstattanstattdouble norm(double a[3]);double norm(double a[3]);

Page 82: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

82

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Operatorüberladung 1 ähnlich zur Funktionsüberladung können ähnlich zur Funktionsüberladung können

prinzipiell alle Operatoren überladen prinzipiell alle Operatoren überladen werdenwerden

Einschränkungen:Einschränkungen: es können keine neuen Operatoren erklärt werdenes können keine neuen Operatoren erklärt werden die Syntax eines Operators kann nicht geändert die Syntax eines Operators kann nicht geändert

werdenwerden die Semantik bestehender Definitionen kann nicht die Semantik bestehender Definitionen kann nicht

geändert werdengeändert werden die Priorität bleibt erhaltendie Priorität bleibt erhalten

Page 83: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

83

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Operatorüberladung 2 Syntax der Deklaration:Syntax der Deklaration:

rtype rtype operatoroperator opname opname ((atype1 atype1 [ [ ,, atype2 atype2 ]] ););

Beispiel:Beispiel:

VectorVector operator operator -- ( (Vector aVector a,,Vector bVector b););

Definition wie FunktionsdefinitionDefinition wie Funktionsdefinition Vector Vector operatoroperator -- ((Vector aVector a,,Vector bVector b)) {{

Vector c; ...Vector c; ... return c; return c;}}

Page 84: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

84

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Operatorüberladung 3typedef struct {typedef struct { unsigned int dim;unsigned int dim; double x[10]; double x[10];} Vector;} Vector;

VectorVector operatoroperator -- ((VectorVector aa,,VectorVector b b) {) { if (if (a.dima.dim!=b.dim) error();!=b.dim) error(); for (int i=0;i<for (int i=0;i<a.dima.dim;i++);i++) c.x[i]=c.x[i]=a.x[i]a.x[i]-b.x[i];-b.x[i]; c.dim=a.dim; c.dim=a.dim; return c;return c;}}

main() {main() { Vector a={3,1,2,3},b={3,4,5,6};Vector a={3,1,2,3},b={3,4,5,6}; Vector c=a-b;Vector c=a-b;}}

Page 85: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

85

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Operatorüberladung 4

überladen werden kann z.B. auch [], überladen werden kann z.B. auch [], allerding muß [] in diesem Fall direkt an allerding muß [] in diesem Fall direkt an den Datentyp gebunden werdenden Datentyp gebunden werden

typedef struct {typedef struct { ... ... double &operator [] (unsigned int i); double &operator [] (unsigned int i); ... ...} Vector;} Vector;

StrukturenStrukturen

Page 86: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

86

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Strukturen 1 Strukturen lassen sich als “Vorstufe” Strukturen lassen sich als “Vorstufe”

zum abstrakten Datentyp interpretierenzum abstrakten Datentyp interpretieren Strukturen können Komponenten Strukturen können Komponenten

beliebigen Typs und Funktionen beliebigen Typs und Funktionen enthaltenenthalten

Beispiel:Beispiel: struct MyStruct {struct MyStruct { int x; int x; int Value(); int Value();};};

Page 87: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

87

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Strukturen 2 eine, einer Struktur zugeordnete Funktion eine, einer Struktur zugeordnete Funktion

heißt heißt Member-functionMember-function Member-functions können nur über eine Member-functions können nur über eine

Variable des Typs, dem sie zugeordnet sind, Variable des Typs, dem sie zugeordnet sind, aufgerufen werdenaufgerufen werden

Beispiel: Beispiel: struct MyStruct m;struct MyStruct m;

Value(); Value(); unzulässigunzulässig m.Value();m.Value(); O.K.O.K.

Page 88: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

88

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Strukturen 3

Member-functions müssen zusammen Member-functions müssen zusammen mit ihrer Struktur definiert werdenmit ihrer Struktur definiert werden

int MyStruct int MyStruct :::: Value() { return x; } Value() { return x; }

Komponenten derselben Struktur Komponenten derselben Struktur brauchen nicht qualifiziert zu werdenbrauchen nicht qualifiziert zu werden

Strukturen können nicht vererbenStrukturen können nicht vererben

Page 89: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

89

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Array-Subscriptiontypedef struct {typedef struct { unsigned int dim;unsigned int dim; double double x[10]x[10];; double &operator [] (unsigned int i);double &operator [] (unsigned int i);} Vector;} Vector;

double double &&VectorVector::operator::operator [][] ((unsigned int iunsigned int i) {) { if ((i<0) || (dim<=i)) error();if ((i<0) || (dim<=i)) error(); returnreturn x[i]x[i];;}}......Vector a;Vector a;

a[0]=5.0;a[0]=5.0;printf(”%lf\n”,a[0]);printf(”%lf\n”,a[0]);

Page 90: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

90

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Datenkapselung 1

die Komponenten einer Struktur sind die Komponenten einer Struktur sind generell von überall her zugänglichgenerell von überall her zugänglich

Beispiel:Beispiel: main() {main() { struct MyStruct m;struct MyStruct m;

...... printf(”%d\n”,m.x); printf(”%d\n”,m.x); printf(”%d\n”,m.Value());printf(”%d\n”,m.Value());}}

Page 91: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

91

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Datenkapselung 2 um Daten zu schützen, können sie um Daten zu schützen, können sie

verborgen werden und sind dann nur verborgen werden und sind dann nur noch innerhalb von Member-functions noch innerhalb von Member-functions zugreifbarzugreifbar

Komponenten werden durch den Komponenten werden durch den Vorsatz des Schlüsselwortes Vorsatz des Schlüsselwortes privateprivate geschütztgeschützt

alle Komponenten nach alle Komponenten nach privateprivate sind sind geschütztgeschützt

Page 92: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

92

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Datenkapselung 3 Beispiel: Beispiel: typedef structtypedef struct {{

private:private: int x; int x; int y;int y; public:public: int Value(); int Value(); void Set(int v);void Set(int v);} } MyStructMyStruct;;

void MyStruct::Set(int v) { x=v; }void MyStruct::Set(int v) { x=v; }

main() {main() { MyStructMyStruct m; m; m.x=1; // nicht zulässigm.x=1; // nicht zulässig m.y=1; // nicht zulässigm.y=1; // nicht zulässig m.Set(1); // O.K.m.Set(1); // O.K.}}

Page 93: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

93

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Klassen

Klassendefinition und InstanzierungKlassendefinition und Instanzierung VererbungVererbung

– einfache und mehrfacheeinfache und mehrfache– virtuelle Basisklassenvirtuelle Basisklassen– abstrakte Basisklasseabstrakte Basisklasse

universeller Polymorhpismus, Bindunguniverseller Polymorhpismus, Bindung FriendsFriends

Page 94: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

94

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Klassendefinition 1

die Implementation abstrakter Datentypen die Implementation abstrakter Datentypen erfolgt in C++ als Klasseerfolgt in C++ als Klasse

classdef ::= classdef ::= classclass classname interface classname interface ;;interface ::= interface ::= {{ compdef compdef }}

die Klassendefinition ist eine Anweisung die Klassendefinition ist eine Anweisung und muß daher mit einem “und muß daher mit einem “;;” ” abgeschlossen werdenabgeschlossen werden

Page 95: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

95

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Klassendefinition 2 Beispiel:Beispiel: classclass AA { };{ };

Klassendeklaration:Klassendeklaration: classclass AA;; Attribute werden wie Komponenten einer Attribute werden wie Komponenten einer

Struktur erklärtStruktur erklärt Attribute sind nurAttribute sind nur

innerhalb der Klasseinnerhalb der Klassegültig (private), könnengültig (private), könnenaber öffentlich werdenaber öffentlich werden

classclass BB {{ int a1; int a1; A a2; A a2;};};

Page 96: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

96

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Klassendefinition 3

Methoden werden ebenfalls als Methoden werden ebenfalls als Komponenten erklärt (und damit dem Komponenten erklärt (und damit dem zugrundeliegenden ADT zugeordnet)zugrundeliegenden ADT zugeordnet)

Beispiel:Beispiel:classclass PointPoint {{ int x,y; int x,y; void SetX(int xn); void SetX(int xn); int GetX(); int GetX();};};

Page 97: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

97

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Klassendefinition 4

die Methoden werden in der die Methoden werden in der Klassendefinition nur erklärt Klassendefinition nur erklärt (Interfacedefinition)(Interfacedefinition)

die Definition der Methoden erfolgt die Definition der Methoden erfolgt getrennt in der Formgetrennt in der Form

mdef ::= rtype cname mdef ::= rtype cname :::: mname mname (( [[ args args ]] )) block block Beispiel:Beispiel:

int int PointPoint::::GetX() GetX() {{ return x; return x; }}

Page 98: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

98

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Klassendefinition 5 Konstruktor:Konstruktor:

ist eine spezielle Methode, die während der ist eine spezielle Methode, die während der InstanzierungInstanzierung (automatisch) aufgerufen wird (automatisch) aufgerufen wird

der Konstruktor trägt immer den Namen der der Konstruktor trägt immer den Namen der Klasse und hat keinen Rückgabewert (auch Klasse und hat keinen Rückgabewert (auch nicht void)nicht void)

classclass PointPoint {{ PointPoint();();};};

Page 99: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

99

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Klassendefinition 6

der Konstruktor kann polymorph seinder Konstruktor kann polymorph sein

classclass PointPoint {{ PointPoint();(); PointPoint(int x0,int y0);(int x0,int y0);};};

ein Konstruktor ohne Argumente heißt ein Konstruktor ohne Argumente heißt StandardkonstruktorStandardkonstruktor und sollte immer definiert und sollte immer definiert werdenwerden

Page 100: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

100

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Klassendefinition 7

Destruktor:Destruktor: der Destruktor wird während der Zerstörung einer der Destruktor wird während der Zerstörung einer

Instanz (automatisch) gerufenInstanz (automatisch) gerufen er trägt den Klassennamen mit einer er trägt den Klassennamen mit einer

vorangestellten Tilde “vorangestellten Tilde “~~””

classclass PointPoint {{ ~~PointPoint();(); ~~PointPoint(int x0,int y0);(int x0,int y0);};};

auch der Destruktor kann polymorph seinauch der Destruktor kann polymorph sein

Page 101: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

101

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Instanzierung 1 statische Instanzierung:statische Instanzierung:

durch die Deklaration einer Instanzvariablen wird eine durch die Deklaration einer Instanzvariablen wird eine Instanz der Klasse generiertInstanz der Klasse generiert

PointPoint p p;;

Lebensbereich der Instanz ist der Gültigkeitsbereich Lebensbereich der Instanz ist der Gültigkeitsbereich der Instanzvariablender Instanzvariablen

Beispiel:Beispiel: {{ int x; int x; Point p; Point p; p.SetX(2); p.SetX(2);}}

GültigkeitsbereichGültigkeitsbereich

Page 102: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

102

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Instanzierung 2

dynamische Instanzierung:dynamische Instanzierung: die Anwendung des Operators die Anwendung des Operators newnew auf eine auf eine

Klasse generiert eine Instanz dieser KlasseKlasse generiert eine Instanz dieser Klasse

PointPoint **pp;; p = p = newnew Point; Point;

die Instanz lebt bis zur expliziten Zerstörung die Instanz lebt bis zur expliziten Zerstörung durch Anwendung des durch Anwendung des deletedelete-Operators auf -Operators auf irgendeineirgendeine Referenz auf die Instanz Referenz auf die Instanz

PointPoint * *r = pr = p; delete; delete r r;;

Page 103: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

103

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Instanzierung 3 soll ein anderer als der Standard-soll ein anderer als der Standard-

konstruktor verwendet werden, so wird konstruktor verwendet werden, so wird an die Instanzvariable ein Parameter-an die Instanzvariable ein Parameter-satz angehangensatz angehangen PointPoint p1(1,2); p1(1,2);

PointPoint *p2= *p2=newnew PointPoint(3,y);(3,y);

die Auswahl des Konstruktors erfolgt die Auswahl des Konstruktors erfolgt nach den Regeln des ad-hoc nach den Regeln des ad-hoc PolymorphismusPolymorphismus

Page 104: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

104

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Datenkapselung 1

C++ kennt drei ZugriffklassenC++ kennt drei Zugriffklassen– public:public:

Zugriff von überall her Zugriff von überall her– protected:protected:

Zugriff nur in der Instanz und in Zugriff nur in der Instanz und in Instanzen abgeleiteter Klassen Instanzen abgeleiteter Klassen

– private:private: Zugriff nur in der Instanz Zugriff nur in der Instanz

Page 105: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

105

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Datenkapselung 2class A {class A { int a;int a; private:private: int b;int b; protected:protected: int c;int c; public:public: int d;int d; int e;int e; private:private: int f;int f; int M();int M();};};

int A::M() {int A::M() { f=1;f=1; c=2; c=2; e=3;e=3;}}

A m;A m;m.a=-1;m.a=-1;m.b=-2; m.b=-2; m.c=-3;m.c=-3;m.d=-4;m.d=-4;m.e=-5;m.e=-5;m.f=-6;m.f=-6;m.M();m.M();

innerhalb der Klasseinnerhalb der Klasseinnerhalb der Klasseinnerhalb der Klasseinnerhalb der Klasseinnerhalb der Klasse

privat (default)privat (default)privatprivatprotectedprotectedO.K.O.K.O.K.O.K.privatprivatprivatprivat

Page 106: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

106

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

kurzer Rückblick

KlassendefinitionKlassendefinition– classclass AA { t { tii a aii; t; tjj m mjj; ... };; ... };ttjj AA::::mmjj(...) { ... }(...) { ... }

InstanzierungInstanzierung– statisch:statisch: A a;A a;

– dynamisch:dynamisch:A *b; b=A *b; b=newnew A(...); A(...); deletedelete b; b;

DatenkapselungDatenkapselung– privateprivate, , protectedprotected, , publicpublic

Page 107: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

107

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Vererbung 1

Klassen können voneinander abgeleitet Klassen können voneinander abgeleitet werdenwerden

classclass A { … }; A { … };classclass B B :: A { … }; A { … };

eine abgeleitete Klasseeine abgeleitete Klasseübernimmt alle Attribute und Methoden übernimmt alle Attribute und Methoden den Basisklasseden Basisklasse

AA

BB

Page 108: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

108

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Vererbung 2 Beispiel:Beispiel: classclass PointPoint {{

int x,y; int x,y; Point(int x0int y0); Point(int x0int y0); void Draw(); void Draw(); void MoveTo(int x1,int y1); void MoveTo(int x1,int y1); ~Point(); ~Point();};};

classclass CircleCircle :: PointPoint {{ int r; int r; Circle(int x0,int y0,int r0); Circle(int x0,int y0,int r0); void Draw(); void Draw(); ~Circle(); ~Circle();};};

Page 109: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

109

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Vererbung 3 C++ kennt mehrfache VererbungC++ kennt mehrfache Vererbung

class A {class A { int x;int x; A();A();};};class B {class B { int z;int z; B();B();};};classclass CC:: AA,,BB { { C();C();};};

AA

CC

BB

Page 110: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

110

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Vererbung 4

Namenskonflikte werden durch Namenskonflikte werden durch vollständige Qualifizierung aufgelöstvollständige Qualifizierung aufgelöst

class A { int x; };class A { int x; };class B { int x; };class B { int x; };class C: A,B {class C: A,B { int sum() { return int sum() { return A::xA::x++B::xB::x; }; }};};

Page 111: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

111

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Vererbung 5

virtuelle Basisklassenvirtuelle Basisklassen

class A {};class A {};class B:A {};class B:A {};class C:A {};class C:A {};class D:B,C { };class D:B,C { };

class A {};class A {};class B:class B:virtualvirtual A {}; A {};class C:class C:virtualvirtual A {}; A {};class D:B,C { };class D:B,C { };

AA AA

AA

BB

CC

DD

AA

BB

CC

DD

BB CC

DD

Page 112: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

112

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Vererbung 6

abstrakte Basisklasseabstrakte Basisklasseclass A {class A { void m1() void m1()=0=0; // abstrakte Methode; // abstrakte Methode void m2() { … }; // konkrete Methode void m2() { … }; // konkrete Methode};};

A kann nicht instanziert werdenA kann nicht instanziert werdenclass B:A {class B:A { void m1() { … }; // Konkretisierung m1 void m1() { … }; // Konkretisierung m1};};… B b;… B b;

Page 113: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

113

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Beispielclass Gear {class Gear { unsigned int gear;unsigned int gear; public:public: void SwitchUp()void SwitchUp()=0=0;;};};

class ManualGear:Gear {class ManualGear:Gear { public:public: void SwitchUp();void SwitchUp();}}

void ManualGear::SwitchUp() { ... }void ManualGear::SwitchUp() { ... }

Page 114: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

114

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Vererbung und Datenkapselung 1 die Weitergabe von Eigenschaften kann die Weitergabe von Eigenschaften kann

beschränkt erfolgenbeschränkt erfolgenclassclass ZZ : : AA, , publicpublic BB , , protectedprotected CC , , privateprivate DD { { … …};};

public: die Zugriffsbeschränkungen der Elternklasse public: die Zugriffsbeschränkungen der Elternklasse werden übernommenwerden übernommen

protected: public protectedprotected: public protected private: public, protected privateprivate: public, protected private

Page 115: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

115

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Vererbung und Datenkapselung 2class A {class A { public: int x;public: int x; A();A();};};class B {class B { protected: int z;protected: int z; public: B();public: B();};};class C: protected A, public B {class C: protected A, public B { C();C();};};C c;C c;c.x = 1;c.x = 1; // falsch, x ist protected// falsch, x ist protectedc.A();c.A(); // falsch, A() ist protected// falsch, A() ist protectedc.z = 1;c.z = 1; // falsch, z ist protected// falsch, z ist protectedc.B();c.B(); // O.K.// O.K.

Page 116: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

116

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Bindung 1

Komponenten werden in C++ standard-Komponenten werden in C++ standard-mäßig statisch gebundenmäßig statisch gebunden

soll eine Methode dynamisch gebunden soll eine Methode dynamisch gebunden werden, so muß dies durch das werden, so muß dies durch das Schlüsselwort ”Schlüsselwort ”virtualvirtual” kenntlich ” kenntlich gemacht werdengemacht werden

wird eine virtuelle Methode wird eine virtuelle Methode überschrieben, so bleibt sie virtuellüberschrieben, so bleibt sie virtuell

Page 117: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

117

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Bindung 2classclass GearGear {{ public:public: virtualvirtual void SwitchUp()=0; void SwitchUp()=0; void SwitchDown();void SwitchDown(); ~Gear();~Gear();};};classclass ManualGearManualGear :: publicpublic GearGear {{ public:public: virtualvirtual void SwitchUp(); void SwitchUp(); void SwitchDown();void SwitchDown(); ~Gear();~Gear();};};

Gear *g = new ManualGear();Gear *g = new ManualGear();g->SwitchUp();g->SwitchUp(); // ManualGear::SwitchUp// ManualGear::SwitchUpg->SwitchDown();g->SwitchDown(); // Gear::SwitchDown// Gear::SwitchDown

Page 118: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

118

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Bindung 3

Frage: Welcher Destruktor wird im Frage: Welcher Destruktor wird im vorhergegangenen Beispiel gerufen, vorhergegangenen Beispiel gerufen, wennwenn

delete g;delete g;

aufgerufen wird und warum?aufgerufen wird und warum?

Page 119: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

119

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Bindung 4

da der Destruktor zunächst nicht da der Destruktor zunächst nicht dynamisch gebunden wird, wird ~Gear() dynamisch gebunden wird, wird ~Gear() gerufen - das ist falsch!gerufen - das ist falsch! virtueller Destruktor virtueller Destruktor

class Gear { ... class Gear { ... virtualvirtual ~Gear(); ~Gear();

}; };class ManualGear { ...class ManualGear { ... virtualvirtual ~ManualGear(); ~ManualGear();};};

Page 120: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

120

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Bindung 5 - VMT

die dynamische Bindung wird über eine die dynamische Bindung wird über eine sogenannte VMT - Virtual Method Table sogenannte VMT - Virtual Method Table organisiertorganisiert

attrattr

attrattr

A *b = new B;A *b = new B;VMT B:AVMT B:A

stat.stat.

virtuelle M.virtuelle M.

stat.stat.

VMTVMT VMTVMT==virt.virt. virt.virt.==

Page 121: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

121

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Beispiel 1

classclass CarCar { { Gear *gear;Gear *gear; Engine *engine;Engine *engine; public:public: Car(Engine *e,Gear *g);Car(Engine *e,Gear *g); virtualvirtual void Accel(double) void Accel(double)=0=0;;};};Car::Car(Engine *e,Gear *g) {Car::Car(Engine *e,Gear *g) { engine=e;engine=e; gear=g;gear=g;}}

Page 122: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

122

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Beispiel 2classclass Renault_R19Renault_R19:public:public CarCar { { public:public: Renault_R19(Engine *e,Gear *g);Renault_R19(Engine *e,Gear *g); virtualvirtual void void AccelAccel(double);(double);};};Renault_R19Renault_R19::::Renault_R19Renault_R19((Engine *e,Gear *g)((Engine *e,Gear *g) ::CarCar(e,g) { }(e,g) { }void void Renault_R19Renault_R19::::AccelAccel(double v) {(double v) { ...... if (engine->RPM()>3000) gear->SwitchUp();if (engine->RPM()>3000) gear->SwitchUp(); ......}} Car *my_car=new Renault_R19(Car *my_car=new Renault_R19( new GasolineEngine(2.5),new GasolineEngine(2.5), new ManualGear(5)); new ManualGear(5));

Page 123: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

123

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

static Members 1 ein static Member existiert nur ein einziges ein static Member existiert nur ein einziges

mal für alle Instanzenmal für alle Instanzenclass A {class A { int x; int x; staticstatic int y; int y; staticstatic void m1(); void m1(); void m2(); void m2(); virtual void m3(); virtual void m3();};};

A a,b;A a,b;

kein thiskein this

aa bbAAxxa.xa.x b.xb.xA.yA.y

VMTVMT VMTVMTVMTVMT

m3m3

m1m1m2m2 m2m2 m2m2

Page 124: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

124

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

static Members 2

ein static Attribut muß extra erklärt ein static Attribut muß extra erklärt werdenwerden

class A {class A { static int i; static int i;};};

int A::i;int A::i;

Page 125: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

125

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Friends 1 BeispielBeispiel

class Matrix {class Matrix { Matrix operator * (Matrix&); Matrix operator * (Matrix&);};};class Vector {class Vector { double operator * (Vector&); double operator * (Vector&);};};

Wie sollte Matrix * Vector erklärt werden Wie sollte Matrix * Vector erklärt werden damit * effizient arbeitet?damit * effizient arbeitet?

Page 126: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

126

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Friends 2 1. Variante:1. Variante:

class Matrix {class Matrix { Matrix operator * (Vector&); Matrix operator * (Vector&);};};

– hängt von der Implementation von Matrix ab (muß hängt von der Implementation von Matrix ab (muß also jedesmal neu erklärt werden)also jedesmal neu erklärt werden)

2. Variante2. Varianteclass Matrix {class Matrix { friendfriend Matrix operator*(Matrix&,Vector&); Matrix operator*(Matrix&,Vector&);};};

Page 127: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

127

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Friends 3 die Implementation als friend gilt als Hinweis die Implementation als friend gilt als Hinweis

darauf, daß die Klasse verändert werden darauf, daß die Klasse verändert werden kannkann

ein friend ist quasi Member einer Klasse und ein friend ist quasi Member einer Klasse und hat Zugriff auf alle Komponenten der Klassehat Zugriff auf alle Komponenten der Klasseclass Matrix {class Matrix { friendfriend Matrix Matrix operatoroperator ** (Matrix&,Vector&); (Matrix&,Vector&);};};class Vector {class Vector { friendfriend Matrix Matrix operatoroperator ** (Matrix&,Vector&); (Matrix&,Vector&);};};

Page 128: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

128

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Zusammenfasung - Klassen

Klassendefinition und InstanzierungKlassendefinition und Instanzierung VererbungVererbung

– einfache und mehrfacheeinfache und mehrfache– DatenkapselungDatenkapselung– virtuelle und abstrakte Basisklassenvirtuelle und abstrakte Basisklassen

universeller Polymorphismus, Bindunguniverseller Polymorphismus, Bindung FriendsFriends

Page 129: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

129

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Templates 1

Templates stellen die Realisierung des Templates stellen die Realisierung des parametrischen Typkonzeptes darparametrischen Typkonzeptes dar

Motivation:Motivation: Verfahren können für einen abstrakten Typ T Verfahren können für einen abstrakten Typ T

erklärt werden, ohne das der Typ bekannt isterklärt werden, ohne das der Typ bekannt ist die Konkretisierung des Typs erfolgt erst bei die Konkretisierung des Typs erfolgt erst bei

der Nutzung des Verfahrensder Nutzung des Verfahrens

Beispiel: das Konzept des VektorsBeispiel: das Konzept des Vektors

Page 130: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

130

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Templates 2– ein Vektor wird über einem Körper (T) erklärtein Vektor wird über einem Körper (T) erklärttemplate<template<classclass TT>> class class VectorVector {{ T T *v;*v; unsigned int dim; unsigned int dim; public: public: Vector(unsigned int s) { Vector(unsigned int s) { if (s==0) error(“dimension must not be 0“); if (s==0) error(“dimension must not be 0“); v=new T[dim=s]; v=new T[dim=s]; } } T T &operator [] (unsigned int i) {&operator [] (unsigned int i) { return v[i]; return v[i]; } } unsigned int Dim() { return dim; } unsigned int Dim() { return dim; }};};

Page 131: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

131

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Templates 3

Nutzung:Nutzung:

void f() {void f() { Vector<Vector<intint>> v1(100); // 100 integer v1(100); // 100 integer // Elemente // Elemente Vector<Vector<Gear*Gear*>> g(10); // 10 Referenzen auf g(10); // 10 Referenzen auf

// // GetriebeinstanzenGetriebeinstanzen ... ... g[5]->SwitchUp(); g[5]->SwitchUp(); // schalte G. 5 // schalte G. 5}}

Page 132: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

132

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Templates 4 Member-functions von Templates müssen nicht Member-functions von Templates müssen nicht

inline erklärt werdeninline erklärt werdentemplate<template<class Xclass X>> class class YY { { XX x; x; public: void method( public: void method(XX x0); x0);};};

die externe Definition erfolgt mit voller die externe Definition erfolgt mit voller Qualifikation:Qualifikation:template<template<class Xclass X>> void void YY<<XX>::>::method(method(XX x0) x0) {{ x=x0; x=x0;

}}

Page 133: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

133

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Templates 5

der Quelltext der Implementation von der Quelltext der Implementation von nicht-inline Methoden von Templates nicht-inline Methoden von Templates muß nicht vorliegen,muß nicht vorliegen,damit können quasi abstrakte damit können quasi abstrakte Bibliotheken geschaffen werdenBibliotheken geschaffen werden

Page 134: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

134

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Templates und Vererbung

Template Klassen können vererben:Template Klassen können vererben:template<template<class Tclass T>> ListList { T *elements; }; { T *elements; };template<template<class Tclass T>> OrderedListOrderedList::public public ListList<<TT>> { {}}

class A;class A;template<template<class Tclass T>> Based_on_A Based_on_A :: A { }; A { };

Templates können auf verschiedenen Templates können auf verschiedenen Typen basieren:Typen basieren:

template<template<class Aclass A,,class Bclass B,,class Listclass List<<AA>>>> CC {...}; {...};

Page 135: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

135

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Templates und Argumente Templates können Argumente erhalten:Templates können Argumente erhalten:

template<template<class T,class T,unsigned int sunsigned int s>> class Array { class Array { T data[ T data[ss];];};};

Templates können sogar parametrisch Templates können sogar parametrisch erbenerbentemplate<template<class T,class T,class Aclass A>> class class ParamContainerParamContainer::public Container<T>, publicpublic Container<T>, public A A { { ... ... };};

Page 136: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

136

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Funktions Templates 1

Grundidee:Grundidee: ein Funktionstemplate definiert eine Familie ein Funktionstemplate definiert eine Familie

von Funktionenvon Funktionen

Beispiel:Beispiel:

template<template<class Tclass T>> void void sortsort(Vector(Vector<<TT>>&);&);void f(Vector<int> &vi,Vector<float> &vf) {void f(Vector<int> &vi,Vector<float> &vf) { sort(vi); sort(vi); sort(vf); sort(vf);}}

Page 137: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

137

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Funktions Templates 2

Implementation:Implementation:template<template<class Tclass T>> void void sortsort(Vector<T> &v) {(Vector<T> &v) { unsigned int n=v.size(); unsigned int n=v.size(); for (int i=0;i<n-1;i++) for (int i=0;i<n-1;i++) for (int j=n-1;i<j;j--) for (int j=n-1;i<j;j--) if ( if (v[j]<v[j-1]v[j]<v[j-1]) {) { T temp=v[j];T temp=v[j]; v[j]=v[j-1]; v[j]=v[j-1]; v[j-1]=temp; v[j-1]=temp; } }}}

Page 138: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

138

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Funktionstemplates 3– Co-Existenz von Templates und SpezialisierungenCo-Existenz von Templates und Spezialisierungen

template<class T> class Comp { template<class T> class Comp { public: public: static int comp(T &a,T &b) { return a<b; } static int comp(T &a,T &b) { return a<b; } }; };

class Comp<char*> { class Comp<char*> { public: public: static int comp(const char *a,const char *b) static int comp(const char *a,const char *b) { return strcmp(a,b); } { return strcmp(a,b); } }; };

template<class T> class SortableVector template<class T> class SortableVector :public Vector<T>,public Comp<T> { :public Vector<T>,public Comp<T> { ... ... }; };

Page 139: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

139

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Funktionstemplates 4 Operationen als Template-ArgumenteOperationen als Template-Argumente

template<class T,class Comp> class Sort { template<class T,class Comp> class Sort { public void sort(vector<T>&); public void sort(vector<T>&); }; };

template<class T,class Comp> template<class T,class Comp> void Sort<T,Comp>::sort(Vector<T> &v) { void Sort<T,Comp>::sort(Vector<T> &v) { ... ... if (Comp::comp(v[j],v[j-1])) if (Comp::comp(v[j],v[j-1])) ... ... } }

template<class T> class LT:public Comp<T>; template<class T> class LT:public Comp<T>; template<class T> class GT:public Comp<T>; template<class T> class GT:public Comp<T>; Sort< int, LT<int> >::sort(vi); Sort< int, LT<int> >::sort(vi);

Sort< int, GT<int> >::sort(vi); Sort< int, GT<int> >::sort(vi);

Page 140: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

140

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Standard Template Library

ist eine Template Sammlung von SGI ist eine Template Sammlung von SGI (http://www.sgi.com/Technology/STL)(http://www.sgi.com/Technology/STL)

die folgende Kategorien abdecktdie folgende Kategorien abdeckt ContainerContainer IteratorenIteratoren AlgorithmenAlgorithmen FunktionsobjekteFunktionsobjekte „„Utilities“Utilities“ SpeicherverwaltungSpeicherverwaltung

Page 141: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

141

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

STL - Container

– KonzepteKonzepte allgemeine, Folgen, assoziative Conatinerallgemeine, Folgen, assoziative Conatiner

– ContainerklassenContainerklassen Folgen: vector, deque, list, slist, bit_vectorFolgen: vector, deque, list, slist, bit_vector assoziative Container: set, map, hashassoziative Container: set, map, hash Stringpacket: char_traits, basic_stringStringpacket: char_traits, basic_string roperope Adaptoren: stack, queueAdaptoren: stack, queue

Page 142: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

142

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

STL - Iteratoren– KonzepteKonzepte

einfache I., E/A I., Vorwärts-I., Bidirektionaler I., einfache I., E/A I., Vorwärts-I., Bidirektionaler I., Random Access I.Random Access I.

– Iterator TagsIterator Tags iterator traits, iterator category, distance type, iterator traits, iterator category, distance type,

iterator tag Klassen, iterator Basisklasseniterator tag Klassen, iterator Basisklassen

– IteratorfunktionenIteratorfunktionen AbstandAbstand

– IteratorklassenIteratorklassen istream, ostream, reverse, raw, sequenceistream, ostream, reverse, raw, sequence

Page 143: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

143

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

STL - Algorithmen– nicht mutierenede Verfahrennicht mutierenede Verfahren

for-each, Suche, Zählen, Vergleichfor-each, Suche, Zählen, Vergleich

– mutierende Verfahrenmutierende Verfahren Kopieren, Vertauschen, Transformationen, Ersetzen, Kopieren, Vertauschen, Transformationen, Ersetzen,

Füllen, Generieren, Löschen, PermutierenFüllen, Generieren, Löschen, Permutieren

– SortierenSortieren Sortieren, Zusammenführen, Mengenoperationen, Sortieren, Zusammenführen, Mengenoperationen,

MinMaxMinMax

– allgemeine Verfahrenallgemeine Verfahren inneres Produkt, Partialsummen, Potenziereninneres Produkt, Partialsummen, Potenzieren

Page 144: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

144

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

STL - Funktionsobjekte– KonzepteKonzepte

Generatoren, unäre/binäre Funktionen, Generatoren, unäre/binäre Funktionen, Monoid-Operationen, ZufallszahlengeneratorMonoid-Operationen, Zufallszahlengenerator

– vordefinierte Funktionenvordefinierte Funktionen arithmetische Op., Relationen, logische Op.arithmetische Op., Relationen, logische Op.

– function object adaptorsfunction object adaptors

Page 145: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

145

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

STL- Utilities/Speicherverwaltung

– KonzepteKonzepte– FunktionenFunktionen

RelationsoperatorenRelationsoperatoren

– KlassenKlassen PaarPaar

– SpeicherklassenSpeicherklassen Allokatoren, IteratorenAllokatoren, Iteratoren

– FunktionenFunktionen Erzeugen, Zerstören, temporärer PufferErzeugen, Zerstören, temporärer Puffer

Page 146: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

146

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Streams 1 Streams repräsentieren (gepufferte) ÜbertragungskanäleStreams repräsentieren (gepufferte) Übertragungskanäle Streams gehören Streams gehören nichtnicht zur Sprache C++ zur Sprache C++

DatenquelleDatenquelle DatensenkeDatensenkeÜbertragungskanalÜbertragungskanal

ProgrammProgramm coutcout KonsoleKonsole

Page 147: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

147

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Streams 2

prinzipiell könnte eine Streamklasse wie prinzipiell könnte eine Streamklasse wie folgt aussehenfolgt aussehen

template<class T> class template<class T> class StreamStream { { T *buffer; T *buffer; public: public: Stream(unsigned int maxsize); Stream(unsigned int maxsize); void void PutPut(T t);(T t); T T GetGet();();};};

Page 148: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

148

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Streams 3class A {class A { Stream<int> *s;Stream<int> *s; public:public: void Attach(Stream<int> *ss);void Attach(Stream<int> *ss); void send(int i);void send(int i); int recv();int recv();};};

void A::Attach(Stream<int> *ss) { s=ss; }void A::Attach(Stream<int> *ss) { s=ss; }void A::send(int i) { s->void A::send(int i) { s->PutPut(i); }(i); }int A::recv() { return s->int A::recv() { return s->GetGet(); }(); }

Stream<int> s;Stream<int> s;A a,b; a.Attach(&s); b.Attach(&s);A a,b; a.Attach(&s); b.Attach(&s);a.send(10); printf(”%\n”,b.recv());a.send(10); printf(”%\n”,b.recv());

Page 149: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

149

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Streams 4 um die Nutzung handlicher zu gestalten um die Nutzung handlicher zu gestalten

wurden für die in C++ genutzten Streams wurden für die in C++ genutzten Streams die Operatoren << und >> überladendie Operatoren << und >> überladen

Philosophie:Philosophie:– in einen Datenstrom wird ein Element in einen Datenstrom wird ein Element

eingefügt, alsoeingefügt, also

Stream<T> &operator Stream<T> &operator <<<< (Stream<T>&,T&); (Stream<T>&,T&);......void A::send(int i,int j) { s void A::send(int i,int j) { s <<<< i i <<<< j; } j; }

Page 150: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

150

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Streams 5

die C++ Standardbibliothek erklärt zwei die C++ Standardbibliothek erklärt zwei Arten von Standard-StreamsArten von Standard-Streams– bidirektionale Strömebidirektionale Ströme

class ios;class ios;

– unidirektionale Strömeunidirektionale Ströme class ostream:public ios;class ostream:public ios; class istream:public ios;class istream:public ios; Dateiströme: ifstream, ofstreamDateiströme: ifstream, ofstream Stringströme: istrstream, ostrstreamStringströme: istrstream, ostrstream

Page 151: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

151

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Streams 6 insbesondere werden zwei spezielle insbesondere werden zwei spezielle

Instanzen bereitgestelltInstanzen bereitgestellt– istream istream cincin;;

unidirektionaler Eingabestrom, der unidirektionaler Eingabestrom, der standardmäßig mit der Konsole als Datenquelle standardmäßig mit der Konsole als Datenquelle verbunden istverbunden ist

– ostream ostream coutcout;; unidirektionaler Ausgabestrom, der unidirektionaler Ausgabestrom, der

standardmäßig mit der Konsole als Datensenke standardmäßig mit der Konsole als Datensenke verbunden istverbunden ist

Page 152: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

152

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Streams 7 cin und cout sind am jeweils anderen cin und cout sind am jeweils anderen

Ende mit dem Programm verbundenEnde mit dem Programm verbunden die Operatoren << und >> stehen für die Operatoren << und >> stehen für

alle C++ Standardtypen bereitalle C++ Standardtypen bereit Beispiel:Beispiel: #include <iostream.h>#include <iostream.h>

main() {main() { char name[1024]; char name[1024]; cout << ”What’s your cout << ”What’s your

name?”;name?”; cin >> name; cin >> name; cout << ”Hello ” << name; cout << ”Hello ” << name;}}

Page 153: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

153

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Ausnahmebehandlung 1 Beispiel:Beispiel:

– numerische Integration einer Funktion numerische Integration einer Funktion (Summierung mit Schrittweite)(Summierung mit Schrittweite)

– Probleme:Probleme: numerischer Unterlaufnumerischer Unterlauf

– Ergebnis regulär aber falschErgebnis regulär aber falsch numerischer Überlaufnumerischer Überlauf

– Ergebnis kann regulär sein aber falschErgebnis kann regulär sein aber falsch

Möglichkeit solche Zustände zu signalisieren Möglichkeit solche Zustände zu signalisieren und darauf zu reagierenund darauf zu reagieren

Page 154: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

154

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Ausnahmebehandlung 2 Exceptions werden als Objekt Exceptions werden als Objekt

repräsentiertrepräsentiertclass class ExceptionclassExceptionclass;;

Exceptions werden durch das Exceptions werden durch das throwthrow Konstrukt “ausgelöst”Konstrukt “ausgelöst”

throwthrow ExceptionclassExceptionclass();();

Handler:Handler: catchcatch ( (ExceptionclassExceptionclass &c) &c) {{ Behandlungscode Behandlungscode}}

Page 155: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

155

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Ausnahmebehandlung 3class RangeCheck { public: RangeCheck(char*);};

double integral(double eps) { double sum,psum; if (fabs(psum)<irgendwas) throw RangeCheck(”Underflow”); if (fabs(psum)>irgendwas) throw RangeCheck(”Overflow”);}... try { i=integral(epsilon); } catch (RangeCheck &r) { }

Page 156: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

156

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Ausnahmebehandlung 4 Exceptions können in einer Deklaration Exceptions können in einer Deklaration

bekanntgegeben werden:bekanntgegeben werden:externextern double double integralintegral(double) (double) throwthrow((RangeCheckRangeCheck););

vordefinierte Ausnahmeklassen:vordefinierte Ausnahmeklassen: class exception;class exception;

– class logic_error:exception;class logic_error:exception;» class domain_error:logic_error; invalid_argument, length_error, class domain_error:logic_error; invalid_argument, length_error,

out_of_rangeout_of_range– class runtime_error:exception;class runtime_error:exception;

» class range_error:runtime_error; overflow_errorclass range_error:runtime_error; overflow_error– class bad_exception;class bad_exception;

Page 157: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

157

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Ausnahmebehandlung 5 Regeln zur Verwendung von ExceptionsRegeln zur Verwendung von Exceptions

Ausnahmebehandlungen so festlegen, daß sie Ausnahmebehandlungen so festlegen, daß sie beschreiben, was eine Funktion beschreiben, was eine Funktion tuttut und nicht, was und nicht, was sie sie tun solltetun sollte

Ausnahmen nur für wesentliche FunktionenAusnahmen nur für wesentliche Funktionen throw(); nur in trivialsten Fällenthrow(); nur in trivialsten Fällen bad_exception sollte immer in die Spezifikation bad_exception sollte immer in die Spezifikation

aufgenommen werdenaufgenommen werden keine A.-Spezifikationen in F.-Templateskeine A.-Spezifikationen in F.-Templates nur allgemeine A.-Spezifikationen für virtuelle M.nur allgemeine A.-Spezifikationen für virtuelle M.

Page 158: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

158

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Ausnahmebehandlung 6

keine A.-Spezifikationen in typedefskeine A.-Spezifikationen in typedefs

typedef void(*FooType)(int,int) throw();typedef void(*FooType)(int,int) throw();

terminate_handler nicht in Bibliotheken verändernterminate_handler nicht in Bibliotheken verändern unexpected_handler sollte entweder unexpected_handler sollte entweder

bad_exception oder eine andere gültige bad_exception oder eine andere gültige Ausnahme generierenAusnahme generieren

Page 159: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

159

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

C++ und Performance

inline-Expansioninline-Expansion Zeigerarithmetik vs. FeldindizierungZeigerarithmetik vs. Feldindizierung temporäre Instanzentemporäre Instanzen

HPC++HPC++

Page 160: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

160

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

inline-Expansion normalerweise werden Funktionen bzw. normalerweise werden Funktionen bzw.

Methoden über einen call-Befehl als Methoden über einen call-Befehl als Unterprogramm gerufenUnterprogramm gerufen

inline expandiert den Unterprogrammcode inline expandiert den Unterprogrammcode direkt an der Stelle des Aufrufes (damit direkt an der Stelle des Aufrufes (damit entfällt der call-overhead)entfällt der call-overhead)

auch Methoden können inline expandiert auch Methoden können inline expandiert werdenwerden

Page 161: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

161

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Beispielinline double fabs(double x) {inline double fabs(double x) { if (x<0) return -x;if (x<0) return -x; return x;return x;}}double dec(double x) {double dec(double x) { return x-1;return x-1;}}

......double y;double y;

y=dec(4.0);y=dec(4.0);y=fabs(-3.4);y=fabs(-3.4);

ld fp0,-3.4ld fp0,-3.4 ld fp1,fp0ld fp1,fp0 sub fp0,0sub fp0,0 jsgnp M1jsgnp M1 neg fp1neg fp1M1: ld (y),fp1M1: ld (y),fp1

ld fp0,-3.4ld fp0,-3.4 ld fp1,fp0ld fp1,fp0 sub fp0,0sub fp0,0 jsgnp M1jsgnp M1 neg fp1neg fp1M1: ld (y),fp1M1: ld (y),fp1

ld fp0,4.0ld fp0,4.0 push fp0push fp0 call M_deccall M_dec pop fp0pop fp0 ld (Y),fp0ld (Y),fp0

ld fp0,4.0ld fp0,4.0 push fp0push fp0 call M_deccall M_dec pop fp0pop fp0 ld (Y),fp0ld (Y),fp0

Page 162: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

162

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Zeigerarithmetik vs. Indizierung in älteren C Compilern waren Feldzugriffe in älteren C Compilern waren Feldzugriffe

über den Index des Feldelementes relativ über den Index des Feldelementes relativ ineffizient implementiert (das ist heute ineffizient implementiert (das ist heute nicht mehr der Fall!)nicht mehr der Fall!)

prinzipiell istprinzipiell ist fürfürT F[dim],*p;T F[dim],*p;

der Zugriff *(p+i) gleichwertig zu F[i]der Zugriff *(p+i) gleichwertig zu F[i]*(p+i)==F[i]; // p+i ~ p+sizeof(T)*i*(p+i)==F[i]; // p+i ~ p+sizeof(T)*i

Page 163: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

163

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

temporäre Instanzen 1

problematisch sind temporäre Instanzen, problematisch sind temporäre Instanzen, diese entstehen z.B. bei folgendem diese entstehen z.B. bei folgendem KonstruktKonstruktclass Integer {class Integer { int value; int value; Integer operator + (Integer &b) { Integer operator + (Integer &b) { Integer s; Integer s; s.value=value+b.value; s.value=value+b.value; return Integer(s);return Integer(s); } }};};

Page 164: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

164

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

temporäre Instanzen 2

für „größere“ Objekte ist es oft besser für „größere“ Objekte ist es oft besser nur auf +=, -=, *=, /=, ... Operatoren nur auf +=, -=, *=, /=, ... Operatoren zurückzugreifen, da hier die zurückzugreifen, da hier die Konstruktion einer temporären Instanz Konstruktion einer temporären Instanz entfallen kannentfallen kann– der linke Operand erhält hier gleichzeitig der linke Operand erhält hier gleichzeitig

das Ergebnis der Operationdas Ergebnis der Operation

Page 165: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

165

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

HPC++ High Performance C++High Performance C++ wird derzeit als ANSI Standard wird derzeit als ANSI Standard

vorbereitetvorbereitet besondere Eigenschaftenbesondere Eigenschaften

Loop level Parallelism: Compiler-DirektiveLoop level Parallelism: Compiler-Direktive Parallele Standard Template Library Parallele Standard Template Library Feld-ContainerFeld-Container Interface für externe Objekte (CORBA)Interface für externe Objekte (CORBA)

Open/MP konformer C++ Compiler ?Open/MP konformer C++ Compiler ?

Page 166: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

166

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

C++ und C C++ verwendet einen anderen C++ verwendet einen anderen

Bindungs-/Aufrufmechanismus für Funktionen Bindungs-/Aufrufmechanismus für Funktionen als Cals C

extern “C“ double fabs(double);extern “C“ double fabs(double);#ifdef #ifdef __cplusplus__cplusplus extern “C“ { extern “C“ {#endif#endif int abs(int); int abs(int); #include <string.h> #include <string.h>#ifdef #ifdef __cplusplus__cplusplus } }#endif#endif

Page 167: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

167

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Turbo-Pascal, Delphi

Page 168: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

168

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Entwicklung

Pascal wurde 1970 von N. Wirth Pascal wurde 1970 von N. Wirth entwickelt (zunächst als reine entwickelt (zunächst als reine Lehrsprache)Lehrsprache)

1983 ISO, DIN1983 ISO, DIN Dialekte: UCSD, MS, MT+, TurboDialekte: UCSD, MS, MT+, Turbo

– Unit Konzept (Module) durch UCSD und Unit Konzept (Module) durch UCSD und BorlandBorland

Page 169: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

169

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Eigenschaften erste OO-Sprache unter MS-DOSerste OO-Sprache unter MS-DOS OO seit Version 5.5OO seit Version 5.5 Klasse wird als strukturierter Datentyp Klasse wird als strukturierter Datentyp

erklärt (muß im Typdefinitionsteil eines erklärt (muß im Typdefinitionsteil eines Programmes erklärt werden)Programmes erklärt werden)

nur einfache Vererbungnur einfache Vererbung nur public und privatenur public und private kein Inliningkein Inlining kein ad-hoc Polymorphismuskein ad-hoc Polymorphismus

Page 170: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

170

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Klassendefinitiontype Vector=object

constructor Init(d0:Integer); function Get(i:Integer):Real;

procedure Set(v:Real,i:Integer);private var dim:Integer; x:^Real;end;

Point=object(Vector) ... end;

constructor Vector.Init(d0:Integer);begin ... self.Set(0.0,0);end;

Page 171: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

171

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Instanzierung

der Konstruktor muß immer explizit der Konstruktor muß immer explizit gerufen werdengerufen werden– statisch:statisch: var x:ObjectType;var x:ObjectType;

x.Init();x.Init();

– dynamisch:dynamisch:type type PObjectTypePObjectType=^ObjectType;=^ObjectType;var x:var x:PObjectTypePObjectType;;

x:=x:=newnew((PObjectTypePObjectType,Init(...));,Init(...));

Page 172: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

172

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Semantik von new und dispose– neue Syntax und Semantik für new:neue Syntax und Semantik für new:

function new(Pointertype [ , Konstruktor ] ) : Pointer;function new(Pointertype [ , Konstruktor ] ) : Pointer; new allokiert Platz auf dem Heap und ruft zusätzlich new allokiert Platz auf dem Heap und ruft zusätzlich

den angegeben Konstruktor aufden angegeben Konstruktor auf new gibt eine Referenz auf den allokierten Bereich new gibt eine Referenz auf den allokierten Bereich

zurückzurück

– new Syntax und Semantik für dispose:new Syntax und Semantik für dispose: procedure dispose(Pointer [ , Destruktor ] );procedure dispose(Pointer [ , Destruktor ] ); dispose ruft den angegebenen Destruktor und gibt dispose ruft den angegebenen Destruktor und gibt

anschließend den Speicher freianschließend den Speicher frei

Page 173: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

173

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Destruktion eine Instanz wird zerstört wenneine Instanz wird zerstört wenn

der Gültigkeitsbereich der statischen der Gültigkeitsbereich der statischen Instanzvariablen verlassen wirdInstanzvariablen verlassen wird

der dynamisch allokierte Platz freigegeben wirdder dynamisch allokierte Platz freigegeben wird

in beiden Fällen muß der Destruktor in beiden Fällen muß der Destruktor explizit gerufen werden, alsoexplizit gerufen werden, also

var a:ObjectType; ... a.Init; ... a.Done;var a:ObjectType; ... a.Init; ... a.Done; var p:PObjectType; ... var p:PObjectType; ... p:= p:=newnew(PObjectType,Init);(PObjectType,Init);... ... disposedispose(p,Done);(p,Done);

Page 174: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

174

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Polymorphe Methoden

Methoden werden standardmäßig Methoden werden standardmäßig statisch gebundenstatisch gebunden

dynamisch zu bindende Methoden dynamisch zu bindende Methoden werden durch „werden durch „virtualvirtual“ gekennzeichnet“ gekennzeichnet

Beispiel:Beispiel: type ObjectType=objecttype ObjectType=object procedure S; procedure S; procedure V; procedure V;

virtualvirtual; ; end; end;

Page 175: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

175

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Bibliotheken

Turbo-Pascal wurde durch das Konzept Turbo-Pascal wurde durch das Konzept der Turbo-Vision Bibliothek sehr der Turbo-Vision Bibliothek sehr erfolgreicherfolgreich

die Turbo-Vision Bibliothek wurde nach die Turbo-Vision Bibliothek wurde nach Turbo-C++ übernommenTurbo-C++ übernommen

unter MS-Windows wurde Object-unter MS-Windows wurde Object-Windows in Anlehnung an die Turbo-Windows in Anlehnung an die Turbo-Vision eingeführtVision eingeführt

Page 176: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

176

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Turbo-Vision 1

ist eine Klassenbibliothek zur Erstellung ist eine Klassenbibliothek zur Erstellung SAA konformer NutzerschnittstellenSAA konformer Nutzerschnittstellen

es gibt es gibt – Widget-KlassenWidget-Klassen

Dialogboxen, Fenster, Eingabezeilen, Menüs, ..Dialogboxen, Fenster, Eingabezeilen, Menüs, ..

– eine Applikationsklasseeine Applikationsklasse– eine Ereignisklasseeine Ereignisklasse

Page 177: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

177

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Turbo-Vision 2 Beispiel:Beispiel:

program TVGUID01;

uses App;

type TMyApp = object(TApplication) end;

var MyApp: TMyApp;

begin MyApp.Init; MyApp.Run; MyApp.Done;end.

Page 178: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

178

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Turbo-Vision 3

Page 179: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

179

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Oberon

Page 180: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

180

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Eigenschaften

N. Wirth, J. GutknechtN. Wirth, J. Gutknecht System + Oberfläche + SpracheSystem + Oberfläche + Sprache

Nachfolger von Pascal und ModulaNachfolger von Pascal und Modula BlockstrukturBlockstruktur ModulkonzeptModulkonzept strenge Typisierungstrenge Typisierung TyperweiterungTyperweiterung ad-hoc Polymorphismus (Oberon-2)ad-hoc Polymorphismus (Oberon-2) Trait-basiertTrait-basiert

Page 181: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

181

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Module

der Hauptblock eines der Hauptblock eines Moduls wird beim Laden Moduls wird beim Laden des Moduls gerufendes Moduls gerufen

ein Modul ist persistentein Modul ist persistent

MODULEMODULE CalcCalc;;IMPORTIMPORT In, Out; In, Out;

VAR a:Integer;VAR a:Integer;

PROCEDUREPROCEDURE SetASetA**();();BEGINBEGIN In.Open; In.Int(a); In.Open; In.Int(a); END END SetASetA;;

PROCEDUREPROCEDURE Privat Privat :: TypTyp ;;BEGINBEGIN ......END END PrivatPrivat;;

BEGINBEGIN ......ENDEND CalcCalc..

System.Compile Calc.Mod;System.Compile Calc.Mod;

Calc.SetA 100Calc.SetA 100

Calc ~System.FreeCalc ~System.Free

Page 182: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

182

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Klassen 1 Klassen werden als Erweiterung von Records Klassen werden als Erweiterung von Records

betrachtetbetrachtetTYPE TYPE AClassPtr = POINTER TO AClass;AClassPtr = POINTER TO AClass;

AClass = RECORDAClass = RECORDpriv_m : PROCEDURE (...);priv_m : PROCEDURE (...);public_mpublic_m**: PROCEDURE (...);: PROCEDURE (...);priv_a : Integer;priv_a : Integer;public_apublic_a**: Typ;: Typ;

END; END;

öffentliche Komponenten werden durch einen öffentliche Komponenten werden durch einen ** gekennzeichnetgekennzeichnet

Page 183: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

183

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Klassen 2

die Bindung erfolgt durch explizite die Bindung erfolgt durch explizite Übergabe der Instanz in einem formalen Übergabe der Instanz in einem formalen ParameterParameterPROCEDURE PROCEDURE ( self : AClass )( self : AClass ) public_m* (...) ; public_m* (...) ;BEGINBEGIN In.Open; In.Open; In.Integer(self.priv_a); In.Integer(self.priv_a);END public_m;END public_m;

Page 184: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

184

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Vererbung

ursprünglich objektbasiert, also von ursprünglich objektbasiert, also von Objektprototyp abgeleitetObjektprototyp abgeleitet

mögliche Inkonsistenz in Methodenmögliche Inkonsistenz in Methoden SpeicherplatzSpeicherplatz

KlassenbasiertKlassenbasiert TYPE BClassPtr = POINTER TO BClass;TYPE BClassPtr = POINTER TO BClass; BClassBClass = RECORD = RECORD((AClassAClass)) new_m : PROCEDURE(...); new_m : PROCEDURE(...); END; END;

Page 185: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

185

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Instanzierung

Oberon verfügt über eine garbage-Oberon verfügt über eine garbage-collection, d.h. Instanzen müssen nur collection, d.h. Instanzen müssen nur erzeugt werdenerzeugt werden

VAR b : BClassPtr;VAR b : BClassPtr;

NEW(b);NEW(b);

genauer: es gibt keine Möglichkeit eine genauer: es gibt keine Möglichkeit eine Instanz explizit zu zerstörenInstanz explizit zu zerstören

Page 186: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

186

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Page 187: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

187

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Java

Page 188: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

188

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Entwicklung

1990 ursprünglich unter dem Namen „Oak“ 1990 ursprünglich unter dem Namen „Oak“ als Sprache für die Programmierung als Sprache für die Programmierung „hybrider Systeme im Consumer Bereich“ (! „hybrider Systeme im Consumer Bereich“ (! Ada) vonAda) vonJ. Gosling bei Sun entworfen, hatte aber J. Gosling bei Sun entworfen, hatte aber nie Erfolgnie Erfolg

1993 in Java umbenannt und als Sprache 1993 in Java umbenannt und als Sprache für Internetanwendungen verwendet (! für Internetanwendungen verwendet (! portabel)portabel)

Page 189: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

189

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Eigenschaften 1

C++ ähnliche SyntaxC++ ähnliche Syntax Garbage-collectionGarbage-collection multi-threadingmulti-threading soll sicher und robust seinsoll sicher und robust sein Interpretersprache (basiert auf virtueller Interpretersprache (basiert auf virtueller

Maschine, die Java-Bytecode ausführt),Maschine, die Java-Bytecode ausführt),daher ineffizientdaher ineffizient

Page 190: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

190

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Eigenschaften 2

Unterschiede zu C++Unterschiede zu C++ keine Typdefinitionen, kein Pre-Prozessorkeine Typdefinitionen, kein Pre-Prozessor keine Strukturen oder Unionskeine Strukturen oder Unions keine nicht-Member-Funktionenkeine nicht-Member-Funktionen keine Mehrfachvererbungkeine Mehrfachvererbung keine automatisch Typumwandlungkeine automatisch Typumwandlung keine manuelle Speicherverwaltung (!Garbage-keine manuelle Speicherverwaltung (!Garbage-

collection) und Zeigermanipulationcollection) und Zeigermanipulation

Page 191: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

191

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Klassendefinition & Instanzierung Klassen:Klassen:

classclass PointPoint {{ privateprivate double x,y; double x,y; publicpublic PointPoint() { x=0; y=0; }() { x=0; y=0; } public double GetX() { return x; } public double GetX() { return x; } public void SetX(double v) { x=v; } public void SetX(double v) { x=v; }}}

Instazierung:Instazierung:Point p; ... p=Point p; ... p=newnew Point(); Point();

Page 192: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

192

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Vererbung 1 Vererbung in Java bedeutet ErweiterungVererbung in Java bedeutet Erweiterung

class class PixelPixel extendsextends PointPoint { { private int color; private int color; public Pixel() { public Pixel() { super.SetXsuper.SetX(0);(0); color=0; color=0; } }}}

alle Klassen sind von Object abgeleitetalle Klassen sind von Object abgeleitet

Page 193: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

193

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Vererbung 2 die Vererbung kann durch Festlegung von die Vererbung kann durch Festlegung von

“final” Klassen beschränkt werden“final” Klassen beschränkt werdenfinalfinal class KeineVererbung { class KeineVererbung { ... ...}}

auch die Methodenvererbung kann auch die Methodenvererbung kann eingeengt werdeneingeengt werdenclass Klasse {class Klasse { finalfinal public NichtVererbbar() { ... } public NichtVererbbar() { ... }}}

Page 194: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

194

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Interfacevererbung statt Mehrfachvererbung unterstützt Java statt Mehrfachvererbung unterstützt Java

InterfacevererbungInterfacevererbunginterfaceinterface MyInt1MyInt1 { { public void M1(); public void M1();}}interfaceinterface MyInt2MyInt2 { { public void M2(); public void M2();}}class Klasse class Klasse extendsextends Basisklasse Basisklasse implementsimplements MyInt1MyInt1,,MyInt2MyInt2 { {......}}

Page 195: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

195

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

abstrakte Methoden wie auch in C++ gibt es die Möglichkeit wie auch in C++ gibt es die Möglichkeit

abstrakte Methoden (abstrakte Klassen) zu abstrakte Methoden (abstrakte Klassen) zu erklärenerklären

abstractabstract class ABaseclass { class ABaseclass { abstractabstract public void M(); public void M();}}

eine Klasse muß abstrakt sein, sobald eine eine Klasse muß abstrakt sein, sobald eine abstrakte Methode existiertabstrakte Methode existiert

Page 196: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

196

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Implementierung Definition und Implementation werden in Definition und Implementation werden in

einem Modul gehalteneinem Modul gehalten Klassen können bzgl. eines Moduls lokal Klassen können bzgl. eines Moduls lokal

oder global seinoder global sein Module/Klassen werden durch die Module/Klassen werden durch die

AnweisungAnweisung

importimport Kategorie.Modul.Klasse Kategorie.Modul.Klasse;;

bereitgestelltbereitgestellt

Page 197: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

197

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Programme die “Hauptklasse” eines Java-Programms die “Hauptklasse” eines Java-Programms

muß die statisch Methode main enthaltenmuß die statisch Methode main enthaltenclass MyProg {class MyProg { public static void public static void mainmain(String args[]) {(String args[]) { } } ... ...}}

der Modulname muß mit dem der Modulname muß mit dem Haupklassennamen übereinstimmenHaupklassennamen übereinstimmen

Page 198: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

198

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Internetanwendungen 1 für “Applets”, die als Internetanwendungen für “Applets”, die als Internetanwendungen

geschrieben werden gibt es ein anderes geschrieben werden gibt es ein anderes VerfahrenVerfahrenimport java.applet.*;import java.applet.*;class MyApplet extends Applet {class MyApplet extends Applet { public void public void startstart() {() { // beim Aufruf des HTML-Dokumentes // beim Aufruf des HTML-Dokumentes } } public void public void stopstop() {() { // beim Verlassen des HTML-Dokumentes // beim Verlassen des HTML-Dokumentes } }}}

Page 199: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

199

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Internetanwendungen 2

die Einbindung in das HTML-Protokoll die Einbindung in das HTML-Protokoll erfolgt durcherfolgt durch

<html><html> <body> <body> < <appletapplet codecode=”=”MyApplet.classMyApplet.class”” widthwidth=640 =640 heightheight=480>=480> < </applet/applet>> </body> </body></html></html>

Page 200: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

200

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Smalltalk-80

Page 201: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

201

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Eigenschaften

reine OO-Sprachereine OO-Sprache untypisiertuntypisiert Interpretersprache (virtuelle Maschine)Interpretersprache (virtuelle Maschine) voll implementiertes voll implementiertes

NachrichtenkonzeptNachrichtenkonzept garbage-collectiongarbage-collection interaktive Programmierumgebunginteraktive Programmierumgebung

Page 202: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

202

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

interaktive Programmierungebung

Page 203: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

203

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Klassendefinition

jede Klasse hat eine Superklasse, im jede Klasse hat eine Superklasse, im einfachsten Fall “Object”einfachsten Fall “Object”

Klassen werden in Kategorien geordnetKlassen werden in Kategorien geordnet Klasseneigenschaften:Klasseneigenschaften:

Instanzvariablen: private AttributeInstanzvariablen: private Attribute Klassenvariablen: gemeinsame Attribute a la Klassenvariablen: gemeinsame Attribute a la

static bei C++static bei C++ KategorieKategorie

Page 204: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

204

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Klassendefinition und Vererbung

Superklasse Superklasse subclasssubclass:#:#AClassAClass instanceVariableNamesinstanceVariableNames:’priv1 priv2 ...’:’priv1 priv2 ...’ classVariableNamesclassVariableNames:’shared1 shared2 ...’:’shared1 shared2 ...’ poolDictionariespoolDictionaries:’’:’’ categorycategory:’Kategorie’:’Kategorie’!!

Page 205: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

205

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Methodendefinition

Methoden werden ebenfalls kategorisiertMethoden werden ebenfalls kategorisiert

!AClass !AClass methodsFormethodsFor:’methodcategory’!:’methodcategory’!

m1m1 arg1 arg2 ... arg1 arg2 .........!!

Page 206: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

206

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Invokation

Smalltalk basiert auf dem Smalltalk basiert auf dem Nachrichtenkonzept, d.h. alle Nachrichtenkonzept, d.h. alle Methodenaufraufe sind Bestandteile Methodenaufraufe sind Bestandteile einer Nachricht an eine Instanzeiner Nachricht an eine Instanz

Empfängerobjekt Sel1 Arg1 Sel2 Arg2 Empfängerobjekt Sel1 Arg1 Sel2 Arg2 ..

Page 207: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

207

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

BeispielObject subClass:#ComplexObject subClass:#Complex instanceVariableNames:’imag real’instanceVariableNames:’imag real’ classVariableNames:’’classVariableNames:’’ poolDictionaries:’’poolDictionaries:’’!!

!Complex methodsFor:’arithmetic’!Complex methodsFor:’arithmetic’

Real: rv Imag: ivReal: rv Imag: iv real := rv .real := rv . imag := iv .imag := iv .!!

Selektor1Selektor1

Page 208: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

208

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Eiffel

Page 209: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

209

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Eigenschaften

von B. Meyer entwickeltvon B. Meyer entwickelt implementiert alle, von ihm implementiert alle, von ihm

aufgezählten Kriterien für OO-Sprachenaufgezählten Kriterien für OO-Sprachen läßt Definition von Vorbedingungen zuläßt Definition von Vorbedingungen zu keine statische Instanzierungkeine statische Instanzierung

Page 210: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

210

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Klassendefinitionclassclass MyClassMyClasscreationcreation KonstruktorKonstruktorfeature {ALL}feature {ALL} - oeffentliche Komponenenten- oeffentliche Komponenenten KonstruktorKonstruktor(i:integer) is(i:integer) is dodo ... !!value.make(1,i)... !!value.make(1,i) endendfeature {NONE}feature {NONE} - private Komponenten- private Komponenten value : array [ integer ]value : array [ integer ]endend

Page 211: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

211

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Vererbung Einfach- und MehrfachvererbungEinfach- und Mehrfachvererbung

classclass DClass DClassinheritsinherits AClass AClass BClass BClass renamerename b1 b1 asas BClassb1 BClassb1 endendendendfeature {ALL}feature {ALL}......endend

Page 212: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

212

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Instanzierung

Eiffel kennt keine statisch InstanzierungEiffel kennt keine statisch Instanzierung es werden Instanzvariablen erklärt, die es werden Instanzvariablen erklärt, die

Instanzierung erfolgt explizit durch den Instanzierung erfolgt explizit durch den Aufruf eines KonstruktorsAufruf eines Konstruktors

ivar : DClassivar : DClass

!!!!ivar.Konstruktorivar.Konstruktor

Page 213: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

213

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Operatoren in Eiffel können Operatoren überladen und es in Eiffel können Operatoren überladen und es

können neue O. definiert werdenkönnen neue O. definiert werden

infix “ opsymbol ” [ , altname ] infix “ opsymbol ” [ , altname ]

Beispiel:Beispiel:class Complexclass Complexfeature {ALL}feature {ALL} infix ”+”,Plus (b:Complex) is infix ”+”,Plus (b:Complex) is do do ... ... end endendend

Page 214: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

214

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Vorbedingungenclass Vectorclass Vectorfeature {ALL}feature {ALL} Dim : integer is Dim : integer is do do return dim; return dim; endend infixinfix ” ”++” (b:Vector):Vector ” (b:Vector):Vector isis reqiurereqiure Dim=b.Dim Dim=b.Dim dodo ...... endendfeature {NONE}feature {NONE} dim : integerdim : integerendend

Page 215: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

215

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

FORTRAN 90/95/2000 Fortran 90Fortran 90

– Operatorüberladung (ad-hoc P.)Operatorüberladung (ad-hoc P.)– generische Funktionengenerische Funktionen

Fortran 95Fortran 95– FORALLFORALL– pure und Elementfunktionenpure und Elementfunktionen

Fortran 2000Fortran 2000– OO Eigenschaften:OO Eigenschaften:

» Konstr. und Destr.Konstr. und Destr.» VererbungVererbung» PolymosphismusPolymosphismus» ProzedurreferenzenProzedurreferenzen

Page 216: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

216

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

OO-Systeme

OO-GUI‘sOO-GUI‘s OO-BetriebssystemeOO-Betriebssysteme verteiltes OOP (CORBA, DCOM)verteiltes OOP (CORBA, DCOM) OO-DatenbankenOO-Datenbanken

Page 217: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

217

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

OO GUI’s

graphische Nutzerschnittstellengraphische Nutzerschnittstellen Philosophie:Philosophie:

SchreibtischphilosophieSchreibtischphilosophie generisch Kommandos (drag and drop)generisch Kommandos (drag and drop) direktes Manipultieren (OLE)direktes Manipultieren (OLE) IconsIcons Persistenz von ObjektenPersistenz von Objekten

Page 218: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

218

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

OO-GUI‘s

Beispiele:Beispiele: SmalltalkSmalltalk OberonOberon GeoWorks EnsembleGeoWorks Ensemble NextStepNextStep MS-Windows 3.x, 95 (OLE)MS-Windows 3.x, 95 (OLE) MS-WindowsNTMS-WindowsNT IBM OS/2 Presentation ManagerIBM OS/2 Presentation Manager

Page 219: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

219

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Drag and Drop

Erzeugen einer Instanz von B bei Erzeugen einer Instanz von B bei gleichzeitigem Öffnen der Instanz agleichzeitigem Öffnen der Instanz a

Page 220: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

220

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

OLE 1.0 OLE - Object Linking and EmbeddingOLE - Object Linking and Embedding

ein Objekt enthält einen Verweis auf ein ein Objekt enthält einen Verweis auf ein anderes Objektanderes Objekt

bei „anklicken“ des enthaltenen Objektes wird bei „anklicken“ des enthaltenen Objektes wird das zugehörige Programm gestartetdas zugehörige Programm gestartet

Page 221: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

221

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

OLE 2.0 wie OLE 1.0, aber die Applikation nimmt die Gestalt wie OLE 1.0, aber die Applikation nimmt die Gestalt

der über has-a zugeordneten Anwendung ander über has-a zugeordneten Anwendung an

Page 222: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

222

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

OO-Betriebssystem

Mach-KernelMach-Kernel– objektorientierter Betriebssystemkernobjektorientierter Betriebssystemkern

Microsoft Windows mit OLEMicrosoft Windows mit OLE OberonOberon SmalltalkSmalltalk

Page 223: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

223

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Verteiltes OOP

CORBACORBA– von der Object Management Group (OMG) von der Object Management Group (OMG)

festgelegter Standardfestgelegter Standard– Common Object Request Broker Common Object Request Broker

ArchitecureArchitecure DCOMDCOM

– Konkurrenzprodukt von MicrosoftKonkurrenzprodukt von Microsoft

Page 224: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

224

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Prinzip von der ORB Technik

Client-Server-ArchitekturClient-Server-Architektur

KlassenserverKlassenserver==

ImplementationImplementation

ClientClientder Klasseder Klasse

Object Request BrokerObject Request Broker

Page 225: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

225

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Interfacevererbung

CORBA legt nur Interfacevererbung festCORBA legt nur Interfacevererbung fest

KlassenserverKlassenservermit gleichemmit gleichemInterfaceInterfaceClientClient

der Klasseder Klasse

Object Request BrokerObject Request Broker

Class RepositoryClass Repository

Page 226: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

226

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

Datenbanken relationale Datenbanken (RDBM)relationale Datenbanken (RDBM)

Menge von RelationenMenge von Relationen R, SQL/DS, DB2,R, SQL/DS, DB2,

INGRES, ORACLE, DBASEINGRES, ORACLE, DBASE

semantisches Datenbankmodell (SMDB)semantisches Datenbankmodell (SMDB) Entity-Relationship Modell, prädikatenlogische und Entity-Relationship Modell, prädikatenlogische und

mengentheoretische Modellemengentheoretische Modelle RM/T, TAXIS, SAM, IFORM/T, TAXIS, SAM, IFO

objektorientiertes Datenbankmodell (OODBM), i.A. objektorientiertes Datenbankmodell (OODBM), i.A. Abbildung von OO Konzepten auf RDBMS oder Abbildung von OO Konzepten auf RDBMS oder SMDBSSMDBS

Page 227: Einführung in das objektorientierte Programmieren

Objektorientiertes Programmieren - Nils Schmeißer

227

Abteilung Kommunikation und DatenverarbeitungAbteilung Kommunikation und Datenverarbeitung

OODBMS StrukturkonzepteStrukturkonzepte

» Objektidentität, Klassen, Typen, Beziehungen, Objektidentität, Klassen, Typen, Beziehungen, zwischen Klassen, Strukturvererbungzwischen Klassen, Strukturvererbung

OperationenOperationen» Relationen, Generatoren, objekterhaltende Relationen, Generatoren, objekterhaltende

OperationenOperationen

höhere Konzeptehöhere Konzepte» Metaklassen, ADT, OO-KonzepteMetaklassen, ADT, OO-Konzepte

GemStone, ONTOS/VBASE, OGemStone, ONTOS/VBASE, O22, POET, , POET,

POSTGRESPOSTGRES