---
title: "Classe Grande"
type: "code-smell"
slug: "large-class"
url: "http://localhost:3000/pt-br/smells/large-class.md"
category: "Bloaters"
description: "Uma classe contém muitos campos/métodos/linhas de código."
---
# Classe Grande

> Uma classe contém muitos campos/métodos/linhas de código.

## Signs and Symptoms

Uma classe contém muitos campos/métodos/linhas de código.

## Reasons for the Problem

As classes geralmente começam pequenas. Mas, com o tempo, elas incham à medida que o programa cresce.

Assim como acontece com os métodos longos, os programadores costumam achar mentalmente menos cansativo colocar uma nova funcionalidade em uma classe existente do que criar uma nova classe para a funcionalidade.

## Payoff

* A refatoração dessas classes evita que os desenvolvedores precisem lembrar de um grande número de atributos de uma classe.
* Em muitos casos, dividir classes grandes em partes evita a duplicação de código e de funcionalidades.
## Relations

**Treated by**

- [Extrair Classe](/pt-br/extract-class.md)
- [Extrair Subclasse](/pt-br/extract-subclass.md)
- [Extrair Interface](/pt-br/extract-interface.md)
- [Duplicar Dados Observados](/pt-br/duplicate-observed-data.md)


## Detected by

- **sonar** `S2042` — Classes não devem ter linhas de código em excesso (https://rules.sonarsource.com/swift/RSPEC-2042/)
- **sonar** `S1448` — Classes não devem ter métodos em excesso (https://rules.sonarsource.com/java/RSPEC-1448/)
- **sonar** `S1820` — Classes não devem ter campos em excesso (https://rules.sonarsource.com/java/RSPEC-1820/)
- **pmd** `GodClass` — God Class (PMD design) (https://pmd.github.io/pmd/pmd_rules_java_design.html#godclass)
- **pmd** `TooManyMethods` — TooManyMethods (PMD design) (https://pmd.github.io/pmd/pmd_rules_java_design.html#toomanymethods)
- **pmd** `TooManyFields` — TooManyFields (PMD design) (https://pmd.github.io/pmd/pmd_rules_java_design.html#toomanyfields)
- **pylint** `R0902` — too-many-instance-attributes (https://pylint.readthedocs.io/en/latest/user_guide/messages/refactor/too-many-instance-attributes.html)
- **pylint** `R0904` — too-many-public-methods (https://pylint.readthedocs.io/en/latest/user_guide/messages/refactor/too-many-public-methods.html)
- **rubocop** `Metrics/ClassLength` — Metrics/ClassLength (https://docs.rubocop.org/rubocop/cops_metrics.html#metricsclasslength)
