1 / 227

Einführung in das objektorientierte Programmieren

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

majed
Télécharger la présentation

Einführung in das objektorientierte Programmieren

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

E N D

Presentation Transcript


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

  2. 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. 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. 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. FORTRAN Sketchpad Algol68 BC PL Pascal C Simula Smalltalk Modula Smalltalk 80 Ada C++ Turbo-Pascal 5.5 Oberon Ada95 Java Geschichte der Programmierspr. Assembler 1955 1960 1970 1980 Eiffel 1985 1990 Objektorientiertes Programmieren - Nils Schmeißer

  6. 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. imperative Sprachen 1 • ein Programm besteht aus einer Menge von Befehlen • BASIC: 10 let n=... 20 gosub 50 30 nf=nfak 40 end 50 let nfak=1 60 for i=1 to n 70 nfak=nfak*i 80 next i 90 return Objektorientiertes Programmieren - Nils Schmeißer

  8. imperative Sprachen 2 • prozedurale Sprachen gruppieren Befehle in Unterprogrammen • C: int fac(int n) { if (n==0) return 1; return n*fac(n-1); } ... nf=fac(n); Objektorientiertes Programmieren - Nils Schmeißer

  9. funktionale und applikative Sp. • ein Programm besteht aus einer Menge von Funktionen und deren Anwendung • Lisp: (fac (n) (cond ((equal n 0) 1) (times n (fac (difference n 1) ) ) ) ) ... (fac n) Objektorientiertes Programmieren - Nils Schmeißer

  10. prädikative Sprachen • in prädikativen Sprachen wird eine Menge von Fakten und Regeln vorgegeben • Prolog: fac(0,1). fac(n,f) -> fac(n-1,f/n). Objektorientiertes Programmieren - Nils Schmeißer

  11. objektorientierte Sprachen 1 • alle zum Lösen eines Problems nötigen Informationen werden als Objekte aufgefaßt • Objekte empfangen und versenden Nachrichten Integer a,b; a * b Integer a Integer b value value * * Objektorientiertes Programmieren - Nils Schmeißer

  12. objektorientierte Sprachen 2 • Smalltalk: Object subclass: #Integer instanceVariableNames: ’value’ fac nfak:=Integer new. [0=value] ifTrue: [ nfak set: 1. ] ifFalse: [ nfak set: (((self minus: 1) fac: ) times: value ). ] ^nfak. ! n:=(Integer new) set: ... n fac. Objektorientiertes Programmieren - Nils Schmeißer

  13. 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. abstrakter Datentyp 1 • das Basiskonzept der objektorientierten Programmierung bildet der abstrakte Datentyp (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. abstrakter Datentyp 2 • eine Sorte kann formal als Struktur dargestellt • Beispiel: koord=sortInteger x;Integer y;end;bzw. koord=x:Integer+y:Integer Komponenten Objektorientiertes Programmieren - Nils Schmeißer

  16. abstrakter Datentyp 3 • einem ADT werden Operationen (die nicht notwendig nur Operanden vom Sortentyp enthalten) zugeordnet • Beispiel: vec=ADT(koord)SetX:(vec,Integer);+:(vec,vec)->vec;norm:(vec)->Integer;end; Objektorientiertes Programmieren - Nils Schmeißer

  17. abstrakter Datentyp 4 • zur vollständigen Beschreibung eines ADT’s gehören zusätzlich • die Vorbedingungenpre: x=0; y=0; • eine Menge von Axiomen (Spezifikationen), diedas Verhalten der Operationen festlegen+ (vec a,vec b) =(x=a.x+b.x,y=a.y+b.y) Objektorientiertes Programmieren - Nils Schmeißer

  18. 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] -> IntegerCONDITIONSAXIOMS 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. abstrakter Datentyp 6 • abstrakte Datentypen werden als Klassen implementiert • Beispiel:class vec is Integer x,y; vec + (vec a,vec b) is return vec(a.x+b.x,a.y+b.y);end;end; Objektorientiertes Programmieren - Nils Schmeißer

  20. Begriffsbestimmung 1 • Objekt: eigenständiges Individuum mit • charakteristischen Eigenschaften • einem inneren Zustand • Attributen • Methoden Objektorientiertes Programmieren - Nils Schmeißer

  21. 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. Begriffsbestimmung 2 • Klasse:ist die Vereinigung und formale Beschreibung aller Objekte mit gleichen Eigenschaften • Klassen können als Implementation abstrakter Datentypen aufgefaßt werden • Klassen werden auch als “Objektfabriken” bezeichnet Objektorientiertes Programmieren - Nils Schmeißer

  23. Beispiel classKreisklasseis Punkt Mittelpunkt; Real Radius; Color Farbe; Kreis New(Punkt M0,Real R0,Color C0); Zeichnen(); Verschieben(Punkt NeuerMittelpunkt); end; Objektorientiertes Programmieren - Nils Schmeißer

  24. Begriffsbestimmung 3 • eine Instanz ist die konkrete Realisierung eines Objektes einer Klasse • 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. Beispiel program p1 is Kreis k3=Kreisklasse::New((4,5),3,Grün); subprogram ps1 is Kreis k1=Kreisklasse::New((1,2),3,Rot); Kreis k2=Kreisklasse::New((1,2),3,Rot); ... end; ... end; • obwohl k1 und k2 die gleichen Attributwerte haben, sind es voneinander verschiedene Objekte Objektorientiertes Programmieren - Nils Schmeißer

  26. Begriffsbestimmung 4 • Attribute sind die Variablen, die den inneren Zustand eines Objektes beschreiben • Attribute korrespondieren in ihrer Bedeutung mit den Sorten des abstrakten Datentyps • die zugehörige Klasse heißt Komponentenklasse Objektorientiertes Programmieren - Nils Schmeißer

  27. Beispiel classPunktklasseis ... end; classKreisklasseis Punkt Mittelpunkt; Real Radius; ... end; • die Klasse „Punktklasse“ ist eine Komponentenklasse von „Kreisklasse“ Objektorientiertes Programmieren - Nils Schmeißer

  28. Begriffsbestimmung 5 • Methoden sind die über einer Klasse erklärten und ihr zugeordneten Operationen • zwei spezielle Methoden • Konstruktor: generiert eine Instanz • Destruktor: zerstört eine Instanz • ein Methodenaufruf ist Teil einer Nachricht, die an ein Objekt versandt wird Objektorientiertes Programmieren - Nils Schmeißer

  29. Beispiel program p1 is Kreis k3=Kreisklasse::New((4,5),3,Grün); ... k3 .Verschieben((7,8)) ; end; • die gesamte, an k3 versendete Nachricht lautet:k3: „Verschiebe (dich) nach (7,8)“ Objektorientiertes Programmieren - Nils Schmeißer

  30. Vererbung 1 • Vererbung ist die Weitergabe von Eigenschaften (Attributen und Methoden) einer Basisklasse an eine abgeleitete Klasse • die Weitergabe von Werten ist ebenfalls möglich (Klonen) Objektorientiertes Programmieren - Nils Schmeißer

  31. Vererbung 2 • Vererbung gibt es in verschiedenen Ausprägungen: • Spezialisierung: Objektmenge der Unterklasse ist 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. Beispiel classEllipsenklasseis Punkt Mittelpunkt; Real a,b; Ellipse New(Punkt M0,Real a0,Real b0); Verschieben(Punkt NeuerMittelpunkt);end; subclassKreisklasseofEllipsenklasseis Punkt Mittelpunkt; Real a,b; // a=b Kreis New(Punkt M0,Real R0); Verschieben(Punkt NeuerMittelpunkt);end; Objektorientiertes Programmieren - Nils Schmeißer

  33. Vererbung 3 • es wird ebenfalls zwischen einfacher und mehrfacher Vererbung unterschieden Basisklasse Basisklasse1 Basisklasse2 x x x x x Objektorientiertes Programmieren - Nils Schmeißer

  34. 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. Beispiel • Ellipsenklasse::Skalieren(Real fa,Real fb)is a=a*fa; b=b*fb; end; • Ersetzung:Kreisklasse::Skalieren(Real f) is a=a*f; b=b*f; end; • Verfeinerung:Kreisklasse::Skalieren(Real f) is Ellipsenklasse::(f,1.0); b=b*f; end; • Delegation:Kreisklasse::Skalieren(Real f) is Ellipsenklasse::(f,f); end; Objektorientiertes Programmieren - Nils Schmeißer

  36. Vererbung 5 • manchmal kann es sinnvoll sein, die Erzeugung von Instanzen bestimmter Klassen zu verbieten (Festlegung eines Konzeptes); solche Klassen werden abstrakte (Basis-)Klassen genannt Objektorientiertes Programmieren - Nils Schmeißer

  37. Beziehungen zwischen Klassen 1 • erbt eine Klasse B von einer Klasse A, so heißt A Basisklasse oder Superklasse von B, B heißt Subklasse • B genügt der is-a Relation (B is-a A) B A Objektorientiertes Programmieren - Nils Schmeißer

  38. Beziehungen zwischen Klassen 2 • besitzt eine Klasse A ein Attribut vom Typ der Klasse C, so heißt C Komponentenklasse von A • A genügt der has-a Relation (A has-a C) A C Objektorientiertes Programmieren - Nils Schmeißer

  39. Beziehungen zwischen Klassen 3 • benutzt eine Klasse A eine Instanz der Klasse 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 A D Objektorientiertes Programmieren - Nils Schmeißer

  40. Polymorphie 1 class Gear isSwitchUp() is ... end; end;subclass ManualGear of Gear isSwitchUp() is ... end; end;subclass AutomaticGear of Gear isSwitchUp() is ... end; end; • die Methode SwitchUp() kann in vielen verschiedenen Formen auftreten, sie heißt polymorph Objektorientiertes Programmieren - Nils Schmeißer

  41. Polymorphie 2 • neben dem universellen Polymorphismus (vorhergehende Folie) gibt es den ad-hoc PolymorphismusInteger Trunc(Integer x); Integer Trunc(Real x); • ad-hoc P. basiert auf dem Konzept der impliziten Typkonversion Objektorientiertes Programmieren - Nils Schmeißer

  42. Polymorphie 3 • das Konzept der Polymorphie erlaubt somit unterschiedliche Sichtweisen auf Objekte • Beispiel: • eine Instanz der Klasse ManualGear ist ebenfalls mit den Eigenschaften der Klasse Gear ausgestattet, kann also wie eine solche agieren Objektorientiertes Programmieren - Nils Schmeißer

  43. Polymorphie 4 • eine Variable vom Typ einer Superklasse kann somit auch eine Instanz vom Typ einer Subklasse aufnehmen • Beispiel: Gear g; g=new ManualGear; Objektorientiertes Programmieren - Nils Schmeißer

  44. Bindung 1 • der Bindungsmechanismus beschreibt, wie eine Methode einer Klasse aufgerufen wird • verschiedene Bindungskonzepte erlauben eine effiziente Wiederver-wendung bzw. gemeinsame Nutzung von Code auf sehr elegante Art und Weise Objektorientiertes Programmieren - Nils Schmeißer

  45. Bindung 2 • statische Bindung: • während der Übersetzung wird die Klassenzugehörigkeit der Instanz bestimmt und daraus die zu rufende Methode ermittelt • Beispiel: ManualGear g=new ManualGear; g.SwitchUp();ruft die Methode der Klasse ManualGearGear g=new ManualGear; g.SwitchUp();die der Klasse Gear Objektorientiertes Programmieren - Nils Schmeißer

  46. Bindung 3 • dynamische (späte) Bindung: • die Klassenzugehörigkeit der Instanz wird erst zur Laufzeit bestimmt • Beispiel: ManualGear g=new ManualGear; g.SwitchUp();ruft die Methode der Klasse ManualGearGear g=new ManualGear; g.SwitchUp();ruft ebenfallsdie der Klasse ManualGear Objektorientiertes Programmieren - Nils Schmeißer

  47. 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 spezielles Schlüsselwort (meist “virtual”) gekennzeichnet “virtuelle Methoden” Objektorientiertes Programmieren - Nils Schmeißer

  48. Bindung 5 classGearis Init();virtual SwitchUp() is ... end; end;subclassManualGearofGearis Init();virtual SwitchUp() is ... end; end; Gear g = newManualGear; g.Init(); // Gear::Init g.SwitchUp(); // ManualGear::SwitchUp Objektorientiertes Programmieren - Nils Schmeißer

  49. Beispiel 1 • ein Verfahren zum Lösen von Gleichungssystemen A x = bwird implementiert • ist A dünn besetzt, so werden die nicht-0 Elemente normalerweise als Liste abgelegt, um Speicherplatz zu sparen der Löser müßte neu implementiert werden Objektorientiertes Programmieren - Nils Schmeißer

  50. Beispiel 2 • die Neuimplementation ist nicht nötig, wenn der Löser überclassMatrixis int n,m; Datatype data[maxz][maxs];virtual real Get(int z,int s);virtual void Set(int z,int s,real v); end;erklärt wird Matrix Solver(Matrix A,Matrix b); Objektorientiertes Programmieren - Nils Schmeißer

More Related