>とりあえず俺的には入門者に最初に教えたいのが継承派生です。
ちょうど今、oosquare-mlで継承の是非に関する議論が白熱しています。
http://www.ogis-ri.co.jp/otc/otc2/oosquare-ml/Archive/thread.html
なんかもう、「言葉の上だけの議論は空しい」状態になってる気もしますが…
まあ継承には色々な問題があると私も思うんですが、一連の議論の中で、
http://www.ogis-ri.co.jp/otc/otc2/oosquare-ml/Archive/200501.month/4468.html
| 継承は確たる「設計思想」が無い場合、スーパークラスが単なる「ごみ置き場」
| と化していることが多いようです。
これ、具体的にはどういう例なんだろう…
あるクラス群が共通に使うメソッドを、それらのクラスのスーパークラスに
山ほど押し込んでいる、ってことかなあ。
スーパークラスには「外から見て」そのクラスに必要なメソッドが入っていれば
よいわけで、サブクラスが共通に使うメソッドなんか持つ必要はないと
思うんですが。共通処理があるのなら、Utility.javaみたいな「関数」を
書けばいい。
>「ほらほら、『使うほう』はその実体が具体的に何であるか気にしなくていいんだよ」
>ある程度プログラム経験がある人だと、これで結構ぐらぐらしてくれます。
これはJavaならinterfaceですよね。
ただ、interfaceには実装がまったく書けないので、やっぱりデフォルトの挙動が
欲しい、とか思ったときに、DefaultHogeとかSimpleHogeとかAbstractHogeとか
作っちゃうわけで… これがよいのかどうか。
http://struts.apache.org/api/org/apache/struts/action/Action.html
これなんかはどうなんだろう。私なら、こういうのは反射的にinterfaceにしますが。
クラスにした結果、結構ごみ置き場になってるような気も。