パスワードを忘れた? アカウント作成
10839366 journal
日記

CounterFlowの日記: オブジェクト志向に関する例え話案 4

日記 by CounterFlow

他所での説明に対抗したくなったので書く

よくクラスのことを雛形とか設計図って例えることが多いけど
ボクは"種族"ってとらえてる。

まずドラクエで敵が出てくるときに
スライムA スライムB
みたく出てくるよね。

ここでスライムAとスライムBは別の個体だけど
同じスライムという種族といえるよね。

そんでもってコード書くときにclassなんちゃらの部分では種族を設定してて、
んでnewなんちゃらのところで個体をつくってるわけね。

これのなにがいいかというと
共通する部分を使いまわしつつ
ここでいうとスライムAとスライムBのヒットポイントを別々に管理できて便利!
ってことなのよ。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • ご指摘ありがとうございます

    継承に関しては
    このあとスライムから亜種のスライムベスを~みたいな例えでいこうとしたんですけど
    それも違ってますかね?

  • by Anonymous Coward on 2014年04月19日 15時29分 (#2585233)

    先ず、オブジェクト志向じゃ無くて、オブジェクト指向ね。

    次に、スライムAとスライムBのたとえだと
    それは変数(またはインスタンス)の説明だよ。
    例えば c++ で int A,B; って書けば
    AとBの値が別々に管理できて便利!と言っているのと同じ。

    クラスの説明がしたいなら、

    例えば
    1) モンスターというクラスを用意
    2) ヒットポイントの管理はモンスタークラスに実装
    3) スライムとかドラキーみたいな別の種族は、モンスタークラスを継承して実装
    しておけば、
    スライムAとドラキーBのヒットポイントの管理が共通化できて便利
    という感じで例えないと。

    とにかく、共通部分のモンスタークラスと
    それを継承したスライムクラスとドラキークラスの
    3つのクラスを使った話をしないとクラスの利点は説明できないよ。

  • by Anonymous Coward on 2014年04月19日 16時03分 (#2585252)

    それで、スライムAとスライムBの違いはなんですか?色や大きさ、形の違いなどは種族を分けるポイントになりますか?

    分けた方がプログラミングしやすいなら分けるし、分けない方がいいなら分けない。例えば、表示される形が違うだけで別のクラスにしてしまうと、形状の変化があった時に、別のインスタンスを作る必要が出てくる。でも、クラスを同じにしておいて、表示に関する部分をオブジェクトで与えておけば、形状の変化があっても、そのオブジェクトだけを入れ替えればいいから、インスタンスはそのまま利用できる。

    プログラミング言語によっても分けるポイントは異なるから、喩え話をするなら、分けるべきポイントは固定ではないことを明確にする方向が良いのではないかと。志も大事ですけどね。

typodupeerror

人生unstable -- あるハッカー

読み込み中...