Exercise 00: 学習総括ビジュアライザー
`BitcoinExchange`の実装から得られた設計、技術選択、品質保証の知見を、インタラクティブな要素と共に探求します。
1. 設計思想:なぜクラスを作るのか?
関連するデータと操作を一つの部品(クラス)にまとめることで、コードの見通しが良くなり、安全かつ簡単に使えるようになります。下の図は`BitcoinExchange`クラスの設計図です。
class BitcoinExchange
public:
void loadDatabase(...)
void processInputFile(...)
private:
std::map _exchangeRates;
bool isValidDate(...)
bool isValidValue(...)
2. 技術選択の核心:なぜ`std::map`か?
`std::map`(平衡二分探索木)の採用が、このプログラムの性能を決定づけました。その`O(log N)`という圧倒的な検索効率を、非効率な線形探索`O(N)`と比較してみましょう。
3. 堅牢なプログラムの作り方
良いプログラムは予期せぬ事態にも壊れません。このプログラムでは、C++の重要な原則を用いて堅牢性を確保しています。カードに触れて詳細を確認してください。
リソース管理の自動化 (RAII)
オブジェクトの寿命とリソースの寿命を一致させる設計原則。
なぜ安全?
例外が発生してもデストラクタが呼ばれ、メモリやファイルが自動で解放されるため、リソースリークを防ぎます。
コピーの禁止
高コストなデータを持つオブジェクトのコピーをコンパイルレベルで禁止。
なぜ重要?
巨大な`std::map`の意図しない複製を防ぎ、深刻なパフォーマンス低下を未然に回避します。
4. 品質の証明:テスト戦略
プログラムの正しさと効率は、網羅的なテストによって証明されます。各テストがどのような目的を持つのか、タブを切り替えて確認しましょう。