プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース 第11回 コードレビュー
今日の生け贄 新風「AniminiA」 傾向と対策 継承を積極的に使用 何度も練り直したと思われる設計 設計はいいけど、中身になるとべらんめぇ状態な部分も
よいところ ゲームの処理自体と、状態遷移を担当するクラスとを分離しているのはGood 「管理クラス」の導入 継承の積極的な利用 「敵」クラスを直接利用するのではなく、 敵クラスをまとめて管理するクラスを利用 継承の積極的な利用 もったいない部分もありますが きっちりしたファイル仕分け
つっこみどころ なぜそこでポリモフィズムじゃないのか メモリ管理的にデンジャラスすぎる部分がちらほら 使いづらい気持ちも分かるが。。。 メモリ管理的にデンジャラスすぎる部分がちらほら update()関数は長くなっちゃうよねぇ~ private関数が少ないよね 本来はこうしたいんだけど、時間がなくなると~というのはよく伝わってくる
Javaとの継承の違い デストラクタは必ずvirtual オーバーライドする可能性のあるメンバ関数はvirtual super()がない 致命的なリークが起きる オーバーライドする可能性のあるメンバ関数はvirtual virtualがないと、ポリモフィズムを使った時でも親クラスのメンバ関数が呼ばれてしまう absractに相当するのは純粋仮想関数 (virtual void update() = 0;) super()がない コンストラクタでの書式や、親クラスのメンバ関数呼び出し方法が異なる
親クラスポインタから どの子クラスかを知る方法 親クラスのヘッダに子クラスの種類を列挙したenum型を作り、メンバ変数として持つ そしてその値を返すgetterを作る 子クラスはコンストラクタで、そのメンバ変数に自分自身を表す値を代入する こうしておくとgetterの値によって条件分岐が可能 ただし、ポリモフィズムのメリットがかなり損なわれる方法なので、多用は禁物
private関数をもっと使おう 関数が少ない=1個1個の関数がでかい メンテナンス性、可読性を下げる要因 特に使い回す予定がない処理でも、1ブロックとしてくくれる処理は関数化する update()の見通しがすっきりする せっかくクラス化して、メンバ変数には自由にアクセスできるんだからもったいない
カメラワークにもの申す!