Download C/C++ Skriptum

Transcript
TU-Wien
Institut E114
Prof. DDr. F. Rattay
Zur Veranschaulichung wird im folgenden, anhand des einfachen Beispiels eines Bankkontos, eine Klasse
entworfen. Anschließend werden einige Objekte dieser Klasse erzeugt und manipuliert. Der Status des
Bankkontos soll vereinfachend durch seine Kontonummer und seinen aktuellen Kontostand beschrieben
sein. Zusätzlich hat ein Kontoobjekt die Fähigkeit seinen Kontostand zu ändern, d.h. Geld abzuheben
oder einzuzahlen. Abgesehen davon muß sich ein Kontoobjekt auf einen definierten Startzustand bringen
(Konto anlegen) und gegebenenfalls auch wieder korrekt löschen können (Konto kündigen). Man sieht an
dieser Beschreibung bereits, daß in der objektorientierten Programmierung immer vom Objekt
ausgegangen wird, dem bestimmte Eigenschaften und Fähigkeiten zugeschrieben werden. In einer
fiktiven, umgangssprachlichen Klassendeklaration, die eine Anzahl von Kontoobjekten beschreibt, sähe
das etwa so aus:
Objekte der Klasse "Konto" bestehen aus:
Statusbeschreibung:
Kontonummer (Lange Ganze Zahl)
Aktueller Kontostand (Reelle Zahl)
Fähigkeiten:
Konto initialisieren (Parameter: Betrag (Reelle
Zahl))
Konto löschen (Parameter: -)
Geld einzahlen (Parameter: Betrag (Reelle Zahl))
Geld abheben (Parameter: Betrag (Reelle Zahl))
Kontonummer ausgeben (Parameter: Kontonummer (Lange
Ganze Zahl)
Ende der Deklaration
Man erkennt bereits an dieser Beschreibung einige wesentliche Eigenschaften einer Klassendeklaration.
Die Beschreibung des Status, bzw der "Attribute" durch sogenannte "Member-Variablen" erfolgt durch
Variablendeklarationen innerhalb der Klassendeklaration.
Die Fähigkeiten der Objekte einer Klasse werden durch Funktionsdeklarationen innerhalb der
Klassendeklaration festgelegt, wobei diese Funktionen "Member-Funktionen" oder "Methoden" genannt
werden. Genau hier liegt die zentrale Erweiterung zu den "structs" in C. "Structs" können lediglich
Variablen verschiedener Typen enthalten (vgl. Kapitel 0 des C-Kurses) und fassen diese zusammen. In
diesem Zusammenhangt ist der Begriff der Kapselung ebenfalls sehr wichtig. Er beschreibt das
"Verschwinden" von internen Informationen in einer Klasse, ein Konzept das als "Information Hiding"
bekannt ist und auf das weiter unten erneut eingegangen wird (vgl. nächstes Kapitel).
Eine Klasse in C++
Kommen wir zur programmtechnischen Umsetzung dieser Konzepte in C++. Das Programm besteht aus
drei Sourcefiles, wobei zwei die Endung ".cpp" tragen und eines die Endung ".h" trägt. Im File "konto.h"
befindet sich die Klassendeklaration (auch Schnittstellen-, Interface- oder Headerdatei genannt). Sie sieht
folgendermaßen aus:
// Headerfile zur Klasse Konto
#ifndef _KONTO_H_
#define _KONTO_H_
Die Programmiersprachen C und C++
Klassen und Objekte
45