クラスやモジュールは単一の責任(機能や役割)を持つべきであり、変更の理由が一つでなければならないということを意味しています。つまり、あるクラスやモジュールは変更の原因が一つだけであるべきで、それによって変更が行われる範囲が最小限に抑えられるべきだ、というものです。
この原則を守ることで、コードの理解、保守、拡張が容易になります。各クラスやモジュールが特定の責任を持つことにより、それらが互いに関連性が低くなり、変更が発生したときの影響が限定的になります。
以下は、単一責任の原則に従っていない例と、それを守るように修正した例です。例として、報告書を生成し、保存するクラスを考えてみましょう。
単一責任の原則に沿わない例
この例では、UserManagementクラスが、ユーザー情報の管理、ユーザーの作成、レポートの印刷という複数の責任を負っています。これは、単一責任の原則に反しています。
単一責任の原則に沿った例
この例では、Userクラスがユーザー情報の管理、UserManagerクラスがユーザーの作成、UserReportPrinterクラスがユーザーレポートの印刷という単一の責任を持つようになっています。