objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse,...
-
Upload
hoangquynh -
Category
Documents
-
view
229 -
download
0
Transcript of objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse,...
Objektorientiertes Programmieren - Nils Schmeißer 1
Abteilung Kommunikation und Datenverarbeitung
Einführung in dasobjektorientierte Programmieren
Nils SchmeißerAbteilung Kommunikation und Datenverarbeitung
Forschungszentrum Rossendorf e.V.
Objektorientiertes Programmieren - Nils Schmeißer 2
Abteilung Kommunikation und Datenverarbeitung
Inhalt� Programmiersprachen� Der objektorientierte Programmierstil
– Begriffsbestimmung, Theorie, Anwendung� OO Sprachen
� C++ und Standardbibliotheken (STL, MFC)� Turbo-PASCAL, Java, Smalltalk, Eiffel, Oberon
� andere OO Systeme
Objektorientiertes Programmieren - Nils Schmeißer 3
Abteilung Kommunikation und Datenverarbeitung
Literatur– „A Theory of Objects“; M. Abadi, L. Cardelli
– „Eiffel: The Language“; B. Meyer– „Programming in Oberon: Steps beyond
Pascal and Modula“; M. Reiser, N. Wirth
– “The C++ Programming Language”;B. Stroustrup
– „Java - Die Programmiersprache“;K. Arnold, J. Gosling
– „Objektorientierte Datenbanken“; A. Heuer
Objektorientiertes Programmieren - Nils Schmeißer 4
Abteilung Kommunikation und Datenverarbeitung
Andere Quellen
� Unterlagen zum OOP/C++-Kurs:http://www.fz-rossendorf.de/FVTK/MITARB/schmei/doc/CPP-Kurs
� Unterlagen zum C-Kurs:http://www.fz-rossendorf.de/FVTK/MITARB/schmei/doc/C-Kurs
Objektorientiertes Programmieren - Nils Schmeißer 5
Abteilung 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
Objektorientiertes Programmieren - Nils Schmeißer 6
Abteilung Kommunikation und Datenverarbeitung
Programmiersprachen� imperative Sprachen
� Ada, ALGOL, BASIC, C, COBOL, FORTRAN,Modula-2, PL/1, Pascal, Simula, Snobol
� funktionale und applikative Sprachen� Lisp, Logo
� prädikative Sprachen� Prolog
� objektorientierte Sprachen� Smalltalk, Eiffel, Oberon, Java, Turbo-Pascal,
C++, Fortran2000
Objektorientiertes Programmieren - Nils Schmeißer 7
Abteilung Kommunikation und Datenverarbeitung
imperative Sprachen 1� ein Programm besteht aus einer Menge
von Befehlen� BASIC: 10 l et n=. . .
20 gosub 5030 nf =nfa k40 end50 l et nf ak=160 f or i= 1 t o n70 nf ak =nf ak * i80 next i90 r et urn
Objektorientiertes Programmieren - Nils Schmeißer 8
Abteilung Kommunikation und Datenverarbeitung
imperative Sprachen 2
� prozedurale Sprachen gruppierenBefehle in Unterprogrammen
� C: i nt f ac( in t n) { i f ( n==0) r et ur n 1; r et ur n n* f ac( n- 1);}. . .nf =fa c( n);
Objektorientiertes Programmieren - Nils Schmeißer 9
Abteilung Kommunikation und Datenverarbeitung
funktionale und applikative Sp.� ein Programm besteht aus einer Menge
von Funktionen und deren Anwendung� Lisp: ( fa c (n)
( cond (( equal n 0) 1)
( tim es n ( fa c ( diff eren ce n 1)
) ) ))...( fa c n)
Objektorientiertes Programmieren - Nils Schmeißer 10
Abteilung Kommunikation und Datenverarbeitung
prädikative Sprachen
� in prädikativen Sprachen wird eineMenge von Fakten und Regelnvorgegeben
� Prolog: f ac(0 , 1) .f ac(n , f ) - > f ac ( n- 1, f / n).
Objektorientiertes Programmieren - Nils Schmeißer 11
Abteilung Kommunikation und Datenverarbeitung
objektorientierte Sprachen 1
� alle zum Lösen eines Problems nötigenInformationen werden als Objekteaufgefaßt
� Objekte empfangen und versendenNachrichten
Integer a
value
*
Integer b
value
*
Int eger a,b ; a * b
Objektorientiertes Programmieren - Nils Schmeißer 12
Abteilung Kommunikation und Datenverarbeitung
objektorientierte Sprachen 2� Smalltalk: Obj ec t s ubcl ass : # In t eger
i nsta nceVar i abl eNames: ’v al ue’f ac nfa k: =In t eger new. [ 0=val ue] i fT r ue: [ nfa k s et : 1 . ] i fF al se: [ nf ak se t : ( ( ( se l f mi nus: 1) fa c: ) ti mes: val ue ) . ] ^nf ak.!
n: =(I nt eger new) set : . ..n f ac .
Objektorientiertes Programmieren - Nils Schmeißer 13
Abteilung Kommunikation und Datenverarbeitung
Der objektorientierte P.-Stil
� Basiskonzept (abstrakter Datentyp)� Begriffsbestimmung
� Objekt, Klasse, Instanz, Attribut, Methode� Vererbung� Polymorphie
� OOD (object oriented development)� Kriterien für OO Sprachen
Objektorientiertes Programmieren - Nils Schmeißer 14
Abteilung Kommunikation und Datenverarbeitung
abstrakter Datentyp 1� das Basiskonzept der objektorientierten
Programmierung bildet der abstrakteDatentyp (ADT)
� ein ADT wird definiert durch:� seinen Wertebereich (Sorte)� die, über dem Wertebereich erklärten
Operationen� eine Menge von Vorbedingungen� eine Menge von Axiomen
Objektorientiertes Programmieren - Nils Schmeißer 15
Abteilung Kommunikation und Datenverarbeitung
abstrakter Datentyp 2
� eine Sorte kann formal als Strukturdargestellt
� Beispiel: koor d=so r t I nt eger x; I nt eger y;end;
bzw.koord=x:Integer+y:Integer
Komponenten
Objektorientiertes Programmieren - Nils Schmeißer 16
Abteilung Kommunikation und Datenverarbeitung
abstrakter Datentyp 3
� einem ADT werden Operationen (dienicht notwendig nur Operanden vomSortentyp enthalten) zugeordnet
� Beispiel: vec =ADT( koord ) Set X:( vec,I nt eger ) ; +: ( vec , vec) - >vec ; nor m:( vec)- >I nte ger ;end;
Objektorientiertes Programmieren - Nils Schmeißer 17
Abteilung Kommunikation und Datenverarbeitung
abstrakter Datentyp 4
� zur vollständigen Beschreibung einesADT’s gehören zusätzlich
� die Vorbedingungen
pr e: x=0; y=0;
� eine Menge von Axiomen (Spezifikationen), diedas Verhalten der Operationen festlegen
+ ( vec a, ve c b) =( x=a. x+b. x, y=a. y+b. y)
Objektorientiertes Programmieren - Nils Schmeißer 18
Abteilung Kommunikation und Datenverarbeitung
abstrakter Datentyp 5� Beschreibung nach Meyer:
TYPE vec[koord]FUNCTIONS SetX: vec[koord] x Integer->vec[koord]
+: vec[koord] x vec[koord] -> vec[koord]norm: vec[koord] -> Integer
CONDITIONSAXIOMS FOR ALL i:Integer,a,b,c:vec[koord]:
SetX(a,i) = a.x := i+(a,b) = c: ( c.x:=a.x+b.x,
c.y:=a.y+b.y )norm(a) = max(a.x , a.y)
Objektorientiertes Programmieren - Nils Schmeißer 19
Abteilung Kommunikation und Datenverarbeitung
abstrakter Datentyp 6
� abstrakte Datentypen werden alsKlassen implementiert
� Beispiel:cl ass vec is I nt eger x, y; vec + ( vec a, ve c b) i s r et ur n vec( a. x+b.x , a. y+b. y); end;end;
Objektorientiertes Programmieren - Nils Schmeißer 20
Abteilung Kommunikation und Datenverarbeitung
Begriffsbestimmung 1
� Objekt: eigenständiges Individuum mit
– charakteristischen Eigenschaften– einem inneren Zustand
– Attributen– Methoden
Objektorientiertes Programmieren - Nils Schmeißer 21
Abteilung Kommunikation und Datenverarbeitung
Beispiel� „Kreis“:
– charakteristische Eigenschaften:� alle Punkte des Kreises habe den gleichen
Abstand zum Mittelpunkt
– innerer Zustand:� sichtbar/unsichtbar
– Attribute:� Position, Radius, Farbe
– Methoden� Darstellen (Zeichnen), Verschieben
Objektorientiertes Programmieren - Nils Schmeißer 22
Abteilung Kommunikation und Datenverarbeitung
Begriffsbestimmung 2
� Klasse:ist die Vereinigung und formaleBeschreibung aller Objekte mit gleichenEigenschaften– Klassen können als Implementation
abstrakter Datentypen aufgefaßt werden
– Klassen werden auch als “Objektfabriken”bezeichnet
Objektorientiertes Programmieren - Nils Schmeißer 23
Abteilung Kommunikation und Datenverarbeitung
Beispiel
c l ass Kr eis kl ass e i s Punk t M it t el punkt ; Real R adi us; Colo r Far be; Kr ei s New( Punk t M 0, Real R0, Col or C0) ; Zeic hnen( ) ; Vers chi eben( Punkt NeuerMi t t el punkt ) ;end;
Objektorientiertes Programmieren - Nils Schmeißer 24
Abteilung Kommunikation und Datenverarbeitung
Begriffsbestimmung 3
� eine Instanz ist die konkreteRealisierung eines Objektes einerKlasse– eine Instanz ist genau ein Objekt– Instanzen haben einen Gültigkeitsbereich
(Lebensbereich)– Instanzen werden durch einen Konstruktor
erzeugt und einen Destruktor zerstört
Objektorientiertes Programmieren - Nils Schmeißer 25
Abteilung Kommunikation und Datenverarbeitung
Beispiel
obwohl k1 und k2 die gleichenAttributwerte haben, sind esvoneinander verschiedene Objekte
pr ogra m p1 i s Kr ei s k3=Kr eis kl ass e: : New( ( 4, 5) , 3, Gr ün) ; subpr ogra m ps1 i s Kr ei s k1=Kre i skla sse:: New(( 1, 2), 3, Rot ) ; Kr ei s k2=Kre i skla sse:: New(( 1, 2), 3, Rot ) ; .. . end;. . .end;
Objektorientiertes Programmieren - Nils Schmeißer 26
Abteilung Kommunikation und Datenverarbeitung
Begriffsbestimmung 4
Attribute sind die Variablen, die deninneren Zustand eines Objektesbeschreiben
Attribute korrespondieren in ihrerBedeutung mit den Sorten desabstrakten Datentyps
die zugehörige Klasse heißtKomponentenklasse
Objektorientiertes Programmieren - Nils Schmeißer 27
Abteilung Kommunikation und Datenverarbeitung
Beispiel
die Klasse „Punktklasse“ ist eineKomponentenklasse von „Kreisklasse“
c l ass Kr eis kl ass e i s Punk t Mit t el punkt ; Real R adi us; . . .end;
c l ass Punkt kl ass e i s . . .end;
Objektorientiertes Programmieren - Nils Schmeißer 28
Abteilung Kommunikation und Datenverarbeitung
Begriffsbestimmung 5 Methoden sind die über einer Klasse
erklärten und ihr zugeordnetenOperationen
zwei spezielle Methoden– Konstruktor: generiert eine Instanz– Destruktor: zerstört eine Instanz
ein Methodenaufruf ist Teil einerNachricht, die an ein Objekt versandtwird
Objektorientiertes Programmieren - Nils Schmeißer 29
Abteilung Kommunikation und Datenverarbeitung
Beispiel
die gesamte, an k3 versendeteNachricht lautet:
k3: „Verschiebe (dich) nach (7,8)“
pr ogra m p1 i s Kr ei s k 3=Kr eis kl ass e: : New( ( 4, 5) , 3, Gr ün) ; . . . k3 . Vers chi eben( (7 , 8) ) ;end;
Objektorientiertes Programmieren - Nils Schmeißer 30
Abteilung Kommunikation und Datenverarbeitung
Vererbung 1
Vererbung ist die Weitergabe vonEigenschaften (Attributen undMethoden) einer Basisklasse an eineabgeleitete Klasse
die Weitergabe von Werten ist ebenfallsmöglich (Klonen)
Objektorientiertes Programmieren - Nils Schmeißer 31
Abteilung Kommunikation und Datenverarbeitung
Vererbung 2
Vererbung gibt es in verschiedenenAusprägungen:
� Spezialisierung: Objektmenge der Unterklasseist Teilmenge der Objektmenge der Oberklasse
� Is-a Hierarchie: wie Spezialisierung� Typhierarchie: jedes Objekt des Untertyps
verhält sich wie ein Objekt des Obertyps� Klassenhierarchie: Vererbung der
Implementation
Objektorientiertes Programmieren - Nils Schmeißer 32
Abteilung Kommunikation und Datenverarbeitung
Beispielc l ass El l ip senkl asse i s Punk t M it t el punkt ; Real a , b; El li pse New( Punkt M0, Real a 0, Real b0) ; Vers chi eben( Punkt NeuerMi t t el punkt ) ;end;
subcla ss Kr ei skl asse of El l i pse nkl as se is Punk t M it t el punkt ; Real a , b; / / a=b Kr ei s N ew( Punk t M 0, Real R0) ; Vers chi eben( Punkt NeuerMi t t el punkt ) ;end;
Objektorientiertes Programmieren - Nils Schmeißer 33
Abteilung Kommunikation und Datenverarbeitung
Vererbung 3 es wird ebenfalls zwischen einfacher
und mehrfacher Vererbungunterschieden
x x x
x x
Basisk l ass e Basisk l ass e2Basisk l ass e1
Objektorientiertes Programmieren - Nils Schmeißer 34
Abteilung Kommunikation und Datenverarbeitung
Vererbung 4 speziell auf die Weitergabe von
Methoden bezogen ist– Ersetzung: das vollständige Überschreiben
einer Methode– Verfeinerung: die ererbte Methode wird
innerhalb der neuen Methode gerufen– Delegation: die Ausführung einer Methode
wird an ein Objekt der Oberklasse(Prototyp) weitergereicht
Objektorientiertes Programmieren - Nils Schmeißer 35
Abteilung Kommunikation und Datenverarbeitung
Beispiel�
El l i ps enkla sse:: Skali er en( Real f a, Real fb ) i s a=a* f a; b=b* fb ; e nd;
� Ersetzung:Kr ei sk l asse : : Ska l i ere n( Real f ) i s a=a* f ; b= b* f ; end;
� Verfeinerung:Kr ei sk l asse : : Ska l i ere n( Real f ) i s El li psenk l asse : : ( f, 1. 0); b =b* f ;end;
� Delegation:Kr ei sk l asse : : Ska l i ere n( Real f ) i s El li psenk l asse : : ( f, f ) ;end;
Objektorientiertes Programmieren - Nils Schmeißer 36
Abteilung Kommunikation und Datenverarbeitung
Vererbung 5
manchmal kann es sinnvoll sein, dieErzeugung von Instanzen bestimmterKlassen zu verbieten (Festlegung einesKonzeptes); solche Klassen werdenabstrakte (Basis-)Klassen genannt
Objektorientiertes Programmieren - Nils Schmeißer 37
Abteilung Kommunikation und Datenverarbeitung
Beziehungen zwischen Klassen 1
� erbt eine Klasse B von einer Klasse A,so heißt A Basisklasse oderSuperklasse von B, B heißt Subklasse
� B genügt der is-a Relation (B is-a A)
AB
Objektorientiertes Programmieren - Nils Schmeißer 38
Abteilung Kommunikation und Datenverarbeitung
Beziehungen zwischen Klassen 2
� besitzt eine Klasse A ein Attribut vomTyp der Klasse C, so heißt CKomponentenklasse von A
� A genügt der has-a Relation (A has-a C)
CA
Objektorientiertes Programmieren - Nils Schmeißer 39
Abteilung Kommunikation und Datenverarbeitung
Beziehungen zwischen Klassen 3
� benutzt eine Klasse A eine Instanz derKlasse D, so genügt A deruse-a Relation (A use-a D)
� die Relationen sind vererbbar, alsoB has-a C und B use-a D
DA
Objektorientiertes Programmieren - Nils Schmeißer 40
Abteilung Kommunikation und Datenverarbeitung
Polymorphie 1
� die Methode Swi tc hUp( ) kann invielen verschiedenen Formen auftreten,sie heißt polymorph
c l ass Gear i s Swit chUp( ) i s . . . end;end;subcla ss ManualG ear of Gear i s Swit chUp( ) i s . . . end;end;subcla ss Aut omat i cGear of Gear i s Swit chUp( ) i s . . . end;end;
Objektorientiertes Programmieren - Nils Schmeißer 41
Abteilung Kommunikation und Datenverarbeitung
Polymorphie 2
� neben dem universellenPolymorphismus (vorhergehende Folie)gibt es den ad-hoc Polymorphismus
I nt eger Tru nc( In t eger x ) ;I nt eger Tru nc( Real x) ;
� ad-hoc P. basiert auf dem Konzept derimpliziten Typkonversion
Objektorientiertes Programmieren - Nils Schmeißer 42
Abteilung Kommunikation und Datenverarbeitung
Polymorphie 3
� das Konzept der Polymorphie erlaubtsomit unterschiedliche Sichtweisen aufObjekte
� Beispiel:– eine Instanz der Klasse ManualGear ist
ebenfalls mit den Eigenschaften der KlasseGear ausgestattet, kann also wie einesolche agieren
Objektorientiertes Programmieren - Nils Schmeißer 43
Abteilung Kommunikation und Datenverarbeitung
Polymorphie 4
� eine Variable vom Typ einerSuperklasse kann somit auch eineInstanz vom Typ einer Subklasseaufnehmen
� Beispiel: Gear g;g=new ManualG ear ;
Objektorientiertes Programmieren - Nils Schmeißer 44
Abteilung Kommunikation und Datenverarbeitung
Bindung 1
� der Bindungsmechanismus beschreibt,wie eine Methode einer Klasseaufgerufen wird
� verschiedene Bindungskonzepteerlauben eine effiziente Wiederver-wendung bzw. gemeinsame Nutzungvon Code auf sehr elegante Art undWeise
Objektorientiertes Programmieren - Nils Schmeißer 45
Abteilung Kommunikation und Datenverarbeitung
Bindung 2� statische Bindung:
– während der Übersetzung wird dieKlassenzugehörigkeit der Instanz bestimmtund daraus die zu rufende Methode ermittelt
� Beispiel: Manual Gear g=new Manual Gear ;g. Swi t ch Up( );
ruft die Methode der Klasse Manual GearGear g=new ManualG ear ;g. Swi t ch Up( );
die der Klasse GearObjektorientiertes Programmieren - Nils Schmeißer 46
Abteilung Kommunikation und Datenverarbeitung
Bindung 3� dynamische (späte) Bindung:
– die Klassenzugehörigkeit der Instanz wirderst zur Laufzeit bestimmt
� Beispiel: Manual Gear g=new Manual Gear ;g. Swi t ch Up( );
ruft die Methode der Klasse Manual GearGear g=new ManualG ear ;g. Swi t ch Up( );
ruft ebenfalls die der Klasse ManualGear
Objektorientiertes Programmieren - Nils Schmeißer 47
Abteilung Kommunikation und Datenverarbeitung
Bindung 4� späte Bindung wird nicht von allen
Sprachen unterstützt� standardmäßig wird eine Methode
statisch gebunden� dynamisch zu bindende Methoden
werden durch ein speziellesSchlüsselwort (meist “virtual”)gekennzeichnet
“virtuelle Methoden”Objektorientiertes Programmieren - Nils Schmeißer 48
Abteilung Kommunikation und Datenverarbeitung
Bindung 5c l ass Gear i s I nit ( ) ; v i rt ual Swi t ch Up( ) i s .. . end;end;subcla ss ManualG ear of Gear i s I nit ( ) ; v i rt ual Swi t ch Up( ) i s .. . end;end;
Gear g = new Manual Gear ;
g. I nit ( ) ; // Gear : : I ni tg. Swit chUp( ) ; / / Manual Gear : : Swi t ch Up
Objektorientiertes Programmieren - Nils Schmeißer 49
Abteilung Kommunikation und Datenverarbeitung
Beispiel 1� ein Verfahren zum Lösen von
Gleichungssystemen
A x = b
wird implementiert� ist A dünn besetzt, so werden die nicht-0
Elemente normalerweise als Liste abgelegt, umSpeicherplatz zu sparen der Löser müßte neu implementiert werden
Objektorientiertes Programmieren - Nils Schmeißer 50
Abteilung Kommunikation und Datenverarbeitung
Beispiel 2� die Neuimplementation ist nicht nötig,
wenn der Löser übercl ass Matr i x i s i nt n,m; Data t ype dat a[ maxz][ maxs ] ; v irt ual r eal Get ( int z , in t s) ; v irt ual void Set ( int z , in t s, r eal v);end;
erklärt wirdMat rix Sol ver ( Matr i x A, Matr i x b ) ;
Objektorientiertes Programmieren - Nils Schmeißer 51
Abteilung Kommunikation und Datenverarbeitung
Beispiel 3Mat rix Sol ver ( Matr i x A , Mat r ix b) is i nt i ,j, k ; r eal f; Matr i x x = new Matri x ; f or k = 0 to A.n do begi n if abs ( A. Get (k , k)) <eps the n swap(); fo r i = k+1 to A.n do begi n f =A. Get ( i ,k) / A. Get (k , k); f or j = k+1 t o A. m do A. Set( i ,j, A. Get (i, j )-f * A. Get (k, j )) ; b.Se t (i, b. Get (i) - f*b . Get ( k)); end; end; … re t urn x;end;
Objektorientiertes Programmieren - Nils Schmeißer 52
Abteilung Kommunikation und Datenverarbeitung
Beispiel 4
� eine dünn besetzte Matrix kann dannz.B. als
subcla ss Spars eMat r ix of Mat rix is i nt n,m; Data l ist dat a; v irt ual r eal Get ( int z , in t s) ; v irt ual void Set ( int z , in t s, r eal v);end;
erklärt werden
Objektorientiertes Programmieren - Nils Schmeißer 53
Abteilung Kommunikation und Datenverarbeitung
Beispiel 5
� der Löser kann auch dann aufSparseMatrix Objekte angewandtwerden, wenn sein Quelltext nichtverfügbar ist (Bibliothek)
Mat r i x A = new Spar seMat r ix ;Mat r i x b = new Mat r i x;Mat r i x x;.. .x=Sol ve r ( A,b ) ;
Objektorientiertes Programmieren - Nils Schmeißer 54
Abteilung Kommunikation und Datenverarbeitung
Zusammenfassung– abstrakter Datentyp
� Sorten, zugeordnete Operationen
– Klassenkonzept� Klasse, Instanz, Objekt
– Vererbung� einfach, mehrfach
– Polymorphie– Bindung
� statische und späte Bindung, virtuelle Methode
Objektorientiertes Programmieren - Nils Schmeißer 55
Abteilung Kommunikation und Datenverarbeitung
Und warum das Ganze?
� Programme sollen:– sicher– sauber
– wiederverwendbar– lesbar
– schnell
sein
Objektorientiertes Programmieren - Nils Schmeißer 56
Abteilung Kommunikation und Datenverarbeitung
Softwareentwurf 1
� Modularisierung� nach Funktionen:
» Funktionensammlungen, Bibliotheken� nach Daten bzw. Objekten:
» Klassenpool� Top-down Entwurf
� Anwendung abstrakte Funktion� Zerlegung festgelegter Systementwurf
Objektorientiertes Programmieren - Nils Schmeißer 57
Abteilung Kommunikation und Datenverarbeitung
Softwareentwurf 2� Object Oriented Design
� Identifiziere Objekte� Beschreibe Objekte� Beziehungen und Gemeinsamkeiten zwischen
Objekten� Klassenbildung� Beziehungen zwischen Klassen� Klassenhierarchie� Methodenimplementation� Programm aus Objektbeschreibung
Objektorientiertes Programmieren - Nils Schmeißer 58
Abteilung Kommunikation und Datenverarbeitung
Kriterien für OO-Sprachen 1
� nach Meyer� Modularisierung nach Objekten� Abstrakte Datentypen� Freispeicherverwaltung (! C++)� Module, Klassen und Standardtypen� Vererbung� Polymorphismus und dynamische Bindung� Mehrfachvererbung (! Smalltalk)
Objektorientiertes Programmieren - Nils Schmeißer 59
Abteilung Kommunikation und Datenverarbeitung
Kriterien für OO-Sprachen 2
� nach Wegner� Objekte� Klassen� Vererbung
� Strenge Typisierung� Abstrakte Datentypen� Nebenläufigkeit� Persistenz
Objektorientiertes Programmieren - Nils Schmeißer 60
Abteilung Kommunikation und Datenverarbeitung
OO-Sprachen
� “bedeutend”– Turbo-Pascal, Delphi, C++, Java,
Smalltalk-80, Oberon-2, Eiffel, Ada 95� weniger bedeutend
– CLOS, Modula-3, Objective-C, Python,Sather, Simula, Tcl/Tk, VBScript, VisualBasic, Objective-Pascal
Objektorientiertes Programmieren - Nils Schmeißer 61
Abteilung Kommunikation und Datenverarbeitung
C++
Einführung in die Sprache undNutzung der OO Eigenschaften
Objektorientiertes Programmieren - Nils Schmeißer 62
Abteilung Kommunikation und Datenverarbeitung
C++
� 1980-87 von B. Stroustrup bei AT&Tentwickelt
� 1989 ANSI Standard� C++ ist ein „besseres C“� C++ implementiert den gesamten C
Sprachumfang +� Klassen, Vererbung, späte Bindung
Objektorientiertes Programmieren - Nils Schmeißer 63
Abteilung Kommunikation und Datenverarbeitung
Sprachbeschreibung� für die nächsten Folien soll folgende
Notation gelten:� Schlüsselwörter werden gelb dargestellt� Metavariable, die beliebige andere syntaktische
Strukturen verkörpern, werden kursiv gesetzt� in [ ] geklammerte Spracheinheiten sind
optional zu verwenden� Code wi rd i n Cour i er angegeben
Objektorientiertes Programmieren - Nils Schmeißer 64
Abteilung Kommunikation und Datenverarbeitung
C Grundlagen 1� typisierte proz. imperative Sprache� alle Variablen und Funktionen müssen
deklariert und definiert werden– Deklarationen:
vardecl ::= [ aspec ] [ const ] typename varname ;aspec ::= extern | static | register
� Standardtypen: int, float, double, char– Erweiterung: [ signed | unsigned ] [ long ] stdtype
� Felder x[ ], Referenzen *x;
Objektorientiertes Programmieren - Nils Schmeißer 65
Abteilung Kommunikation und Datenverarbeitung
C Grundlagen 2
� Strukturenstrukt ::= struct { komp1 ... kompn } varname ;
� Beispiel: st ru ct { i nt x, y; i nt col or ; } poin t ;
poi nt . x=5;
Instanz
Objektorientiertes Programmieren - Nils Schmeißer 66
Abteilung Kommunikation und Datenverarbeitung
C Grundlagen 3
� Typdefinitionentypdef ::= typedef typedescr typename ;
� Beispiel:t ypedef str uct { str uct Poi nt { i nt x, y; i nt x, y;
i nt col or ; i nt co l or ;} Poin t ; } ;
Poi nt p;
Objektorientiertes Programmieren - Nils Schmeißer 67
Abteilung Kommunikation und Datenverarbeitung
C Grundlagen 4
� Steuerstrukturen– Verzweigung
verzw ::= if ( cond ) anw [ else anw ]
– Schleifeforloop ::= for ( zuw ; cond ; iter ) anwawhile ::= do block while ( cond ) ;nwhile ::= while ( cond ) anw
Objektorientiertes Programmieren - Nils Schmeißer 68
Abteilung Kommunikation und Datenverarbeitung
C Grundlagen 5
i f ( x>=0) abs=x; el se abs=- x;
f or ( i =0; i< n; i ++) s=s+i ;
do { xn=x- f ( x) / f p(x ) ; x=xn ;} whil e ( abs( f (x ) ) >0. 2) ;
whi l e ( l ock ) ;
Objektorientiertes Programmieren - Nils Schmeißer 69
Abteilung Kommunikation und Datenverarbeitung
C Grundlagen 6� Funktionsdefinitionen
fdefdecl ::= aspec rettype fname ( [ arglist ] ) ;fdef ::= rettype fname ( [ arglist ] ) block
� Beispiel:ex t er n i nt f act ( i nt x) ;in t f ac t ( i nt x) { i f (x ==0) r et ur n 1; r et ur n x* f act (x - 1) ;}
– eine nicht-void Funktion muß immer einenWert zurückgeben (return value ; )
Objektorientiertes Programmieren - Nils Schmeißer 70
Abteilung 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
Applikation
Objektorientiertes Programmieren - Nils Schmeißer 71
Abteilung Kommunikation und Datenverarbeitung
C++ Spezifika
� neue Operatoren– new und delete
� ad-hoc Polymorphismus– Funktions- und Operatorüberladung
� Klassen� Templates� Streams
Objektorientiertes Programmieren - Nils Schmeißer 72
Abteilung Kommunikation und Datenverarbeitung
neue Operatoren in C++ 1
� new– allokiert die benötigte Menge Speicher für
ein „Objekt“ vom angegebenen Typ
– konstruiert die angegebene Anzahl vonInstanzen
� delete– zerstört die referenzierten Instanzen– gibt einen reservierten Speicherbereich frei
Objektorientiertes Programmieren - Nils Schmeißer 73
Abteilung Kommunikation und Datenverarbeitung
neue Operatoren in C++ 2
� Beispiel:
i nt * x ; i nt n, * f el d;x=new i nt ; f el d=new i nt [ n] ;. . . . ..del ete x ; del et e f el d;
x fe l d
Objektorientiertes Programmieren - Nils Schmeißer 74
Abteilung Kommunikation und Datenverarbeitung
neue Operatoren in C++ 3
� Problem:
i nt *x =new i nt ;. . .x=new i nt ;
x
Objektorientiertes Programmieren - Nils Schmeißer 75
Abteilung Kommunikation und Datenverarbeitung
Beispielt ypedef s tr uct { i nt n, m; doubl e ** dat a;} M atr i x ;
Mat r ix NewMat r ix ( i nt n0, in t m0) { Matr i x M; M. n=n0; M. m=m0; M. dat a = new double * [ M.n] ; f or ( i nt i =0;i <M. n; i ++) M.dat a[ i ] = new double [ M.m] ; r etu r n M;}
Objektorientiertes Programmieren - Nils Schmeißer 76
Abteilung Kommunikation und Datenverarbeitung
ad-hoc Polymorphismus 1
� Funktionen oder Operatoren, die sichnur durch ihre Semantik(Definitionsbereich), nicht aber durchihre Syntax unterscheiden heißenad-hoc polymorph
� Beispiel: int abs(int)double abs(double);
Objektorientiertes Programmieren - Nils Schmeißer 77
Abteilung Kommunikation und Datenverarbeitung
Funktionsüberladung
� eine vorhandene Funktion
F:A1xA2x…xAn WA
wird durch eine neue Definition
F:B1xB2x…xBm WB
überladen (A1xA2x…xAn=B1xB2x…xBm)� z.B.: in t s um( i nt a, i nt b) ;
doubl e sum(d ouble a , doubl e b) ;
Objektorientiertes Programmieren - Nils Schmeißer 78
Abteilung Kommunikation und Datenverarbeitung
ad-hoc Polymorphismus 2
� Typkonversion:� integral promotion: Aufzählungstypen können
ohne Einschränkung ev. unter Informations-verlust ineinander konvertiert werden
� integral conversion: int unsigned type wird im2er-Komplement das Bitmuster beibehalten
� float-double: ggf. unter Stellenverlust� floating-integral: Streichung von
Nachkommastellen (Keine Rundung!)
Objektorientiertes Programmieren - Nils Schmeißer 79
Abteilung Kommunikation und Datenverarbeitung
ad-hoc Polymorphismus 3� existiert eine Funktion in mehr als einer
Form, so wird aus den Typen deraktuellen Parameter der best matchbestimmtNiveau Konversion 1 exact match, einfache Konversion 2 promotions, float-double 3 Standard Konversionen, Klassenzeiger
Klassenreferenz 4 Nutzerdefinierte Konversion 5 ellipsis conversion
Objektorientiertes Programmieren - Nils Schmeißer 80
Abteilung Kommunikation und Datenverarbeitung
ad-hoc Polymorphismus 4� Beispiel:
i nt ro und( i nt x) ;i nt ro und( f l oat x) ;
– r ound( 4) ;� O.K.
– r ound( 1. 2);� Konflikt, da 1.2 double Konstante und integral-
promotion und float-double auf selbem Niveau
– r ound( ( f l oat ) 1. 2);� O.K.
Objektorientiertes Programmieren - Nils Schmeißer 81
Abteilung Kommunikation und Datenverarbeitung
ad-hoc Polymorphismus & ADT
� definieren Sie Ihre Datenstrukturen alsneue Typen
� erklären Sie Ihre Algorithmen alsFunktionen über diesen Datentypen
� Beispiel: verwenden Siet ypedef doubl e vec[ 3] ;double norm( vec a) ;
anstattdouble norm( doubl e a[ 3] ) ;
Objektorientiertes Programmieren - Nils Schmeißer 82
Abteilung Kommunikation und Datenverarbeitung
Operatorüberladung 1� ähnlich zur Funktionsüberladung
können prinzipiell alle Operatorenüberladen werden
� Einschränkungen:� es können keine neuen Operatoren erklärt
werden� die Syntax eines Operators kann nicht geändert
werden� die Semantik bestehender Definitionen kann
nicht geändert werden� die Priorität bleibt erhalten
Objektorientiertes Programmieren - Nils Schmeißer 83
Abteilung Kommunikation und Datenverarbeitung
Operatorüberladung 2� Syntax der Deklaration:
rtype operator opname (atype1 [ , atype2 ] );
� Beispiel: Vector oper ato r - ( Vect or a, Vect or b);
� Definition wie Funktionsdefinition Vector oper ato r - ( Vect or a, Vect or b) {
Vect or c; .. . r etu r n c;}
Objektorientiertes Programmieren - Nils Schmeißer 84
Abteilung Kommunikation und Datenverarbeitung
Operatorüberladung 3type def stru ct { unsigned i nt dim ; double x[1 0];} Vector ;
Vect or opera t or - ( Vector a, Vector b) { if ( a. dim ! =b. dim ) er ror (); fo r ( int i =0;i< a. di m;i++) c.x[i]= a. x[i] -b.x [ i]; c. dim =a. di m; re t urn c;}
main ( ) { Vector a={ 3,1,2,3}, b={3,4,5, 6}; Vector c=a - b;}
Objektorientiertes Programmieren - Nils Schmeißer 85
Abteilung Kommunikation und Datenverarbeitung
Operatorüberladung 4
� überladen werden kann z.B. auch [],allerding muß [] in diesem Fall direkt anden Datentyp gebunden werden
ty pede f st r uct { . .. doub l e & oper ator [] ( unsi gned int i); . ..} Vect or ;
� StrukturenObjektorientiertes Programmieren - Nils Schmeißer 86
Abteilung Kommunikation und Datenverarbeitung
Strukturen 1� Strukturen lassen sich als “Vorstufe”
zum abstrakten Datentyp interpretieren� Strukturen können Komponenten
beliebigen Typs und Funktionenenthalten
� Beispiel: str uct MySt ru ct { i nt x; i nt Va l ue() ;} ;
Objektorientiertes Programmieren - Nils Schmeißer 87
Abteilung Kommunikation und Datenverarbeitung
Strukturen 2� eine, einer Struktur zugeordnete
Funktion heißt Member-function� Member-functions können nur über eine
Variable des Typs, dem sie zugeordnetsind, aufgerufen werden
Beispiel: st r uct MyStr uct m;
Val ue( ) ; unzulässig m. Valu e( ) ; O.K.
Objektorientiertes Programmieren - Nils Schmeißer 88
Abteilung Kommunikation und Datenverarbeitung
Strukturen 3
� Member-functions müssen zusammenmit ihrer Struktur definiert werden
i nt My St r uc t : : Val ue( ) { r et ur n x; }
� Komponenten derselben Strukturbrauchen nicht qualifiziert zu werden
� Strukturen können nicht vererben
Objektorientiertes Programmieren - Nils Schmeißer 89
Abteilung Kommunikation und Datenverarbeitung
Array-Subscriptionty pede f st r uct { unsi gned int dim ; doub l e x[ 10] ; doub l e & oper ator [] ( uns i gned int i);} Vect or ;
double &Vector : : operat or [ ] ( unsign ed i nt i ) { i f ( ( i<0 ) || ( di m<=i ) ) er ror ( ); r etu r n x[ i] ;}.. .Vector a;
a[ 0]=5 . 0;pr i ntf ( ”%l f \n” , a[0 ] );
Objektorientiertes Programmieren - Nils Schmeißer 90
Abteilung Kommunikation und Datenverarbeitung
Datenkapselung 1
� die Komponenten einer Struktur sindgenerell von überall her zugänglich
� Beispiel: mai n() { s t ru ct My St r uc t m;
. . . pr in t f ( ”%d\ n”, m. x); pr in t f ( ”%d\ n”, m. Val ue( )) ;}
Objektorientiertes Programmieren - Nils Schmeißer 91
Abteilung Kommunikation und Datenverarbeitung
Datenkapselung 2� um Daten zu schützen, können sie
verborgen werden und sind dann nurnoch innerhalb von Member-functionszugreifbar
� Komponenten werden durch denVorsatz des Schlüsselwortes privategeschützt
� alle Komponenten nach private sindgeschützt
Objektorientiertes Programmieren - Nils Schmeißer 92
Abteilung Kommunikation und Datenverarbeitung
Datenkapselung 3� Beispiel: ty pede f st r uct {
priv ate: int x; int y; publ i c: int Val ue() ; voi d Set ( in t v) ;} MySt r uct ;
vo i d MyStr uct : : Set ( int v) { x=v; }
mai n() { MySt r uct m; m.x= 1; / / ni cht zulä ssig m.y= 1; / / ni cht zulä ssig m.Se t (1) ; / / O.K.}
Objektorientiertes Programmieren - Nils Schmeißer 93
Abteilung Kommunikation und Datenverarbeitung
Klassen
� Klassendefinition und Instanzierung� Vererbung
– einfache und mehrfache
– virtuelle Basisklassen– abstrakte Basisklasse
� universeller Polymorhpismus, Bindung� Friends
Objektorientiertes Programmieren - Nils Schmeißer 94
Abteilung Kommunikation und Datenverarbeitung
Klassendefinition 1
� die Implementation abstrakterDatentypen erfolgt in C++ als Klasse
classdef ::= class classname interface ;interface ::= { compdef }
� die Klassendefinition ist eine Anweisungund muß daher mit einem “;”abgeschlossen werden
Objektorientiertes Programmieren - Nils Schmeißer 95
Abteilung Kommunikation und Datenverarbeitung
Klassendefinition 2� Beispiel: clas s A { } ;� Klassendeklaration: clas s A;� Attribute werden wie Komponenten
einer Struktur erklärt� Attribute sind nur
innerhalb der Klassegültig (private), könnenaber öffentlich werden
cl ass B { int a1; A a 2;} ;
Objektorientiertes Programmieren - Nils Schmeißer 96
Abteilung Kommunikation und Datenverarbeitung
Klassendefinition 3
� Methoden werden ebenfalls alsKomponenten erklärt (und damit demzugrundeliegenden ADT zugeordnet)
� Beispiel:cla ss Poi nt { i nt x, y; voi d Set X( i nt xn ) ; i nt Ge t X( );} ;
Objektorientiertes Programmieren - Nils Schmeißer 97
Abteilung Kommunikation und Datenverarbeitung
Klassendefinition 4
die Methoden werden in derKlassendefinition nur erklärt(Interfacedefinition)
die Definition der Methoden erfolgtgetrennt in der Formmdef ::= rtype cname :: mname ( [ args ] ) block
Beispiel: in t Poi nt : : Get X() { re t ur n x; }
Objektorientiertes Programmieren - Nils Schmeißer 98
Abteilung Kommunikation und Datenverarbeitung
Klassendefinition 5 Konstruktor:
! ist eine spezielle Methode, die während der Instanzierung (automatisch) aufgerufen wird
! der Konstruktor trägt immer den Namen derKlasse und hat keinen Rückgabewert (auchnicht void)
cl ass Poin t { Poi nt ( );} ;
Objektorientiertes Programmieren - Nils Schmeißer 99
Abteilung Kommunikation und Datenverarbeitung
Klassendefinition 6
! der Konstruktor kann polymorph sein
c l ass Poi nt { Poin t ( ) ; Poin t ( i nt x0 , i nt y0) ;} ;
! ein Konstruktor ohne Argumente heißtStandardkonstruktor und sollte immer definiertwerden
Objektorientiertes Programmieren - Nils Schmeißer 100
Abteilung Kommunikation und Datenverarbeitung
Klassendefinition 7
Destruktor:! der Destruktor wird während der Zerstörung
einer Instanz (automatisch) gerufen! er trägt den Klassennamen mit einer
vorangestellten Tilde “~”
c l ass Poi nt { ~Poi nt ( ); ~Poi nt ( in t x0, i nt y0);} ;
! auch der Destruktor kann polymorph sein
Objektorientiertes Programmieren - Nils Schmeißer 101
Abteilung Kommunikation und Datenverarbeitung
Instanzierung 1 statische Instanzierung:
! durch die Deklaration einer Instanzvariablenwird eine Instanz der Klasse generiert
Poin t p;
! Lebensbereich der Instanz ist derGültigkeitsbereich der Instanzvariablen
! Beispiel: { i nt x ; Poi nt p; p. Set X(2 ) ;}
Gültigkeitsbereich
Objektorientiertes Programmieren - Nils Schmeißer 102
Abteilung Kommunikation und Datenverarbeitung
Instanzierung 2
dynamische Instanzierung:! die Anwendung des Operators new auf eine
Klasse generiert eine Instanz dieser Klasse
Poi nt * p; p = new Poin t ;
! die Instanz lebt bis zur expliziten Zerstörungdurch Anwendung des delete-Operators aufirgendeine Referenz auf die Instanz
Poi nt * r = p; del ete r ;
Objektorientiertes Programmieren - Nils Schmeißer 103
Abteilung Kommunikation und Datenverarbeitung
Instanzierung 3" soll ein anderer als der Standard-
konstruktor verwendet werden, so wirdan die Instanzvariable ein Parameter-satz angehangen Poi nt p1( 1,2 ) ;
Poi nt * p2=new Poi nt ( 3, y) ;
" die Auswahl des Konstruktors erfolgtnach den Regeln des ad-hocPolymorphismus
Objektorientiertes Programmieren - Nils Schmeißer 104
Abteilung Kommunikation und Datenverarbeitung
Datenkapselung 1
" C++ kennt drei Zugriffklassen– public:
Zugriff von überall her
– protected: Zugriff nur in der Instanz und in Instanzen abgeleiteter Klassen
– private: Zugriff nur in der Instanz
Objektorientiertes Programmieren - Nils Schmeißer 105
Abteilung Kommunikation und Datenverarbeitung
Datenkapselung 2c l ass A { in t a; pr iv at e: in t b; pr ot ect ed: in t c; publ i c : in t d; in t e; pr iv at e: in t f ; in t M() ;} ;
in t A: : M() { f =1; c=2; e=3;}
A m;m.a=-1 ;m.b=-2 ; m.c=-3 ;m.d=-4 ;m.e=-5 ;m.f =-6 ;m.M();
innerhalb der Klasseinnerhalb der Klasseinnerhalb der Klasse
privat (default)privatprotectedO.K.O.K.privatprivat
Objektorientiertes Programmieren - Nils Schmeißer 106
Abteilung Kommunikation und Datenverarbeitung
kurzer Rückblick
" Klassendefinition– c l ass A { t i a i ; t j mj ; . .. } ;
t j A: : mj ( . . . ) { . .. }" Instanzierung
– statisch: A a;
– dynamisch: A *b ; b=new A( . . .) ; del et e b;
" Datenkapselung– private, protected, public
Objektorientiertes Programmieren - Nils Schmeißer 107
Abteilung Kommunikation und Datenverarbeitung
Vererbung 1
" Klassen können voneinander abgeleitetwerden
cl ass A { … } ;cl ass B : A { … } ;
" eine abgeleitete Klasseübernimmt alle Attribute und Methodenden Basisklasse
A
B
Objektorientiertes Programmieren - Nils Schmeißer 108
Abteilung Kommunikation und Datenverarbeitung
Vererbung 2" Beispiel: cl ass Point {
i nt x,y; Point ( int x0int y 0); void Draw( ); void MoveTo( int x1, int y1) ; ~Point ();};
cl ass Circl e : Poin t { i nt r; Circle ( in t x0, int y0, int r 0); void Draw( ); ~Circle () ;};
Objektorientiertes Programmieren - Nils Schmeißer 109
Abteilung Kommunikation und Datenverarbeitung
Vererbung 3# C++ kennt mehrfache Vererbung
c l ass A { i nt x; A( );} ;c l ass B { i nt z; B( );} ;c l ass C: A, B { C( );} ;
A
C
B
Objektorientiertes Programmieren - Nils Schmeißer 110
Abteilung Kommunikation und Datenverarbeitung
Vererbung 4
# Namenskonflikte werden durchvollständige Qualifizierung aufgelöst
c l ass A { i nt x; } ;c l ass B { i nt x; } ;c l ass C: A, B { i nt sum() { re t ur n A: : x+B: : x ; }} ;
Objektorientiertes Programmieren - Nils Schmeißer 111
Abteilung Kommunikation und Datenverarbeitung
Vererbung 5
# virtuelle Basisklassen
c l ass A { };c l ass B: A { } ;c l ass C: A { } ;c l ass D: B,C { };
c l ass A { };c l ass B: vir t ual A { };c l ass C: vir t ual A { };c l ass D: B,C { };
A A
A
B
C
D
A
B
C
D
B C
D
Objektorientiertes Programmieren - Nils Schmeißer 112
Abteilung Kommunikation und Datenverarbeitung
Vererbung 6
# abstrakte Basisklassec l ass A { void m1() =0; / / a bs t r akt e Met hode void m2() { … } ; / / k onkr ete M eth ode} ;
# A kann nicht instanziert werdenc l ass B: A { void m1() { … } ; / / K onkr eti si eru ng m1} ;… B b;
Objektorientiertes Programmieren - Nils Schmeißer 113
Abteilung Kommunikation und Datenverarbeitung
Beispielc l ass Gear { unsi gned i nt g ear ; publ i c : vo i d Sw i t chUp( ) =0;} ;
c l ass Manual Gear : Gear { publ i c : vo i d Sw i t chUp( ) ;}
voi d Manual Gear : : Swit chUp( ) { . . . }
Objektorientiertes Programmieren - Nils Schmeißer 114
Abteilung Kommunikation und Datenverarbeitung
Vererbung und Datenkapselung 1# die Weitergabe von Eigenschaften kann
beschränkt erfolgenc las s Z : A, publ i c B , pr otect ed C , pr i vate D { …} ;
$ public: die Zugriffsbeschränkungen derElternklasse werden übernommen
$ protected: public protected$ private: public, protected private
Objektorientiertes Programmieren - Nils Schmeißer 115
Abteilung Kommunikation und Datenverarbeitung
Vererbung und Datenkapselung 2cl ass A { publ i c: i nt x ; A();};cl ass B { prot ecte d: i nt z; publ i c: B();};cl ass C: pr ote cted A, publ i c B { C();};C c ;c. x = 1; / / f alsc h, x ist prot ecte dc. A(); / / f alsc h, A ( ) is t pr otec t edc. z = 1; / / f alsc h, z ist prot ecte dc. B(); / / O . K.
Objektorientiertes Programmieren - Nils Schmeißer 116
Abteilung Kommunikation und Datenverarbeitung
Bindung 1
% Komponenten werden in C++ standard-mäßig statisch gebunden
% soll eine Methode dynamisch gebundenwerden, so muß dies durch dasSchlüsselwort ”virtual” kenntlichgemacht werden
% wird eine virtuelle Methodeüberschrieben, so bleibt sie virtuell
Objektorientiertes Programmieren - Nils Schmeißer 117
Abteilung Kommunikation und Datenverarbeitung
Bindung 2cl ass Gear { publ i c: vi r tua l vo i d Switc hUp( ) =0; vo i d Switc hDown(); ~Gear ( ) ;};cl ass ManualGe ar : pub l ic Gear { publ i c: vi r tua l vo i d Switc hUp( ) ; vo i d Switc hDown(); ~Gear ( ) ;};
Gear * g = new ManualGe ar () ;g- >Swi t chUp(); / / Manua l Gear :: Swi tch Upg- >Swi t chDown( ) ; / / Gear : : Swi t chDown
Objektorientiertes Programmieren - Nils Schmeißer 118
Abteilung Kommunikation und Datenverarbeitung
Bindung 3
% Frage: Welcher Destruktor wird imvorhergegangenen Beispiel gerufen,wenn
dele t e g;
aufgerufen wird und warum?
Objektorientiertes Programmieren - Nils Schmeißer 119
Abteilung Kommunikation und Datenverarbeitung
Bindung 4
% da der Destruktor zunächst nichtdynamisch gebunden wird, wird ~Gear()gerufen - das ist falsch! virtueller Destruktor
c l ass Gear { . .. v i rt ual ~Gear ( ) ;
} ;c l ass Manual Gear { .. . v i rt ual ~Manual Gear ( ) ;} ;
Objektorientiertes Programmieren - Nils Schmeißer 120
Abteilung Kommunikation und Datenverarbeitung
Bindung 5 - VMT
% die dynamische Bindung wird über einesogenannte VMT - Virtual Method Tableorganisiert
at t r
at t r
A * b = n ew B ;VMT B: A
st at .
v i r t uel l e M.
st at .
VMT VMT=vi r t . v i r t .=
Objektorientiertes Programmieren - Nils Schmeißer 121
Abteilung Kommunikation und Datenverarbeitung
Beispiel 1
cl ass Car { Gear * gear ; Engine * engine ; publ i c: Car ( Engine *e, Gear *g) ; vi r tua l vo i d A ccel ( double) =0;};Car ::C ar( Engin e *e , Gear *g ) { engi ne=e; gear =g;}
Objektorientiertes Programmieren - Nils Schmeißer 122
Abteilung Kommunikation und Datenverarbeitung
Beispiel 2cl ass Renault _R19: publ i c Car { publ i c: Renaul t _R19( Engine *e, Gear *g); vi r tua l vo i d Accel ( double) ;};Renaul t _R19:: Renau l t _R19(( Engi ne *e , Gear *g ) : Car (e , g) { }vo i d Renau l t _R19:: Acce l (do uble v) { . .. i f ( engi ne-> RPM() >3000) gear - >Swi t chUp(); . ..} Car * my_car =new Renaul t _R19( new Gasoli neEngi ne(2 . 5) , new Manual Gear ( 5) ) ;
Objektorientiertes Programmieren - Nils Schmeißer 123
Abteilung Kommunikation und Datenverarbeitung
static Members 1& ein static Member existiert nur ein
einziges mal für alle Instanzenc l ass A { i nt x; s t at i c in t y; s t at i c vo i d m1( ) ; void m2() ; v i rt ual voi d m3( ) ;} ;
A a , b;
& kein this
a bA
xa. x b. xA. y
VMT VMTVMT
m3
m1m2 m2 m2
Objektorientiertes Programmieren - Nils Schmeißer 124
Abteilung Kommunikation und Datenverarbeitung
static Members 2
& ein static Attribut muß extra erklärtwerden
c l ass A { s t at i c in t i ;} ;
i nt A: : i ;
Objektorientiertes Programmieren - Nils Schmeißer 125
Abteilung Kommunikation und Datenverarbeitung
Friends 1& Beispiel
c l ass Mat ri x { Matr i x oper ato r * ( Mat ri x&) ;} ;c l ass Vecto r { doubl e oper ato r * ( Vecto r &) ;} ;
& Wie sollte Matrix * Vector erklärt werdendamit * effizient arbeitet?
Objektorientiertes Programmieren - Nils Schmeißer 126
Abteilung Kommunikation und Datenverarbeitung
Friends 2& 1. Variante:
c l ass Mat ri x { Matr i x oper ato r * ( Vecto r &) ;} ;
– hängt von der Implementation von Matrix ab(muß also jedesmal neu erklärt werden)
& 2. Variantec l ass Mat ri x { f r ie nd Mat r i x opera t or *( Mat ri x&, Vect or &) ;} ;
Objektorientiertes Programmieren - Nils Schmeißer 127
Abteilung Kommunikation und Datenverarbeitung
Friends 3' die Implementation als friend gilt als
Hinweis darauf, daß die Klasseverändert werden kann
' ein friend ist quasi Member einer Klasseund hat Zugriff auf alle Komponentender Klassecl ass Matr i x { f rie nd Matri x operat or * (Mat rix& , Vect or &) ;};cl ass Vect or { f rie nd Matri x operat or * (Mat rix& , Vect or &) ;};
Objektorientiertes Programmieren - Nils Schmeißer 128
Abteilung Kommunikation und Datenverarbeitung
Zusammenfasung - Klassen
' Klassendefinition und Instanzierung' Vererbung
– einfache und mehrfache
– Datenkapselung– virtuelle und abstrakte Basisklassen
' universeller Polymorphismus, Bindung' Friends
Objektorientiertes Programmieren - Nils Schmeißer 129
Abteilung Kommunikation und Datenverarbeitung
Templates 1
' Templates stellen die Realisierung desparametrischen Typkonzeptes dar
' Motivation:( Verfahren können für einen abstrakten Typ T
erklärt werden, ohne das der Typ bekannt ist( die Konkretisierung des Typs erfolgt erst bei
der Nutzung des Verfahrens' Beispiel: das Konzept des Vektors
Objektorientiertes Programmieren - Nils Schmeißer 130
Abteilung Kommunikation und Datenverarbeitung
Templates 2– ein Vektor wird über einem Körper (T) erklärt
te mpla t e<cl ass T> c las s Vector { T * v; uns ign ed i nt d i m; publ i c: Vector ( uns i gned in t s) { i f ( s==0) er r or ( “ dim ensi on mu st not be 0“ ) ; v=new T[ dim=s]; } T &oper ato r [] ( uns ign ed i nt i) { r etu r n v[ i]; } uns ign ed i nt D i m() { r etur n dim ; }};
Objektorientiertes Programmieren - Nils Schmeißer 131
Abteilung Kommunikation und Datenverarbeitung
Templates 3
' Nutzung:
voi d f ( ) { Vect or <in t > v1 ( 100) ; / / 100 i nt eger / / El ement e Vect or <Gear * > g( 10) ; / / 10 Re f er enzen auf
/ / G et r i ebei nsta nzen . . . g[ 5] - >Swi t chUp( ) ; / / s ch al t e G. 5}
Objektorientiertes Programmieren - Nils Schmeißer 132
Abteilung Kommunikation und Datenverarbeitung
Templates 4' Member-functions von Templates
müssen nicht inline erklärt werdent empla t e<cl ass X> cla ss Y { X x; publ i c : voi d met hod( X x0 ) ;} ;
' die externe Definition erfolgt mit vollerQualifikation:t empla t e<cl ass X> voi d Y<X>: : met hod( X x0) { x=x0 ;}
Objektorientiertes Programmieren - Nils Schmeißer 133
Abteilung Kommunikation und Datenverarbeitung
Templates 5
) der Quelltext der Implementation vonnicht-inline Methoden von Templatesmuß nicht vorliegen,damit können quasi abstrakteBibliotheken geschaffen werden
Objektorientiertes Programmieren - Nils Schmeißer 134
Abteilung Kommunikation und Datenverarbeitung
Templates und Vererbung
) Template Klassen können vererben:te mpla t e<cl ass T> List { T * el ement s; } ;te mpla t e<cl ass T> Orde r edL i st : publi c Li s t <T> {}
cl ass A;te mpla t e<cl ass T> Base d_on_A : A { } ;
) Templates können auf verschiedenenTypen basieren:
te mpla t e<cl ass A, cl ass B, cl ass List <A>> C { . ..} ;
Objektorientiertes Programmieren - Nils Schmeißer 135
Abteilung Kommunikation und Datenverarbeitung
Templates und Argumente) Templates können Argumente erhalten:
te mpla t e<cl ass T, unsig ned i nt s> cl ass Arra y { T dat a[ s] ;};
) Templates können sogar parametrischerbente mpla t e<cl ass T, cl ass A> c las s Par amContai ner :public Cont ain er<T >, publi c A { . ..};
Objektorientiertes Programmieren - Nils Schmeißer 136
Abteilung Kommunikation und Datenverarbeitung
Funktions Templates 1
) Grundidee:* ein Funktionstemplate definiert eine Familie
von Funktionen) Beispiel:
t empla t e<cl ass T> voi d sor t ( Vec t or <T>&) ;voi d f ( Vect or <in t > & v i , Vec t or <f l oat > & vf ) { sort ( v i ); sort ( v f );}
Objektorientiertes Programmieren - Nils Schmeißer 137
Abteilung Kommunikation und Datenverarbeitung
Funktions Templates 2
) Implementation:t empla t e<cl ass T> voi d sor t ( Vec t or <T> & v) { unsi gned i nt n=v. si ze( ); f or ( i nt i =0;i <n- 1; i ++) fo r ( in t j =n- 1; i< j ; j -- ) i f ( v [ j ] <v [ j - 1] ) { T t emp=v [ j ] ; v[j ] =v[j - 1] ; v[j - 1] =t emp; }}
Objektorientiertes Programmieren - Nils Schmeißer 138
Abteilung Kommunikation und Datenverarbeitung
Funktionstemplates 3– Co-Existenz von Templates und
Spezialisierungen te mplate <cl ass T> c l ass Comp { public : static int comp( T &a,T & b) { ret urn a<b; } };
cl ass Comp <char *> { public : static int comp( const ch ar *a, co nst char * b) { re t urn strc mp(a,b); } };
te mplate <cl ass T> c l ass Sort ableVect or : public Vector <T>, public C omp<T> { . .. };
Objektorientiertes Programmieren - Nils Schmeißer 139
Abteilung Kommunikation und Datenverarbeitung
Funktionstemplates 4+ Operationen als Template-Argumente
te mplate <cl ass T, cl ass Comp > class S ort { public void sort ( vector <T>&); };
te mplate <cl ass T, cl ass Comp > vo i d Sort <T, Comp>:: sort ( Vect or <T> &v ) { . .. i f ( Comp: : comp(v[ j ],v[j-1] ) ) . .. }
te mplate <cl ass T> c l ass LT: public Co mp<T>; te mplate <cl ass T> c l ass GT:public Co mp<T>; Sor t < int , LT< int > >:: sort ( v i ); Sor t < int , GT< int > >:: sort ( v i );
Objektorientiertes Programmieren - Nils Schmeißer 140
Abteilung Kommunikation und Datenverarbeitung
Standard Template Library
+ ist eine Template Sammlung von SGI(http://www.sgi.com/Technology/STL)
+ die folgende Kategorien abdeckt, Container, Iteratoren, Algorithmen, Funktionsobjekte, „Utilities“, Speicherverwaltung
Objektorientiertes Programmieren - Nils Schmeißer 141
Abteilung Kommunikation und Datenverarbeitung
STL - Container
– Konzepte, allgemeine, Folgen, assoziative Conatiner
– Containerklassen, Folgen: vector, deque, list, slist, bit_vector, assoziative Container: set, map, hash, Stringpacket: char_traits, basic_string, rope, Adaptoren: stack, queue
Objektorientiertes Programmieren - Nils Schmeißer 142
Abteilung Kommunikation und Datenverarbeitung
STL - Iteratoren– Konzepte
, einfache I., E/A I., Vorwärts-I., Bidirektionaler I.,Random Access I.
– Iterator Tags, iterator traits, iterator category, distance type,
iterator tag Klassen, iterator Basisklassen
– Iteratorfunktionen, Abstand
– Iteratorklassen, istream, ostream, reverse, raw, sequence
Objektorientiertes Programmieren - Nils Schmeißer 143
Abteilung Kommunikation und Datenverarbeitung
STL - Algorithmen– nicht mutierenede Verfahren
, for-each, Suche, Zählen, Vergleich
– mutierende Verfahren, Kopieren, Vertauschen, Transformationen,
Ersetzen, Füllen, Generieren, Löschen,Permutieren
– Sortieren, Sortieren, Zusammenführen,
Mengenoperationen, MinMax
– allgemeine Verfahren, inneres Produkt, Partialsummen, Potenzieren
Objektorientiertes Programmieren - Nils Schmeißer 144
Abteilung Kommunikation und Datenverarbeitung
STL - Funktionsobjekte– Konzepte
, Generatoren, unäre/binäre Funktionen,Monoid-Operationen, Zufallszahlengenerator
– vordefinierte Funktionen, arithmetische Op., Relationen, logische Op.
– function object adaptors
Objektorientiertes Programmieren - Nils Schmeißer 145
Abteilung Kommunikation und Datenverarbeitung
STL- Utiliti es/Speicherverwaltung
– Konzepte– Funktionen
- Relationsoperatoren
– Klassen- Paar
– Speicherklassen- Allokatoren, Iteratoren
– Funktionen- Erzeugen, Zerstören, temporärer Puffer
Objektorientiertes Programmieren - Nils Schmeißer 146
Abteilung Kommunikation und Datenverarbeitung
Streams 1. Streams repräsentieren (gepufferte)
Übertragungskanäle. Streams gehören nicht zur Sprache C++
Dat enquel le Dat ens enke
Über tr agungskanal
Pr ogra mm cout Konsol e
Objektorientiertes Programmieren - Nils Schmeißer 147
Abteilung Kommunikation und Datenverarbeitung
Streams 2
. prinzipiell könnte eine Streamklasse wiefolgt aussehen
t empla t e<cl ass T> cla ss St r eam { T * buff er ; publ i c : St r eam( unsig ned i nt ma xsi ze ) ; vo i d Put ( T t ) ; T Get () ;} ;
Objektorientiertes Programmieren - Nils Schmeißer 148
Abteilung Kommunikation und Datenverarbeitung
Streams 3cl ass A { St r eam<int > *s ; publ i c: vo i d A t tac h(St r eam<int > * ss); vo i d s end( i nt i ); in t re cv() ;};
vo i d A : :At t ach ( Str eam<i nt> * ss ) { s =ss ; }vo i d A : :se nd(i nt i ) { s -> Put (i ) ; }in t A: : rec v() { re t urn s-> Get ( ) ; }
St r eam<int > s;A a,b; a. Atta ch(& s); b.At t ach ( &s);a. send( 10) ; pr int f (”% \ n”, b.re cv()) ;
Objektorientiertes Programmieren - Nils Schmeißer 149
Abteilung Kommunikation und Datenverarbeitung
Streams 4. um die Nutzung handlicher zu gestalten
wurden für die in C++ genutztenStreams die Operatoren << und >>überladen
. Philosophie:– in einen Datenstrom wird ein Element
eingefügt, alsoSt r eam<T> &opera t or << ( St r eam<T>&,T &) ;. . .vo i d A : :se nd(i nt i , int j) { s << i << j ; }
Objektorientiertes Programmieren - Nils Schmeißer 150
Abteilung Kommunikation und Datenverarbeitung
Streams 5
. die C++ Standardbibliothek erklärt zweiArten von Standard-Streams– bidirektionale Ströme
- class ios;
– unidirektionale Ströme- class ostream:public ios;- class istream:public ios;- Dateiströme: ifstream, ofstream- Stringströme: istrstream, ostrstream
Objektorientiertes Programmieren - Nils Schmeißer 151
Abteilung Kommunikation und Datenverarbeitung
Streams 6/ insbesondere werden zwei spezielle
Instanzen bereitgestellt– istream cin;
0 unidirektionaler Eingabestrom, derstandardmäßig mit der Konsole als Datenquelleverbunden ist
– ostream cout;0 unidirektionaler Ausgabestrom, der
standardmäßig mit der Konsole als Datensenkeverbunden ist
Objektorientiertes Programmieren - Nils Schmeißer 152
Abteilung Kommunikation und Datenverarbeitung
Streams 7/ cin und cout sind am jeweils anderen
Ende mit dem Programm verbunden/ die Operatoren << und >> stehen für
alle C++ Standardtypen bereit/ Beispiel: #i nclu de <i ostr eam.h>
mai n() { char name [ 1024]; cout << ” What ’ s y our name?”; c in >> na me; cout << ” Hell o ” << n ame;}
Objektorientiertes Programmieren - Nils Schmeißer 153
Abteilung Kommunikation und Datenverarbeitung
Ausnahmebehandlung 1/ Beispiel:
– numerische Integration einer Funktion(Summierung mit Schrittweite)
– Probleme:0 numerischer Unterlauf
– Ergebnis regulär aber falsch0 numerischer Überlauf
– Ergebnis kann regulär sein aber falsch/ Möglichkeit solche Zustände zu
signalisieren und darauf zu reagierenObjektorientiertes Programmieren - Nils Schmeißer 154
Abteilung Kommunikation und Datenverarbeitung
Ausnahmebehandlung 2/ Exceptions werden als Objekt
repräsentiertcla ss Excepti oncla ss;
/ Exceptions werden durch das throwKonstrukt “ausgelöst”
t hr ow Excepti oncla ss( );
/ Handler: cat ch ( Except i oncl ass &c) { Behandl ungs code}
Objektorientiertes Programmieren - Nils Schmeißer 155
Abteilung Kommunikation und Datenverarbeitung
Ausnahmebehandlung 3cl ass RangeCheck { publ i c: RangeCheck(c har* ) ;};
double int egra l (do uble eps ) { doub l e s um,psum; i f ( f abs ( psu m)<i r gendwas) th r ow RangeCheck(” Under flo w”); i f ( f abs ( psu m)>i r gendwas) th r ow RangeCheck(” Over f low ” );}.. . t r y { i=i nteg r al( epsi l on) ; } catch ( RangeCheck &r) { }
Objektorientiertes Programmieren - Nils Schmeißer 156
Abteilung Kommunikation und Datenverarbeitung
Ausnahmebehandlung 4/ Exceptions können in einer Deklaration
bekanntgegeben werden:ex t ern double i nte gral ( double) thro w( RangeCheck ) ;
/ vordefinierte Ausnahmeklassen:0 class exception;
– class logic_error:exception;» class domain_error:logic_error; invalid_argument,
length_error, out_of_range– class runtime_error:exception;
» class range_error:runtime_error; overflow_error– class bad_exception;
Objektorientiertes Programmieren - Nils Schmeißer 157
Abteilung Kommunikation und Datenverarbeitung
Ausnahmebehandlung 51 Regeln zur Verwendung von Exceptions
2 Ausnahmebehandlungen so festlegen, daß siebeschreiben, was eine Funktion tut und nicht,was sie tun sollte
2 Ausnahmen nur für wesentliche Funktionen2 throw(); nur in trivialsten Fällen2 bad_exception sollte immer in die Spezifikation
aufgenommen werden2 keine A.-Spezifikationen in F.-Templates2 nur allgemeine A.-Spezifikationen für virtuelle M.
Objektorientiertes Programmieren - Nils Schmeißer 158
Abteilung Kommunikation und Datenverarbeitung
Ausnahmebehandlung 6
2 keine A.-Spezifikationen in typedefs
t ypedef v oi d( * FooType) ( i nt , i nt) t hro w( ) ;
2 terminate_handler nicht in Bibliotheken verändern2 unexpected_handler sollte entweder
bad_exception oder eine andere gültigeAusnahme generieren
Objektorientiertes Programmieren - Nils Schmeißer 159
Abteilung Kommunikation und Datenverarbeitung
C++ und Performance
1 inline-Expansion1 Zeigerarithmetik vs. Feldindizierung1 temporäre Instanzen
1 HPC++
Objektorientiertes Programmieren - Nils Schmeißer 160
Abteilung Kommunikation und Datenverarbeitung
inline-Expansion1 normalerweise werden Funktionen bzw.
Methoden über einen call-Befehl alsUnterprogramm gerufen
1 inline expandiert denUnterprogrammcode direkt an der Stelledes Aufrufes (damit entfällt der call-overhead)
1 auch Methoden können inlineexpandiert werden
Objektorientiertes Programmieren - Nils Schmeißer 161
Abteilung Kommunikation und Datenverarbeitung
Beispieli nl i ne d oubl e fa bs( doubl e x) { i f ( x<0) r et ur n - x; r etu r n x;}double d ec( doubl e x ) { r etu r n x- 1;}
. . .double y ;
y=dec( 4. 0);y=f abs ( - 3.4 ) ;
ld f p0, - 3. 4 ld f p1, f p0 su b f p0, 0 js gnp M1 neg f p1M1: ld ( y), f p1
ld f p0, 4. 0 push fp 0 ca l l M_ dec pop f p0 ld ( Y), f p0
Objektorientiertes Programmieren - Nils Schmeißer 162
Abteilung Kommunikation und Datenverarbeitung
Zeigerarithmetik vs. Indizierung1 in älteren C Compilern waren
Feldzugriffe über den Index desFeldelementes relativ ineffizientimplementiert (das ist heute nicht mehrder Fall!)
1 prinzipiell ist fürT F [ di m] , *p ;
der Zugriff *(p+i) gleichwertig zu F[i]* ( p+i) ==F[i ] ; / / p+ i ~ p+s i ze of ( T) * i
Objektorientiertes Programmieren - Nils Schmeißer 163
Abteilung Kommunikation und Datenverarbeitung
temporäre Instanzen 1
3 problematisch sind temporäre Instanzen,diese entstehen z.B. bei folgendemKonstruktc l ass I nt eger { i nt val ue; I nte ger oper at or + ( I nte ger &b) { In t eger s ; s. val ue=valu e+b.v al ue; re t ur n I nt eger ( s) ; }} ;
Objektorientiertes Programmieren - Nils Schmeißer 164
Abteilung Kommunikation und Datenverarbeitung
temporäre Instanzen 2
3 für „größere“ Objekte ist es oft bessernur auf +=, -=, *=, /=, ... Operatorenzurückzugreifen, da hier dieKonstruktion einer temporären Instanzentfallen kann– der linke Operand erhält hier gleichzeitig
das Ergebnis der Operation
Objektorientiertes Programmieren - Nils Schmeißer 165
Abteilung Kommunikation und Datenverarbeitung
HPC++3 High Performance C++3 wird derzeit als ANSI Standard
vorbereitet3 besondere Eigenschaften
4 Loop level Parallelism: Compiler-Direktive4 Parallele Standard Template Library4 Feld-Container4 Interface für externe Objekte (CORBA)
3 Open/MP konformer C++ Compiler ?
Objektorientiertes Programmieren - Nils Schmeißer 166
Abteilung Kommunikation und Datenverarbeitung
C++ und C3 C++ verwendet einen anderen
Bindungs-/Aufrufmechanismus fürFunktionen als C
ext ern “ C“ doubl e f abs( doubl e);#i f def __cp l uspl us ext er n “ C“ {#endif i nt abs( i nt ) ; #i nc l ude <st ri ng. h>#i f def __cp l uspl us }#endif
Objektorientiertes Programmieren - Nils Schmeißer 167
Abteilung Kommunikation und Datenverarbeitung
Turbo-Pascal, Delphi
Objektorientiertes Programmieren - Nils Schmeißer 168
Abteilung Kommunikation und Datenverarbeitung
Entwicklung
3 Pascal wurde 1970 von N. Wirthentwickelt (zunächst als reineLehrsprache)
3 1983 ISO, DIN3 Dialekte: UCSD, MS, MT+, Turbo
– Unit Konzept (Module) durch UCSD undBorland
Objektorientiertes Programmieren - Nils Schmeißer 169
Abteilung Kommunikation und Datenverarbeitung
Eigenschaften5 erste OO-Sprache unter MS-DOS5 OO seit Version 5.55 Klasse wird als strukturierter Datentyp
erklärt (muß im Typdefinitionsteil einesProgrammes erklärt werden)
5 nur einfache Vererbung5 nur public und private5 kein Inlining5 kein ad-hoc Polymorphismus
Objektorientiertes Programmieren - Nils Schmeißer 170
Abteilung Kommunikation und Datenverarbeitung
Klassendefinitionty pe Vecto r =obj ect
cons t ruc t or I nit ( d0:I nteg er); f unc t ion Get ( i:I ntege r ):R eal;
proc edur e Set (v: Real, i :In t eger );pr i vat e var dim: I nte ger; x :^R eal;end;
Point =obj ect ( Vect or ) . . . end ;
constr ucto r Vector . Ini t (d0 : Int eger) ;begin . .. sel f .Se t (0. 0,0) ;end;
Objektorientiertes Programmieren - Nils Schmeißer 171
Abteilung Kommunikation und Datenverarbeitung
Instanzierung
5 der Konstruktor muß immer explizitgerufen werden– statisch: var x: Obj ect Type;
x . In i t ( );
– dynamisch: t ype PObj ect Type=^Obj ect Type;var x: PObj ectT ype;x : =new( PObj ect Type, I ni t( . . . )) ;
Objektorientiertes Programmieren - Nils Schmeißer 172
Abteilung Kommunikation und Datenverarbeitung
Semantik von new und dispose– neue Syntax und Semantik für new:
6 function new(Pointertype [ , Konstruktor ] ) : Pointer;6 new allokiert Platz auf dem Heap und ruft zusätzlich
den angegeben Konstruktor auf6 new gibt eine Referenz auf den allokierten Bereich
zurück
– new Syntax und Semantik für dispose:6 procedure dispose(Pointer [ , Destruktor ] );6 dispose ruft den angegebenen Destruktor und gibt
anschließend den Speicher frei
Objektorientiertes Programmieren - Nils Schmeißer 173
Abteilung Kommunikation und Datenverarbeitung
Destruktion5 eine Instanz wird zerstört wenn
6 der Gültigkeitsbereich der statischenInstanzvariablen verlassen wird
6 der dynamisch allokierte Platz freigegeben wird5 in beiden Fällen muß der Destruktor
explizit gerufen werden, also7 va r a: Obje ctTy pe; . .. a.I nit; ... a.Do ne;7 var p: PObj ectT ype; ...
p: =new( PObj ect Type , Ini t );.. . di spos e(p, Done) ;
Objektorientiertes Programmieren - Nils Schmeißer 174
Abteilung Kommunikation und Datenverarbeitung
Polymorphe Methoden
8 Methoden werden standardmäßigstatisch gebunden
8 dynamisch zu bindende Methodenwerden durch „virtual“ gekennzeichnet
8 Beispiel: t yp e O bj ect Type=obj ect pr ocedur e S; pr ocedur e V; vir t ual ; end;
Objektorientiertes Programmieren - Nils Schmeißer 175
Abteilung Kommunikation und Datenverarbeitung
Bibliotheken9 Turbo-Pascal wurde durch das Konzept
der Turbo-Vision Bibliothek sehrerfolgreich
9 die Turbo-Vision Bibliothek wurde nachTurbo-C++ übernommen
: unter MS-Windows wurde Object-Windows in Anlehnung an die Turbo-Vision eingeführt
Objektorientiertes Programmieren - Nils Schmeißer 176
Abteilung Kommunikation und Datenverarbeitung
Turbo-Vision 1
; ist eine Klassenbibliothek zur ErstellungSAA konformer Nutzerschnittstellen
; es gibt– Widget-Klassen
< Dialogboxen, Fenster, Eingabezeilen, Menüs, ..
– eine Applikationsklasse
– eine Ereignisklasse
Objektorientiertes Programmieren - Nils Schmeißer 177
Abteilung Kommunikation und Datenverarbeitung
Turbo-Vision 2; Beispiel:
pr ogra m TVGUID01;
uses A pp;
ty pe T MyApp = obje ct(T Appl i cat i on) end;
va r MyApp: T MyApp;
begin MyApp.In i t; MyApp.Ru n; MyApp.Do ne;end.
Objektorientiertes Programmieren - Nils Schmeißer 178
Abteilung Kommunikation und Datenverarbeitung
Turbo-Vision 3
Objektorientiertes Programmieren - Nils Schmeißer 179
Abteilung Kommunikation und Datenverarbeitung
Oberon
Objektorientiertes Programmieren - Nils Schmeißer 180
Abteilung Kommunikation und Datenverarbeitung
Eigenschaften
; N. Wirth, J. Gutknecht; System + Oberfläche + Sprache
< Nachfolger von Pascal und Modula< Blockstruktur< Modulkonzept< strenge Typisierung< Typerweiterung< ad-hoc Polymorphismus (Oberon-2)< Trait-basiert
Objektorientiertes Programmieren - Nils Schmeißer 181
Abteilung Kommunikation und Datenverarbeitung
Module
= der Hauptblock einesModuls wird beim Ladendes Moduls gerufen
= ein Modul ist persistent
MODULE Calc ;IMPORT In, O ut;
VAR a:Intege r ;
PROCEDURE Set A* ();BEGIN In . Open; I n.Int(a);END SetA ;
PROCEDURE Pr i vat : Typ ;BEGIN .. .END Privat ;
BEGIN .. .END Calc .
Syst em.Compi l e Calc.M od;
Calc . SetA 10 0
Calc ~System . Free
Objektorientiertes Programmieren - Nils Schmeißer 182
Abteilung Kommunikation und Datenverarbeitung
Klassen 1> Klassen werden als Erweiterung von
Records betrachtetTYPE ACla ssPt r = POINTER T O ACl ass ;
ACla ss = RECORDpriv_ m : PROCEDURE ( ... ) ;publi c_m* : PROCEDURE ( ... ) ;priv_ a : In t eger ;publi c_a* : Typ;
END;
> öffentliche Komponenten werden durcheinen * gekennzeichnet
Objektorientiertes Programmieren - Nils Schmeißer 183
Abteilung Kommunikation und Datenverarbeitung
Klassen 2
> die Bindung erfolgt durch expliziteÜbergabe der Instanz in einem formalenParameterPROCEDURE ( se l f : ACl ass ) public_ m* ( . ..) ;BEGIN I n.O pen; I n.I nteg er(s elf. priv _a);END public _m;
Objektorientiertes Programmieren - Nils Schmeißer 184
Abteilung Kommunikation und Datenverarbeitung
Vererbung
> ursprünglich objektbasiert, also vonObjektprototyp abgeleitet
= mögliche Inkonsistenz in Methoden= Speicherplatz
> Klassenbasiert? TYPE BCl ass Pt r = P OIN TER TO BCl ass;
BCl ass = RE CORD( ACl as s) new_m : PR OCEDURE( .. . ) ; END;
Objektorientiertes Programmieren - Nils Schmeißer 185
Abteilung Kommunikation und Datenverarbeitung
Instanzierung
@ Oberon verfügt über eine garbage-collection, d.h. Instanzen müssen nurerzeugt werden
VAR b : B Cl assPt r ;
NEW( b) ;
@ genauer: es gibt keine Möglichkeit eineInstanz explizit zu zerstören
Objektorientiertes Programmieren - Nils Schmeißer 186
Abteilung Kommunikation und Datenverarbeitung
Objektorientiertes Programmieren - Nils Schmeißer 187
Abteilung Kommunikation und Datenverarbeitung
Java
Objektorientiertes Programmieren - Nils Schmeißer 188
Abteilung Kommunikation und Datenverarbeitung
EntwicklungA 1990 ursprünglich unter dem Namen
„Oak“ als Sprache für dieProgrammierung „hybrider Systeme imConsumer Bereich“ (! Ada) vonJ. Gosling bei Sun entworfen, hatte abernie Erfolg
A 1993 in Java umbenannt und alsSprache für Internetanwendungenverwendet (! portabel)
Objektorientiertes Programmieren - Nils Schmeißer 189
Abteilung Kommunikation und Datenverarbeitung
Eigenschaften 1
A C++ ähnliche SyntaxA Garbage-collectionA multi-threadingA soll sicher und robust seinA Interpretersprache (basiert auf virtueller
Maschine, die Java-Bytecode ausführt),daher ineffizient
Objektorientiertes Programmieren - Nils Schmeißer 190
Abteilung Kommunikation und Datenverarbeitung
Eigenschaften 2
A Unterschiede zu C++B keine Typdefinitionen, kein Pre-ProzessorB keine Strukturen oder UnionsB keine nicht-Member-FunktionenB keine MehrfachvererbungB keine automatisch TypumwandlungB keine manuelle Speicherverwaltung (!Garbage-
collection) und Zeigermanipulation
Objektorientiertes Programmieren - Nils Schmeißer 191
Abteilung Kommunikation und Datenverarbeitung
Klassendefinition & InstanzierungA Klassen:
c l ass Poi nt { pr iv at e double x , y; publ i c Poi nt () { x= 0; y= 0; } publ i c do ubl e Get X( ) { r et urn x ; } publ i c vo i d Se t X( doubl e v) { x=v; }}
A Instazierung:Poi nt p; .. . p =new Poi nt () ;
Objektorientiertes Programmieren - Nils Schmeißer 192
Abteilung Kommunikation und Datenverarbeitung
Vererbung 1A Vererbung in Java bedeutet Erweiterung
c l ass Pi xel exte nds Poi nt { pr iv at e i nt co l or ; publ i c Pi xel () { su per .S et X(0 ) ; co l or =0; }}
A alle Klassen sind von Object abgeleitet
Objektorientiertes Programmieren - Nils Schmeißer 193
Abteilung Kommunikation und Datenverarbeitung
Vererbung 2C die Vererbung kann durch Festlegung
von “final” Klassen beschränkt werdenfi nal c las s Kei neVerer bung { . ..}
C auch die Methodenvererbung kanneingeengt werdencl ass Klas se { f ina l public Nic htVe r erb bar( ) { . . . }}
Objektorientiertes Programmieren - Nils Schmeißer 194
Abteilung Kommunikation und Datenverarbeitung
InterfacevererbungC statt Mehrfachvererbung unterstützt
Java Interfacevererbungi nt erf ace MyI nt1 { publ i c vo i d M1 ( ) ;}i nt erf ace MyI nt2 { publ i c vo i d M2 ( ) ;}c l ass Kl ass e ext ends Basis kl ass e i mpl ement s MyI nt 1, MyI nt 2 {. . .}
Objektorientiertes Programmieren - Nils Schmeißer 195
Abteilung Kommunikation und Datenverarbeitung
abstrakte MethodenC wie auch in C++ gibt es die Möglichkeit
abstrakte Methoden (abstrakte Klassen)zu erklären
abst ra ct cl ass ABasec l ass { abst r act publi c v oi d M() ;}
C eine Klasse muß abstrakt sein, sobaldeine abstrakte Methode existiert
Objektorientiertes Programmieren - Nils Schmeißer 196
Abteilung Kommunikation und Datenverarbeitung
ImplementierungC Definition und Implementation werden in
einem Modul gehaltenC Klassen können bzgl. eines Moduls
lokal oder global seinC Module/Klassen werden durch die
Anweisung
import Kategorie.Modul.Klasse;
bereitgestellt
Objektorientiertes Programmieren - Nils Schmeißer 197
Abteilung Kommunikation und Datenverarbeitung
ProgrammeC die “Hauptklasse” eines Java-
Programms muß die statisch Methodemain enthaltenc l ass MyPro g { publ i c st at i c voi d mai n( St r in g a rg s[ ] ) { } . . .}
C der Modulname muß mit demHaupklassennamen übereinstimmen
Objektorientiertes Programmieren - Nils Schmeißer 198
Abteilung Kommunikation und Datenverarbeitung
Internetanwendungen 1C für “Applets”, die als
Internetanwendungen geschriebenwerden gibt es ein anderes Verfahrenimport jav a.ap plet . *;cl ass MyApplet ext ends App l et { publ i c v oid s tar t () { // bei m Auf ruf des HTM L-Do kument es } publ i c v oid s top ( ) { // bei m Ver las sen des HTML- Dokument es }}
Objektorientiertes Programmieren - Nils Schmeißer 199
Abteilung Kommunikation und Datenverarbeitung
Internetanwendungen 2
D die Einbindung in das HTML-Protokollerfolgt durch
<ht ml> <body> <apple t code=” MyAppl et. c las s” wi dth =640 heigh t =480> </ appl et > </bo dy></ html >
Objektorientiertes Programmieren - Nils Schmeißer 200
Abteilung Kommunikation und Datenverarbeitung
Smalltalk-80
Objektorientiertes Programmieren - Nils Schmeißer 201
Abteilung Kommunikation und Datenverarbeitung
Eigenschaften
D reine OO-SpracheD untypisiertD Interpretersprache (virtuelle Maschine)D voll implementiertes
NachrichtenkonzeptD garbage-collectionD interaktive Programmierumgebung
Objektorientiertes Programmieren - Nils Schmeißer 202
Abteilung Kommunikation und Datenverarbeitung
interaktive Programmierungebung
Objektorientiertes Programmieren - Nils Schmeißer 203
Abteilung Kommunikation und Datenverarbeitung
Klassendefinition
D jede Klasse hat eine Superklasse, imeinfachsten Fall “Object”
D Klassen werden in Kategorien geordnetD Klasseneigenschaften:
E Instanzvariablen: private AttributeE Klassenvariablen: gemeinsame Attribute a la
static bei C++E Kategorie
Objektorientiertes Programmieren - Nils Schmeißer 204
Abteilung Kommunikation und Datenverarbeitung
Klassendefinition und Vererbung
Superk l asse subc l ass: #ACla ss i nst anceVar i abl eNames: ’p r i v1 pr i v2 . . .’ c l as sVari abl eNames: ’ shar ed1 shar ed2 . .. ’ pool Di cti onari es: ’’ cate gor y: ’ Kate gor ie ’!
Objektorientiertes Programmieren - Nils Schmeißer 205
Abteilung Kommunikation und Datenverarbeitung
Methodendefinition
F Methoden werden ebenfallskategorisiert
! ACl as s met hodsFor : ’m et hodcat egor y’!
m1 arg 1 a rg 2 . ... . .!
Objektorientiertes Programmieren - Nils Schmeißer 206
Abteilung Kommunikation und Datenverarbeitung
Invokation
F Smalltalk basiert auf demNachrichtenkonzept, d.h. alleMethodenaufraufe sind Bestandteileeiner Nachricht an eine Instanz
Empfängerobjekt Sel1 Arg1 Sel2 Arg2 .
Objektorientiertes Programmieren - Nils Schmeißer 207
Abteilung Kommunikation und Datenverarbeitung
BeispielObj ect s ubCl ass: #Compl ex i nst anceVar i abl eNames: ’i mag r eal ’ c l as sVari abl eNames: ’ ’ pool Di cti onari es: ’’!
! Compl ex me t hods For :’ ar i th met ic ’
Real : r v Im ag: i v r eal : = r v . i mag : = i v .!
Sel ekt or 1
Objektorientiertes Programmieren - Nils Schmeißer 208
Abteilung Kommunikation und Datenverarbeitung
Eiffel
Objektorientiertes Programmieren - Nils Schmeißer 209
Abteilung Kommunikation und Datenverarbeitung
Eigenschaften
F von B. Meyer entwickeltF implementiert alle, von ihm
aufgezählten Kriterien für OO-SprachenF läßt Definition von Vorbedingungen zuF keine statische Instanzierung
Objektorientiertes Programmieren - Nils Schmeißer 210
Abteilung Kommunikation und Datenverarbeitung
Klassendefinitionc l ass MyCla sscr eati on Kons t r ukt orf eat ur e { ALL} - oe f f ent l i che K omponenent en Kons t r ukt or ( i: i nt eger ) i s do .. . ! !v al ue. make( 1, i ) endf eat ur e { NONE} - pr i vate K omponent en valu e : ar r ay [ i nt eger ]end
Objektorientiertes Programmieren - Nils Schmeißer 211
Abteilung Kommunikation und Datenverarbeitung
VererbungG Einfach- und Mehrfachvererbung
c l ass DCl as si nheri t s ACla ss BCla ss re name b1 as BCl ass b1 endendf eat ur e { ALL}. . .end
Objektorientiertes Programmieren - Nils Schmeißer 212
Abteilung Kommunikation und Datenverarbeitung
Instanzierung
G Eiffel kennt keine statisch InstanzierungG es werden Instanzvariablen erklärt, die
Instanzierung erfolgt explizit durch denAufruf eines Konstruktors
i var : D Cla ss
! ! i var . Kons t r ukt or
Objektorientiertes Programmieren - Nils Schmeißer 213
Abteilung Kommunikation und Datenverarbeitung
OperatorenG in Eiffel können Operatoren überladen
und es können neue O. definiert werden
infix “ opsymbol ” [ , altname ]G Beispiel:
cl ass Compl exfe atur e {A LL} i nfi x ”+ ” ,Pl us ( b:Complex ) is do .. . endend
Objektorientiertes Programmieren - Nils Schmeißer 214
Abteilung Kommunikation und Datenverarbeitung
Vorbedingungencl ass Vect orfe atur e {A LL} Dim : in t eger is do re t urn dim ; end i nfi x ” +” (b : Vect or) : Vect or i s r eqi ure Di m=b. Dim do .. . endfe atur e {NONE} dim : in t egerend
Objektorientiertes Programmieren - Nils Schmeißer 215
Abteilung Kommunikation und Datenverarbeitung
FORTRAN 90/95/2000H Fortran 90
– Operatorüberladung (ad-hoc P.)– generische Funktionen
H Fortran 95– FORALL– pure und Elementfunktionen
H Fortran 2000– OO Eigenschaften:
» Konstr. und Destr.» Vererbung» Polymosphismus» Prozedurreferenzen
Objektorientiertes Programmieren - Nils Schmeißer 216
Abteilung Kommunikation und Datenverarbeitung
OO-Systeme
G OO-GUI‘sG OO-BetriebssystemeG verteiltes OOP (CORBA, DCOM)G OO-Datenbanken
Objektorientiertes Programmieren - Nils Schmeißer 217
Abteilung Kommunikation und Datenverarbeitung
OO GUI’ s
I graphische NutzerschnittstellenI Philosophie:
J SchreibtischphilosophieJ generisch Kommandos (drag and drop)J direktes Manipultieren (OLE)J IconsJ Persistenz von Objekten
Objektorientiertes Programmieren - Nils Schmeißer 218
Abteilung Kommunikation und Datenverarbeitung
OO-GUI‘ s
I Beispiele:J SmalltalkJ OberonJ GeoWorks EnsembleJ NextStepJ MS-Windows 3.x, 95 (OLE)J MS-WindowsNTJ IBM OS/2 Presentation Manager
Objektorientiertes Programmieren - Nils Schmeißer 219
Abteilung Kommunikation und Datenverarbeitung
Drag and Drop
I Erzeugen einer Instanz von B beigleichzeitigem Öffnen der Instanz a
Objektorientiertes Programmieren - Nils Schmeißer 220
Abteilung Kommunikation und Datenverarbeitung
OLE 1.0I OLE - Object Linking and Embedding
J ein Objekt enthält einen Verweis auf einanderes Objekt
J bei „anklicken“ des enthaltenen Objektes wirddas zugehörige Programm gestartet
Objektorientiertes Programmieren - Nils Schmeißer 221
Abteilung Kommunikation und Datenverarbeitung
OLE 2.0J wie OLE 1.0, aber die Applikation nimmt die Gestalt
der über has-a zugeordneten Anwendung an
Objektorientiertes Programmieren - Nils Schmeißer 222
Abteilung Kommunikation und Datenverarbeitung
OO-Betriebssystem
I Mach-Kernel– objektorientierter Betriebssystemkern
I Microsoft Windows mit OLEI OberonI Smalltalk
Objektorientiertes Programmieren - Nils Schmeißer 223
Abteilung Kommunikation und Datenverarbeitung
Verteiltes OOP
K CORBA– von der Object Management Group (OMG)
festgelegter Standard
– Common Object Request BrokerArchitecure
K DCOM– Konkurrenzprodukt von Microsoft
Objektorientiertes Programmieren - Nils Schmeißer 224
Abteilung Kommunikation und Datenverarbeitung
Prinzip von der ORB Technik
K Client-Server-Architektur
Kl asse nserv er=
I mpl ement at i on
Cl i entder Kl asse
Obj ect R equest Br oker
Objektorientiertes Programmieren - Nils Schmeißer 225
Abteilung Kommunikation und Datenverarbeitung
Interfacevererbung
K CORBA legt nur Interfacevererbung fest
Kl asse nserv ermi t gl ei chem
I nt erf aceCl i entder Kl asse
Obj ect R equest Br oker
Cl ass Repos i t ory
Objektorientiertes Programmieren - Nils Schmeißer 226
Abteilung Kommunikation und Datenverarbeitung
DatenbankenK relationale Datenbanken (RDBM)
L Menge von RelationenL R, SQL/DS, DB2,
INGRES, ORACLE, DBASEK semantisches Datenbankmodell (SMDB)
L Entity-Relationship Modell, prädikatenlogischeund mengentheoretische Modelle
L RM/T, TAXIS, SAM, IFOK objektorientiertes Datenbankmodell
(OODBM), i.A. Abbildung von OOKonzepten auf RDBMS oder SMDBS
Objektorientiertes Programmieren - Nils Schmeißer 227
Abteilung Kommunikation und Datenverarbeitung
OODBMSL Strukturkonzepte
» Objektidentität, Klassen, Typen, Beziehungen,zwischen Klassen, Strukturvererbung
L Operationen» Relationen, Generatoren, objekterhaltende
OperationenL höhere Konzepte
» Metaklassen, ADT, OO-KonzepteL GemStone, ONTOS/VBASE, O2, POET,
POSTGRES