C++ - Einführung in die objektorientierte Programmierung · C++ - Objektorientierte Programmierung...
-
Upload
doankhuong -
Category
Documents
-
view
220 -
download
4
Transcript of C++ - Einführung in die objektorientierte Programmierung · C++ - Objektorientierte Programmierung...
Leibniz Universität IT Services | Anja Aue
C++
Einführung in die objektorientierte Programmierung
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 2
Handbücher des IT Services
C++ für C-Programmierer C und C++ für Java-Programmierer
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 3
Bücher
Bjarne Stroustrup: Programming. Principles and Practice Using C++. Addision Wesley. 2. Auflage.
Jürgen Wolf: Grundkurs C++: C++-Programmierung verständlich erklärt. Rheinwerk Computing. 3. Auflage.
Dieter Bär: Schrödinger programmiert C++: Jetzt mit C++ 14 und Syntax-Highlighting. Rheinwerk Computing. 2. Auflage.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 4
PDF-Dokumente im Netz
TU Braunschweig: https://www.tu-braunschweig.de/Medien-DB/statik/software/einfuehrung_in_cpp.pdf
Universität Graz: http://www.uni-graz.at/~haasegu/Lectures/Kurs-C/Script/html/script_programmieren.pdf
DHBW Stuttgart: http://wwwlehre.dhbw-stuttgart.de/~kfg/cpp/cpp.pdf
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 5
Referenzen im Web
http://www.stroustrup.com/C++.html http://www.cplusplus.com/doc/tutorial/ http://www.cprogramming.com/tutorial.html http://www.learncpp.com/ http://www.etp.physik.uni-
muenchen.de/kurs/Computing/ckurs/cxx.html http://www.cpp-tutor.de/cpp/hinweise.html
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 6
C++- Standard und Standardbiblothek
http://www.open-std.org/jtc1/sc22/wg21/ http://gcc.gnu.org/onlinedocs/libstdc++/ http://www.cplusplus.com/reference/clibrary/ http://en.cppreference.com/w/ https://www.sgi.com/tech/stl/ https://de.wikibooks.org/wiki/C%2B%2B-Programmierung/
_Die_STL
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 7
Entwicklungsumgebungen (IDE)
NetBeans (http://www.netbeans.org/) Code::Blocks (http://www.codeblocks.org/) Borland Turbo C++ (http://www.turboexplorer.com/cpp) KDevelop (http://www.kdevelop.org/) Microsoft Visual Studio (https://www.visualstudio.com/)
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 8
NetBeans ...
1996 entwickelt von Studenten aus der Tschechischen Republik.
1999 Übernahme durch Sun Microsystems. 2010 Übernahme durch Oracle.
Die Programmiersprachen Java, C / C++, PHP und JavaScript werden unterstützt.
Download unter https://netbeans.org/.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 9
Installation von NetBeans für C++
Installation des Compilers MinGW und der Tools msys. Umgebungsvariablen für den Compiler setzen. Installation von NetBeans. Installation des Plugins für C/C++. Siehe https://netbeans.org/community/releases/80/cpp-setup-
instructions.html oder https://wiki.fbihome.de/Netbeans.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 10
Start von NetBeans
Klick auf das Icon auf dem Desktop. Start – Alle Programme – NetBeans – NetBeans IDE.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 11
Startseite
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 12
Optionen für C++
Tools / Options. Die Kategorie C/C++ wird angezeigt. Die verschiedenen Registerkarten in der Kategorie bilden die
Einstellungsmöglichkeiten ab.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 13
Möglichkeiten
Die Registerkarte Build Tools listet den Pfad zum Compiler, Debugger etc. auf. Es werden alle Pfade zu Tools, die für die Erstellung eines ausführbaren Programms benötigt werden, eingestellt.
Die Registerkarte Project Options zeigt Regeln zur Erstellung von Objektcode mit Hilfe von make an.
Registerkarte Code Assistence. Siehe https://netbeans.org/kb/docs/cnd/HowTos.html
Registerkarte Debugging Options. Registerkarte Other legt die Dateiendungen in Abhängigkeit
des Dateityps fest.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 14
Build Tools
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 15
Code Assistance
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 16
C++ - Projekt anlegen
File – New Project. Auswahl des Ordners C/C++ in der Liste Categories. In Abhängigkeit des gewählten Elements aus der Liste Projects
werden die weiteren Schritte angezeigt. In dem Kurs wird der Eintrag C/C++-Application genutzt.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 17
Hinweis
Falls das C++-Projekt auf ein Netzlaufwerk unter Windows angelegt wird, werden automatisch zwei Startpunkte „main“ erzeugt.
Die Kompilierung des Programms bricht mit dem Fehler „multiple definition of `main'“ ab.
Nach dem Löschen einer der beiden Dateien „main“ kommt die Meldung „... does not exist or is not executable“.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 18
Projects - C/C++ Application
Siehe https://netbeans.org/kb/docs/cnd/quickstart.html
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 19
Zeile „Project Name“
Projekte bündeln Dateien für ein lauffähiges C++-Programm. Der Name ist der Wurzelordner für alle, zu einem Projekt
gehörenden, Dateien im Ordner NetBeansProjects. Standardmäßig wird der Name CppApplication_ und eine
fortlaufende Nummer genutzt. Der Name sollte nur die Groß- und Kleinbuchstaben a…z, die
Zahlen 0...9 und den Unterstrich enthalten. Die Wörter im Projektnamen beginnen mit einem Großbuchstaben.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 20
Zeile „Project Location“
Mit Hilfe der Schaltfläche Browse... kann der Speicherort des Projektes in der Zeile Project Location verändert werden.
Die Zeile Project Folder setzt sich aus dem Projektnamen und dem gewählten Speicherort zusammen.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 21
Zeile „Create Main File“
Für ein C++-Programm wird der Einstiegspunkt in das Projekt automatisiert erstellt.
Mit Hilfe des „Main Files“ wird jedes C++-Programm gestartet.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 22
Zeile „Tool Collection“
Der Compiler für das C++-Programm wird ausgewählt. Der Compiler übersetzt den lesbaren Programmtext in
Maschinencode. Fehler in der Syntax führen zu einem Abbruch.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 23
Compiler für C++
C++ Compiler des GNU-Projekts. Unterstützung für C++11 und C++14. Aktuelle Version GCC 5.3. Download unter http://gcc.gnu.org/.
Minimalist GNU for Windows (MinGW). Download unter http://www.mingw.org/.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 24
Windows 7: Umgebungsvariablen
Klick im Startmenü auf System. Oder: Suche im Windows Explorer nach Systemsteuerung.
Klick auf das Icon System und Sicherheit. System / Erweiterte Systemeinstellungen. Klick auf die Schaltfläche Umgebungsvariablen.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 25
Windows 8: Umgebungsvariablen
Suche nach System (Systemsteuerung). Klick auf den Link Erweiterte Systemeinstellungen. Klick auf die Schaltfläche Umgebungsvariablen.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 26
Umgebungsvariablen für den Compiler setzen
Auswahl der Variablen PATH. Klick auf die Schaltfläche Bearbeiten. Die verschiedenen
Pfadangaben werden durch ein Semikolon getrennt. Hinzufügung von „C:\MinGW\bin“. Mit welchen Tool wird das
Programm kompiliert? Hinzufügung „C:\MinGW\msys\1.0\bin“. Mit welchen Tools wird
das lauffähige Programm erstellt?
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 27
Geöffnetes Projekt
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 28
Aufbau der IDE
In der Titelleiste wird der Name des Projekts angezeigt. Menüleiste. Symbolleiste für die wichtigsten Befehle. Mit Hilfe von View –
Toolbar können Symbolleisten ein- oder ausgeblendet werden. Fenster, die den Code anzeigen oder die Struktur des Projekts
abbilden.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 29
Fenster in der IDE
Mit Hilfe von Drag & Drop kann ein Fenstern unterhalb der Symbolleiste an jeder Position abgelegt werden.
Mit Hilfe der Schaltfläche in der rechten oberen Ecke wird ein Fenster minimiert.
Jedes Fenster besitzt mindestens eine Registerkarte. Fenster können als Registerkarten in anderen Fenstern abgelegt werden.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 30
Registerkarten in einem Fenster
Am oberen Rand der Registerkarte wird der Name und die Schließen-Schaltfläche angezeigt.
Der Name gibt Auskunft über die Funktion der Registerkarte. Registerkarten kategorisieren die verschiedenen Informationen.
Mit Hilfe von Drag & Drop kann eine Registerkarte von einem Fenster in ein anderes Fenster verschoben werden.
Mit Hilfe des Menüs Window können die verschiedenen Registerkarten geöffnet werden.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 31
„Ordner“ öffnen oder schließen
Klick auf das Pluszeichen: Ein Ordner wird geöffnet. Der Inhalt wird angezeigt.
Klick auf das Minuszeichen: Ein Ordner wird geschlossen.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 32
Projekt-Explorer: Anzeige der Projektstruktur
Die Registerkarte Projects zeigt die Struktur der Projekte an.
Im Ordner Source Files befindet sich der Programmcode. In diesem Ordner werden die Quelldateien (*.cpp) abgelegt.
Im Ordner Header Files befinden sich die Deklarationsdateien. In diesem Ordner werden die Header-Dateien (*.h) abgelegt.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 33
Projekt-Explorer: Anzeige der Ordnerstruktur
Die Registerkarte Files zeigt die Ordnerstruktur des Projekts an.
Im Wurzelverzeichnis wird die Datei „main.cpp“ zum Starten des Programms angezeigt.
Im Ordner build befinden sich die Objektdateien (*.o).
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 34
Fenster „Classes“
Die Registerkarte Classes zeigt die verschiedenen Klassen in einem Projekt an.
Der Ordner Libraries zeigt die Header-Dateien der eingebundenen Bibliotheken an.
Für jede benutzerdefinierte Klasse in dem geöffneten Projekt wird ein Ordner angezeigt.
Globale Konstanten und Funktionen in dem geöffneten Projekt werden aufgelistet.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 35
Attribute einer Klasse
Attribute beschreiben eine Klasse. Private Attribute werden durch das
Schloss in der linken oberen Ecke eines blauen Quadrats gekennzeichnet.
Geschützte Attribute werden durch den Schlüssel in der linken oberen Ecke eines gelben Quadrates gekennzeichnet.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 36
Konstruktoren und Destruktoren einer Klasse
Konstruktoren und Destruktoren sind spezielle Funktionen einer Klasse
Konstruktoren, die zur Erzeugung eines Objekts benötigt werden, sind mit einem gelben Viereck gekennzeichnet.
Destruktoren, die bei der Zerstörung eines Objektes aufgerufen werden, sind durch ein blaues Viereck gekennzeichnet.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 37
Methoden einer Klasse
Methoden sind Funktionen, die die Attribute einer Klasse verändern oder lesen.
Methoden werden mit Hilfe des roten Kreises gekennzeichnet.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 38
Hinzufügung einer Klasse zu einem Projekt
Rechter Mausklick auf den Projektnamen im Projekt-Explorer. New – C++-Class.
Oder: File – New File. Auswahl der Kategorie C++ und den Dateityp C++-Class.
In beiden Fällen wird automatisch für die Klasse eine Header-Datei mit der Endung „.h“ und eine Codedatei mit der Endung „.cpp“ angelegt.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 39
Codefenster
Abbildung der Struktur eines C++-Programms. Mit Hilfe von Registerkarten werden die verschiedenen
Dateien eines Projektes angezeigt.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 40
Darstellung von Code
Schlüsselwörter in C++ werden standardmäßig mit blauer Schrift gekennzeichnet.
Kommentare werden in grauer Schrift dargestellt. Benutzerdefinierte Bezeichner werden mit schwarzer Schrift
gekennzeichnet. Tools – Options; Kategorie Fonts & Color legt die
verschiedenen Schriftarten für die verschiedenen Elemente im Code fest.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 41
Registerkarte öffnen
Durch ein Doppelklick auf eine Datei im Projekt-Explorer. Durch ein Doppelklick auf ein Element im Fenster Classes. Durch ein Doppelklick auf ein Element im Fenster Navigator.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 42
Registerkarte aktivieren oder schließen
Aktivierung: Klick auf den Kopf der Registerkarte. Schließen: Klick auf das Kreuz in der rechten oberen Ecke
einer Registerkarte,
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 43
Navigator
Struktur des angezeigten Codes. In der Titelleiste wird der Namen der Methode oder Funktion
angezeigt, in dem sich der Mauszeiger aktuell befindet.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 44
Abbild der Struktur des Codes
Die roten Kreise kennzeichnen Methoden einer Klasse oder Funktionen in der prozeduralen Programmierung.
Gelbe Rauten kennzeichnen Methoden zur Initialisierung einer Klasse.
Blaue Rauten kennzeichnen Methoden, die bei der Zerstörung einer Klasse aufgerufen werden.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 45
Projekt schließen
File – Close Project (ProjectName).
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 46
Eigenschaften eines Projekts
File – Project Properties Rechtsklick auf den Projektnamen. Properties im Kontextmenü.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 47
Kategorie „General“
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 48
Kategorie General; Encoding
Einstellung des Zeichensatzes für das Codefenster. In welchen Zeichensatz wird der Code gespeichert? Um Fehler zu vermeiden, sollte dort UTF-8 eingestellt sein.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 49
C++
ISO-genormte Programmiersprache. Objektorientierte und generische Programmierung. Komplexe, flexible Programmiersprache. Hardware-nahe Programmierung.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 50
Geschichte
Ca. 1979 arbeitet Bjarne Stroustrup an einer Programmiersprache unter dem Namen „C mit Klassen“.
1983 ändert sich der Name der Programmiersprache in C++. 1985 wird die erste Referenz zu der Programmiersprache von
Bjarne Stroustrup veröffentlicht. 1990 wird Borland's Tubo C++ -Compiler als erste
kommerzielles Produkt für die Programmiersprache angeboten.
1998 Veröffentlichung des ersten Standards als ISO/IEC 14882:1998 (C++98).
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 51
Standard
C++98. ISO/IEC 14882:1998. Publiziert im Jahr 1998. Erste Standardisierung der Programmiersprache. Ergänzung der Norm im Jahr 2003.
C++11. ISO/IEC 14882:2011. Publiziert im April 2011. Ersetzung der alten Versionen.
C++14. ISO/IEC 14882:2014. Publiziert im Januar 2015. Erweiterungen und Ergänzungen zu C++11.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 52
… in den Eigenschaften eines Projekts in NetBeans
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 53
… einstellen
Rechter Mausklick auf den Namen des Projekts im Projekt-Explorer.
Klick auf das Menü Properties. Auswahl der Kategorie Build – C++ Compiler. Die Attribute in der Kategorie Basic Options werden auf der
rechten Seite des Dialogfensters angezeigt. Die Eigenschaft C++ Standard hat den Wert <default>.
Standardmäßig wird der Standard C++98 genutzt.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 54
Einstellungen für die Version C++11
Die Attribute in der Kategorie Basic Options werden auf der rechten Seite des Dialogfensters angezeigt. Durch einen Klick auf den Pfeil am rechten Rand der Eigenschaft C ++ Standard‑ wird die Liste aller Möglichkeiten geöffnet. Aus der Liste wird das Element C++11 ausgewählt.
Die Attribute in der Kategorie Compilation Line werden auf der rechten Seite des Dialogfensters angezeigt. Die Eigenschaft Additional Options hat den Wert -std=c++11.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 55
Einsatzmöglichkeiten
Treiber für Hardware. Programmierung für eingebettete Systeme. Entwicklung von Systemprogrammen. Zeitkritische Spiele. Eine Liste von Beispielen finden Sie unter
http://www.stroustrup.com/applications.html.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 56
Programmierkonzepte in C++
Prozedurale Programmierung. Modulare Programmierung. Objektorientierte Programmierung. Generische Programmierung.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 57
Prozedurale Programmierung
Top-down Entwurf. Welche Aufgabe soll abgebildet werden? Wie kann die Aufgabe in kleine Teilaufgaben gegliedert
werden? Strukturierter Code, aber keine strukturierten Daten. Das Programmierkonzept wird von den Programmiersprachen
C und C++ unterstützt.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 58
Anweisungen
Anweisungen sind die kleinste Einheit in einem C++-Programm.
Eine Anweisung beschreibt eine Aktion mit Hilfe von Operatoren, Operanden und Schlüsselwörtern aus C++.
{ class clsWuerfel myWuerfel; myWuerfel.setKantenlaenge(4.5); cout << "Kantenlaenge: " << myWuerfel.getKantenlaenge();}
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 59
... in C++
Jede Anweisung in C++ endet mit einem Semikolon. Eine Anweisung kann leer sein.
{ class clsWuerfel myWuerfel; myWuerfel.setKantenlaenge(4.5); cout << "Kantenlaenge: " << myWuerfel.getKantenlaenge();}
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 60
Funktionen
Zusammenfassung von Aktionen. Zerlegung einer Aufgabe in verschiedene Teilaufgaben. Schnittstelle nach außen.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 61
Aufbau
int main(){ return 0;}
Jede Funktion hat einen Kopf und einen Rumpf.
Der Funktionskopf beschreibt eine Schnittstelle nach außen. Der Funktionskopf legt fest, welche Parameter der Funktion übergeben werden. Der Typ des Rückgabewertes einer Funktion wird definiert.
Der Funktionsrumpf wird durch die geschweiften Klammern begrenzt. Mit Hilfe der geschweiften Klammern wird ein Block von Anweisungen zusammengefasst.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 62
Modulare Programmierung
Aufteilung von Quellcode in verschiedene Dateien. Quellcode zu einem Thema wird in einer Datei zusammengefasst.
Auslagerung von Deklarationen etc. in eine Header-Datei. Die Deklaration und Implementierung von Funktionen werden getrennt.
Module sind in sich abgeschlossen. Jedes Modul kann allein getestet und ausgeführt werden.
Das Programmierkonzept wird von den Programmiersprachen C und C++ unterstützt.
C++ | 06.05.15 Seite 63
Namensraum
Definition eines Bereiches, in dem Variablen, Funktionen und Methoden sichtbar sind.
Um Namenskonflikte zu vermeiden, werden Quelldateien in Pakete verpackt.
Alle Standardkomponenten der Programmiersprache C++ liegen in dem Namensraum std. std ist der Standard-Namensraum für Objekte, die in den Standardbibliotheken definiert sind.
C++ | 06.05.15 Seite 64
using-Anweisung
using namespace std;
Durch die Anweisung werden alle Namen in dem angegebenen Raum sichtbar.
Der Zugriff auf den angegebenen Namensraum wird für alle Funktionen erlaubt.
using-Anweisungen sollten nicht in Header-Dateien verwendet werden.
C++ | 06.05.15 Seite 65
using-Deklaration
using std::cout;
Aus dem Namensraum std wird nur der Name cout sichtbar. Alle Funktionen können nur auf das angegebene Objekt in dem
Namensraum zugreifen. Die using-Deklaration kann sich am Anfang eines Moduls oder
direkt in einem Funktionsrumpf befinden.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 66
Quelldateien kompilieren
Quelltext ([datei].cpp)
Präprozessor
Compiler
Objektdatei ([datei].o)
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 67
Präprozessor und Compiler
Der Präprozessor ersetzt die, mit einem Hash-Zeichen gekennzeichneten Zeilen durch den entsprechenden Text.
Der Compiler übersetzt den lesbaren Programmtext in Maschinencode. Fehler in der Syntax führen zu einem Abbruch.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 68
Präprozessor-Anweisungen im Code
Jede Präprozessor-Anweisung beginnt immer mit dem Hash (#).
Die Anweisung endet automatisch mit dem Ende der Zeile. Präprozessor-Anweisung werden an den Anfang einer
Quelldatei oder Header-Datei gesetzt.
#include <iostream>#include "clsWuerfel.h"
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 69
Header-Datei einbinden
Quelltext (main.cpp)
Präprozessor
Compiler
Objektdatei (main.o)
user-defined ([datei].h)
system-defined (header.h)
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 70
Header-Dateien (*.h)
Inhaltsverzeichnis zu einer Quelltextdatei. Alle notwendigen Deklarationen für die Implementierung. Definition von Prototypen für eine Klasse. Definition von Prototypen von Funktionen. Instruktionen für den Compiler. Quellcode, der in mehreren Dateien eingebunden werden kann. Schnittstelle nach außen.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 71
Beispiel einer Header-Datei#ifndef CLSWUERFEL_H#define CLSWUERFEL_H
class clsWuerfel {
public: clsWuerfel(); clsWuerfel(int); clsWuerfel(const clsWuerfel& );
~clsWuerfel();
void setKantenlaenge(double);
double getKantenlaenge();
double getWuerfelVolumen();
Be
isp
iele
/cp
pO
OP
_0
01
_..
.
private: double kantenlaenge; };
#endif /* CLSWUERFEL_H */
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 72
Einbinden von Header-Dateien
Mit Hilfe des Befehls #include werden die verschiedenen Header-Dateien eingebunden.
Header-Dateien, die durch die spitzen Klammern begrenzt werden, sind in der Standardbibliothek definiert.
Header-Dateien, in Anführungszeichen, sind benutzerdefinierte Deklarationsdateien.
#include <iostream>#include "clsWuerfel.h"
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 73
Symbolische Konstanten in einer Header-Datei
Mit Hilfe von #define wird eine symbolische Konstante deklariert.
Der Präprozessor ersetzt die Bezeichnung der symbolischen Konstanten im Code durch den entsprechenden Wert.
Eine symbolische Konstante kann einen definierten Wert haben, muss aber nicht. In diesem Beispiel hat die Konstante keinen definierten Wert.
#define CLSWUERFEL_H
#define name
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 74
Ist die symbolische Konstante definiert?
#ifndef CLSWUERFEL_H#define CLSWUERFEL_H
#endif /* CLSWUERFEL_H */
Mit Hilfe von #ifndef (if not defined) kann abgefragt werden, ob die symbolische Konstante definiert ist oder nicht.
Der Anweisungsblock endet mit #endif. Durch diese Präprozessor-Anweisung wird eine
Mehrfacheinbindung einer Header-Datei verhindert.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 75
Ausführbares Programm erzeugen
Objektdatei (main.o)
Linker
Ausführbare Datei (main.exe)
Objektdatei ([datei].o)
Standard Runtime Library
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 76
Linker
Bindet alle zu einem Programm gehörenden Objektdatei zu einer ausführbaren Datei zusammen.
Falls die einzubindenden Dateien nicht vorhanden sind, wird eine Fehlermeldung ausgegeben.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 77
Startpunkt eines modularen C++-Programms
#include <iostream>#include "clsWuerfel.h"
using namespace std;
int main() { class clsWuerfel myWuerfel;
class clsWuerfel koerper(5); myWuerfel.setKantenlaenge(4.5); cout << "Kantenlaenge meines Würfels: " << myWuerfel.getKantenlaenge();
return 0;}B
eis
pie
le/c
pp
OO
P_
00
1_
...
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 78
main()
Bereitstellung einer Steuerzentrale für das Projekt. Jedes ausführbare Programm in der Programmiersprache
C+ + beginnt mit dieser Funktion.‑ Aufruf von Klassen und Funktionen aus Header-Dateien. main ist der Name der Startprozedur. C++-Programme sind
case-sensitiv. Das heißt, eine Funktion Main wird nicht für den Start genutzt.
Die main-Datei ist nur einmal in einem C++-Projekt vorhanden.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 79
Aufbau
Präprozessor-Anweisung
int main ()
}
Anweisung;
Anweisung;
return 0;
using - Anweisung;
{
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 80
Objektorientierte Programmierung
Bottom-up Design. Welche Daten werden zur Beschreibung eines Objektes aus
der realen Welt benötigt? Objekte werden in Abhängigkeit der gestellten Aufgabe abstrahiert.
Welche Methoden werden zur Modifizierung eines Objektes benötigt? Die Attribute (die Eigenschaften) eines Objekts werden mit Hilfe von Methoden verändert und gelesen.
Das Programmierkonzept wird von der Programmiersprache C++ unterstützt.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 81
Objekte
Variablen von einem bestimmten Typ „Klasse“. Mit Hilfe eines Bauplans wird ein konkretes Objekt erstellt. Dem Objektnamen folgen keine runden Klammern. Das Objekt
nutzt den Standard-Bauplan. Dem Objektnamen folgen runde Klammern. In den runden
Klammern befindet sich eine Parameterliste. Der vorhandene Bauplan wird entsprechend der Anfangswerte angepasst.
class clsWuerfel myWuerfel;
class clsWuerfel koerper(5);
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 82
„Standard-Objekt“
Dem Objektnamen folgen keine runden Klammern. Das Objekt nutzt den Standard-Bauplan.
class clsWuerfel myWuerfel;
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 83
Übergabe von Parametern
Dem Objektnamen folgen runde Klammern. Die runden Klammern begrenzen eine Parameterliste. Die
einzelnen Parameter in der Liste werden durch Kommata getrennt.
Der vorhandene Bauplan wird entsprechend der Anfangswerte angepasst.
class clsWuerfel koerper(5);
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 84
Objekt „Würfel“
Die Kantenlänge beträgt 2 cm. Der Würfel ist grün.
Für das Objekt kann die Kantenlänge und die Farbe gelesen und modifiziert werden.
Das Volumen des Objekts kann berechnet werden.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 85
Objekt
Substantive in einem Text. Ein Ding (Exemplar, Instanz) aus der realen Welt. Virtuelle Dinge wie zum Beispiel Dialoge auf dem Monitor. Baukasten von Funktionen.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 86
Beispiel „Objekt“
Postalische Adresse
Schloßwender Str.5
30159Hannover
Person
HerrTom
Meier
Wohnt „Schloßwender Str 5“; „30159 Hannover“
Zieht um in den „Welfengarten 6“,„30167 Hannover“
Ändert den Namen in „Meier-Müller“
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 87
Prinzipien der objektorientierten Programmierung
Abstraktion Datenkapselung Polymorphismus Vererbung
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 88
Abstraktion
Die allgemein gültigen Attribute werden dargestellt. Es werden nur die Attribute definiert, die für die
Programmieraufgabe benötigt werden. In Abhängigkeit der Nutzung der Attribute werden Methoden
implementiert.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 89
Klasse „Würfel“
Attribute: kantenlaenge. Die Attribute beschreiben ein konkretes Objekt. Die Eigenschaften sind für alle Objekte dieses Typs gültig.
Methoden zum Lesen und Modifizieren der Attribute: setKantenlaenge, getKantenlaenge.
Methoden, um den Bau zu beginnen: clsWuerfel.
Methoden, um den Bau zu zerstören: ~clsWuerfel.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 90
Klasse
Abstraktion von einen Ding. Zusammenfassung von Variablen und Funktionen in einem
Datentyp. Bauplan für ein bestimmtes Objekt. Oberbegriff / Kategorie von Dingen. Zum Beispiel ein Würfel
kann gelb, rot oder grün sein. Die Kantenlänge kann unterschiedlich sein. Aber alle Ausprägungen beschreiben einen „Würfel“.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 91
Beispiel „Klasse“
Postalische Adresse
StraßeHausnummerPostleitzahl
Ort
Person
AnredeVorname
Nachname
Wohnt an der Adresse
Zieht um
ändert
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 92
„Klasse“ und „Objekt“
Postalische Adresse
StraßeHausnummerPostleitzahl
Ort
Person
AnredeVorname
Nachname
wohnt ...
zieht um
ändert
Postalische Adresse
Schloßwender Str.5
30159Hannover
Person
HerrTom
Meier
wohnt „Schloßwender Str 5“; „30159 Hannover“
zieht um in den „Welfengarten 6“,„30167 Hannover“
ändert den Namen in „Meier-Müller“
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 93
Aufbau einer Klasse
class clsWuerfel {
public: clsWuerfel(); clsWuerfel(int); clsWuerfel(const clsWuerfel& ); ~clsWuerfel();
void setKantenlaenge(double); double getKantenlaenge(); double getWuerfelVolumen();
private: double kantenlaenge; };
Be
isp
iele
/cp
pO
OP
_0
01
_..
.
class clsWuerfel {
}
public:Konstruktor();Destruktoren();Methoden();
private:attribut;
attribut;
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 94
Beschreibung mit Hilfe von UML
Unified Modelling Language zur Darstellung von Klassen etc.
Der Name der Klasse steht am oberen Rand.
Dem Namen folgen die Attribute der Klasse. Auf die Attribute kann von außen nicht zu gegriffen werden (-; private ).
Am Ende werden die Methoden aufgelistet. Die Methoden dürfen von außen aufgerufen werden (+; public).
Wuerfel
- kantenlaenge: double
+getKantenlaenge() : double+setKantenlaenge(double) : void+getVolumen() : double
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 95
… in einer Header-Datei
class clsWuerfel {
};
Beispiele/cppOOP_001_...
Beginn mit dem Schlüsselwort class. Dem Schlüsselwort folgt der Name der Klasse. Der Name ist
eindeutig. Attribute und Methoden werden innerhalb der geschweiften
Klammern deklariert. Jede Deklaration einer Klasse endet mit einem Semikolon.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 96
Attribute (Member)
Allgemein gültige Beschreibung eines Objekts. In diesem Beispiel wird der Würfel mit Hilfe der Kantenlänge und der Füllfarbe beschrieben.
Eigenschaften eines Objekts. In diesem Beispiel: Farbe und Kantenlänge.
Beschreibung des Zustandes eines Objekts. Wenn ein Würfel gedreht wird, wird das Attribut „IstGedreht“ gesetzt.
Attribute beschreiben die variablen Werte eines Objektes.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 97
… in einer Header-Datei
class clsWuerfel {
public:
private: double kantenlaenge;};
Be
isp
iele
/cp
pO
OP
_0
01
_..
.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 98
Methoden
Erstellung von Objekten. Lesen und verändern von Attributen eines Objektes. In diesem
Beispiel wird die Kantenlänge und die Füllfarbe mit Hilfe von Methoden gesetzt und gelesen.
Änderung eines Zustandes eines Objekts. Funktionen innerhalb einer Klasse. Objekte und Methoden werden mit Hilfe des Punktoperators
verbunden.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 99
… in einer Header-Datei
class clsWuerfel {
public: clsWuerfel(); clsWuerfel(int); clsWuerfel(const clsWuerfel& ); ~clsWuerfel();
void setKantenlaenge(double); double getKantenlaenge(); double getWuerfelVolumen();
private:
};Be
isp
iele
/cp
pO
OP
_0
01
_..
.
class clsWuerfel {
}
public:Konstruktor();Destruktoren();Methoden();
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 100
Konstruktoren, Destruktoren und Methoden
Konstruktoren werden bei der Erzeugung eines konkreten Objekts von einer Klasse genutzt.
Destruktoren werden bei der Zerstörung eines Objektes aufgerufen.
Methoden lesen und verändern Attribute im Leben eines Objekts.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 101
… in einer Quelldatei
#include "clsWuerfel.h"
clsWuerfel::clsWuerfel() { kantenlaenge = 1;}
clsWuerfel::clsWuerfel(int kantenlaenge){ this->kantenlaenge = kantenlaenge;}
void clsWuerfel::setKantenlaenge(double laenge){ kantenlaenge = laenge;}
Be
isp
iele
/cp
pO
OP
_0
01
_..
.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 102
Datenkapselung
Methoden (Funktionen) und Attribute (Eigenschaften) werden gemeinsam in einer Klasse gekapselt.
Die Klasse stellt alle Funktionen, die zur Bedienung oder Erzeugung von Objekten benötigt werden, nach außen hin zur Verfügung.
Eigenschaften von Objekten können aber nicht von außen manipuliert werden. Das Innenleben der Objekte ist in einer Blackbox versteckt.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 103
Blackbox
class clsWuerfel {
public: clsWuerfel(); clsWuerfel(int); clsWuerfel(const clsWuerfel& ); ~clsWuerfel();
void setKantenlaenge(double); double getKantenlaenge(); double getWuerfelVolumen();
private: double kantenlaenge; };
Be
isp
iele
/cp
pO
OP
_0
01
_..
.
Mit Hilfe der Eingabe von private: werden die Attribute in der Klasse gekapselt. Die Attribute sind nicht sichtbar.
Methoden sind public:. Methoden beschreiben eine Schnittstelle nach außen mit Hilfe ihres Kopfes. Der Anwender weiß, aber nicht wie die Methode Attribute verändert oder liest.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 104
Vererbung
Darstellung von Beziehungen zwischen zwei Klassen. Darstellung von Eltern-Kind-Beziehungen. Beispiel: Ein Würfel erbt Attribute und Methoden von dem
Objekt „Rechteck“.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 105
Polymorphismus
Verschiedene Implementierungen von Methoden. Überschreiben von geerbten Methoden. Überladen von vorhandenen Methoden. „Kinder“ können Methoden der „Eltern“ überschreiben. Die
überschriebene Methode der Eltern kann aber trotzdem von den Kindern genutzt werden.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 106
Generische Programmierung
Nutzung von Schablonen zur Beschreibung eines Objekts. Schreiben von Methoden unabhängig vom Typ des Objektes. Nutzung von Templates. Das Programmierkonzept wird von der Programmiersprache
C++ unterstützt.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 107
Konsole in NetBeans
Fenster Output meist am unteren rechten Rand der IDE. Standardeingabe (cin) und Standardausgabe (cout) für ein C++-
Programm Window - Output oder <STRG>+<4> minimiert oder maximiert
die Konsole.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 108
Konsolen-Typ in NetBeans auswählen
Rechter Mausklick auf das C++-Projekt. Properties im Kontextmenü. Kategorie Run. Console Type sollte den Eintrag Standard Output haben.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 109
Starten des C++-Programms
Mit Hilfe des grünen Pfeils am linken Rand wird das, in der Titelleiste benannte Programm gestartet.
C++ - Objektorientierte Programmierung g | 06.05.15 Seite 110
C++-Programm stoppen
Mit Hilfe des roten Rechtecks am linken Rand wird das, in der Titelleiste benannte laufende Programm angehalten.
Das Programm wird nicht vollständig durchlaufen, sondern vom Entwickler vorzeitig abgebrochen.