---
title: "Clase Grande"
type: "code-smell"
slug: "large-class"
url: "http://localhost:3000/es/smells/large-class.md"
category: "Bloaters"
description: "Una clase contiene muchos campos/métodos/líneas de código."
---
# Clase Grande

> Una clase contiene muchos campos/métodos/líneas de código.

## Signs and Symptoms

Una clase contiene muchos campos/métodos/líneas de código.

## Reasons for the Problem

Las clases suelen empezar siendo pequeñas. Pero, con el tiempo, se van hinchando a medida que el programa crece.

Como también ocurre con los métodos largos, a los programadores les suele resultar mentalmente menos costoso colocar una nueva funcionalidad en una clase existente que crear una nueva clase para esa funcionalidad.

## Payoff

* Refactorizar estas clases evita que los desarrolladores tengan que recordar una gran cantidad de atributos de una clase.
* En muchos casos, dividir las clases grandes en partes evita la duplicación de código y de funcionalidad.
## Relations

**Treated by**

- [Extraer clase](/es/extract-class.md)
- [Extraer subclase](/es/extract-subclass.md)
- [Extraer interfaz](/es/extract-interface.md)
- [Duplicar datos observados](/es/duplicate-observed-data.md)


## Detected by

- **sonar** `S2042` — Classes should not have too many lines of code (https://rules.sonarsource.com/swift/RSPEC-2042/)
- **sonar** `S1448` — Classes should not have too many methods (https://rules.sonarsource.com/java/RSPEC-1448/)
- **sonar** `S1820` — Classes should not have too many fields (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)
