Cotton Bolls: December 2003 Archives
2003.12.29
ペアプログラミングとソロプログラミング
ペアプログラミングとソロプログラミングを考えるとき,電磁気学とニュートン力学,量子力学と相対論との対比を思い浮かべる.電磁気学と量子力学は,ごちゃごちゃしていたものをみんなで構築したからペアプロ的だが,ニュートン力学と相対論は一人の天才が構築したからソロプロ的な感じがする.電磁気学と量子力学は方程式がごちゃごちゃしてわかりにくいが,ニュートン力学と相対論は方程式がすっきりしていてわかりやすい.実際どのように理論が作られたかは知らないが,帰納法と演繹法の違いに似ているのかもしれない.
この違いは,ペアプロとソロプロのどちらが優れているということではなく,適用分野に違いがあるということなのだろう.ブレークスルーになる画期的なソフトウェアはソロによる開発が適しているが,業務アプリなど,ごちゃごちゃしたものを形にしていくにはペアによる開発が適しているように思う.独創的なものを作るにはソロプロが必要だが,独善的にならないためにはペアプロが必要だ.そして,実際にはペアプロの適用分野のほうがずっと多いだろう.
03:10 PM in XP | 固定リンク | コメント (0) | トラックバック
2003.12.26
AOP版Generation Gapパターン
Generation Gapパターンは,自動生成されたクラスをサブクラスでカスタマイズしようというパターン.でも,アスペクト指向なら自動生成されたクラスをイントロダクションでカスタマイズできる.このほうがわかりやすくて融通が利きそう.JavaCCなど,自動生成されたクラスが必ずしもGeneration Gapを前提に作られていない場合が多いからだ.
アスペクト指向の例としてよくロギングの話が登場するが,Generation Gapへの応用のほうが導入が簡単なような気がする.
11:05 AM in AOP | 固定リンク | コメント (0) | トラックバック
2003.12.25
オブジェクト指向風Make
GNU Make ver3.80から導入されたevalファンクションを使えばMakefileをオブジェクト指向風に書くことができる.オブジェクトのIDを自分でつけないといけないという欠点はあるが,モジュール化されてMakefileの見通しがよくなる.次のPointクラスは,x, yというインスタンス変数,inspectというインスタンス・ターゲット,shiftというインスタンス・ファンクションが定義されている.
define Point.new $(eval \ $1.x := $2 $1.y := $3 $1.inspect: echo $$($1.x) echo $$($1.y) $1.shift = $$(call Point.shift,$1,$$1,$$2) ) endef define Point.shift $(eval \ $1.x := $$(shell expr $$($1.x) + $2) $1.y := $$(shell expr $$($1.y) + $3) ) endef
利用例はこんな感じ:
all: pt.inspect $(call Point.new,pt,10,20) $(call pt.shift,3,2)
一度これを作ってMakeのみで動作するJUnitもどきのテスティングフレームワークを作ってみたが,evalファンクションのバグで頓挫してしまった.evalファンクションの中身が複雑になると
*** virtual memory exhausted. Stop.
というエラーが出てしまうためだ.将来バグフィックスされたら使えそうかな.
10:41 AM in Make | 固定リンク | コメント (0) | トラックバック
2003.12.24
YAMLとConverter
Converterライブラリを使っていると,期待値を用意するときにオブジェクト配列とPropertyの階層構造が非常にややこくなる場合がある.期待値の文字列表現としてYAMLが使えないだろうか.YAMLは名前ぐらいしかしらないのだが.