CounterFlowの日記: オブジェクト志向に関する例え話案 4
日記 by
CounterFlow
他所での説明に対抗したくなったので書く
よくクラスのことを雛形とか設計図って例えることが多いけど
ボクは"種族"ってとらえてる。
まずドラクエで敵が出てくるときに
スライムA スライムB
みたく出てくるよね。
ここでスライムAとスライムBは別の個体だけど
同じスライムという種族といえるよね。
そんでもってコード書くときにclassなんちゃらの部分では種族を設定してて、
んでnewなんちゃらのところで個体をつくってるわけね。
これのなにがいいかというと
共通する部分を使いまわしつつ
ここでいうとスライムAとスライムBのヒットポイントを別々に管理できて便利!
ってことなのよ。
Re:それオブジェクト指向じゃない (スコア:1)
ご指摘ありがとうございます
継承に関しては
このあとスライムから亜種のスライムベスを~みたいな例えでいこうとしたんですけど
それも違ってますかね?
それオブジェクト指向じゃない (スコア:0)
先ず、オブジェクト志向じゃ無くて、オブジェクト指向ね。
次に、スライムAとスライムBのたとえだと
それは変数(またはインスタンス)の説明だよ。
例えば c++ で int A,B; って書けば
AとBの値が別々に管理できて便利!と言っているのと同じ。
クラスの説明がしたいなら、
例えば
1) モンスターというクラスを用意
2) ヒットポイントの管理はモンスタークラスに実装
3) スライムとかドラキーみたいな別の種族は、モンスタークラスを継承して実装
しておけば、
スライムAとドラキーBのヒットポイントの管理が共通化できて便利
という感じで例えないと。
とにかく、共通部分のモンスタークラスと
それを継承したスライムクラスとドラキークラスの
3つのクラスを使った話をしないとクラスの利点は説明できないよ。
分けるポイントは固定ではない (スコア:0)
それで、スライムAとスライムBの違いはなんですか?色や大きさ、形の違いなどは種族を分けるポイントになりますか?
分けた方がプログラミングしやすいなら分けるし、分けない方がいいなら分けない。例えば、表示される形が違うだけで別のクラスにしてしまうと、形状の変化があった時に、別のインスタンスを作る必要が出てくる。でも、クラスを同じにしておいて、表示に関する部分をオブジェクトで与えておけば、形状の変化があっても、そのオブジェクトだけを入れ替えればいいから、インスタンスはそのまま利用できる。
プログラミング言語によっても分けるポイントは異なるから、喩え話をするなら、分けるべきポイントは固定ではないことを明確にする方向が良いのではないかと。志も大事ですけどね。
Re:分けるポイントは固定ではない (スコア:1)
勉強になります
ありがとうございます