Бог возражает - God object

В объектно-ориентированного программирования, а Бог возражает является объект который слишком много знает или же делает слишком много. Объект Бога является примером антипаттерн.

Распространенный метод программирования - отдельный большая проблема на несколько меньших проблем ( разделяй и властвуй стратегия ) и создавать решения для каждого из них. Как только меньшие проблемы решены, большая проблема в целом решена. Следовательно, данный объект для небольшой проблемы должен знать только о себе. Точно так же объекту необходимо решить только один набор проблем: собственный проблемы. Это также следует Принцип единоначалия.

Напротив, программа, использующая объект God, не следует этому подходу. Большая часть общей функциональности такой программы закодирована в единый «всезнающий» объект, который поддерживает большую часть информации обо всей программе, а также предоставляет большую часть методы для манипулирования этими данными. Поскольку этот объект содержит так много данных и требует так много методов, его роль в программе становится богоподобной (всезнающей и всеобъемлющей). Вместо того, чтобы программные объекты обменивались данными между собой напрямую, другие объекты в программе полагаются на один объект Бога для большей части своей информации и взаимодействия. Поскольку этот объект тесно связаны к такому большому количеству другого кода (на который ссылается) обслуживание становится более трудным, чем это было бы при более равномерно разделенной структуре программирования. Изменения, внесенные в объект в пользу одной процедуры, могут иметь непреднамеренное влияние на другие несвязанные процедуры.

Объект God - это объектно-ориентированный аналог отказа от использования подпрограммы в процедурные языки программирования, или использовать слишком много глобальные переменные для хранения государственной информации.

В то время как создание объекта God обычно считается плохой практикой программирования, этот метод иногда используется для жестких программных сред (таких как микроконтроллеры ), где повышение производительности и централизация управления важнее ремонтопригодности и элегантности программирования.

Смотрите также

дальнейшее чтение

  • Риэль, Артур Дж. (1996). "Глава 3: Топологии ориентированных на действие приложений против объектно-ориентированных приложений". Эвристика объектно-ориентированного дизайна. Бостон, Массачусетс: Аддисон-Уэсли. ISBN  0-201-63385-X. 3.2: Не создавайте божественные классы / объекты в вашей системе. С большим подозрением относитесь к абстракции, имя которой содержит Driver, Manager, System или Subsystem.
  • Антипаттерны и худшие приемы - объекты-монстры.