Масштаб важен.

Если вы не ограничите видимость переменных, вы быстро получите непослушный и трудно отлаживаемый код. Имея все переменные, доступные отовсюду, вы создаете ряд проблем, включая невозможность повторного использования имен переменных и переменных, напрямую доступных извне своего собственного класса.

Пример может лучше помочь мне объяснить, скажем, у вас есть объект из-под печенья. Контейнер для печенья знает, сколько в нем печенья, и сохраняет это в переменной. Бисквит можно получить, попросив у банки вкусное лакомство. В ответ жестяная банка вернет вам печенье и уменьшит количество печенья на 1. Ура, все звучит хорошо. Однако, если переменная biscuit tin доступна извне класса biscuit tin, как пользователь я могу просто установить для этой переменной любое значение, которое мне нужно, и в процессе создавать печенье из воздуха или удалять его из существования.

Теперь, если бы у меня была возможность желать существования печенья, я бы работал день и ночь, строя свою кондитерскую империю, поскольку вместо этого я пишу этот блог, вы можете поверить мне, что это невозможно. Объектно-ориентированное программирование пытается максимально приблизиться к поведению в реальном мире, поскольку мы не можем сделать это в реальной жизни, мы не должны быть в состоянии сделать это в ООП. Возврат печенья - это функция банки, а количество - это печенье в чем-то, что является частным (недоступным за пределами банки) для банки. Если мы хотим знать, сколько печенья находится в банке, и если, следовательно, нам нужна эта мультиупаковка шоколадных дижестивов за 2 фунта стерлингов, пока они предлагаются, мы можем любезно указать банку (tin.count_biscuits), сколько печенья в ней содержится.

Намного лучше.