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

Objektinteraktion

Am Beispiel der Modellierung der Anzeige einer Digitaluhr (4-stellige 24-Stunden Anzeige) soll im Folgenden demonstriert werden, wie Objekte miteinander kommunizieren können. Bisher haben wir jeweils eine Klasse geschrieben und Objekte von dieser Klasse erzeugt. Nun wollen wir eine Klasse schreiben, deren Objekte andere Objekte erzeugen und diese manipulieren können.

Eine Digitaluhr besteht aus zwei 2-stelligen Nummernanzeigen, die grundsätzlich nach dem gleichen Prinzip funktionieren. Beide werden fortlaufend um Eins hochgezählt und springen, wenn sie einen gewissen Grenzwert erreicht haben (bei Stunden 24, bei Minuten 60) wieder auf den Wert Null zurück. Wir ignorieren hier also zunächst bestimmte Details und lenken den Focus der Betrachtung auf eine höhere Ebene, auf der eine gemeinsame Struktur sichtbar wird. Dieses Vorgehen wird als Abstraktion bezeichnet. Da die Struktur von Stunden- und Minutenanzeige viele Gemeinsamkeiten aufweist, werden wir beide Anzeigen in einer - sozusagen allgemeineren - Klasse implementieren. Diese Klasse modelliert Nummernanzeigen mit beliebigem Grenzwert.

In einem zweiten Schritt soll dann die Anzeige der Digitaluhr realisiert werden. Digitaluhr-Objekte sollen jeweils zwei Nummernanzeige-Objekte enthalten, die sie für die Anzeige von Stunden bzw. Minuten nutzen. Dazu müssen Digitaluhr-Objekte Nummernanzeige-Objekte erzeugen und die in diesen Objekten gespeicherten Werte verändern (z.B. beim Stellen der Uhr).

Bei dem hier beschriebenen Vorgehen kommt als weiteres wichtiges Prinzip neben der Abstraktion die Modularisierung zum Einsatz. Modularisierung ist der Prozess der Zerlegung eines Ganzen in wohl definierte Teile, die getrennt erstellt und untersucht werden können und die in wohl definierter Weise interagieren. Nach dem Prinzip der Modularisierung wird die Aufgabe also in zwei Teile zerlegt: Zunächst realisieren wir eine Klasse "Nummernanzeige" für eine zweistellige Anzeige, von der wir dann zwei Objekte innerhalb einer Klasse "Uhrenanzeige" für eine vierstellige Digitaluhranzeige verwenden.

Modularisierung und Abstraktion sind komplementär. Modularisierung bedeutet, große Dinge (Probleme, Aufgaben) in kleinere Teile zu zerlegen, während Abstraktion die Fähigkeit ist, Details zu ignorieren, um das Gesamtbild erfassen zu können.

Die Klasse Nummernanzeige

public class Nummernanzeige
{
  private int grenzwert;
  private int wert;

  /**
  * Konstruktor für Exemplare der Klasse Nummernanzeige
  */
  public Nummernanzeige(int grenze)
  {
    grenzwert = grenze;
    wert = 0;
  }

}

Die Klasse Digitaluhr

public class Digitaluhr
{
  private Nummernanzeige stunden;
  private Nummernanzeige minuten;

  /**
  * Konstruktor für ein Exemplar von Digitaluhr.
  * Mit diesem Konstruktor wird die Anzeige auf 00:00 initialisiert.
  */
  public Digitaluhr()
  {
    stunden = new Nummernanzeige(24);
    minuten = new Nummernanzeige(60);
  }

  /**
  * Setze die Uhrzeit auf die gegebene 'stunde' und 'minute'.
  */
  public void setzeUhrzeit(int stunde, int minute)
  {
    stunden.setzeWert(stunde);
    minuten.setzeWert(minute);
  }

  
  /**
  * Lässt die Uhr um eine Minute weiterlaufen
  */
  public void taktsignalGeben(){
    minuten.erhoehen();
    if(minuten.gibWert()==0){
      stunden.erhoehen();
    }
  }

  /**
  * Liefere die aktuelle Uhrzeit dieser Uhrenanzeige im Format SS:MM.
  */
  public void zeigeUhrzeit()
  {
    System.out.println(stunden.gibAnzeigewert() + ":" + minuten.gibAnzeigewert());
  }
}

Objekte erzeugen Objekte

Die Klasse "Digitaluhr" hat unter anderem die folgenden beiden Datenfelder:

private Nummernanzeige minuten;
private Nummernanzeige stunden;

Hier wird der Klassenname Nummernanzeige wie eine (Daten-)Typangabe verwendet. Die Variablen minuten und stunden sind vom Objekttyp Nummernanzeige. Innerhalb des Konstruktors müssen nun die entsprechenden Objekte erzeugt werden. Dazu gibt es das Schlüsselwort new.

stunden = new Nummernanzeige(24);
minuten = new Nummernanzeige(60);

Die new-Anweisung macht zwei Dinge:

  • Sie erzeugt ein Objekt der angegebenen Klasse,
  • sie führt den Konstruktor dieser Klasse aus.

Wenn der Konstruktor der Klasse Parameter definiert, dann müssen aktuelle Parameter in der new-Anweisung angegeben werden. Die allgemeine Syntax der new-Anweisung lautet:

new Klassenname( Parameterliste )

Methodenaufrufe

Methoden können andere Methode der eigenen Klasse als Teil ihrer Implementierung aufrufen. Dies wird als interner Methodenaufruf bezeichnet.

Methoden können aber auch Methoden von anderen Objekten mit Hilfe des Punkt-Operators aufrufen. Dies wird als externer Methodenaufruf bezeichnet.

minuten.gibAnzeigewert();

Die Zeile bewirkt, dass die Methode gibAnzeigewert() des Minuten-Objekts aufgerufen wird. Die allgemeine Syntax lautet:

Objekt.Methodenname( Parameterliste );

» drucken: pdf | html

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