1/21 Informationsverarbeitung im Bauwesen Einführung in das Programmieren mit C++ Markus Uhlmann Institut für Hydromechanik Karlsruher Institut für Technologie www.ifh.kit.edu WS 2010/2011 Vorlesung 8
2/21 8. VORLESUNG Objektorientiertes Programmieren, Einführung Advice: Represent concepts as classes. B. Stroustrup
3/21 Fragen, die in dieser Vorlesung diskutiert werden Objektorientiertes Programmieren (OOP) Was unterscheidet eigentlich OOP vom prozeduralen Programmieren? Wozu brauche ich diese Funktionalität? Erste Schritte Definition eigener Klassen Erzeugung von Objekten des neuen Typs
4/21 OOP Einführung Was ist ein Objekt? (im Sinne von OOP) Weiterentwicklung einer benutzerdefinierten Datenstruktur: Zusammenfassung von Daten und Funktionen Daten eines Objektes können vor fehlerhaftem Zugriff geschützt werden nach außen bieten Objekte eine streng definierte Schnittstelle Objekte sind Exemplare ( Instanzen ) von sog. Klassen Klassen dienen als Baupläne für Objekte
5/21 OOP Einführung Objekte als Weiterentwicklung von Strukturtypen Variable (fundamentaler Typ) Funktion Feld (z.b. Typ1) struct: Element1 (Typ1) Element2 (Typ2)... Objekt: Element1 (Typ1)... Funktion1...
Elemente von Objekten OOP Einführung Objekte beinhalten Eigenschaften (Daten) Methoden (Funktionen) Objekt Eigenschaften Methoden : Auto Eigenschaften: Geschwindigkeit, Fahrtrichtung, Gang,... Methoden: Bremsen, Schalten, Gasgeben, Lenken,... : string Objekt aus Standardbibliothek Eigenschaften: length,... Methoden: clear, insert, find,... 6/21
7/21 OOP Einführung Drei Säulen der objektorientierten Programmierung Datenkapselung Verbergen der inneren Struktur eines Objektes Polymorphie eine gleichnamige Methode kann auf unterschiedliche Objekte angewendet werden Vererbung Objektklassen können als Basis für andere Klassen dienen, welche die Elemente der Ursprungsklasse erben
8/21 OOP Kapselung von Objektdaten Einführung Schnittstelle Zugriff über Schnittstellen Zugriff auf Interna kann verhindert werden öffentliche Eigenschaften Methoden Objekt verborgene Eigenschaften Methoden
9/21 OOP Polymorphie von Objekten Einführung Polymorphie Verwendung gleicher Methodennamen für unterschiedliche Objekte Interna evtl. völlig unterschiedlich, bei Benutzung jedoch unerheblich Vorteil für Anwender (Benutzer) der Klasse Beschleunigen();... Objekt vom Typ Fahrrad Beschleunigen();... Objekt vom Typ Auto
10/21 Objekte und Vererbung OOP Einführung Eigenschaft A Methode A Vererbung Methoden/Eigenschaften werden an abgeleitete Klassen weitergegeben spart Aufwand, hilft Fehler vermeiden Bsp: Kindklasse besitzt Eigenschaften/Methoden A und B Objekt der Elternklasse Eigenschaft B Methode B Objekt der Kindklasse
Deklaration, Definition & Implementierung Zugriff auf Objektelemente Konstruktoren & Destruktoren 11/21 Deklaration von Klassen Syntax (Deklaration): class <classname>{ <Deklarationen> }; Bsp: class kreis{ float radius; //Variablen float x; float y; void anzeigen(); //Funktion }; Deklaration der Elemente einer Klasse analog zu Strukturtypen (Elementvariablen) zusätzlich: Elementfunktionen Deklaration erzeugt kein Objekt, sodern definiert neuen Typ!
Deklaration, Definition & Implementierung Zugriff auf Objektelemente Konstruktoren & Destruktoren 12/21 Definition von Objekten Objekt Klasse: Objekt ist Instanz einer Klasse Klasse ist Bauplan für Objekte ein Objekt muss vor der Benutzung erzeugt werden erst bei Definition von Objekten wird Speicher reserviert Syntax (Definition): class <classname> <objname>; oder <classname> <objname>; //OK Bsp: class kreis k1;//definiert Variable k1 kreis k2; //auch OK
Deklaration, Definition & Implementierung Zugriff auf Objektelemente Konstruktoren & Destruktoren 13/21 Nutzen von Objekten: Zuweisungen, Methoden Ansprechen von Elementdaten und -funktionen durch Punktoperator. angehängt an Objektnamen Bsp: kreis k1; //definiert Variable k1 vom Typ kreis k1.radius=0.45;//setzt Wert der Elementvariablen radius k1.anzeige(); //ruft Elementfunktion fuer Objekt k1 auf Nutzung von Elementfunktionen nur in Verbindung mit entsprechenden Objekten
Deklaration, Definition & Implementierung Zugriff auf Objektelemente Konstruktoren & Destruktoren 14/21 Implementierung von Klassenfunktionen Elementfunktionen werden i.d.r. ausserhalb der Deklaration der Klasse definiert ( implementiert ) Zuordnung: durch Angabe des Klassennamens und :: Bsp: ( inline ) class test{ //vollstaendige Def. von show void show(){cout << "Hello";} }; Bsp: (separat) class test{ void show(); //Prototyp };... void test::show(){ //Implementierung cout << "Hello"; }
Deklaration, Definition & Implementierung Zugriff auf Objektelemente Konstruktoren & Destruktoren 15/21 Verborgene und öffentliche Klassenelemente Bsp: class kreis{ public: //oeffentliche Elemente folgen float radius; void anzeigen(); private: //verborgenes Element folgt int unsichtbar; }; Zugriff wird über Schlüsselwörter private, public geregelt private: Zugriff nur über eigene Elementfunktionen public: direkter Zugriff Schalterfunktion: jeweils Wirkung bis zu nächster Änderung standardmässig: private (Quelltext)
Deklaration, Definition & Implementierung Zugriff auf Objektelemente Konstruktoren & Destruktoren 16/21 Datenelemente sollten möglichst verborgen sein um Datenkapselung zu realisieren, sollten die Datenelemente einer Klasse möglichst verborgen sein verhindert ungewollte Manipulation der Daten Realisierung des Zugriffs durch accessor Funktionen
Deklaration, Definition & Implementierung Zugriff auf Objektelemente Konstruktoren & Destruktoren 17/21 Zugriff durch Zugriffsfunktionen (accessors) Bsp: class kreis{ public: //oeffentliche Elemente folgen void setradius(float r);//accessor float getradius(); //accessor void anzeigen(); private: //verborgenes Element folgt float radius; }; Konvention für Zugriffsfunktionsnamen (nicht zwingend): get<varname>, set<varname> schreibgeschützte Elementvariable ( read only ): Zugriffsfunktion set<varname> auslassen ( 1), ( 2)
Deklaration, Definition & Implementierung Zugriff auf Objektelemente Konstruktoren & Destruktoren Zugriff durch befreundete Klassen (friend) Schlüsselwort friend gewährt Zugriff auf verborgene Elementdaten & -funktionen gestattet: komplette Klasse oder einzelne Funktionen Befreundung ist nicht kommutativ, nicht übertragbar Bsp: class bob{ private: void show(){cout << alter;} int alter; //Befreundung durch Objekte vom Typ alice friend class alice; //Elementfunktion check von Objekten mit Typ boss friend void boss::check(); }; (programm) 18/21
Deklaration, Definition & Implementierung Zugriff auf Objektelemente Konstruktoren & Destruktoren 19/21 Initialisierung von Objekten: Konstruktoren Konstruktoren sind spezielle Elementfunktionen ohne Rückgabewert Name entspricht Klassenbezeichner automatischer Aufruf bei Erzeugung eines Objektes Möglichkeit der Initialisierung von Objektdaten Ausführen weiterer Befehle bei Erzeugung des Objektes analog: Destruktor Aufruf bei Zerstörung eines Objektes Bsp: class kreis{ public: kreis(){cout << "Konstruktor!";} ~kreis(){cout << "Destruktor!";} }; (Quelltext)
20/21 Erweiterung der Partikelsimulation (1) Entwurf einer Partikelklasse Eigenschaften: Position, Geschwindigkeit, Radius Methoden: Konstruktor (Initialisierung) linearer Bewegungsschritt Wandkollision grafische Anzeige Programmtext: Linux, Windows
21/21 Erweiterung der Partikelsimulation (2) Behälterklasse Eigenschaften: Partikelvektor Methoden: Partikelkollisionen Bewegungsschritt Wandkollision grafische Anzeige Programmtext: Linux, Windows Partikelklasse Eigenschaften: Position, Geschwindigkeit, Radius Methoden: Bewegungsschritt Wandkollision grafische Anzeige Konstruktor
1/3 Anhang Zusammenfassung Literatur Zusammenfassung Objektorientiertes Programmieren (OOP) Datenkapselung, Polymorphie & Vererbung Erste Schritte in OOP Definition eigener Klassen Erzeugung von Objekten des neuen Typs Zugriffsbestimmung: private, public, friend Konstruktoren
2/3 Anhang Zusammenfassung Literatur Anhang
3/3 Anhang Zusammenfassung Literatur Weiterführende Literatur S. Prata, C++ Primer Plus, Sams, 2005 S. Oalline, Practical C++ Programming, O Reilly, 2003 J. Liberty and B. Jones, Teach yourself C++ in 21 days, Sams, 2005 R. Lischner, C++ in a Nutshell, O Reilly, 2003 Handbücher erhältlich am Rechenzentrum: (Weblink) RRZN, Die Programmiersprache C, 17. Auflage, 2008 RRZN, C++ für C Programmierer, 13. Auflage, 2005 Online Dokumentation zum C++ Standard (Weblink) (freie) Microsoft Software für Studenten am KIT: (Weblink)