小飼さんも「オブジェクト指向プログラミングは構造がプログラミングの次」という点に 納得して下さったようだ。伝わってよかった。
「サブジェクト指向」なるどこかで聞いたタームが登場するのはまあご愛敬として。
しばしば耳にする「サブジェクト指向」は(「自己中すぎる」という小飼さんの指摘以外にも)、 メッセージセンドのフォーマットにこだわりすぎているような気がする。
たとえば、CLOSのマルチメソッドだったら「サブジェクト」は存在しないわけだが、 これが「オブジェクト指向ではない」というのはちょっと極端すぎるだろう。 あるいは、通常のメッセージセンド(or メソッド呼び出し)についても、 たしかにレシーバは特別な位置にあるが、それ以外の引数もやはりオブジェクトである点は 見逃してはいけないと思う。
抽象データ型、オブジェクト指向は雰囲気として構造化プログラミングの延長にあるという気はします。特定の、行儀よい形に制限することによって扱いやすくするという点が似ていると思います。わざと具象データを隠してメソッド経由でアクセスするとか、データとコードのくっつけ方に制限(たとえば「メソッドはクラスの中に書く」など)をつけるとか。
で、構造化プログラミングで不十分だった「モジュールをどう分けたら良いのか」「どうやって依存性の低い切り離し方をするのか」という点に手がかりを与えてくれるんだと思います。GOTOでは自由すぎた制御フローを、構造化構文で制限して手なずけたように、コードの分割法、組み合わせ方に制限をつけることによって悪いプログラムが書きづらい・良いプログラムのほうが自然に書けるようになるのが重要なんだと思います。
そういう観点からすると、主語・述語とか、現実世界のメタファーとかは、あまり重要だと思いません。
また、ジャクソンやワーニエのいう「構造化設計」は(もちろん関連はあるものの)ちょっと発想が違うと思います。こっちは具象データの形をどう手なずけるか、という発想だと思います。
サブジェクト指向のサブジェクトは動作主体としてのサブジェクトじゃないと思いますが……関心の中心、主題といった意味でのサブジェクトですよね?アスペクト指向に繋がる方向の。
ちなみに、オブジェクト指向でのサブジェクトは、あくまで『プログラマ』だと思います。そういう意味では、オブジェクト指向のオブジェクトは全て、主体性を持たない物体と言えるかもしれませんね。
野分さんは、Subject Oriented Programming
http://www.research.ibm.com/sop/
のことをおっしゃられているのでしょうか。でしたら、
今回の話ではその意味での「サブジェクト指向」について
語っているようには見えないので、違う話なんじゃないかと
思います。