mix-in
mix-in的なものの言語サポート、やっぱり欲しいよなあ。
一番シンプルなケースだと、extends TestCaseな、ちょっとした機能が追加されたテストケースクラスっていっぱいある(GroovyTestCase, djUnitのTestCase(VMO対応), S2TestCase, jMockの...etc)んだけど、たとえばそれらの機能って排他してるわけじゃないんだよね。たとえば実際に S2TestCaseに djUnitのTestCaseを混ぜたものを仕事では使ってる(コピペするか委譲。しかしこのケースは委譲するにはどうかと)。
その昔matzさんのページで多重継承はmix-inの実現スタイルのひとつだ、みたいなことを見かけた(書き込みか何かだったと思われる)けど、type-safeな言語でも多重継承でラクチンmix-inできるんだー、と思った。Rubyスタイルのmix-inってコンパイルタイムでtypesafeな言語では使えないと思うので、なんか他の方法を言語仕様とかコンパイラレベルでサポートしてくれたらなあ。
単純にmixするだけならRubyスタイルもプリプロとかでいけそうだし、implementsでインタフェースを「宣言」すればまあ、ありかもしれない。何をいってるのかわからなくなってきたぞ。
public class S2DjJmockGroovyTestCase implements IS2TestCase, IMockTestCase, IDjTestCase { コンストラクタ().. #include "S2TestCase" #include "MockTestCase" . . }
ん、こんなんありそうだな。探してみようかしらん? 一般的でないと仕事でつかったら怒られそうだけど・・・