В своей книге "API Design for С++" Мартин Редди подробно описывает Закон Деметры. В частности, он утверждает, что:
вы никогда не должны вызывать функцию на объекте, полученном с помощью другого вызова функции.
Он поддерживает его утверждение с помощью функции цепочки, например
Func()
{
[...]
m_A.GetObjectB().DoSomething();
[...]
}
Вместо этого он рекомендует передать B в качестве аргумента функции вроде:
Func(const ObjectB &B)
{
[...]
B.DoSomething();
[...]
}
Мой вопрос:, почему последний пример приведет к созданию более слабо связанных классов, чем первый?