Михаил, огромное спасибо! Вы не представляете как сильно помогаете мне уже третий вопрос подряд. Начинаю на порядок лучше понимать фундаментальные вещи.
А что делать в случае, если интерфейс описывает одну и ту же абстракцию, но сама абстракция подразумевает переменное число аргументов? Использовать массив или DTO? Или, может быть, убрать аргументы из сигнатуры метода, и подразумевать что они будут переданы в конструкторы классов, реализующих этот интерфейс (ведь конструктор будет у каждого свой)? Как вы решаете подобные проблемы?
Adamos, свожу всё к методам, видимо, потому, что слабо развито абстрактное мышление. Мне очень тяжело даётся выделение абстракций, декомпозиция требований, распределение ответственностей :( Мозг будто всегда в поиске конкретного решения, хотя опыт разработки какой-никакой за плечами имеется. Беда.
Допустим с интерфейсом понятно. А если взять во внимание абстрактный класс, в котором есть общий для цепочки наследников функционал? Если с помощью интерфейса мы выделяем некоторые общие публичные методы, через которые вызывающий код будет взаимодействовать с реализующим интерфейс объектом, то в методе абстрактного класса мы выделяем некоторую общую функциональность для всей цепочки наследников. И там и там выделяем общее, или это просто игра слов?