C# – Einführung Klassenkonzept

C# Anleitung

Voraussetzung:

• C# – Grundlagen

Anwendungsbeispiel:

Du möchtest eine bestimmte Verhaltensweise programmieren, die immer wieder gleich ist und sich nur durch verschiedene Werte unterscheidet. Das könntest Du zum einen mit Methoden realisieren, allerdings wird ab einer bestimmten Projektgröße alles unübersichtlich und ist auch nicht hilfreich bei der Wiederverwendbarkeit. Dafür und vieles weitere ist das Klassenkonzept gedacht, welches in diesem Kapitel behandelt wird.

 

Tutorial Einführung Klassenkonzept

Im ersten Beitrag dieser Tutorial-Reihe hast Du schon die Begriffe Klasse und Objekt gelesen, allerdings wurden diese dort nur ansatzweise erklärt.
Zur Erinnerung: Ich habe Klassen als Bauplan anhand des Beispiels eines Autos bezeichnet und als Objekt das fertige, wirkliche Auto.

Und genau das ist eine Klasse, ein Bauplan. Sie gibt vor wie das Objekt später aussieht und es sich verhält.

Warum macht man das überhaupt? Nun ja, als Programmierer wirst Du oft an den Punkt kommen, dass Du eine Verhaltensweise erstellst. Ob es nun eine Nachbildung von etwas realem, oder eine unechte ist, ist dabei egal. Wenn Du nun diese Verhaltensweise mehrfach benutzt und eine Änderung vornehmen möchtest, müsstest Du das überall machen. Das ist aufwendig und fehleranfällig.
Das hört sich erstmal ähnlich wie eine Methode an, aber eine Klasse bietet noch viel mehr Funktionen wie Du im Laufe dieses Kapitels merken wirst.

Eine Methode stellt wie Du bereits gelernt hast nur eine einzelne Funktion dar, während eine Klasse zusammengehörende Variablen und Methoden gruppiert und somit als Bausteine verwendet werden kann.

Die Antworten auf die Frage warum sind also:

• Wiederverwendbarkeit
• Wartungsaufwand minimieren

 

Anlegen einer Beispielklasse in Visual Studio

Eine Klasse in C# ist eine Datei, die mit .cs endet und eine bestimmte Struktur fordert.

Sie wird mit dem Schlüsselwort class eingeleitet, daraufhin folgt der Bezeichner und geschweifte Klammern, in denen die Attribute und Methoden geschrieben werden.

Auch hier kommt der gute Programmierstil ins Spiel. Klassenbezeichner werden wie Methodennamen groß geschrieben.

Um eine neue Klasse anzulegen bietet Dir Visual Studio mehrere Möglichkeiten an.

Du kannst im Menü auf „Projekt -> Klasse hinzufügen“ klicken oder im Projektmappen-Explorer per Rechtsklick auf die Projektdatei das Kontextmenü öffnen und unter dem Punkt „Hinzufügen -> Klasse…“ den entsprechenden Dialog öffnen.

Klasse_hinzufuegen

(Auf das Bild klicken zum vergrößern)

Was sich nun öffnet ist ein Fenster in dem Du viele Auswahlmöglichkeiten hast, was Du hinzufügen möchtest. In Deinem Fall lässt Du den vorausgewählten Punkt „Klasse“ bestehen und gibst dieser einen Namen.

In diesem Kapitel erkläre ich Dir die Klassen anhand einer Beispielklasse „Fahrzeug“, die im Laufe der Reihe immer weiter erweitert wird. Gib also für dieses Kapitel der Klasse den Name Fahrzeug.cs.

Klasse_hinzufuegen2

(Auf das Bild klicken zum vergrößern)

Nun hast Du folgenden Code vor Dir:

Attribute und Methoden einer Klasse hinzufügen

Nun überlegst Du Dir welche Eigenschaften Deine Klasse Fahrzeug haben soll. Wahrscheinlich fallen Dir spontan ganz viele Dinge ein. Aber hier geht es erst einmal nur um das Verständnis, daher sollten wenige Eigenschaften ausreichen.

Füge Deiner Klasse die Methode Beschleunigen() hinzu.

Wie die Logik der Methode aussieht, ist erst einmal egal.

Was Dir vielleicht auffällt ist, dass wir hier nun nichtmehr das Schlüsselwort static wie im Kapitel der Methoden Teil 1 nutzen. Woran das liegt, wird in einem späteren Tutorial erklärt.

Um zu sehen, wann die Methode aufgerufen wird, führst Du am Besten eine Konsolenausgabe in Beschleunigen aus.

Innerhalb deiner main-Methode in der Program.cs kannst Du nun ein Objekt von Fahrzeug erstellen.

Objekte anlegen

Ein Objekt anzulegen funktioniert ähnlich wie eine Variable anzulegen. Verwende daher die selben Regeln für den Bezeichner wie bei einer Variable.

Zuerst kommt der Datentyp (hier Klassenname) gefolgt vom Bezeichner.

Als nächstes erstellen wir das Objekt über das Schlüsselwort new. Dadurch wird ein neues Objekt der darauffolgenden Klasse angelegt und Speicher reserviert.

Alternativ kannst Du dies auch in einer Zeile schreiben.

Auf Objektmethoden und -Attribute zugreifen

Da Du nun ein Objekt meinFahrzeug vom Typ Fahrzeug angelegt hast, kannst Du die Methode Beschleunigen dieses Objektes jetzt aufrufen.

Das funktioniert genauso wie bei dem Befehl für die Konsolenausgabe über den Objektname, gefolgt von einer Punktnotation und dann der Methodenname.

Bedenke bitte, falls Du den Code hier heraus kopierst, dass der Namespace sowohl in der Program.cs als auch in der Fahrzeug.cs gleich sind. Ist das nicht der Fall wirst Du eine Fehlermeldung von Visual Studio bekommen.

Fehlermeldung

(Auf das Bild klicken zum vergrößern)

Zugriffsmodifizierer / Datenkapselung

Im Tutorial zu Methoden hatte ich die Zugriffsmodifizierer kurz erwähnt und auf einen späteren Zeitpunkt verwiesen. Dieser ist nun gekommen.
Als Programmierer solltest Du stets bemüht sein, die sogenannte Datenkapselung einzuhalten.

Unter Datenkapselung versteht man das Verbergen von Daten bzw Informationen vor dem Zugriff von außen.

Das bedeutet für Dich, dass Du nur das, was wirklich von außen sichtbar sein muss, sichtbar machst. Alles andere sollte von außen nicht sichtbar sein.
Für die Sichtbarkeit sind die Zugriffsmodifizierer zuständig. An dieser Stelle gehe ich erst einmal nur auf drei von ihnen ein. Es gibt noch weitere, aber für diese sind andere Kenntnisse aus späteren Tutorials erforderlich.

public

Public bedeutet, wie der Name schon erahnen lässt, öffentlich. Das heißt jeder kann auf diese Eigenschaft bzw Methode zugreifen. Typischer Anwendungsfall sind Methoden, die von außen aufgerufen werden sollen, wie z.B. die Methode Beschleunigen.

private

Auf private Attribute und Methoden kann nur die Klasse selbst zugreifen.
Erweitere um dies zu veranschaulichen die Klasse Fahrzeug um die private Integer-Variable leistung.

Versuche nun innerhalb der main-Methode auf die leistung zuzugreifen.

Wie Du siehst, ist das nicht möglich. Die Variable leistung ist also von außen geschützt.
Verwende private überall dort, wo es möglich ist.

internal

Internal besagt, dass innerhalb des gleichen Namespaces die Eigenschaft bzw Methode zugänglich ist. Aus einem anderen Namespace heraus nicht.

Der Konstruktor

Der Konstruktor ist eine besondere Methode. Er wird beim initialisieren eines Objektes ausgeführt, also an der Stelle, an der man mit dem Schlüsselwort new das Objekt anlegt.

Die Beispielklasse Fahrzeug hat, sollte man meinen, keinen Konstruktor. Das stimmt allerdings nicht.
Gibst Du keinen Konstruktor selbst an, legt C# im Hintergrund automatisch einen Standardkonstruktor an. Verhindern kannst Du dies nur, in dem Du selbst einen Konstruktor anlegst.

Einen Konstruktor anlegen

Der Konstruktor ist eine public Methode die keinen Rückgabetyp hat und den Bezeichner der Klasse trägt.

Innerhalb des Konstruktors kannst Du schon Code ausführen, der bei der Erstellung eines Objektes ausgeführt wird.

Um dies zu sehen, erweitere die Klasse Fahrzeug mit einem Standardkonstruktor in dem ein Text in der Konsole ausgegeben und das Attribut leistung auf 0 gesetzt wird.

Führst Du nun das Programm aus, sollte in Deiner Konsole folgendes zu sehen sein:

Konstruktoraufruf

(Auf das Bild klicken zum vergrößern)

Konstruktor überladen

Genau wie eine Methode, kannst Du auch den Konstruktor überladen, indem Du weitere Konstruktoren mit verschiedenen Übergabeparametern anlegst.

Erweitere die Klasse Fahrzeug um einen weiteren Konstruktor, mit dem Du die Eigenschaft leistung vorinitialisierst.

Ändere nun die Methode Beschleunigen so ab, dass die leistung ausgegeben wird.

Wenn Du nun in der main-Methode ein Objekt von Fahrzeug anlegst in die Klammern eine Zahl eingibst und danach Beschleunigen aufrufst, sollte folgende Konsolenausgabe erscheinen.

 

Konstruktoraufruf2
(Auf das Bild klicken zum vergrößern)

Hier siehst Du nun sehr gut, wie Du mit verschiedenen Zugriffsmodifizierern arbeitest.

Du kannst alternativ auch nur einen Konstruktor mit Übergabeparametern anlegen. Dann werden beim Anlegen eines Objektes auch immer diese Parameter gefordert.

Experimentiere wie immer ein bisschen mit den gelernten Punkten aus diesem Kapitel herum.
Denn: Probieren geht über studieren ;)

1 Antwort

  1. 14. September 2015

    […] Weiter zum nächsten Kapitel >> C# – Einführung Klassenkonzept […]

Schreibe einen Kommentar