Wir haben in den Beispielen dieses Buchs eine ganze Reihe von Programmiersprachen verwendet. In diesem Anhang geben wir zu jeder dieser Sprachen eine sehr kurze Beschreibung und stellen deren grundlegende Eigenschaften mit Bezug zur Objektorientierung vor. Außerdem geben wir Verweise auf weitere Informationen zu diesen Sprachen und womöglich auf freie Software, mit der Compiler, Interpreter oder komplette Entwicklungsumgebungen für diese Sprachen umgesetzt wurden.
A Verwendete Programmiersprachen
Wir stellen die verwendeten Programmiersprachen hier sehr kurz mit ihrem Steckbrief vor. Dabei geben wir nur einen ganz knappen Abriss. Jede Sprache wird mit ihren Basiskonstrukten, die relevant für die objektorientierten Eigenschaften sind, vorgestellt.
A.1 C++ 

C++ wurde von Bjarne Stroustrup als objektorientierte Erweiterung zur Programmiersprache C entwickelt. Bis Ende der 90er-Jahre war C++ die meistverwendete objektorientierte Programmiersprache. Danach wurde C++ in dieser Position von Java abgelöst.
Die Struktur von C++
Klassen werden in C++ mit dem Schlüsselwort class eingeführt. Alternativ kann auch das Schlüsselwort struct verwendet werden, dies ist aber für Klassen unüblich. class und struct unterscheiden sich nur in der Sichtbarkeitsstufe, die als Voreinstellung gilt: Bei Verwendung von class ist diese private, bei Verwendung von struct ist diese public.
C++ unterscheidet nicht zwischen reiner Vererbung von Schnittstellen und der Vererbung von Schnittstelle und Implementierung. Durch die Angabe einer Klasse nach dem Klassennamen wird eine Vererbungsbeziehung etabliert. C++ unterstützt die Mehrfachvererbung von Schnittstellen und von implementierenden Klassen. Bei der Deklaration einer Klasse kann eine Liste von Klassen aufgeführt werden, die als Basisklassen agieren.
Operationen werden darüber eingeführt, dass sie zusammen mit der Klasse deklariert werden. Wenn Operationen polymorph agieren sollen, muss das bei der ersten Deklaration einer Methode über das Schlüsselwort virtual erfolgen.
Ist nichts anderes angegeben, gilt für alle Elemente, die innerhalb einer Klasse (über class deklariert) deklariert werden, die Sichtbarkeitsstufe private. Neben den weiteren Sichtbarkeitsstufen protected und public kennt C++ auch die Beziehung friend zwischen zwei Klassen. Wenn Klasse B als friend von A definiert ist, können Exemplare von B auf private Datenelemente und Methoden von A zugreifen.
Die Syntax von C++
Wir stellen die Syntax von C++ an einem einfachen Beispiel vor. Die Klasse VersionNumber erbt dabei von einer Klasse StructuredName und implementiert eine Schnittstelle, die von der Klasse Comparable vorgegeben wird.
class StructuredName
{ /* ... */ };
class Comparable
{
public:
virtual int compareTo(const Comparable& other) = 0;
};
class VersionNumber : public StructuredName, Comparable
{
private:
list<string> parts;
public:
VersionNumber(list<string> parts)
{
this->parts = parts;
}
virtual ~VersionNumber() {};
virtual string toString();
virtual int compareTo(const Comparable& other);
};
string VersionNumber::toString()
{
string result = "";
list<string>::const_iterator iter;
for (iter=parts.begin(); iter!=parts.end();iter++)
{
if (iter != parts.begin())
result += ".";
result += *iter;
}
return result;
}
int main()
{
list<string> parts;
parts.push_back("6");
parts.push_back("0");
parts.push_back("2800");
parts.push_back("1106");
VersionNumber v(parts);
VersionNumber *p = new VersionNumber(parts);
cout << v.toString();
cout << p->toString();
}
- Wir deklarieren eine Klasse StructuredName.
- Wir deklarieren eine abstrakte Klasse Comparable.
- Diese spezifiziert eine Operation compareTo, die über den Ausdruck = 0 als abstrakt markiert wird.
- Die Klasse VersionNumber erbt von beiden genannten Klassen.
- Die Instanzvariable parts enthält eine Liste von Strings.
- Bei der Konstruktion wird eine Liste von Strings übergeben, die der Instanzvariablen parts zugewiesen wird.
- Die Operation toString wird mit dem Schlüsselwort virtual markiert. Damit unterliegt sie der Polymorphie und kann in abgeleiteten Klassen überschrieben werden.
- Da die Umsetzung der Methode toString für die Klasse VersionNumber außerhalb der Klassendeklaration erfolgt, muss der durch die Klasse vorgegebene Namensraum als VersionNumber:: der Methodenimplementierung vorangestellt werden.
- Über einen Iterator geht das Programm alle Elemente der Liste parts durch.
- Hier sehen wir zwei unterschiedliche Möglichkeiten der Objektkonstruktion. Zum einen haben wir die lokale Variable v vom Typ VersionNumber mit einem Exemplar von VersionNumber initialisiert. Zum anderen haben wir der Variablen p einen Zeiger auf ein Exemplar von VersionNumber zugewiesen, wobei das Objekt auf dem Heap angelegt wurde. Mit dem Operator -> kann eine Operation auf dem Objekt aufgerufen werden, auf das ein Zeiger verweist.
Ressourcen
Der am weitesten verbreitete freie Compiler für C++ ist derjenige, der als Teil des GNU-Projekts unter http://gcc.gnu.org/ zur Verfügung steht. Der Compiler steht für eine breite Palette an Plattformen zur Verfügung. Eine Integration in die Eclipse-Entwicklungsumgebung ist über das CDT-Projekt (C/C++ Development Tools) verfügbar. CDT integriert den GNU-C++-Compiler (oder auch andere Compiler) in die Eclipse-Umgebung. CDT ist verfügbar unter http://www.eclipse.org/cdt/.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.