---
title: "Objeto deus"
type: "antipattern"
slug: "god-object"
url: "http://localhost:3000/pt-br/antipatterns/god-object.md"
---
# Objeto deus

Na [programação orientada a objetos](https://pt.wikipedia.org/wiki/Programação%5Forientada%5Fa%5Fobjetos "Programação orientada a objetos") , um **objeto deus** (do inglês **god object**), também conhecido como **objeto monstro**, é um [objeto](https://pt.wikipedia.org/wiki/Objeto%5F%28ciência%5Fda%5Fcomputação%29 "Objeto (ciência da computação)") que _sabe demais_ ou _faz demais_. O objeto deus é um exemplo de um [antipadrão](https://pt.wikipedia.org/wiki/Antipadrões%5Fde%5Fprojeto%5Fde%5Fsoftware "Antipadrões de projeto de software") em projetos de software.

Uma técnica de programação comum é [separar](https://pt.wikipedia.org/wiki/Separação%5Fde%5Fconceitos "Separação de conceitos") um problema grande em vários problemas menores (uma [estratégia de divisão e conquista](https://pt.wikipedia.org/wiki/Divisão%5Fe%5Fconquista "Divisão e conquista")) e criar soluções para cada um deles. Uma vez resolvidos os problemas menores, o grande problema é resolvido como um todo. Portanto, um objeto destinado a resolver um pequeno problema precisa saber apenas sobre si mesmo e há apenas um pequeno conjunto de problemas que um objeto precisa resolver: seus _próprios_ problemas.

Em contraste, um programa que emprega um objeto deus não segue essa abordagem. A maior parte da funcionalidade geral desse programa é codificada em um único objeto "onisciente", que mantém a maior parte das informações do programa inteiro e também fornece a maioria dos [métodos](https://pt.wikipedia.org/wiki/Sub-rotina "Sub-rotina") para manipular esses dados. Como esse objeto contém muitos dados e requer tantos métodos, seu papel no programa se torna semelhante a deus (onisciente e abrangente). Em vez dos vários objetos do programa se comunicarem diretamente entre si, todos acabam dependendo do objeto deus para a maioria de suas informações e interações. Como esse objeto é fortemente [acoplado](https://pt.wikipedia.org/wiki/Acoplamento%5F%28programação%5Fde%5Fcomputadores%29 "Acoplamento (programação de computadores)") a tantas outras partes do código, a manutenção se torna mais difícil do que seria em um projeto dividido de maneira mais uniforme. Por exemplo, alterações feitas no objeto deus para beneficiar uma certa rotina podem ter efeitos indesejados em outras rotinas não relacionadas.

Um objeto deus em programação orientada a objetos é análogo a não usar [sub-rotinas](https://pt.wikipedia.org/wiki/Sub-rotina "Sub-rotina") em [programação procedural](https://pt.wikipedia.org/wiki/Programação%5Fprocedural "Programação procedural"), ou a usar muitas [variáveis globais](https://pt.wikipedia.org/wiki/Variável%5Fglobal "Variável global") para armazenar informações de estado.

Enquanto a criação de um objeto deus é tipicamente considerada uma prática de programação incorreta, essa técnica é ocasionalmente usada in ambientes de programação rígidos (como [microcontroladores](https://pt.wikipedia.org/wiki/Microcontrolador "Microcontrolador")), onde o aumento de desempenho e centralização do controle são mais importantes do que a manutenção e a elegância de programação.

## Veja também

* [Código espaguete](https://pt.wikipedia.org/wiki/Código%5Fespaguete "Código espaguete") \- o padrão oposto

## Referências
