Klassendefinition
Am Beispiel der Klasse Ticketautomat aus dem Projekt "Naiver Ticketautomat"
wird im folgenden der Aufbau einer Klassendefinition beschrieben.
Das Grundgerüst einer Klassendefinition hat immer die Form:
public class Klassenname
{
Datenfelder
Konstruktoren
Methoden
}
Der Innenteilteil einer Klasse besteht aus den drei Bestandteilen Datenfelder,
Konstruktoren und Methoden.
-
Datenfelder speichern die Daten, die das jeweilige Objekt benutzt
-
Konstruktoren erlauben es, neue Objekte zu erzeugen und in einen gültigen
Anfangszustand zu versetzen
-
Methoden implementieren das Verhalten von Objekten
Datenfelder
public class Ticketautomat
{
private int preis;
private int bisherGezahlt;
private int gesamtsumme;
// Konstuktor und Methoden hier ausgelassen
}
Datenfelder speichern die Daten, die ein Objekt benutzt. Sie werden auch als
Instanzvariablen bezeichnet. In unserem Beispiel werden drei Datenfelder
definiert:
-
preis ist ein Datenfeld für den festgelegten Preis eines Tickets
-
bisherGezahlt hält den Betrag, den der Benutzer bereits eingeworfen hat, bevor
er sich das Ticket drucken lässt
-
gesamtsumme speichert die Summe aller Geldbeträge, die eingeworfen wurden.
Alle Definitionen besagen, das die Datenfelder private Datenfelder des Objekts
sind (dazu später mehr) und außerdem vom Typ int. Es können also jeweils
ganzzahlige Werte gespeichert werden.
Konstruktoren
public class Ticketautomat
{
// Datenfelder hier ausgelassen
public Ticketautomat(int ticketpreis)
{
preis = ticketpreis;
bisherGezahlt = 0;
gesamtsumme = 0;
}
// Methoden hier ausgelassen
}
Die Konstruktoren einer Klasse haben eine ganz besondere Aufgabe: Sie sind
verantwortlich dafür, dass ein Objekt unmittelbar nach seiner Erzeugung in
einen gültigen Zustand versetzt wird. Diese Aufgabe wird auch als
Initialisierung bezeichnet.
Eine definierende Eigenschaft eines Konstruktors ist, dass er genauso
heißt wie die Klasse, in der er definiert ist - in unserem Fall Ticketautomat.
Die Datenfelder bisherGezahlt und gesamtsumme werden mit dem sinnvollen,
konstanten Wert 0 initialisiert. Der Ticketpreis wird beim Erzeugen von
Ticketautomaten festgelegt. Der Konstruktor nimmt diesen Wert in Form des
Parameters ticketpreis entgegen und speichert ihn im Datenfeld preis.
Es kann durchaus mehrere Konstruktoren geben, deren Signatur sich aber
unterscheiden muss. Da der Name eines Konstruktors durch den Klassennamen
festgelegt ist, und Konstruktoren nichts (außer dem Objekt, dass sie erzeugen)
zurückliefern, kann sich die Signatur von Konstruktoren derselben Klasse nur
in der formalen Parameterliste unterscheiden.
Methoden
Unser Ticketautomat kennt vier Methoden: gibPreis, geldEinwerfen,
gibBisherGezahltenBetrag und ticketDrucken.
Grundsätzlich unterscheidet man zwischen sondierenden und verändernden
Methoden.
-
Sondierende Methoden liefern Informationen über den Zustand eines Objekts
(hier: gibPreis, gibBisherGezahltenBetrag)
-
Veränderne Methoden ändern den Zustand eines Objekts (hier: geldEinwerfen,
ticketDrucken
Betrachten wir zunächst einmal die sondierenden Methoden:
public class Ticketautomat
{
// Datenfelder und Konstruktor hier ausgelassen
public int gibPreis()
{
return preis;
}
public int gibBisherGezahltenBetrag()
{
return bisherGezahlt;
}
// weitere Methoden hier ausgelassen
}
Beide Methoden sind öffentlich (später mehr) und geben einen Wert vom Typ int
zurück. Innerhalb des Methodenrumpfes steht jeweils nur eine Zeile, in der der
Wert des jeweiligen Datenfeldes mittels return-Anweisung zurückgegeben wird.
Und nun die verändernden Methoden:
public class Ticketautomat
{
// Datenfelder und Konstruktor hier ausgelassen
public void geldEinwerfen(int Betrag)
>{
bisherGezahlt += betrag;
}
public void ticketDrucken()
{
System.out.println("#################");
System.out.println("# Die BlueJ-Linie");
System.out.println("# Ticket");
System.out.println("# " + preis + " Cent.");
System.out.println("#################");
System.out.println();
gesamtsumme += bisherGezahlt;
bisherGezahlt = 0;
}
// weitere Methoden hier ausgelassen
}
Die Methode geldEinwerfen sorgt dafür, dass ein neu eingeworfener Geldbetrag
zum dem bisher eingeworfenen Geldbetrag hinzugezählt wird. Dazu wird hier der
Operator += verwendet. bisherGezahlt += betrag ist eine abkürzende
Schreibweise für bisherGezahlt = bisherGezahlt + betrag;. Nach dieser
Rechenoperation hat sich der Wert von bisherGezahlt also um den Wert von
betrag erhöht. Der eingeworfene Geldbetrag wird in Form des Parameters betrag
von Typ int an die Methode geldEinwerfen übergeben.
Die Methode ticketDrucken besitzt weder Parameter noch Rückgabewert und
sorgt für eine Ausgabe auf der Konsole. Dazu benutzt sie die Methode println
des Objekts System.out, das offensichtlich existiert ohne das wir etwas dafür
tun müssen. println erwartet als Paramter eine String, also eine Zeichenkette
in doppelten Anführungszeichen, der ausgegeben wird. Mit println lässt sich
auch die Ausgabe von Variablenwerte einbinden. Dies geschieht zum Beispiel mit
dem Aufruf
System.out.println("# " + preis + " Cent.");
Die beiden +-Operatoren werden benutzt, um eine Zeichenkette aus drei
Bestandteilen zusammenzusetzen: der konstanten Zeichenkette "# ", dem Wert der
Variablen preis und der konstanten Zeichenkette " Cent.".
Abschließend wird der bisher gezahlte Betrag des Benutzers zur
Gesamtsumme aller eingezahlten Beträge hinzugezählt und die Variable
biherGezahlt auf den Wert 0 gesetzt.
» drucken: pdf | html
|