#ооп #область_видимости
Я знаю про побочные эффекты. Меня интересует не почему глобальные переменные - это в принципе плохо, а почему постоянно говорят, что они зло, хотя про поля класса я такого не слышал никогда. Хотя, по сути, поля класса ведь ничем не отличаются? Это такие же глобальные переменные, только в пределах класса.
Ответы
Ответ 1
Глобальные переменные в большинстве случаев нарушают инкапсуляцию. К ним открыт неконтролируемый доступ отовсюду. В большом проекте при обилии глобальных переменных возникает путаница в именах. Глобальную переменную же видно отовсюду, надо, чтобы отовсюду было понятно, зачем она. Глобальные переменные в большинстве случаев нарушают принцип инверсии зависимостей (или делают возможным его нарушение). Глобальные переменные ухудшают масштабируемость проекта. Глобальные переменные ухудшают читаемость кода (в каком-то конкретно взятом месте непонятно, нужна ли какая-то конкретная глобальная переменная, или нет). Глобальные переменные приводят к трудноуловимым ошибкам. Примеры: нежелательное изменение её значения в другом месте/другим потоком, ошибочное использование глобальной переменной для промежуточных вычислений из-за совпадения имен, возвращение функцией неправильного значения при тех же параметрах (оказывается, она зависима от глобальной переменной, а ее кто-то поменял). Глобальные переменные создают большие сложности при использовании модульного тестирования. Глобальные переменные увеличивают число прямых и косвенных связей в системе, делая её поведение труднопредсказуемым, а её саму - сложной для понимания и развития. Поля - это такие же глобальные переменные, только в пределах класса. А давайте одежду дома складывать прямо на пол в любом месте квартиры: ведь 30 кв. см ящика в комоде - это те же 30 кв. см поверхности, что и на полу, только в пределах ящика. И гаражи для машин не нужны, можно на улице ставить. Надеюсь, аналогия понятна. Ключевая ошибка в утверждении автора заключается в том, что поля класса никаким образом не являются глобальными - они принадлежат объекту (экземпляру) класса, если они не статические. У одного объекта - одни значения, у другого - другие. А статические поля класса общие для всех экземпляров, и это чаще всего тоже не очень хорошо.
Комментариев нет:
Отправить комментарий