Menu
Coddy logo textTech

Métodos Getter y Setter

Parte de la sección Programación Orientada a Objetos del Journey de Java de Coddy — lección 11 de 87.

Los getters y setters son métodos que proporcionan un acceso controlado a los campos privados. Un getter recupera el valor de un campo, mientras que un setter lo modifica.

La convención de nomenclatura sigue un patrón estándar: el prefijo get o set seguido por el nombre del campo con su primera letra en mayúscula.

public class Product {
    private String name;
    private double price;
    
    // Getter para name
    public String getName() {
        return name;
    }
    
    // Setter para name
    public void setName(String name) {
        this.name = name;
    }
    
    // Getter para price
    public double getPrice() {
        return price;
    }
    
    // Setter con validación
    public void setPrice(double price) {
        if (price >= 0) {
            this.price = price;
        }
    }
}

El verdadero poder de los setters es la capacidad de añadir lógica de validación. En el ejemplo anterior, setPrice solo acepta valores no negativos, protegiendo al objeto de datos no válidos.

Para los campos boolean, los getters suelen utilizar el prefijo is en lugar de get:

private boolean active;

public boolean isActive() {
    return active;
}

También puedes crear campos de solo lectura proporcionando solo un getter, o campos de solo escritura proporcionando solo un setter. Esto te brinda un control detallado sobre cómo el código externo interactúa con los datos de tu objeto.

challenge icon

Desafío

Fácil

Vamos a construir un convertidor de Temperature que demuestre el poder de los getters y setters con lógica de validación.

Crearás dos archivos para organizar tu código:

  • Temperature.java: Define una clase Temperature que almacene un valor de temperatura en Celsius. La clase debe tener:
    • Un campo privado celsius (double)
    • Un campo privado valid (boolean) que rastree si la temperatura es físicamente posible
    • Un getter getCelsius() que devuelva el valor de celsius
    • Un setter setCelsius() que solo acepte valores iguales o superiores al cero absoluto (-273.15). Si el valor es válido, establece valid como true; de lo contrario, no cambies celsius y establece valid como false
    • Un getter isValid() para el campo booleano (recuerda: los getters booleanos usan el prefijo is)
    • Un getter getFahrenheit() que convierta y devuelva la temperatura en Fahrenheit usando la fórmula: (celsius * 9/5) + 32
  • Main.java: Crea un objeto Temperature, lee un valor celsius como entrada, usa el setter para establecerlo, luego imprime si la temperatura es válida y su equivalente en Fahrenheit. Formatea tu salida en dos líneas:
    • Valid: true o Valid: false
    • Fahrenheit: X.X (mostrando un decimal)

Recibirás una entrada: un valor double que representa una temperatura en Celsius.

Para formatear la salida de Fahrenheit a un decimal, puedes usar String.format("%.1f", value).

Hoja de referencia

Los getters y setters son métodos que proporcionan acceso controlado a campos privados. Un getter recupera el valor de un campo, mientras que un setter lo modifica.

La convención de nomenclatura sigue un patrón estándar: el prefijo get o set seguido del nombre del campo con su primera letra en mayúscula.

public class Product {
    private String name;
    private double price;
    
    // Getter para name
    public String getName() {
        return name;
    }
    
    // Setter para name
    public void setName(String name) {
        this.name = name;
    }
    
    // Getter para price
    public double getPrice() {
        return price;
    }
    
    // Setter con validación
    public void setPrice(double price) {
        if (price >= 0) {
            this.price = price;
        }
    }
}

Los setters pueden incluir lógica de validación para proteger los objetos de datos no válidos. En el ejemplo anterior, setPrice solo acepta valores no negativos.

Para los campos boolean, los getters utilizan el prefijo is en lugar de get:

private boolean active;

public boolean isActive() {
    return active;
}

Puedes crear campos de solo lectura proporcionando únicamente un getter, o campos de solo escritura proporcionando únicamente un setter.

Pruébalo tú mismo

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        double celsiusInput = scanner.nextDouble();
        
        // TODO: Crear un objeto Temperature
        
        // TODO: Usar el setter para establecer el valor en celsius
        
        // TODO: Imprimir si la temperatura es válida (formato: "Valid: true" o "Valid: false")
        
        // TODO: Imprimir el equivalente en Fahrenheit (formato: "Fahrenheit: X.X")
        // Sugerencia: Usar String.format("%.1f", value) para un lugar decimal
    }
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación Orientada a Objetos