Бағдарламалауда "құдай объектісі" – әртүрлі типтерді біріктіріп, көптеген функцияларды қамтитын анти-үлгі. Бөліп-басқару арқылы кодты жақсартуға болады.
Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы 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.