Ruby言語やLinuxのネタが多いです。
August 02, 2003 [おもひで]
原則的に、メソッドをオーバーライドする必要がなければサブクラスを作る必要はありません。機能の追加だけならば合成でも可能です。
頭の中を整理するためには必ずしもクラスはいりません。名前があればいいのですから、それは変数名やメソッド名であってもいいわけです。
Javaで恐縮ですが、下のコードでは、ボタンを並べるためにPanelというコンテナを使っています。ここでは、Panelが本来持っている機能の他には必要なものはありません。ですから、ButtonPanelというサブクラスを作るのではなく、単にgetButtonPanel()というメソッドを用意しました。
ButtonPanelというクラスを用意するのとgetButtonPanelというメソッドを用意するのとで、頭の中の整理の度合が変わるとは思えません。
■ 実はサンプルとしてあげていただいた例では私もButtonPanelをPanelのサブクラスとして定義することはないと思います。ただ、それはどちらかというと粒度の問題じゃないかと思っていて、Testクラス自体(が結構複雑)であればそれをFrameのサブクラスにすると思います。
理由は、前回も触れましたが「GUIの部品をいくつも集めたモノを新たに1つの部品として定義する」ということです。従って、getFrame()というメソッドを用意してFrameのインスタンスを返すよりもnew Test()とだけして、後はFrameの機能+αを持ったTestというGUI部品を使う、と考えた方が私的にはすっきりするんですよね。
具体的には、JFileChooserみたいなものを作るときに、それをJComponentクラスを継承させずに、GUIとは関係ないクラスを作ってそれのgetFileChooser()というメソッドを作るかというと、やっぱりJComponentクラスを継承させた方が良いんじゃないのかなと。
■ どちらかというと「確かに継承は使わずにも済む」ということより「積極的に継承を使わない理由」が実は一番知りたかったりするのですが...。
#「滅多にいらない」という前回の文脈から、「使わない方がよい」と受け取りました。ここが誤解だったら申し訳ないです。
