私はOOPの利点の何処に注目しているか・・・

前回の記事(http://d.hatena.ne.jp/studiokingyo/20060612)の続きです。
青臭い事をズバっと書いてしまってから、かなりの反応が多い事に誠に恐縮です。
かなりのコメント数になかなか思い通り返信をかけられない状態です。
申し訳ありませんが、これから先の日記に少しずつ返信という形をとって行きたいのと思います。


がる氏*1よりいただいたコメント
http://d.hatena.ne.jp/studiokingyo/20060612#c1150182536
より

>がると申します。んっと………業務プログラマ(SEとかもやってますが、とりあえず論じる立脚点としての主張です)側からいくつか。

こんにちは。返信ありがとうございます。是非プロフェッショナルからの意見を聞きたいと思っていました。

まず
> 目的のソフトウェアを作る上では全く役に立たない
ですが。そうですねぇ「初手に作るとき」にはあんまり意味がない可能性があるのですが。保守をしなければいけないときに、OOで作るか否かは大きな違いがあります。
で、多分ここが違うんだろうなぁと思うのですが。

なるほど。業務で保守という事を頭に置くときObject Orientedで作ることに大きな意義があるのですね。
どのように保守という仕事をするのかは未経験の私には想像がつかないのですが、あえてOO無しで保守という仕事を想像してみるとコード片をガシガシ 書いては消してコピペで保守といった形が浮かんできました。確かにこれは好きではないです。

> 特に、私が学んできたOOPという考え方は必要な機能を実装したらリライトをしないような形で表現する所
明示的に「違う」と反論できます。
OOやOOP(やOOSE)の便利なところは「なんぼでもリライト出来る」ところが一つの利点です。
つまり、OOPで作成すると
・とりあえずなんとなく動いているっぽいけど本当に動いてるのかこれ?
みたいな、かなり曖昧なものをとりあえず作れます。
で、必要な部分だけ「ちゃんと」作ると、そのうちある程度動くものが作れます。

から各プログラマーによってOOPの利点の何処に注目しているかという違いを発見し、ちょっとおどろいています。
がる氏に紹介していただいてたサイト
http://www.m-fr.net/study/object/index.html
によるオブジェクト指向用語より
ポリモフィズム(polymorphism) 多様性
による利点の事ではないか?と感じるのですが、

class IInterface{

public:
virtual ~IInterface(){}
virtual void reset() = 0;
virtual void process() = 0;
};

class CImpl_A : public IInterface{
//変数、オブジェクト云々
public:
virtual ~CImpl_A(){
//云々
}
virtual void reset(){
//多分、がる氏はここの実装を自由に変えることが
//出来る事に注目しているのではないだろうか?
}
virtual void process(){
//上記同
}
};
//class CImpl_B : public IInterface ...
//と別の実装を作ること、実装を変更することが簡単に出来る

int main(){
IInterface *p = new CImpl_A;

//ここ以降に複雑な状態遷移があるIInterfaceを使った処理
//私はこちらの方がリライトしなくて良いという所に注目している。
int i,x = 1024;
p->reset();
for(i=0;i<x;i++)
{//複雑な状態遷移がある処理と思って欲しい。
p->process();
}

delete p;
return 0;
}

ではなかろうか?と勝手に思ってしまっています。
注目点を具体的に表すとこのような形で良いのでしょうか?( その後のやり取りはコメント部参照 )

続く・・・(http://d.hatena.ne.jp/studiokingyo/20060619#p1