GUIコンポーネントと継承
[id:lethevert:20050829:p3]
DelphiのGUIライブラリは、継承の使い方が最悪だ。あんなのばかり見ていると、プログラミングセンスがおかしくなる。
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(); } ... }