Simplificando: a fraca separação de preocupações no código, leva ao código que não é modular, leva à reutilização ruim, leva ao código duplicado.
Se você nunca tentar repetir a funcionalidade, não receberá código duplicado e muitas variáveis de instância não serão um problema.
Se você tentar repetir a funcionalidade, o código monolítico, que não é modular, não poderá ser reutilizado. Faz muito e só pode fazer o que faz. Para fazer algo semelhante, mas não o mesmo, é "mais fácil" recortar e colar, em vez de quebrar o código monolítico. Os programadores de experiências sabem que o código duplicado é o caminho para o inferno.
Portanto, embora muitas variáveis de instância em si não sejam a causa raiz do problema, é um forte "cheiro" que o problema está chegando.
A linguagem "não pode estar muito atrasada" é mais fraca do que dizer "certamente deve seguir", de modo que o autor não está afirmando que isso deve acontecer, mas acabará por acontecer; se você precisar reutilizar a funcionalidade, mas não puder, pois o código não é modular.
n
variáveis booleanas, por exemplo, criam um espaço de estado interno de2^n
. Na maioria das vezes, embora seu objeto não tenha tantos estados observáveis , mas como você amontoou todo esse estado em um único objeto, internamente ainda precisará lidar com todos eles.