Здравствуйте, 0BD11A0D, Вы писали:
BDA>Вот это все я мысленно опустил и предложил: давайте вы сразу приведете пример хорошего кода с делегированием. Где делегирование улучшает читаемость или мешает совершению ошибок. (Другие критерии я не думаю, что есть смысл рассматривать, но готов, если убедительно покажете). А я перепишу его без делегирования или признаю, что оно уместно. Так мы сможем быстро разобрать все случаи. К игре приглашаются все желающие.
Возьмём старый добрый COM. И его ярчайших представителей — VB, Delphi, C++/ATL.
В васике наследования вообще не было. Так что переписывать на нём без делегирования просто не получится.
Компонентная модель вообще предполагает, что кастомизация поведения объектов происходит только через предоставление интерфейсов друг другу, а делегирование — просто немножко сахара над этим.
Чем делегирование лучше наследования:
Наследование создаёт россыпь интерфейсов толщиной в одну функцию (поскольку каждую функцию можно переопределить).
И эти интерфейсы доступны как наружу, так и внутри реализации — интерфейсы наследников к предку (механизм, который эксплуатируется в паттерне "шаблонный метод", например).
Для каждого интерфейса мысленно прописывается контракт. А если несколько функций выступают в связке, то этот контракт расползается, его легче нарушить.
При делегировании каждый класс отвечает за соблюдение своей части контракта.
Чем делегирование хуже: оно дороже по памяти, по скорости, ну и по писанине тоже.