ガイドライン1:ソフトウェア設計の重要性を理解する言語機能をソフトウェア設計とは捉えないソフトウェア設計:依存関係管理と抽象化の技ソフトウェア開発の3レベル言語機能ばかりを注視しないソフトウェア設計と設計原則に注力ガイドライン2:将来の変更に備え設計する関心の分離人工的な関係性の例論理的関係性と物理的関係性DRY原則時期尚早な関心の分離ガイドライン3:インタフェースを分離し人工的関係性を排除するインタフェースを分離し関心の分離を図るテンプレート引数の要件は最小限にガイドライン4:テスト可用性に備え設計するprivateメンバ関数のテスト方法真の解:関心の分離ガイドライン5:拡張に備え設計する開放 / 閉鎖原則コンパイル時拡張性拡張を優先した時期尚早な設計