> For the complete documentation index, see [llms.txt](https://educacion.gitbook.io/programacion/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://educacion.gitbook.io/programacion/ud3-introducion-a-programacion-orientada-a-obxectos/getters-y-setters.md).

# Getters y Setters

Os métodos que permite acceder e modificar os valores dos atributos son normalmente coñecidos como **getters** e **setters**.

Se queremos implementar algunha lóxica na entrada dos datos teremos que facelo nos métodos setters.

A idea de acceder aos atributos empregando os métodos definidos da clase permite o obxecto teña control sobre os seus datos, non accedendo directamente aos seus datos deste o exterior da clase. Isto recibe o nome de **encapsulación**:

A convención é:

* asignación: setters, comezan por set
* acceso: getters, comezan por get

Despois do ‘get’ ou do ‘set’ teremos o nome do atributo. No noso exemplo:

```java
public class CuentaBancaria {

    double saldo;
    String titular;

    public CuentaBancaria(String titular) {
        this.titular = titular;  // this para diferenciar
        this.saldo = 0.0;
    }

    double getSaldo() {
        return saldo;
    }

    void setSaldo(double saldo) {
        this.saldo = saldo;
    }

    String getTitular() {
        return titular;
    }

    void setTitular(String titular) {
        this.titular = titular;
    }
}
```

## Utilización dos setters no constructor para asignación de valores

Os `setters`<i class="fa-copy">:copy:</i> permiten realizar validacións dos datos antes de asignalos aos atributos. Se se empregan directamente os atributos dentro do construtor sen pasar polos `setters`<i class="fa-copy">:copy:</i>, pode que perdas a oportunidade de validar os datos. Por exemplo:

```java
class Persoa{
    int idade;

    public Persoa(int idade) {
        this.setIdade(idade); // Usamos o setter
    }
    
    // so modificamos a idade se recibimos unha idade maior que cero
    void setIdade(int idade){
        if(idade > 0){
            this.idade = idade;
        }
    }
    
    int getIdade(){
        return this.idade;
    }
}
```

Deste xeito, se o valor de `idade` non é válido, o `setter`<i class="fa-copy">:copy:</i> asegurará que nunca se asigne un valor incorrecto. Así tamén evitas repetir a mesma validación no construtor e en calquera outro punto onde se necesite establecer o valor.

Ademais, se no futuro precisas cambiar a lóxica ao establecer un atributo, só precisas actualizar o `setter`<i class="fa-copy">:copy:</i>, e o construtor seguirá funcionando correctamente. Isto axuda a manter o código máis limpo e flexible.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://educacion.gitbook.io/programacion/ud3-introducion-a-programacion-orientada-a-obxectos/getters-y-setters.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
