Введение

Большой или очень мощный объект в программировании

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

Характеристики

Общая техника программирования заключается в разделении большой задачи на несколько более мелких (стратегия "разделяй и властвуй") и создании решений для каждой из них. Как только более мелкие задачи решены, большая задача в целом считается решенной. Следовательно, отдельный объект для небольшой задачи должен знать только о самом себе. Аналогично, объект должен решать только свой собственный набор задач. Это также соответствует принципу единственной ответственности. В отличие от этого, программа, использующая "божественный объект", не следует этому подходу. Большая часть общей функциональности такой программы закодирована в единый "всезнающий" объект, который хранит большую часть информации обо всей программе и предоставляет большинство методов для манипулирования этими данными. Поскольку этот объект содержит так много данных и требует так много методов, его роль в программе становится всеобъемлющей и всезнающей. Вместо прямого взаимодействия между объектами программы, другие объекты полагаются на этот единственный "божественный объект" для получения большей части информации и взаимодействия. Поскольку этот объект тесно связан (ссылается) с большим количеством другого кода, его сопровождение становится сложнее, чем в более равномерно распределенной архитектуре. Изменения, внесенные в объект для улучшения одной подпрограммы, могут вызвать цепную реакцию в других, не связанных функциях. "Божественный объект" – это объектно-ориентированный аналог отказа от использования подпрограмм в процедурном программировании или чрезмерного использования глобальных переменных для хранения информации о состоянии. Хотя создание "божественного объекта" обычно считается плохой практикой программирования, эта техника иногда используется в ограниченных средах программирования (например, микроконтроллерах), где повышение производительности и централизация управления важнее, чем удобство сопровождения и элегантность кода.