2012-12-15スマートフォン用の表示で見るSoda教この広告は、90日以上更新していないブログに表示しています。13:53>ポリモに出会って価値観がどうか変わったのか具体的に記述してください。>マジな議論をしているので、へたに雰囲気や印象のみの意見は、これ以上は無視させていただきます。程度に思ってもらえるといいかなーってな希望的観測を含めて、書いておくのもいいかなーと思うので、こちらに書き出してみます。DOS時代、C言語で仕事していた私は、C++という言語のclass構文をみてもピンとこなかった。structに関数が付いただけ?これが最初の感想。使い方を制限しているだけじゃね?なんでそんなことするの?と思った。そんな感じで、C++いらねーCでいいやんと思っていた。自分にとってメリットが見えないのだから・・・幸い、C++はCとしても使えたわけで、そういう意味でも、C++固有の機能に関しての興味は相当薄かった。時代は、Windowsになり、C++を強制された。MFCを使うのか、Win32APIだけでやるのかという最初の壁は、両方試して、雛形としてMFCを使ったほうが楽だと思ったので、MFCを選択した。・・・が、しばらくはWindowsの仕様なのか、MFCの仕様なのか区別がつかずに振り回されたwMFCはWin32APIの拡張または限定仕様と考えるようになって、そこは落ち着いた。CAD/CAMというアプリケーションを作成していたので、あつかうデータの種類が多彩だったのですよ。もって、操作としては同じようなものが多かったんです。削除や移動、複写、変形などなど。DOS時代は、そのデータフォーマットとして、全てのデータをあらわせられるものを用意していたんですねぇ。具体的には、直線のデータには不要な、円弧の半径データとかをダミーとして用意していたような感じですね。同じものを渡すほうが楽だったからです。もって、データ自体に自分はなんのデータなのかを意味するIDを振り分けたと。操作側、つまり関数側は、IDをみて、処理を分岐させていたのです。IDが増える、つまりデータ種類が増えるたびに、全ての関数を修正する必要があったんですねぇ。そこで、ポリモーフィズムのサンプル(まぁ、悪名もありますが、動物の鳴き声のやつです)を見て、衝撃を受けたんですよ。異なるデータを同じように扱ってる!!ってな感じで。そこから、データ側に処理を移すことで、データごとに異なる処理を同じような処理として扱えることに気が付いたわけです。C++で、データの基本クラスを用意し、そこから派生させたクラスとして、直線や円弧を用意するように変えました。操作側は、基本クラスのメソッドを操作すれば、直線なのか円弧なのかを気にする必要がなくなりました。表示するメソッドを用意すれば、そのメソッドを呼べば図形が表示されるわけで、直線なのか円弧なのかは、表示を命じている側には関係なくかけるわけですよ。直線クラスや円弧クラスというクラスの中で、自分の分だけに集中して書けばよくなった。分岐先として別関数に分けていたわけですがーデータを作成した時点で、その後のコードに分岐がなくなった点、直線なら直線のことが一箇所(直線クラス)にまとめられる点で、クラスを使ったほうがスッキリしたのです。データ種類が増えても、操作側を変更せず、追加したデータだけを作れば良いというのは、従来のやり方ではできないことでした。作りやすさや修正しやすさは大きく変わったのですよ。「データ側に処理を任せるほうが、わかりやすいし、楽」というように、変化したんですねぇ。データ側に処理を任せることで、データは抽象化しやすくなり、データを抽象化することで、データを管理する側の処理は、データ依存しない簡素なものにできる・・・ってわけです。バラバラだったものが1つに繋がっていくような感じですね。privateなどの意味もここでわかってきました。外部から使われない、つまり、後から変更しても外部に影響がないってところに落ち着いたんですねぇ。データ自体が自分の面倒をみるから、使う側は命令だけすればよいことになるわけですよ。従来は、関数ライブラリとして、よくある処理や演算をまとめていたわけですがーそれに加えて、よくあるデータという状態でまとめられるようになったわけです。従来でもよく使うデータの構造体を列記して、そのデータを使う関数をセットにすることはできたわけですが、クラスを使うことで、1つにまとめ、さらに、派生させることで、上位互換の別物を作ることができるわけです。私の場合、ポリモーフィズムという概念を見なければ、オブジェクト指向の利点はわからなかったわけでーさらに、仕事でポリモーフィズムがもっとも効果的に現れるようなことをしていたから、利点だと感じることができただけなんですよねぇ。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。