Logo Logo
InfoHome Themen Projekte Links Software
Themen
JavaHamster
BlueJ
Klassen und Objekte
Klassendefinition
Objektinteraktion
Klassendokumentation
Objektsammlungen
Aufgaben
Projekte
Java
HTML
XHTML
CSS
XML
Datenbanken
MySQL
Theoretische Informatik
PHP
Kara
Lego-Roboter
Algorithmen

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

© 2004-2025 M. Blanke · Ursulaschule · Kleine Domsfreiheit 11-18 · 49074 Osnabrück