Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Введение
Большой или очень мощный объект в программировании
Large or very powerful object in programming
В объектно-ориентированном программировании объект-бог (иногда также называемый всеведущим объектом) — это объект, ссылающийся на большое количество различных типов, имеющий слишком много несвязанных или некорректно категоризированных методов, или их комбинацию. Объект-бог является примером антипаттерна и «кодового запаха».
In object oriented programming, a god object (sometimes also called an omniscient or all knowing object) is an object that references a large number of distinct types, has too many unrelated or uncategorized methods, or some combination of both. The god object is an example of an anti pattern and a code smell.
Характеристики
Общая техника программирования заключается в разделении большой задачи на несколько более мелких (стратегия "разделяй и властвуй") и создании решений для каждой из них. Как только более мелкие задачи решены, большая задача в целом считается решенной. Следовательно, отдельный объект для небольшой задачи должен знать только о самом себе. Аналогично, объект должен решать только свой собственный набор задач. Это также соответствует принципу единственной ответственности. В отличие от этого, программа, использующая "божественный объект", не следует этому подходу. Большая часть общей функциональности такой программы закодирована в единый "всезнающий" объект, который хранит большую часть информации обо всей программе и предоставляет большинство методов для манипулирования этими данными. Поскольку этот объект содержит так много данных и требует так много методов, его роль в программе становится всеобъемлющей и всезнающей. Вместо прямого взаимодействия между объектами программы, другие объекты полагаются на этот единственный "божественный объект" для получения большей части информации и взаимодействия. Поскольку этот объект тесно связан (ссылается) с большим количеством другого кода, его сопровождение становится сложнее, чем в более равномерно распределенной архитектуре. Изменения, внесенные в объект для улучшения одной подпрограммы, могут вызвать цепную реакцию в других, не связанных функциях. "Божественный объект" – это объектно-ориентированный аналог отказа от использования подпрограмм в процедурном программировании или чрезмерного использования глобальных переменных для хранения информации о состоянии. Хотя создание "божественного объекта" обычно считается плохой практикой программирования, эта техника иногда используется в ограниченных средах программирования (например, микроконтроллерах), где повышение производительности и централизация управления важнее, чем удобство сопровождения и элегантность кода.
A common programming technique is to separate a large problem into several smaller problems (a divide and conquer strategy) and create solutions for each of them. Once the smaller problems are solved, the big problem as a whole has been solved. Therefore a given object for a small problem only needs to know about itself. Likewise, there is only one set of problems an object needs to solve: its own problems. This also follows Single responsibility principle. In contrast, a program that employs a god object does not follow this approach. Most of such a program's overall functionality is coded into a single "all knowing" object, which maintains most of the information about the entire program, and also provides most of the methods for manipulating this data. Because this object holds so much data and requires so many methods, its role in the program becomes god like (all knowing and all encompassing). Instead of program objects communicating among themselves directly, the other objects within the program rely on the single god object for most of their information and interaction. Since this object is tightly coupled to (referenced by) so much of the other code, maintenance becomes more difficult than it would be in a more evenly divided programming design. Changes made to the object for the benefit of one routine can have a ripple effect on other unrelated functions. A god object is the object oriented analogue of failing to use subroutines in procedural programming languages, or of using far too many global variables to store state information. Whereas creating a god object is typically considered bad programming practice, this technique is occasionally used for tight programming environments (such as microcontrollers), where the performance increase and centralization of control are more important than maintainability and programming elegance.