Наличие глобального theApp
объекта singleton не обязательно нарушает принципы OO, если данные, привязанные к нему, правильно инкапсулированы и еще много чего.
Существует также ситуация, когда на самом деле у немногих ОС есть ядро OO, что означает, что Application Loader не является Object Oriented для начала.
В любом случае абсолютизм в этом пункте опасен; некоторые языки программирования имеют (ИМО) чрезмерно усердный подход ко всему этому, диктуя каждую функцию как метод или тому подобное, даже если это не лижет смысла. (System.Math.sin(x)
, кто-нибудь?)
Самый эффективный подход обычно смешивает две методологии, используя функции для функций и методы для методов; и, наконец, используя синглтоны для вещей, которые действительно являются единственными; таких как объект приложения или интерфейсы к , некоторые системные службы.
Edit: На System.Math.sin(x)
, должно быть ясно, что грех (х) есть функция вполне буквально всех смыслах этого слова, и положить его в качестве метода на одноточечного дико безответственным, или, по крайней мере, бит глупый. В комментариях может существовать случай, когда другой класс хотел использовать имя sin() для метода, но поскольку методы и функции находятся в отдельных пространствах имен в любом случае, это действительно не имеет значения.
Я склонен рассматривать 'System.Math' больше как пространство имен, содержащее функции. –