---
title: "Божественный объект"
type: "antipattern"
slug: "god-object"
url: "http://localhost:3000/ru/antipatterns/god-object.md"
---
# Божественный объект

**Боже́ственный объе́кт** ([англ.](https://ru.wikipedia.org/wiki/Английский%5Fязык "Английский язык") God object) — [антипаттерн](https://ru.wikipedia.org/wiki/Антипаттерн "Антипаттерн") [объектно-ориентированного программирования](https://ru.wikipedia.org/wiki/Объектно-ориентированное%5Fпрограммирование "Объектно-ориентированное программирование"), описывающий [объект](https://ru.wikipedia.org/wiki/Объект%5F%28программирование%29 "Объект (программирование)"), который хранит в себе «слишком много» или делает «слишком много».

Основная идея [модульного программирования](https://ru.wikipedia.org/wiki/Модульное%5Fпрограммирование "Модульное программирование") состоит в том, что большая задача делится на меньшие относительно независимые подзадачи (принцип «[разделяй и властвуй](https://ru.wikipedia.org/wiki/Разделяй%5Fи%5Fвластвуй%5F%28программирование%29 "Разделяй и властвуй (программирование)")»). В развитии модульного программирования — объектно-ориентированном программировании — этот принцип выражается в создании множества объектов, каждый из которых решает только свою собственную задачу.

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

Вместо того, чтобы общаться друг с другом непосредственно, другие объекты полагаются на божественный объект. Так как на божественный объект ссылается так много кода, его обслуживание (внесение изменений) становится сложным: велик риск сломать существующую функциональность.

Божественный объект — это объектно-ориентированный аналог отказа от использования [подпрограмм](https://ru.wikipedia.org/wiki/Подпрограмма "Подпрограмма") в [процедурном программировании](https://ru.wikipedia.org/wiki/Процедурное%5Fпрограммирование "Процедурное программирование") или использования слишком большого количества [глобальных переменных](https://ru.wikipedia.org/wiki/Глобальная%5Fпеременная "Глобальная переменная") для хранения информации о состоянии программы.

Хотя божественные объекты считаются плохой практикой программирования, поскольку вредят поддерживаемости кода, они могут быть полезны для работы при ограниченных ресурсах (в [микроконтроллерах](https://ru.wikipedia.org/wiki/Микроконтроллер "Микроконтроллер") или [мобильных телефонах](https://ru.wikipedia.org/wiki/Java%5FPlatform,%5FMicro%5FEdition "Java Platform, Micro Edition")), где производительность важнее, чем поддерживаемость кода.

## Литература

* _Riel, Arthur J._ Chapter 3: Topologies of Action-Oriented Vs. Object-Oriented Applications // [Object-Oriented Design Heuristics](https://archive.org/details/objectorientedde0000riel). — Boston, MA: [Addison-Wesley](https://ru.wikipedia.org/wiki/Addison-Wesley "Addison-Wesley"), 1996. — [ISBN 0-201-63385-X](https://ru.wikipedia.org/wiki/Special:BookSources/020163385X).. — «3.2: Do not create god classes/objects in your system. Be very suspicious of an abstraction whose name contains Driver, Manager, System, or Subsystem.».

## Ссылки

* [Anti-Patterns and Worst Practices – Monster Objects](http://www.lostechies.com/blogs/chrismissal/archive/2009/05/28/anti-patterns-and-worst-practices-monster-objects.aspx)
