匿名質問者
匿名質問者匿名質問者とは「匿名質問」を利用して質問した質問者。
「匿名質問」では、ユーザー名を公開せずに匿名の質問ができます。
詳しくはこちら

オブジェクト指向について教えてください。


質問サイトで「オブジェクト指向をわかりやすく教えてください」という
質問をいくつか見ました。
回答者の方は車や料理を例にとって説明してくださいます。

料理の例では「切る」「焼く」などをパーツとして用意しておくことで
魚を切る、肉を切るなど、パーツを流用していく事を説明されています。

これってC言語で関数を自作する場合の考え方と何が違うのでしょうか?
「切る」という関数、「焼く」という関数を作っておき、魚や肉を引数に
するといった事はC言語でよく使われる方法だと思うのですが。

#もちろん、C言語でオブジェクト指向プログラミングができないわけでは
ないのだと思いますが、上記のようにパーツを関数で用意するのはC言語で
よく行うことではないのかなと思い、質問させていただきました。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2013/05/15 12:05:45
  • 終了:2013/05/15 12:57:21

ベストアンサー

匿名回答1号 No.1

匿名回答1号「匿名質問」を利用した質問に回答すると「匿名回答○号」と匿名で表示されます。
「匿名質問」では、ユーザー名を公開せずに匿名の質問ができます。
詳しくはこちら
2013/05/15 12:39:17

C言語で関数を作るのと大きく異なる点が、多態性です。

魚と餅では焼き方が違うじゃないですか。(魚は殿様に焼かせろ、餅は乞食に焼かせろなんて言いますよね)

そこで、その焼き方というのを魚・餅にそれぞれ持たせて同じ「焼く」という名前を付けます。同じ名前で別々の動作が呼び出されるので多態と呼ぶわけですが、
食材リストについて「全要素について"焼け"」と指示すれば、各食材がそれにあった焼き方をしてもらうようなことができるわけです。

他2件のコメントを見る
匿名回答1号

ふむ。「焼く」を調理器具が持つメソッドと解釈してきましたか…

たしかに食材ごとの「焼く」、調理器具ごとの「焼く」がありえて、
つまり、食材と調理器具の組み合わせごとに別々の「焼く」があるってことになります。

このように、組み合わせごとに異なる処理の仕方がある状況は、一般的なオブジェクト指向プログラミングではやはり解決できません。多重ディスパッチといいます。

食材と調理器具のような2ジャンルの組み合わせまでなら2重ディスパッチといってオブジェクト指向の枠内でも面倒くさいながら表現は可能ですが(ダブルディスパッチパターンとか、Visitorパターンとか呼ぶ技法を使います)。

2013/05/15 12:57:35
匿名質問者

入れ違いでまたまた回答ありがとうございました。
もはや呪文・・・。勉強始めたら1号さんの2度目の回答も
理解できるようがんばってみます^^;

2013/05/15 12:59:09
  • 匿名回答3号
    匿名回答3号 2013/05/15 13:16:16
     オブジェクト指向は人間系なのだよ。
     人間に近い考え方の仕組みがコンピュータで出来るようになったということなのだね。
     人と人とがメッセージをやり取りし、組織(クラス)は階層的で、決まりごとは継承(インヘリット)される。そして、立場や相手によって対応を変えることが出来る(多様性)。
     
     これが基本だ。要は”出来るようになっている”だけなのだね。
     自由度が高いので、信頼が前提となる。信頼出来ないとその防護策が大掛かりになるのも人間系故のことなのだ。

     だから、勉強は人間や社会の仕組みに照らして考えると理解が早いと思う。

  • 匿名回答1号
    匿名回答1号 2013/05/15 13:56:57
    うーん、その理解ではGoFを理解できないんではないかなあ。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません