objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse,...

38
Objektorientiertes Programmieren - Nils Schmeißer 1 Abteilung Kommunikation und Datenverarbeitung Einführung in das objektorientierte Programmieren Nils Schmeißer Abteilung 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

Transcript of objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse,...

Page 1: objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse, Instanz, Attribut, Methode Vererbung Polymorphie OOD (object oriented development)

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

Page 2: objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse, Instanz, Attribut, Methode Vererbung Polymorphie OOD (object oriented development)

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 .

Page 3: objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse, Instanz, Attribut, Methode Vererbung Polymorphie OOD (object oriented development)

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)

Page 4: objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse, Instanz, Attribut, Methode Vererbung Polymorphie OOD (object oriented development)

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

Page 5: objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse, Instanz, Attribut, Methode Vererbung Polymorphie OOD (object oriented development)

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)

Page 6: objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse, Instanz, Attribut, Methode Vererbung Polymorphie OOD (object oriented development)

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

Page 7: objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse, Instanz, Attribut, Methode Vererbung Polymorphie OOD (object oriented development)

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

Page 8: objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse, Instanz, Attribut, Methode Vererbung Polymorphie OOD (object oriented development)

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

Page 9: objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse, Instanz, Attribut, Methode Vererbung Polymorphie OOD (object oriented development)

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

Page 10: objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse, Instanz, Attribut, Methode Vererbung Polymorphie OOD (object oriented development)

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

Page 11: objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse, Instanz, Attribut, Methode Vererbung Polymorphie OOD (object oriented development)

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;

Page 12: objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse, Instanz, Attribut, Methode Vererbung Polymorphie OOD (object oriented development)

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

Page 13: objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse, Instanz, Attribut, Methode Vererbung Polymorphie OOD (object oriented development)

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!)

Page 14: objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse, Instanz, Attribut, Methode Vererbung Polymorphie OOD (object oriented development)

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

Page 15: objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse, Instanz, Attribut, Methode Vererbung Polymorphie OOD (object oriented development)

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

Page 16: objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse, Instanz, Attribut, Methode Vererbung Polymorphie OOD (object oriented development)

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

Page 17: objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse, Instanz, Attribut, Methode Vererbung Polymorphie OOD (object oriented development)

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 ;

Page 18: objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse, Instanz, Attribut, Methode Vererbung Polymorphie OOD (object oriented development)

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

Page 19: objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse, Instanz, Attribut, Methode Vererbung Polymorphie OOD (object oriented development)

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

Page 20: objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse, Instanz, Attribut, Methode Vererbung Polymorphie OOD (object oriented development)

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

Page 21: objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse, Instanz, Attribut, Methode Vererbung Polymorphie OOD (object oriented development)

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

Page 22: objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse, Instanz, Attribut, Methode Vererbung Polymorphie OOD (object oriented development)

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

Page 23: objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse, Instanz, Attribut, Methode Vererbung Polymorphie OOD (object oriented development)

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> { . .. };

Page 24: objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse, Instanz, Attribut, Methode Vererbung Polymorphie OOD (object oriented development)

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

Page 25: objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse, Instanz, Attribut, Methode Vererbung Polymorphie OOD (object oriented development)

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

Page 26: objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse, Instanz, Attribut, Methode Vererbung Polymorphie OOD (object oriented development)

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;

Page 27: objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse, Instanz, Attribut, Methode Vererbung Polymorphie OOD (object oriented development)

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

Page 28: objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse, Instanz, Attribut, Methode Vererbung Polymorphie OOD (object oriented development)

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

Page 29: objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse, Instanz, Attribut, Methode Vererbung Polymorphie OOD (object oriented development)

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;

Page 30: objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse, Instanz, Attribut, Methode Vererbung Polymorphie OOD (object oriented development)

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

Page 31: objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse, Instanz, Attribut, Methode Vererbung Polymorphie OOD (object oriented development)

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

Page 32: objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse, Instanz, Attribut, Methode Vererbung Polymorphie OOD (object oriented development)

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

Page 33: objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse, Instanz, Attribut, Methode Vererbung Polymorphie OOD (object oriented development)

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

Page 34: objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse, Instanz, Attribut, Methode Vererbung Polymorphie OOD (object oriented development)

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 ’!

Page 35: objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse, Instanz, Attribut, Methode Vererbung Polymorphie OOD (object oriented development)

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

Page 36: objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse, Instanz, Attribut, Methode Vererbung Polymorphie OOD (object oriented development)

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

Page 37: objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse, Instanz, Attribut, Methode Vererbung Polymorphie OOD (object oriented development)

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

Page 38: objektorientierte Programmieren – Begriffsbestimmung ...+-Kurs/CPP-Kurs.pdf · Objekt, Klasse, Instanz, Attribut, Methode Vererbung Polymorphie OOD (object oriented development)

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