Objektorientierung in der Anwendung

Design-Pattern

Das meldende Haus

Einem Haus können Elektrogeräte hinzugefügt werden. Immer dann, wenn die Hinzufügemethode aufgerufen wird, soll ein Ereignis ausgelöst werden. Die Interessenten für das Ergebnis melden sich am Haus an und werden immer dann informiert, wenn ein neues Elektrogerät in das Haus kommt.

House bude = new House();
ElectricAppliance radio = new Radio();
ElectricAppliance tv = new TV();
bude.addModificationListener( .... );
bude.add( radio );  // Meldung vom Listener
bude.add( tv );     // Meldung vom Listener
Lösung

JFrame als Ereignisauslöser

Ein javax.swing.JFrame ist eine Swing-Klasse für ein Fenster. Es kann Ereignisse auslösen.

  1. Erzeuge im Programm ein JFrame. Setze die Größe mit setSize(...) und mache es sichtbar mit setVisible(true). Starte das Programm.
  2. Welche addXXXListener(...)-Methoden hat JFrame? Welche Ereignis-Objekte werden versendet, wie sehen die XXXListener aus?
  3. Melde einen ComponentListener an. Reagiere mit einer Bildschirmausgabe, wenn ein Fenster verkleinert oder vergrößert wird.
  4. Was ist ein ComponentAdapter?

Pattern-Links

JavaBeans

Gebundene Properties

Schreibe ein Objekt Trinkfreund und Meckermaxe. Der Trinkfreund besitzt eine Property alkoholspiegel, die durch die Methode nochEinBier() um 0,2 erhöht wird.

Schreibe eine Ereignisbehandlung, die die Property alkoholspiegel mit einem PropertyChangeListener überwacht. Immer dann, wenn der Trinkfreund nochEinBier() aufruft, soll ein Ereignis ausgelöst werden, auf das ein Meckermaxe-Objekt reagieren kann. Der Meckermaxe soll bei einem alkoholspiegel von 1.0 auf dem Bildschirm "Jetzt ist aber genug" ausgeben.

Eigenschaften mit Widerspruchsrecht *

Ergänze nochEinBier() mit einem Vetorecht nach folgendem Muster:

public void nochEinBier() throws PropertyVetoException { }

Der Meckermaxe soll bei einem Spiegel über 1.0 das nochEinBier() mit einem Veto verhindern.

Refactoring

Refactoring von Code ist eine wichtige Aufgabe von Entwicklern neben der Neuentwicklung von Programmcode. Die Pflege und Aufarbeitung darf natürlich nicht zum Selbstzweck werden, aber langlebige Software muss zwingend für immer die Kriterien Wartbarkeit und Erweiterbarkeit bewahren und gut dokumentiert und verständlich sein. Den größten Einfluss auf das Thema Refactoring hat das Refactoring-Buch von Martin Fowler, der auf seiner Webseite das Prinzip Refactoring, Refactoring-Tools und News auflistet.

Martin Fowler hat mir erlaubt, seinen Refactoring-Katalog auf Deutsch zu übersetzen: http://www.tutego.com/java/refactoring/catalog/. Gehe kurz über alle Refactorings.

Moderne IDEs erlauben von Haus aus das Refactoring von Code. Im Fall von Eclipse finde zu jedem unterstützten Refactoring ein Beispiel und lasse es von Eclipse umbauen: