Vorlesungsskript - Hochschule Emden/Leer
Vorlesungsskript - Hochschule Emden/Leer
Vorlesungsskript - Hochschule Emden/Leer
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
c○ Prof. Dr. B. Bartning, HS <strong>Emden</strong>/<strong>Leer</strong> Rumpfskript ” Informatik I/II“ (WS/SS 2010/11) 102<br />
9 Objektorientierte Programmierung:<br />
Kapselung von Daten und Funktionen mit Zugriffskontrolle<br />
9.0 Überblick<br />
Die Ideen für die Objektorientierte Programmierung sind – sprachunabhängig – in (Kap.<br />
6.4) näher beschrieben. Das aktuelle Kapitel dient dazu, diese Ideen nach C ++ zu übertragen.<br />
Unterkapitel 1 zeigt, wie Klassen (in C ++ als Datentypen) und Objekte (Variable eines solchen<br />
Klassentyps) erzeugt und benutzt werden. Bestimmte Methoden, nämlich Konstruktoren,<br />
werden benötigt, ein Objekt zur Laufzeit zu erzeugen (Unterkapitel 2). Daher kann<br />
(für Sie als Teilnehmer dieses Kurses: muss) man Konstruktoren zur sinnvollen Initialisierung<br />
bauen. In Unterkapitel 3 wird ein ausführliches Beispiel gezeigt, dazu wird dort die<br />
Forderung begründet, Datenelemente einer Klasse immer zu verbergen.<br />
9.1 Klassen und Objekte<br />
(9.10) Übb Eine Klasse dient der Kapselung von Daten und (Zugriffs-)Funktionen mit der<br />
Möglichkeit der expliziten Zugriffskontrolle (VERBORGEN oder ÖFFENTLICH). In C ++ ist<br />
die Klasse ein (Daten-)Typ. Dieser muss dem Compiler in seiner internen Struktur bekanntgegeben<br />
werden. (9.11) erläutert, wie diese Klassendefinition durchgeführt wird. Der Punkt<br />
(9.12) befasst sich mit dem Gültigkeitsbereich der Klassenelemente und des Klassennamens.<br />
(9.11)<br />
(a)<br />
Variable des Typs Klasse werden Objekte genannt. Punkt (9.13) zeigt, wie Objekte in C ++<br />
gebildet und benutzt werden.<br />
Die Klasse ist in C ++ ein Typ, s. (2.25a2), (3.20) und (5.60, 5.61), und zwar ein benutzerdefinierter<br />
Typ; der Typ wird durch den Benutzer selbst definiert. Im Gegensatz zu<br />
den ” eingebauten“ Typen – wie z. B. int, double – kennt der Compiler von sich aus<br />
nicht den internen Aufbau einer Klasse; daher muss ihm der Aufbau mitgeteilt werden.<br />
Dieses geschieht durch die Klassendefinition.<br />
Anm Andere benutzerdefinierte Typen sind beispielsweise Arrays (Kap. 5.4), da der Benutzer selbst<br />
den Komponententyp und die Anzahl der Komponenten angibt.<br />
10,11,12,14,21 Klassen(Typ)Definition [NV] <br />
class KlassenName {<br />
<br />
-<br />
22 ZugriffsSpezifizierer :<br />
ElementDeklaration<br />
22 ZugriffsSpezifizierer [NV] private |<br />
| public<br />
Bsp siehe unter (b).<br />
<br />
- 0..n } ;<br />
↑↑ Da der Compiler mit obiger Klassenbeschreibung die gesamte Information zum Aufbau von<br />
Variablen dieses Typs erhält, handelt es sich tatsächlich um eine Definition, vgl. (7.21). Diese<br />
Definition muss allen Übersetzungseinheiten zur Verfügung stehen, in denen die Klasse<br />
gebraucht wird, daher sollte sie in einer Headerdatei stehen (8.24c1). Trotz des (durch<br />
Einschluss implizit) mehrfachen Vorhandenseins der Klassendefinition in den verschiedenen<br />
Übersetzungseinheiten gilt die ODR (8.21d); sich gleichende Definitionen derselben Klasse in<br />
verschiedenen Übersetzungseinheiten gelten als eine einzige.<br />
(b) Eine Klassendefinition besteht demnach aus:<br />
• KlassenName – er gibt den Namen der Klasse (Typnamen) an.<br />
• Folge von ElementDeklarationen; diese Elemente können sein:<br />
◦ Datenelemente – syntaktisch wie Variablendefinitionen,<br />
◦ Elementfunktionen (Funktionen, die i. a. etwas mit den Datenelementen tun) –<br />
syntaktisch meist Funktionsdeklarationen,