授業計画 |
| 回数 |
学習目標 |
学習項目 |
| 1 |
1年次学習内容の復習が出来る。
Doxygen形式のコメントを記述し、ソースコードから仕様書を自動生成する手法が使える。 |
1年次の学習範囲を改めて再確認し、開発効率を高めるDoxygen形式のコメント記述と仕様書生成を学習する。
ソースコードからドキュメントを自動生成する手法から保守性の高いプロジェクト管理方法を学習する。
2年次の応用的なC++機能の学習に向け、一貫した開発作法と基礎知識を学習する。 |
| 【理解度確認】課題にて確認する。 |
| 2 |
コピーコンストラクタと代入演算子の役割の説明が出来る。
値渡しによる意図しないコピーの発生を認識し、パフォーマンス低下を防ぐコードが書ける。 |
コピーコンストラクタと代入演算子がプログラムの性能に与える影響(隠れたコスト)を学習する。
値渡しによる意図しないオブジェクト複製を特定し、パフォーマンス低下を防ぐコーディングを実践する。
リソースの重複保持を避け、メモリ使用効率を最適化するための厳格な設計手法を実践する。 |
| 【理解度確認】課題にて確認する。 |
| 3 |
右辺値参照(&&)の概念を理解し、リソースの所有権を効率的に移動させる処理が書ける。
std::moveを使い、一時オブジェクトからの不要なコピーコストを削減する最適化が出来る。 |
右辺値参照(&&)の概念を学習する。
リソースの所有権を効率的に移動させるムーブセマンティクスを学習する。
所有権の移動という新しいリソース管理の考え方を実践する。モダンなC++記述を実践する。 |
| 【理解度確認】課題にて確認する。 |
| 4 |
ムーブコンストラクタとムーブ代入演算子を自作し、リソース管理クラスの性能向上が出来る。
コピー禁止・ムーブ許可のクラスを設計し、リソースの一意性を保証する設計が出来る。 |
ムーブコンストラクタとムーブ代入演算子を自作し、自作クラスにおけるリソース移譲方法を学習する。
コピーを禁止しムーブのみを許可する設計により、リソースの一意性を厳格に保証する手法を学習する。
大規模なデータを扱う際の実行コストを劇的に削減するための、高度なクラス設計を実践する。 |
| 【理解度確認】課題にて確認する。 |
| 5 |
std::string_viewを使い、文字列のコピーを発生させない読み取り専用の参照が出来る。
std::spanを用いて、配列やコンテナの一部を安全かつ効率的に参照する関数が作れる。 |
文字列のコピーを発生させずに参照するstd::string_viewを用い、読み取り処理の高速化を学習する。
std::spanを用いて配列やコンテナの一部を安全に参照し、範囲外アクセスのない関数設計を実践する。
メモリの所有権を持たない「ビュー」の概念を学習する。効率的なデータ参照手法を実践する。 |
| 【理解度確認】課題にて確認する。 |
| 6 |
std::unique_ptrを使い、リソースの所有権が常に1つであることを保証する設計が出来る。
スコープを抜けた際の自動解放機能を活用し、メモリリークを根絶するコードが書ける。 |
std::unique_ptrを用いて所有権を1つに限定(RAII)し、スコープ終了時の自動解放を保証する設計を行う。
明示的なdeleteを廃止することでメモリリークを根絶し、リソース管理の安全性を高めることを学習する。
スマートポインタによるモダンなメモリ管理を導入し、堅牢なプログラム構築を実践する。 |
| 【理解度確認】課題にて確認する。 |
| 7 |
std::shared_ptrによる参照カウント方式のリソース共有の説明が出来る。
std::weak_ptrを使い、循環参照を回避しつつ安全にオブジェクトの参照が出来る。 |
std::shared_ptrによる参照カウント方式の共有管理を学び、複数の箇所で利用される資源の管理法を学習する。
std::shared_ptrによる循環参照の発生を体験し、std::weak_ptrの必要性を学習する。
複雑なオブジェクトグラフにおける適切なライフサイクル管理と、参照の仕組みを実践する。 |
| 【理解度確認】課題にて確認する。 |
| 8 |
std::sortやstd::findなどのアルゴリズム関数を使い、コンテナ要素の高速な操作が出来る。
ラムダ式を用いた述語オブジェクトを記述し、柔軟な条件判定ロジックを簡潔に書ける。
構造化束縛が使える。 |
std::sortやstd::find等のSTLアルゴリズムを使い、コンテナ要素に対する高速な操作手法を学習する。
ラムダ式を用いてその場で判定条件を記述し、柔軟かつ簡潔なロジック構築を実践する。
アルゴリズムと関数オブジェクトの組み合わせにより、定型的処理の記述効率向上法を学習する。 |
| 【理解度確認】中間テストにて確認する。 |
| 9 |
関数テンプレートを定義し、異なるデータ型に対して共通ロジックの適用が出来る。
テンプレートの特殊化を使い、特定の型に対してのみ異なる最適化処理を作れる。 |
関数テンプレートを定義し、異なるデータ型で共通のロジックを適用する汎用プログラミングを学習する。
テンプレートの特殊化を用い、特定の型に対してのみ個別の最適化や特殊処理を構築する。
型の抽象化によりコードの重複を劇的に削減し、再利用性に優れた関数設計の手法を実践する。 |
| 【理解度確認】課題にて確認する。 |
| 10 |
クラステンプレートを自作し、スタックやキューなどの汎用的なデータ構造が作れる。
複数のテンプレート引数やデフォルト引数を使い、再利用性の高いクラス設計が出来る。 |
クラステンプレートを自作し、スタックやキュー等の汎用的なデータ構造を構築する手法を学習する。
複数のテンプレート引数やデフォルト引数を活用し、多様な要件に適応可能なクラス設計を実践する。
コンパイル時のコード生成の仕組みを学習する。型安全かつ汎用的なライブラリ製作法を学習する。 |
| 【理解度確認】課題にて確認する。 |
| 11 |
std::optionalを使い、有効な値の有無を型安全に表現し、nullptrに代わるエラー表現が出来る。
値が存在する場合のみ処理を継続する現代的なエラーハンドリングが実装出来る。 |
std::optionalを用い、有効な値の有無を型安全に表現する現代的なエラーハンドリングを学習する。
nullptrの使用を避け、値が存在する場合のみ安全に処理を継続するガード条件の記述を実践する。
関数の失敗や未定義状態を呼び出し元へ正確に伝えるための、型レベルの設計手法を実践する。 |
| 【理解度確認】課題にて確認する。 |
| 12 |
std::variantを用いて、定義した複数の型の中からいずれか1つを安全に保持する構造が作れる。
std::visitによる型安全なパターンマッチングを行い、型に応じた処理の分岐が出来る。 |
std::variantを用いて複数の指定された型の中からいずれか1つを安全に保持する構造を学習する。
std::visitを用いた型安全なパターンマッチングを実践する。
保持された型に応じた処理分岐を構築する。 |
| 【理解度確認】課題にて確認する。 |
| 13 |
constexprキーワードを使い、実行時ではなくコンパイル時に計算を完了させる最適化が出来る。
リテラル型や定数式を駆使し、ゲームの初期化負荷を大幅に軽減するコードが書ける。 |
constexprキーワードを活用し、実行時ではなくコンパイル時に計算や初期化を完了させる手法を学習する。
リテラル型や定数式を駆使し、プログラムの起動時や実行時の演算負荷を軽減することを学習する。
コンパイラの能力を最大限に引き出し、パフォーマンスに寄与する定数計算の作法を実践する。 |
| 【理解度確認】課題にて確認する。 |
| 14 |
try-catchブロックを使い、エラー発生時にプログラムを安全に終了・復旧させる処理が書ける。
static_assertを用いたコンパイル時の条件検証を行い、不正な実装を未然に防げる。 |
try-catchを用いた例外処理を学習する。
static_assertによるコンパイル時の条件検証を行い、不正な型や設定の混入を未然に防止する方法を学習する。
実行時とコンパイル時の両面からエラーを捕捉し、システムの信頼性を担保する技術を学習する。 |
| 【理解度確認】課題にて確認する。 |
| 15 |
メモリデバッガを使い、実行時のヒープ破壊やリーク箇所を特定し修正が出来る。
例外が発生してもリソースが確実に解放される「例外安全」な関数が書ける。 |
メモリデバッガを用いてヒープ破壊やリーク箇所を特定し、不具合を的確に修正する手法を学習する。
例外発生時にもリソースが確実に解放される「例外安全」な関数の設計と実装を実践する。
2年次前期の総括として、高度なデバッグ技術と安全な設計思想の定着を確認する。 |
| 【理解度確認】課題にて確認する。 |