---
title: "Encapsular Campo"
type: "refactoring-technique"
slug: "encapsulate-field"
url: "http://localhost:3000/es/encapsulate-field.md"
category: "Organizing Data"
description: "Problema: Tienes un campo público. Solución: Haz que el campo sea privado y crea métodos de acceso para él."
languages: ["java", "csharp", "php", "typescript"]
---
# Encapsular Campo

> Problema: Tienes un campo público. Solución: Haz que el campo sea privado y crea métodos de acceso para él.

## Problem

Tienes un campo público.

## Solution

Haz que el campo sea privado y crea métodos de acceso para él.

## Why Refactor

Uno de los pilares de la programación orientada a objetos es la _Encapsulación_, la capacidad de ocultar los datos de un objeto. De lo contrario, todos los objetos serían públicos y otros objetos podrían obtener y modificar los datos de tu objeto sin ningún tipo de control. Los datos quedan separados de los comportamientos asociados a ellos, se compromete la modularidad de las secciones del programa y el mantenimiento se complica.

## Benefits

* Si los datos y el comportamiento de un componente están estrechamente interrelacionados y se encuentran en el mismo lugar del código, te resultará mucho más fácil mantener y desarrollar ese componente.
* También puedes realizar operaciones complejas relacionadas con el acceso a los campos del objeto.

## How to Refactor

1. Crea un getter y un setter para el campo.
2. Encuentra todas las invocaciones del campo. Sustituye la obtención del valor del campo por el getter, y sustituye la asignación de nuevos valores al campo por el setter.
3. Una vez que se hayan sustituido todas las invocaciones del campo, haz que el campo sea privado.

#### Siguientes pasos

_Encapsular Campo_ es solo el primer paso para acercar los datos y los comportamientos que los involucran. Después de crear métodos sencillos para acceder a los campos, deberías revisar los lugares donde se llama a estos métodos. Es muy posible que el código de esas zonas quedaría más apropiado dentro de los métodos de acceso.
## Relations

**Similar techniques**

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

**Eliminates smells**

- [Clase de datos](/es/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;
  }
}
```

