- 単一責任原則(SRP):クラスは変更される理由が 1 つだけであるべきであり、つまりクラスは 1 つの責任のみを持つべきです。例えば、Person クラスは Person に関連する作業のみを担当すべきであり、他の無関係な作業を処理すべきではありません。
- オープン・クローズド原則(OCP):ソフトウェアエンティティは拡張に対してオープンであり、変更に対してクローズドであるべきです。例えば、図形クラスを定義し、異なるタイプの図形がこのクラスを継承することで、図形クラス自体を変更する必要がなくなります。
- リスコフの置換原則(LSP):サブクラスのオブジェクトはすべての親クラスのオブジェクトと置換可能であるべきです。
- インターフェース分離の原則(ISP):クライアントは必要のないインターフェースに依存すべきではなく、つまりインターフェースは小さく専門化されているべきです。
- 依存性逆転の原則(DIP):上位モジュールは下位モジュールに依存すべきではなく、両方が抽象に依存すべきです。抽象は詳細に依存すべきではなく、詳細は抽象に依存すべきです。例えば、会社クラスが部門クラスを含む場合、継承関係ではなく合成関係を考慮すべきです。
- デメテルの法則(Law of Demeter):オブジェクトは他のオブジェクトについて最小限の知識しか持たず、直接の友人とのみやり取りすべきです。