---
title: "Classe trop volumineuse"
type: "code-smell"
slug: "large-class"
url: "http://localhost:3000/fr/smells/large-class.md"
category: "Bloaters"
description: "Une classe contient de nombreux champs, méthodes ou lignes de code."
---
# Classe trop volumineuse

> Une classe contient de nombreux champs, méthodes ou lignes de code.

## Signs and Symptoms

Une classe contient de nombreux champs, méthodes ou lignes de code.

## Reasons for the Problem

Les classes commencent généralement petites. Mais au fil du temps, elles s'alourdissent à mesure que le programme grandit.

Comme c'est aussi le cas avec les méthodes trop longues, les programmeurs trouvent en général mentalement moins coûteux de placer une nouvelle fonctionnalité dans une classe existante plutôt que de créer une nouvelle classe pour cette fonctionnalité.

## Payoff

* Le remaniement de ces classes évite aux développeurs d'avoir à mémoriser un grand nombre d'attributs pour une classe.
* Dans bien des cas, scinder de grandes classes en parties évite la duplication de code et de fonctionnalités.
## Relations

**Treated by**

- [Extraire une classe](/fr/extract-class.md)
- [Extraire une sous-classe](/fr/extract-subclass.md)
- [Extraire l'interface](/fr/extract-interface.md)
- [Dupliquer les données observées](/fr/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)
