Что такое глобальный? Взяв ваш текст, я предполагаю, что вы имеете в виду переменную, которая объявлена в глобальной области видимости. Такая переменная может быть переопределена любым назначением и нарушить существующую функциональность.
Однако в ОО-языках все находится внутри класса, и присваивание может быть заключено в gettors и settors для свойств или полностью скрыто за методами. Это дает безопасный способ борьбы с глобалами. Обратите внимание, что в надлежащих языках OO (Java, C #, VB.NET и т. Д.) невозможно иметь глобальные переменные (иногда языковая конструкция предполагает иное, но статические поля в C # или модули в VB, смешиваются в Все Ruby заключены в классы и поэтому не являются глобальными).
Синглтон, вы упомянули об этом, - это особый вид глобальности. Как дизайнер, вы можете контролировать количество запущенных экземпляров. Автомобилю нужен только один двигатель, стране только одно правительство (или война развязывается), а программе нужен только один главный поток. Глобалы - это необходимость в программировании, настоящей дискуссии не должно быть, нужны ли они нам, но как правильно их создавать и использовать.
Вы говорите, что объекты запроса и ответа являются глобальными в веб-разработке. Они не. Это (обычно, в зависимости от вашего набора инструментов) вспомогательные переменные, устанавливаемые в области видимости до запуска вашего кода. Поскольку веб-приложение может иметь несколько объектов запроса в любой момент времени, я думаю, что это плохой пример глобальной переменной. Это не так (но они, как правило, локальные и одноэлементные для вашего текущего потока).
Одной важной особенностью, которую вы не можете охватить в традиционных процедурных языках (таких как Basic, Pascal, C), является управление доступом и, таким образом, параллелизм и безопасность потоков для глобальных переменных. Например, в .NET любой статический метод или свойство в BCL (можно сказать, что любая статическая переменная является глобальной по определению) является поточно-ориентированным. Рекомендации для пользовательских статических методов или свойств предполагают, что вы делаете то же самое.
РЕДАКТИРОВАТЬ: опасность связана с языками, которые допускают глобальные переменные, но в то же время распространяются как действительно ОО. Хотя это замечательные языки, действительно опасно выходить из-под защиты ОО и создавать глобальные переменные, например, в Perl, Python, Ruby, PHP.