---
title: "Substituir Valor de Dado por Objeto"
type: "refactoring-technique"
slug: "replace-data-value-with-object"
url: "http://localhost:3000/pt-br/replace-data-value-with-object.md"
category: "Organizing Data"
description: "Problema: uma classe (ou grupo de classes) contém um campo de dados. O campo tem seu próprio comportamento e dados associados. Solução: crie uma nova classe, coloque o campo antigo e seu comportamento na classe e armazene o objeto dessa classe na classe original."
---
# Substituir Valor de Dado por Objeto

> Problema: uma classe (ou grupo de classes) contém um campo de dados. O campo tem seu próprio comportamento e dados associados. Solução: crie uma nova classe, coloque o campo antigo e seu comportamento na classe e armazene o objeto dessa classe na classe original.

## Problem

Uma classe (ou grupo de classes) contém um campo de dados. O campo tem seu próprio comportamento e dados associados.

## Solution

Crie uma nova classe, coloque o campo antigo e seu comportamento na classe e armazene o objeto dessa classe na classe original.

## Why Refactor

Esta refatoração é, basicamente, um caso especial de [Extrair Classe](/pt-br/extract-class). O que a torna diferente é o motivo da refatoração.

Em [Extrair Classe](/pt-br/extract-class), temos uma única classe responsável por coisas diferentes e queremos dividir suas responsabilidades.

Na substituição de um valor de dado por um objeto, temos um campo primitivo (número, string etc.) que deixou de ser tão simples devido ao crescimento do programa e agora tem dados e comportamentos associados. Por um lado, não há nada de assustador nesses campos em si. No entanto, essa família de campos e comportamentos pode estar presente em várias classes simultaneamente, criando código duplicado.

Portanto, para tudo isso, criamos uma nova classe e movemos para ela tanto o campo quanto os dados e comportamentos relacionados.

## Benefits

* Melhora a coesão dentro das classes. Os dados e os comportamentos relevantes ficam dentro de uma única classe.

## How to Refactor

Antes de começar a refatoração, verifique se há referências diretas ao campo de dentro da classe. Se houver, use [Autoencapsular Campo](/pt-br/self-encapsulate-field) para escondê-lo na classe original.

1. Crie uma nova classe e copie para ela o seu campo e o getter correspondente. Além disso, crie um construtor que aceite o valor simples do campo. Essa classe não terá um setter, pois cada novo valor de campo enviado à classe original criará um novo objeto de valor.
2. Na classe original, altere o tipo do campo para a nova classe.
3. No getter da classe original, invoque o getter do objeto associado.
4. No setter, crie um novo objeto de valor. Talvez você também precise criar um novo objeto no construtor se valores iniciais tiverem sido definidos ali para o campo anteriormente.
## Relations

**Similar techniques**

- [Extrair Classe](/pt-br/extract-class.md)
- [Introduzir Objeto de Parâmetro](/pt-br/introduce-parameter-object.md)
- [Substituir Array por Objeto](/pt-br/replace-array-with-object.md)
- [Substituir Método por Objeto de Método](/pt-br/replace-method-with-method-object.md)

**Eliminates smells**

- [Código Duplicado](/pt-br/smells/duplicate-code.md)

