SRP : It's About Actors
We often hear, Single Responsibility Principle means "A module should have one, and only one, reason to change."
But, what does the reason to change here refer to? Since software systems are built to satisfy user or stakeholder, then we can say the reason to change here as a group of user : Actor.
So the final version of SRP is "A module shoule be responsible to one, and only one, actor."
Let's take an example of Employee class.
Employee class have 3 methods : calculatePay, reportHours, and save.
calculatePay-> specified by the accounting department.reportHours-> used by the human resources department.save-> specified by the database administrators who report to the CTO.
Then in one case, the calculatePay and reportHours might have the same logic. Thus developer extracts the logic into a reusable method, let's say regularHours that is being called by those two methods.
One day, accounting department wants to change the logic to calculating the salary. Then, developer looking at the regularHours and just change it there. Later, it will be a problem to the human resources department since the logic is changed without they're asking.
That's the problem.
Back to the what the SRP states, "separate the code that different actors depend on."