Bessere Schnittstellen

Letztens hatte ich in einer Klasse eine Methode überschrieben, um zu verhindern, das ein bestimmter Wert unterschritten wird.

public class FontPreviewPanel extends JPanel {
 ...
  @Override
  public void setSize(Dimension d)
  {
    if (d.width <= 0)
      d.width = 1;
    if (d.height <= 0)
      d.height = 1;
    super.setSize(d);
  }
}

Die Maßnahme zeigte auch seine gewollte Wirkung. Doch dann fiel mir noch ein, dass die Super-Klassen ein weiteres setSize besitzen:

public void setSize(int width, int height);

Muss ich mir da jetzt Sorgen machen? » Weiterlesen

Java – immutable Objects

Wenn wir Software entwickeln, ist eines unserer Ziele unvorhersehbare Seiteneffekte zu vermeiden. Ich war mal vor knapp zehn Jahren in einem Projekt, in dem ein Kollege bei aufgetauchten Fehlern im System zum Auftraggeber sagte „Oh! Das ist leider ein Seiteneffekt.“. Irgendwann meinte der Auftraggeber genervt „Ich will das Wort Seiteneffekt nicht mehr hören!“.

Wie kann man solche Fälle minimieren? Ein Punkt ist die richtige Datenkapselung, wie ich hier bereits zeigte. Ein weiterer Punkt ist, Daten einfach unveränderlich zu machen. Denn wodurch entstehen mysteriöse Seiteneffekte? Wenn sich Objekte im Wert ändern, ohne das man es selbst veranlasst oder mitbekommen hat! » Weiterlesen