---
title: "Encapsular Campo"
type: "refactoring-technique"
slug: "encapsulate-field"
url: "http://localhost:3000/pt-br/encapsulate-field.md"
category: "Organizing Data"
description: "Problema: Você tem um campo público. Solução: Torne o campo privado e crie métodos de acesso para ele."
languages: ["java", "csharp", "php", "typescript"]
---
# Encapsular Campo

> Problema: Você tem um campo público. Solução: Torne o campo privado e crie métodos de acesso para ele.

## Problem

Você tem um campo público.

## Solution

Torne o campo privado e crie métodos de acesso para ele.

## Why Refactor

Um dos pilares da programação orientada a objetos é o _Encapsulamento_, a capacidade de ocultar os dados de um objeto. Caso contrário, todos os objetos seriam públicos e outros objetos poderiam obter e modificar os dados do seu objeto sem qualquer controle! Os dados ficam separados dos comportamentos associados a eles, a modularidade das seções do programa é comprometida e a manutenção se torna complicada.

## Benefits

* Se os dados e o comportamento de um componente estão estreitamente inter-relacionados e ficam no mesmo lugar no código, é muito mais fácil manter e desenvolver esse componente.
* Você também pode realizar operações complexas relacionadas ao acesso aos campos do objeto.

## How to Refactor

1. Crie um getter e um setter para o campo.
2. Encontre todas as invocações do campo. Substitua a obtenção do valor do campo pelo getter e substitua a atribuição de novos valores ao campo pelo setter.
3. Depois que todas as invocações do campo tiverem sido substituídas, torne o campo privado.

#### Próximos Passos

_Encapsular Campo_ é apenas o primeiro passo para aproximar os dados e os comportamentos que envolvem esses dados. Depois de criar métodos simples para acessar os campos, você deve revisar os lugares onde esses métodos são chamados. É bem possível que o código nessas áreas fique mais apropriado nos métodos de acesso.
## Relations

**Similar techniques**

- [Autoencapsular Campo](/pt-br/self-encapsulate-field.md)

**Eliminates smells**

- [Classe de Dados](/pt-br/smells/data-class.md)

## Code Examples

### java

```java
// Before
class Person {
  public String name;
}

// After
class Person {
  private String name;

  public String getName() {
    return name;
  }
  public void setName(String arg) {
    name = arg;
  }
}
```

### csharp

```csharp
// Before
class Person 
{
  public string name;
}

// After
class Person 
{
  private string name;

  public string Name
  {
    get { return name; }
    set { name = value; }
  }
}
```

### php

```php
// Before
public $name;

// After
private $name;

public getName() {
  return $this->name;
}

public setName($arg) {
  $this->name = $arg;
}
```

### typescript

```typescript
// Before
class Person {
  name: string;
}

// After
class Person {
  private _name: string;

  get name() {
    return this._name;
  }
  setName(arg: string): void {
    this._name = arg;
  }
}
```

