GUIコンポーネントと継承

[id:lethevert:20050829:p3]
DelphiGUIライブラリは、継承の使い方が最悪だ。あんなのばかり見ていると、プログラミングセンスがおかしくなる。
GUIライブラリでも、インターフェースを上手く使うことで、より使いやすいライブラリのデザインにすることができる。
たとえば、木構造のデータを表現するGUIコンポーネントなら、こんな感じに書くのがよい。

interface Node
{
  Node getChild();
  Node next();
  Node getParent();
  String getLabel();
}

class TreeView
{
  Node rootnode;
  TreeView(Node root)
  {
    super();
    this.rootnode = root;
  }
  ...
}

このように書けば、既存の任意の木構造のデータオブジェクトに対して、Nodeインターフェースを適用するだけで、TreeViewコンポーネントを使って表示することができます。インターフェースはこう使うべきです。
しかし、下のように書いてしまうと、既存の木構造データオブジェクトを、どうやってもそのままTreeViewコンポーネントで表示することはできません。これは、つまり、多態性を下手に使った例です。(しかし、なぜか、Delphiは、こっちなんだ・・・)

class Node
{
  void setData(String label, Object obj) {...}
  String getLagel() {...}
  Object getObject() {...}
}

class TreeView
{
  Node rootnode;
  TreeView()
  {
    super();
    this.rootnode = new Node();
  }
  ...
}