授業計画 |
| 回数 |
学習目標 |
学習項目 |
| 1 |
SOLID原則(単一責任、開放閉鎖など)を学習し、変更に強く再利用性の高い設計が出来る。
密結合なコードの問題点を理解し、依存関係を整理して保守性を高める手法が使える。 |
SOLID原則(単一責任・開放閉鎖等)を学習する。
密結合なコードの弊害を学習する。
変更に強く再利用性の高いクラス設計手法から依存関係を整理して保守性を高める設計指針を実践する。 |
| 【理解度確認】課題にて確認する。 |
| 2 |
インスタンスを唯一に保証するSingletonパターンを実装し、グローバルな管理が出来る。
Service Locatorパターンを使い、依存性を注入(DI)してテストのしやすい設計が出来る。 |
シングルトンパターンの功罪を再考し、唯一のインスタンスを管理する厳格な実装手法を学習する。
Service Locatorパターンや依存性の注入(Dependency Injection)を用い、疎結合な設計を実践する。
グローバルな資源管理と拡張性を両立させるための、高度な設計パターンを実践する。 |
| 【理解度確認】課題にて確認する。 |
| 3 |
プレイヤーの入力をコマンドオブジェクトとしてカプセル化し、入力とアクションの分離が出来る。
コマンドの履歴を保持することで、リプレイ機能やUndo/Redo機能が作れる。 |
プレイヤーの入力をカプセル化するコマンドパターンを用い、入力と挙動を分離する方法を学習する。
コマンド履歴の保持により、リプレイ機能やUndo/Redo機能を容易に実現する手法を実践する。
ユーザー操作の抽象化を通じ、柔軟なアクション制御システムの構築能力を実践する。 |
| 【理解度確認】課題にて確認する。 |
| 4 |
通知側と購読側の関係を構築し、特定のイベント発生時に自動で処理を実行させる仕組みが作れる。
UIの更新やサウンド再生など、ゲームロジックと演出を疎結合に繋ぐことが出来る。 |
通知側と購読側を分離するオブザーバーパターンを用い、イベント発生時に処理を実行させる方法を学習する。
UI更新やサウンド再生等の演出をゲームロジックから切り離し、疎結合な連携を実現する方法を学習する。
システム間の依存度を最小限に抑え、機能追加が容易なイベント駆動設計を実践する。 |
| 【理解度確認】課題にて確認する。 |
| 5 |
文字列IDやハッシュ値を用いた汎用的なメッセージ送信システムの構築が出来る。
送信側が相手の具体的な型を知らなくても情報を伝えられる柔軟な通信が作れる。 |
文字列IDやハッシュ値を用いた汎用的なメッセージ送信システムを構築し、柔軟な通信基盤を構築する。
大規模プロジェクトにおいて不可欠な、オブジェクト間の疎結合な情報伝達手法を学習する。
送信側が相手の具体的な型を知らなくても情報を伝達できる、抽象度の高い連携を実践する。 |
| 【理解度確認】課題にて確認する。 |
| 6 |
ブロードキャスト通信やフィルタリング機能を実装し、効率的なイベント配送が出来る。
大規模なゲーム開発でも破綻しない、拡張可能なメッセージバスの設計が出来る。 |
ブロードキャスト通信やフィルタリング機能を実装し、効率的なイベント配送システムを構築する。
拡張可能なメッセージバスの設計を学び、多数のオブジェクトが関わる複雑な通知フローを学習する。
システム全体の通信負荷を抑えつつ、確実な情報共有を行うための高度な設計を実践する。 |
| 【理解度確認】課題にて確認する。 |
| 7 |
Factory Methodパターンを使い、インスタンス化のロジックをまとめることが出来る。
生成するクラスの種類を外部データで指定し、プログラムを変更せずにオブジェクトの追加が出来る。 |
Factory Methodパターンを用い、インスタンス化のロジックを専用のクラスに集約・隠蔽する方法を学習する。
生成するクラスの種類を外部データから指定し、コードを書き換えずにオブジェクトを追加する方法を学習する。
オブジェクトの「利用」と「生成」を完全に分離し、柔軟性の高いシステム構築を実践する。 |
| 【理解度確認】課題にて確認する。 |
| 8 |
メモリの確保・解放を繰り返さないオブジェクト再利用の仕組みを理解し、負荷軽減が出来る。
メモリの断片化(フラグメンテーション)を防ぎ、長時間の稼働でも安定した動作が出来る。 |
メモリの確保と解放を繰り返さないオブジェクトプールの仕組みを学習する。
メモリの断片化(フラグメンテーション)を防ぎ、長時間の稼働でも安定した動作を維持する設計を学習する。
リソースの使い回しをシステム化し、パフォーマンスの安定化を図る技術を実践する。 |
| 【理解度確認】中間テストにて確認する。 |
| 9 |
可変長テンプレートを用いて、任意の引数で初期化可能な汎用プールクラスが作れる。
弾やエフェクトなど、大量に生成・破棄されるオブジェクトを効率よく管理する方法の説明が出来る。 |
可変長テンプレートを用いて、任意の引数で初期化可能な汎用プールクラスを構築する。
弾やエフェクト等の大量生成オブジェクトを対象に、高速かつ効率的な管理ロジックを実装する。
汎用性の高いリソース管理部品を作ることで、異なるプロジェクトでも再利用可能な技術を学習する。 |
| 【理解度確認】課題にて確認する。 |
| 10 |
継承による機能追加の限界を理解し、コンポーネントの「合成」による柔軟な設計が出来る。
エンティティにコンポーネントを自由に着脱し、多様な属性を持つオブジェクトが作れる。 |
継承による機能追加の限界を知り、コンポーネントの「合成」の活用法を学習する。
エンティティに機能を自由に着脱可能にし、多様な属性を持つオブジェクトを動的に作る設計を実践する。
深い継承階層を避け、組み合わせによって柔軟に挙動を変える高度な設計法を実践する。 |
| 【理解度確認】課題にて確認する。 |
| 11 |
更新処理を「タスク」として抽象化し、優先度に基づいた実行順序の制御が出来る。
タスク間の依存関係を定義し、確実に特定の順番で処理が行われるシステムの構築が出来る。 |
更新処理を「タスク」として抽象化し、優先度に基づいた実行順序を制御するタスクシステムを構築する。
タスク間の依存関係を定義し、特定の順番で確実に処理が行われる安全な実行基盤を設計する。
ゲームループ内の複雑な更新フローを一括管理するための、アーキテクチャ設計を学習する。 |
| 【理解度確認】課題にて確認する。 |
| 12 |
ゲームループから独立してタスクを追加・削除出来る動的なマネージャーが作れる。
フェーズ(初期化、更新、描画)ごとにタスク群をまとめて一括管理する手法が使える。 |
ゲームループから独立して動的にタスクを追加・削除できる、汎用的なタスクマネージャを構築する。
フェーズ(初期化・更新・描画)ごとにタスク群を整理し、一括で制御する手法を実習にて実践する。
大規模開発での処理順序の混乱を防ぎ、予測可能なシステム実行環境を構築する。 |
| 【理解度確認】課題にて確認する。 |
| 13 |
パラメータを外部ファイル(JSON/YAML/XML等)へ切り出し、コードを書き換えずに調整が出来る。
データの自動読み込み(ホットリロード)の概念を理解し、開発効率を上げる工夫が出来る。 |
外部ファイル(JSON/YAML/XML等)へ切り出し、コードを書き換えずに調整可能なデータ駆動設計を学習する。
ホットリロードの概念を学び、実行中にデータを反映させて開発効率を向上させる工夫を学習する。
エンジニア以外でも調整可能な柔軟な制作体制を支える、システム基盤を構築する。 |
| 【理解度確認】課題にて確認する。 |
| 14 |
学んだデザインパターンを組み合わせ、小規模なゲームフレームワークが作れる。
クラス図を作成し、システム全体の構成をドキュメントとして設計・整理が出来る。 |
学習したデザインパターンを組み合わせ、小規模なゲームフレームワークを作成する方法を学習する。
クラス図を用いてシステム全体の依存関係を視覚化し、論理的な裏付けのある設計を学習する。
3年次前期の総括として、自身の手で一からシステムの骨組みを設計・具現化する。 |
| 【理解度確認】課題にて確認する。 |
| 15 |
実装したコードに対してリファクタリングを行い、より美しく効率的なコードに出来る。
ピアレビュー(Peer Review)を行い、他人のコードを読むことで新しい設計手法や注意点の指摘が出来る。 |
実装したフレームワークに対してリファクタリングを行う方法を学習する。
ピアレビューを通じ他者の設計意図を読み取り、自身のコードを客観的に評価・改善する能力を実践する。
設計と実装のサイクルを完遂し、プログラミング能力を作品として完成させる。 |
| 【理解度確認】課題にて確認する。 |