Twitter und Facebook-Anbindung
X
Tweet Follow @twitterapi
!!! Anbindung an twitter und facebook öffnen !!!

Wenn Ihnen mein Online-Buch gefällt,
dann bedanken Sie sich doch mit einer kleinen Spende...

15 Grundlagen

15 Grundlagen

Bevor ich mit Ihnen voll in die Programmierung einsteigen kann, muss ich zunächst ein paar begriffliche Sachen mit Ihnen klären, damit Sie später auch wissen, von was ich rede. Zudem werde ich auf grundlegende Philosophien eingehen.

Zum Seitenanfang
Zum Inhaltsverzeichnis

15.3 Konstruktor und Destruktor

15.3 Konstruktor und Destruktor

Konstruktor und Destruktor sind zwei grundlegende Methoden, welche jede Klasse besitzt. Auch wenn man sie nicht implementiert, werden s.g. Standardkonstruktoren und Standarddestruktoren, im Hintergrund, benutzt. Das Besondere an ihnen ist, dass sie nichts zurück geben (noch nicht einmal "void"). Sie können jedoch Übergabeparameter besitzen. Eine weitere Besonderheit ist, dass diese zwei Methoden niemals händisch aufgerufen werden, wobei man mit dieser Formulierung vorsichtig sein muss, da man zu mindestens den Konstruktor, indirekt doch aufruft und es sich bei der Vererbung wieder anders verhält.

Der Konstruktor ist für die Initialisierung des Objektes gedacht und setzt in der Regel nur Standardwerte für die Attribute bzw. erzeugt interne Objekte. Der Konstruktor heißt immer wie die Klasse selbst. Er kann zudem in mehreren Varianten auftreten (kann überladen werden). Man unterscheidet prinzipiell zwischen Standardkonstruktor, eigene bzw. benutzerdefinierte Konstruktoren und dem s.g. Kopierkonstruktor.

Der Destruktor ist nun das genaue Gegenteil. Er ist dafür gedacht, den Laden dicht zu machen. Er nimmt aufräumarbeiten vor, wie das Freigeben von Speicher interner Variablen / Attribute. Der Destruktor heißt auch wie die Klasse selbst, nur das ihm eine Tilde voran gestellt wird.

Wie dies alles genau aussieht, werden Sie im nächsten Kapitel sehen.

Zum Seitenanfang
Zum Inhaltsverzeichnis

15.2 Warum sollte man Klassen benutzen

15.2 Warum sollte man Klassen benutzen

Der Wohl größte Vorteil von Klassen, ist die s.g. Vererbung und der Polymorphismus. Was dies genau ist und worin die Vor - und Nachteile liegen, werde ich später erläutern und demonstrieren.

Ein weiterer Aspekt von Klassen ist, dass man die Attribute und Methoden unterschiedlichen Sichtbarkeiten zuordnen kann. Damit kann man verhindern, dass bestimmte Sachen von außen aufgerufen bzw. abgerufen oder überschrieben werden. Gerade bei Attributen macht das sehr viel Sinn, da es ungünstig wäre, ein Passwort auszulesen. Des weiteren ist es auch sinnvoll, Membervariablen zu schützen, welche nur bestimmte Werte annehmen dürfen. Hier wäre eine vorherige Prüfung wichtig. Aber auch so manche Methode sollte nicht von außen aufgerufen werden dürfen, wie z.B. solche, die von gewissen Ausgangszuständen ausgehen, die nicht immer vorhanden sind.

Noch ein großer Vorteil der Klassen, liegt in ihrer Wiederverwendbarkeit, da sie meist so entworfen wurden, dass sie autark laufen können. Damit meine ich, dass sie sich selbst verwalten und im Optimalfall, von keinen äußeren Faktoren abhängen (Ausführen kann man sie deshalb noch lange nicht). Daraus resultiert eine bessere Möglichkeit, Aufgaben in Teams aufzuteilen. Team A braucht nicht zu wissen, wie Team B ein Problem löst. Team A muss lediglich wissen, wie man die Klasse von Team B anspricht.

Durch die Zusammenfassung von Attributen und Methoden, wird im allgemeinen der Quelltext lesbarer und es ergeben sich kleinere Vorteile bei der Implementierung der Methoden. Da Attribute für Methoden quasi global sind, kann man sich bei den Methoden, Übergabeparameter sparen und somit wird der Methodenkopf schlanker, was wiederum der besseren Verständlichkeit beiträgt.

Zum Seitenanfang
Zum Inhaltsverzeichnis

15.1 Was sind Objekte und Klassen

15.1 Was sind Objekte und Klassen

Ganz formal sind Objekte Instanzen einer Klasse. Sicher klingt diese Definition sehr steif und ich denke nicht, dass ein Neuling jetzt schlauer ist. Also, was ist damit gemeint? Eine Klasse ist ein selbst definierter Datentyp, genauso wie "int" oder "float" ein Datentyp ist. Das Objekt ist dann die Variable des neuen Datentyps. Eine Klasse ist also eine Art Bauplan, wohingegen ein Objekt ein Haus ist, welches nach diesem Bauplan errichtet wurde. Andere Beispiele wären die DNS, welche vorgibt, wie ein Mensch wächst oder ein Förmchen (Klasse), mit welchem man Kekse (Objekte) aus dem Teig (Speicher) ausstechen kann.

Prinzipiell können sie, wie ein Struktur, Werte aufnehmen. Das Neue für Sie an einer Klasse ist nun, dass sie auch noch Funktionen aufnehmen können (streng genommen geht das heutzutage auch bei Strukturen, aber dazu später mehr). Wenn man Funktionen in einer Klasse kapselt, spricht man von Methoden einer Klasse (also ein Synonym). Die Werte nennt man Attribute oder auch Membervariablen und Eigenschaften, wobei man mit letzter Bezeichnung sehr vorsichtig sein muss, da in anderen Sprachen, wie z.B. Delphi, Eigenschaften etwas anderes sind (auch bei der COM-Technologie, welche Sprachen neutral ist).

Auch wenn man jetzt scheinbar alles in eine Klasse packen kann, was man irgendwann mal brauchen könnte, macht man dies nicht. Es werden immer nur Attribute und Methoden aufgenommen, welche für die innere Verwaltung und Funktionalität, notwendig ist. Beispielsweise könnte eine Klasse "Auto" eine Methode "Fahren" haben, aber man wird in diese Klasse niemals ein Hauptmenü mit einbauen. Eine Ausgabe hingegen macht da schon mehr Sinn, obwohl man dies nicht gleich einsehen würde. Denkt man aber an ein Computerspiel, ist es schon Sinnvoll, wenn sich das Auto selber zeichnen könnte.

Eine Besonderheit in C++ ist, dass man im Gegensatz zu den meisten anderen Sprachen, Objekte auch ganz normal auf dem Stack ablegen kann und nicht zwingend mit einem Pointer auf sie zugreifen muss. Dies wirkt einigen Nachteile der objektorientierten Programmierung entgegen. Des weiteren versucht der Compiler die Objekte möglichst zusammenhängend im Speicher anzulegen (ähnlich Strukturen oder Arrays), was cachefreundlich ist.

Zum Seitenanfang
Zum Inhaltsverzeichnis

© Copyright by Thomas Weiß, 2009 - 2012