2012-09-28

Java: クラスが持っているフィールドやメソッド名を検索し,動的に実行する

ちょっとマニアックなネタです。ラボでO/Rマッパーみたいなものを作ろうとしているのですが、その際に使えそうなノウハウを紹介します。

クラスのフィールド名とメソッド名を検索する
あるクラスがどういうフィールドやメソッドをもっているか?を調べるには下記のようにします
Class c = Class.forName("クラス名");
Field[] fields = c.getFields(); //フィールド名
Method[] methods = c.getMethods(); //メソッド名
String methodName = method[0].getName();
これらのメソッドはフィールドインスタンスやメソッドインスタンスを入手するものなので、特定のメソッド名(またはフィールド名)を取ってくることも可能です。その場合は、下記のように記述します。
Method method = c.getMethod(メソッド名, 引数の型<可変長>);
なお、getMethodsやgetFieldsではパグリックなフィールドやメソッドしか入手できませんが、getDeclaredMethodsやgetDeclaredFieldsを利用するとプライベートなフィールドやメソッドを入手することが可能です。

メソッドを実行する 
上記のmethodsはメソッドインスタンスの配列です。これを利用して下記のように検索したメソッドを実行します。下記では,実行対象となるインスタンスを生成してメソッドをinvokeする際に渡してます。staticなメソッドの場合は不要です(第一引数はnullです)。
Constructor constructor = c.getConstructor(new Class[] {});
Object o = constructor.newInstance(new Object[] {});
methods[i].invoke(o, null);

フィールドにアクセスする
 上記で入手したフィールドにアクセスする方法は下記の通りです。
fields[0].set(obj, "abc");
String n = (String)fields[0].get(obj);
O/Rマッパーを自作するときは,プライベートなフィールド名を利用するとよいかもしれません。

2012-09-18

教育システム開発のアプローチ ー教育工学会全国大会の議論からー



教育工学会全国大会でシンポジウムに参加してきましたが、SRAの中小路先生の話が非常にツボにはまったので、以下、中小路先生の話のピックアップと感想など。。。

教育システムの研究開発をしている時に考えてなければならないのは、学習・教育活動をどう支援していくかなのだが、そのアプローチについて中小路先生は非常に面白い比喩で説明されていた。そのアプローチには以下の3種類があるという。

  • ダンベルを作る研究
  • シューズを作る研究
  • スキー用具を作る研究
ダンベルというのは筋力を鍛えるための道具。教育支援システムでいえば、学力やスキルを向上させるということだろう。
シューズというのは、走るという動作をサポートする道具。教育支援システムでいえば、理解や正解をし易くするということだろう。
スキー用具というのは、スキーというスポーツをするための道具。教育支援システムでいえば、学習の場を提供するということだろうか。

なるほど上手いこと言うなぁ、、と思ったが、後から振り返ってみると、教育工学という分野が扱う「学び」という要素が入ってくるとちょっと違和感が見えてくる。例えば「走る」ということを考えてみると、その目標は速く走ること。では、速く走れればそれでいいのか?100mを11秒で走れる者が、あるシューズを使うと9秒で走れたとする。その学習者は9秒で走れる能力を身につけたといえるのか?おそらく違うだろう。
もちろん、シューズ的なアプローチが教育工学に合わないという意味ではなく、例えばその道具を使うことで見えなかったモノが見えるようになり、結果的に理解を促進するという効果を持った道具というのはシューズ的な研究としてOKだとは思う。
ただ、個人的に日々の教育において
  • 学習者にわかりやすく教えること
についての学習効果について疑問に思っているのでちょっと引っかかった感じ。というか、なんでもかんでも「わかりやすく、見せてしまう」ことの教育的な妥当性について気になるんですよね。

最後のスキー用具を作るアプローチというのは、新しい学習環境やエクスペリエンスを提供する研究なわけで、これは自分の今までの研究アプローチかなぁ、、と思ったが、ただよく考えてみるとそうでもないような気もしてきた。というより、自分がどの視点なのかを明確にできてないところに問題がある気がしている。
中小路先生が力説されていたのは、自分の研究がこの3つのアプローチのどれにあてはまるのか理解し、それに見合った評価をしましょうということ。今、自分のシステムの評価方法についていろいろ四苦八苦していたので、今回の話に何かヒントがあるのではないかという感触を得た。

ちなみにこの3つの分類については、これらは独立したものではなく、これらの要素が組み合わさったもののように思えるがどうなんだろうか?あるいはどれか1つに絞り込めないようであれば、研究が対象とする支援のポイントが不明瞭になっているということなのだろうか?