継承の利点

静的言語での継承の利点というのは、変数の共有と型安全メソッドポインタということになるのかな。


メソッド共有のためには、以前書いたRubyのModule互換の仕組みを使ってコンパイル時に埋め込めば継承である必要がなくなるし。
そのときにパフォーマンスがいいのが、継承でのオーバーライドのいいところ。メソッドポインタのテーブルを切り替えてるから。
ただ、そんなパフォーマンスの違いというのは、めったに影響がでないので、現実的には継承のメリットは変数の共有。
だから、つきつめていけば、変数を共有したい場合以外では継承をする必要がない。
Moduleを実装すると、ほとんどの継承関係は解消できる。


とくに今、アプリケーション設計のレベルに現れる継承関係というのは、ServletやStrutsAction、JComponentみたいな、フレームワークに登録するための継承がほとんど。
そのうち、シングルトンや1スレッドに対してオブジェクトがひとつになるような、スレッドシングルトンとでもいうような場合、つまりServletやStrutsActionの場合は、変数共有にはスレッドローカルでフレームワーク利用者全体から使える方がいいから、変数共有のための継承は必要ない。


実際、Webフレームワークでは継承が不要になってきている。その代わり、継承のための変数共有はXxxContextに外だししてスレッドローカルにもたせている。
Visual Web PackのPageBeanもAbstractPageBeanやらFacesBeanを継承しているけど、結局ログ出力のようなユーティリティメソッドと初期化処理のようなテンプレートメソッドを共有するためだけに使われている。


ほんとに必要な継承は、ほとんどないね。