Struts のお勉強


恥ずかしい話、私の Java に対する知識は 1998 年当時のものだ。(あれからもう9年も経ってしまった)ServletJSP が出始めたころ、私はカナダで英語を勉強していたし、Struts が流行り始めたころ、カナダの小さなソフトハウスで VB6 や .Net でプログラムを書いていた。


その後の Java とのかかわりは、某インド系企業で働いていたころ、e-Matrix で多少いじった程度だ。(今から思うと e-Matrix は Servlet/JSP コンテナ上で動くフレームワークだったらしい)TomcatServletJSP の関係も怪しいくらいに知識が乏しかった。(いまでも J2EE の正確な定義を知らないし)


そんな私が一念発起して、Struts の勉強をしてみた。まずは Tomcat を導入し、Servlet / JSP のお勉強。そうそう、思いだした。JSPコンパイルされて特殊な Servlet として動作するんだったっけ。ためしに例によっていつも作る Othello プログラムを JSP で書いてみる。JSP から他のクラスインスタンスをどう呼び出すか、苦労する。JSP では というタグでオブジェクトを生成するらしい。もともとはフォームを表示するためのデータ格納用オブジェクトをやり取りするために作られたタグかもしれないが、実際には、どんなオブジェクトでもやり取りできる。


泣きそうな思いで、Othello プログラムを完成させると、次に Struts を導入してお勉強。なるほどねえー。Struts の本体は、単に jar ファイルに入っているだけなのね。あとは Struts の独自タグライブラリが少々。私が始めてきちんと触った Web フレームワークRuby on Rails だったために、あのフルスタック感に比べると、シンプルな印象。たしかに Model-View-Controller の View と Controller の部分だけを担当するフレームワークなわけで。Model の部分は作りこむか他のフレームワークを使うわけだ。確かに、XML の設定ファイルの記述は煩瑣で閉口する部分がある。これを反面教師にして、Convention over Configuration な Rails が生まれたわけだ。


Struts のすべてを理解したとは到底いえないが、まあどんなものかは大体わかった。あとは仕事で使えば完璧に覚えるだろう。Java 系のフレームワークはその後も進化をつづけ、Spring Framework + Hybernate なんていうのが結構流行っているとかいないとか。もうそれさえ古い、次は XXX だとかいう話もあるんだろうなあ・・・。やれやれ、私はすっかり時代に取り残されている気がする。しかし、こんなややこしいフレームワーク群をすべて理解して使っている職業プログラマはあんまりいない気もする。


Spring Framework の話を見ると今度はやれ DI(dependecy injection)とか AOP (Aspect Oriented Programming) とか不思議な言葉が並んでいる。はあ・・・。私が外国生活をして IT の勉強をサボっている間に、時代は遥か先に行ってしまったみたいね。


[参考サイト]


今回、大変お世話になったのは、


Java の道
http://www.javaroad.jp/index.htm
(Java 入門者にとっての話題が豊富)

Java で HelloWorld!
http://www.hellohiro.com/
(内容はちょい古いが、はじめの取っ掛かりをどうするか教えてくれる)


です。どうもお世話になりました!!

アスペクト指向とは


アスペクト指向という言葉は耳にしたことはあったけれども、なんのことやらさっぱりわからなかった。そこで、Struts を勉強したついでにちょっとネットで情報収集してみた。


アスペクト指向プログラミング オーバービュー
http://www.atmarkit.co.jp/farc/rensai/redge24/redge24.html


アスペクトは、言語学では、「開始-継続-完了」などの一連の動作のある局面に着目する概念である。ソフトウェア工学におけるアスペクト指向も、ソフトウェアの動作に着目して、さまざまなモジュールにおける動作に共通する局面を集めて、それに対する操作を一箇所に記述しようという試みらしい。


また例によって聞きなれない言葉が登場する。曰く、結合点(joint point)・ポイントカット(pointcut)・アドバイス(advice) 等々。私の理解では、


結合点具体的な動作における、あるアスペクト
ポイントカット結合点の集合
アドバイスポイントカットをプログラムの制御が通過したときに起こしてやる追加的な動作


ということなんだけど、もう少し泥臭く書くと、


結合点メソッド
ポイントカットメソッドの集合(メソッド名でフィルタされる)
アドバイスメソッドの開始または終了をイベントとして呼び出されるイベントハンドラ


と理解しても、そんなに間違っていないのかな・・・。アドバイスには around とか言って結合点を置き換えてしまうものもあるみたいだけどね。


これが実用的に普通に使われる時代が来るんだろうか?来るような気もするし、永遠に来ないような気もするが・・・。オブジェクト脳とかいう本を書いた人がいたけど、「アスペクト脳」とかいう本はあるのかな?