07.10.2013 Aufrufe

Vorlesungsskript - Hochschule Emden/Leer

Vorlesungsskript - Hochschule Emden/Leer

Vorlesungsskript - Hochschule Emden/Leer

MEHR ANZEIGEN
WENIGER ANZEIGEN

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,

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!