Objektdiagramm

Objektdiagramm

In dieser Animation stellen wir den Ablauf der init()-Methode eines einfachen Applets im Objektdiagramm dar. Wir nennen das Applet Knopf, weil er nichts anderes enthält als ein Button-Objekt. Dieses wird in seiner init()-Methode erzeugt und mit add() dem Applet hinzugefügt.

Wenn wir ein Applet ausführen, erzeugt der Appletviewer ein Objekt davon und ruft dafür seine init()-Methode auf, die wir hier überschrieben haben. Darin vereinbaren wir eine lokale Variable namens knopf, diese wird auf dem Stack abgelegt. Dann erzeugen wir noch ein Objekt der Klasse Button dieses wird auf dem Heap abgelegt und seine Adresse in die knopf-Variable geschrieben. Der Konstruktor von Button bekommt einen String-Parameter, das ist die Beschriftung des Knopfs – hier OK. Im Button-Objekt gibt es eine Variable zu dem Zweck, dass der Konstruktor das erhaltene String-Objekt darin speichert. Ihren Namen würden wir nur dann kennen, wenn wir den Text der Klasse Button studieren würden – im Moment brauchen wir das nicht. Damit haben wir die erste Anweisung der init()-Methode abgearbeitet.

Die nächste Anweisung ist der Aufruf der add()-Methode. Diese stammt aus der Oberklasse; genauer genommen aus deren Oberklasse Container. Das bedeutet, dass sie unser Knopf-Objekt verändert. Ihre Aufgabe ist, ihren erhaltenen Parameter – hier die Adresse des Button-Objekts, die wir in der Variable knopf gespeichert haben – im Knopf-Objekt zu speichern. Zu diesem Zweck gibt es dort irgendwelche Variable, die wir nicht kennen, weil wir den Text der Klasse Container nicht untersucht haben. Wir brauchen das nicht, wir wissen nur, dass add() den Inhalt ihrer Parametervariable dorthin hineinkopiert. Dieser Inhalt ist die Adresse unseres Button-Objekts. Nach der Ausführung der add()-Methode referenziert sie also dieses Objekt.

Nun ist die init()-Methode fertig; ihre lokalen Variablen – hier nur knopf – werden vom Stack abgeräumt.

Hätten wir das Button-Objekt nicht mit add() beim Applet registriert, würde auch dieses Objekt vom Heap verschwinden – die automatische Speicherbereinigung würde es löschen. Weil aber diese Verbindung hier besteht, bleibt die erzeugte Struktur nach init() bestehen und das Button kann später (z.B. in der paint()-Methode) verändert, oder durch Drücken aktiviert werden – das haben wir in diesem Programm nicht getan. Der Sinn war nur zu illustrieren, wie so ein Ablauf im Objektdiagramm dargestellt werden kann.


public class Knopf extends JApplet {
  public void init() {
    JButton knopf = new JButton("OK");
    Container c = super.getContentPane();
    c.add(knopf);
    Lauscher lauscher = new Lauscher();
    knopf.addActionListener(lauscher); 
  }
}
class Lauscher implements ActionListener {
  public void actionPerformed(ActionEvent e) {
    System.out.println("Knopf gedrückt");
  }
}

Knopf mit Reaktion