The single responsibility principle requires that any unit of software should only be responsible for one thing on the same layer of abstraction.

This does not mean, of course, that classes or functions cannot do multiple things. What it means is that a unit of software should not be responsible for tasks which are not on the same level of abstraction and which are not related to the purpose for which they exist.