---
title: "Recolher Hierarquia"
type: "refactoring-technique"
slug: "collapse-hierarchy"
url: "http://localhost:3000/pt-br/collapse-hierarchy.md"
category: "Dealing with Generalization"
description: "Problema: Você tem uma hierarquia de classes na qual uma subclasse é praticamente igual à sua superclasse. Solução: Mescle a subclasse e a superclasse."
---
# Recolher Hierarquia

> Problema: Você tem uma hierarquia de classes na qual uma subclasse é praticamente igual à sua superclasse. Solução: Mescle a subclasse e a superclasse.

## Problem

Você tem uma hierarquia de classes na qual uma subclasse é praticamente igual à sua superclasse.

## Solution

Mescle a subclasse e a superclasse.

## Why Refactor

Seu programa cresceu ao longo do tempo e uma subclasse e uma superclasse se tornaram praticamente iguais. Uma funcionalidade foi removida de uma subclasse, um método foi movido para a superclasse... e agora você tem duas classes parecidas.

## Benefits

* A complexidade do programa é reduzida. Menos classes significam menos coisas para manter organizadas na sua cabeça e menos partes móveis quebráveis com que se preocupar durante futuras mudanças no código.
* Navegar pelo seu código fica mais fácil quando os métodos são definidos em uma única classe. Você não precisa vasculhar toda a hierarquia para encontrar um método específico.

## How to Refactor

1. Selecione qual classe é mais fácil de remover: a superclasse ou a sua subclasse.
2. Use [Subir Campo](/pt-br/pull-up-field) e [Subir Método](/pt-br/pull-up-method) se você decidir se livrar da subclasse. Se optar por eliminar a superclasse, recorra a [Descer Campo](/pt-br/push-down-field) e [Descer Método](/pt-br/push-down-method).
3. Substitua todos os usos da classe que você está excluindo pela classe para a qual os campos e métodos serão migrados. Muitas vezes isso será código de criação de classes, tipagem de variáveis e parâmetros, e documentação em comentários de código.
4. Exclua a classe vazia.
## Relations

**Similar techniques**

- [Classe Inline](/pt-br/inline-class.md)

**Eliminates smells**

- [Classe Preguiçosa](/pt-br/smells/lazy-class.md)
- [Generalidade Especulativa](/pt-br/smells/speculative-generality.md)

