オブジェクト指向
オブジェクト指向◯○の話や記事を読むと、いっつも犬をサンプルにして説明されているのは何でなんだろう?
ま それはさておき、オブジェクト指向の話ってファミコンなんかの有名なゲームをサンプルにしたら分かりやすそうなのになーって思う。ガチャポン戦記とか大戦略、ウォークラフトとかシミュレーションが分かりやすいかな。各ユニットがそのままインスタンスだし、クラス=ユニットの特徴、生産する=コンストラクタ って感じで連関つけやすいような気がする。レベルアップするとできる「クラスチェンジ」なんてまさにクラスの概念そのものだしね。
以下、ガチャポン戦記を頭に思い浮かべながら読む
- ガンダムユニット(ガンダムクラス)は「ライフル」「ビームサーベル」を攻撃手段(メソッド)として持っています。
- ガンダムユニットの体力は80(インスタンス変数)です。戦闘で攻撃を受けると減ってしまいます。
- どのガンダムユニットも移動できる歩数は5マス(クラス変数)です。
- ガンダムユニット(インスタンス)は基地で生産されます(コンストラクタ)。ユニットは何体でも生産できます。
- ユニットの体力が0になると壊れてしまいます。(デストラクタ)
- 技術力がパワーアップするとゼータガンダムやダブルゼータガンダムなどの、初代ガンダムから派生したユニット(サブクラス)が生産できるようになります。
- ガンダムの派生ユニットは、ガンダムと同じ攻撃手段を持ち(メソッドの継承)、さらに体力、移動歩数、「ライフル」「ビームサーベル」の攻撃力がパワーアップ(オーバーライド?)しています。
- ダブルゼータガンダムはハイメガ粒子砲も使うことができます。(サブクラスでのメソッドの追加)
- どのガンダムユニットも、初代ガンダムの特徴を引き継いでいるす。この関係を指して、初代ガンダムはスーパークラス/ルートクラス などと呼ばれます。
これらの関係をプログラミング言語で表すとほげほげみたいな・・・あんまり分かりやすく無いかも。自分はある程度慣れたから、こういう具体的なサンプルでも「あぁ」って思えるけど、初めて取り組む人にはやっぱり厳しいのかな。(chomeny君はRubyのオブジェクトでつまずいたら参考にしてみてください。)
なんにせよ高度に抽象化されたオブジェクト指向の考え方を一度具体的なサンプルに落としてから理解して、また抽象的な次元に引き上げて頭に叩き込むことが肝心だと思うんだけど、よくある犬のサンプルはかなり分かりにくいと思う。「ゲームで理解するオブジェクト指向」なんてのはないかしら?