"Однородность ответственности" какой то сбивающий столку термин.
"Принцип единственной ответственности" более наглядный и интуитивно понятный термин.
При проектировании приложения, вы оперируете компонентами, классами. И что бы более детализировать работу отдельных компонентов и применяется "Принцип единственной ответственности". Основная идея это - у класса должна быть лишь одна обязанность, если этих обязанностей больше, это нарушение принципа. Однако принцип - не закон и в некоторых случаях обьединение обязанностей допустимо до тех пор, пока это легко поддерживать. Применение принципа позволит упростить ваш код, и легче поддерживать его в дальнейшем, если потребуется внести изменения.
Так же этот принцип можно определить как - "должна быть только одна причина для изменения класса". Очевидно, если у класса много обязанностей, то и будет много причин для его изменения.
Простой пример, есть класс Book, который умеет печать сам себя в консоль.
Давайте посчитаем обязанности класса.
Напечатать текущую страницу в консоль
Отлично. У нас есть две обязанности, а значит две причины для изменения класса.
Изменить данные о книге
Теперь у нас есть лишь одна обязанность у класса и одна причина для его изменения.
Обязанность - предоставление данных о книге.
Причина для изменения - изменить данные о книге.
Теперь код клиент, может использовать книгу и напечатать куда ему вздумается.