Простіше кажучи: поганий поділ проблем в коді, призводить до коду, який не є модульним, призводить до поганого повторного використання, призводить до дублювання коду.
Якщо ви ніколи не намагаєтеся повторити функціональність, ви не отримаєте дублювання коду, і багато змінних екземплярів не будуть проблемою.
Якщо ви спробуєте повторити функціональність, монолітний код, який не є модульним, не може бути використаний повторно. Це робить занадто багато і може робити лише те, що робить. Щоб зробити щось подібне, але не те саме, "простіше" вирізати та вставити, ніж розбити монолітний код. Досвід програмистів знає, що дублюваний код - це дорога в пекло.
Отже, хоча багато змінних екземплярів сама по собі не є першопричиною проблеми, але проблема сильна "запахом".
Мова "не може бути далеко позаду" слабша, ніж сказати "треба обов'язково слідувати", тому автор не стверджує, що це має відбутися, але в кінцевому підсумку відбудеться; якщо вам потрібно повторно використовувати функціонал, але не можете, оскільки код не є модульним.
n
булеві змінні, наприклад, створюють внутрішній простір стану2^n
. Частіше за все, хоча ваш об'єкт не має такої кількості спостережуваних станів , а тому, що ви переповнили весь цей стан одним об'єктом, всередині вам все одно доведеться їх обробляти.