Здравствуйте, Codealot, Вы писали:
X>>Для оберточного исключения, когда мы прячем сбой в кишках и экспортируем наружу только тип исключения своей библиотеки, достаточно третьей формы.
C>Одна — это уже boilerplate. То есть, больше чем нужно.
Хм. т.е. писать код код что бы удалить два других проще?
C>Ты не ответил на вопрос. Ты сделал заявление, что "если у объектов одинаковые api (т.к. наследование) и одинаковые конструкторы, следовательно у них одинаковые зависимости и следовательно они не отличатся".
Цепочка рассуждений достоаточно простая:
одинаковые конструкторы => одинаковый набор исходных данных.
одинаковый набор исходных данных, при эквивалентном api => одинаковый результат.
Другое дело, алгоритмы внутри могут отличаться, но тогда отношение между классами скорее sibling, чем hierarchy.
Но если мы используем глобальные зависимости или нарушаем LSP — то, конечно, утверждение неверно.
C>Про добавление данных и методов у классов-наследников, выходит, ты никогда не слышал?
И чем наполняются новые поля, если конструкторы не поменялись? Или вы адепт сеттер-инициализации?
Base object1 = new Base(...);
Base object2 = new Derived(...);
(object2 as Derived).callNewShinyMethod(); // мы точно сейчас говорим про наследование и ООП?
Еще раз повторюсь, использование наследования только для переиспользования кода мне кажетя избыточным. Мне достаточно композиции. Но это мой вкус.