- 単一責任原則(SRP):クラスはそれを変更する原因を一つだけ持つべきであり、つまりクラスは一つの責任だけを持つべきです。例えば、Person クラスは Person に関連する作業だけを担当し、他の無関係な作業を処理すべきではありません。
- 開放閉鎖原則(OCP):ソフトウェアの実体は拡張に対して開かれ、修正に対して閉じているべきです。例えば、図形クラスを定義し、異なるタイプの図形がこのクラスを継承できるようにし、図形クラス自体を修正する必要はありません。
- リスコフの置換原則(LSP):サブクラスのオブジェクトはすべてのスーパークラスのオブジェクトを置き換えることができるべきです。
- インターフェース分離原則(ISP):クライアントは必要のないインターフェースに依存すべきではなく、インターフェースは小さく専門的であるべきです。
- 依存関係逆転原則(DIP):高レベルのモジュールは低レベルのモジュールに依存すべきではなく、両者は抽象に依存すべきです;抽象は詳細に依存すべきではなく、詳細は抽象に依存すべきです。例えば、会社クラスが部門クラスを含む場合、継承関係ではなく、コンポジション関係を使用することを考慮すべきです。
- デミテルの法則(Law of Demeter):オブジェクトは他のオブジェクトについて最小限の理解を持ち、直接の友人とだけ相互作用すべきです。