Semestre 02, 2026
El mundo se percibe como una colección de objetos que interactúan para resolver problemas.
public double calcularArea(double base, double altura) {
return base * altura;
}
publicdoublecalcularAreabase, alturaUna clase es una plantilla o modelo que define las características y comportamientos comunes de un conjunto de objetos.
Una clase encapsulada se usa como una caja negra: interactúas con su interfaz pública sin conocer ni depender de su implementación interna.
public: accesible desde cualquier parte.private: solo accesible dentro de la clase.protected: más adelante, cuando veamos herencia.Los atributos suelen declararse privados, y se accede a ellos mediante métodos públicos: getters y setters.
Como los atributos son privados, exponemos métodos públicos para leerlos y modificarlos de forma controlada.
public class CuentaBancaria {
private double saldo;
// getter
public double getSaldo() {
return saldo;
}
// setter
public void setSaldo(double cantidad) {
saldo = cantidad;
}
}
El atributo saldo es privado: nadie puede leerlo ni modificarlo directamente desde fuera de la clase.
public class CuentaBancaria {
private double saldo;
// getter
public double getSaldo() {
return saldo;
}
// setter
public void setSaldo(double cantidad) {
saldo = cantidad;
}
}
El getter expone el valor de forma controlada: permite leer el saldo sin dar acceso directo al atributo.
public class CuentaBancaria {
private double saldo;
// getter
public double getSaldo() {
return saldo;
}
// setter
public void setSaldo(double cantidad) {
saldo = cantidad;
}
}
El setter permite modificar el saldo de forma controlada. Aquí podríamos validar (por ejemplo, rechazar valores negativos).
class Perro {
// atributos
private String nombre;
// getter
public String getNombre() {
return nombre;
}
// setter
public void setNombre(String nombre) {
this.nombre = nombre;
}
// metodos
public void ladrar() {
System.out.println("¡Guau!");
}
}
La clase Perro es la plantilla para crear objetos. Recorreremos sus partes: atributo, getter, setter y método.
class Perro {
// atributos
private String nombre;
// getter
public String getNombre() {
return nombre;
}
// setter
public void setNombre(String nombre) {
this.nombre = nombre;
}
// metodos
public void ladrar() {
System.out.println("¡Guau!");
}
}
El atributo nombre guarda el estado del objeto. Es privado (encapsulado) y de tipo String.
class Perro {
// atributos
private String nombre;
// getter
public String getNombre() {
return nombre;
}
// setter
public void setNombre(String nombre) {
this.nombre = nombre;
}
// metodos
public void ladrar() {
System.out.println("¡Guau!");
}
}
El getter devuelve el valor del atributo: permite leer el nombre desde fuera de la clase.
class Perro {
// atributos
private String nombre;
// getter
public String getNombre() {
return nombre;
}
// setter
public void setNombre(String nombre) {
this.nombre = nombre;
}
// metodos
public void ladrar() {
System.out.println("¡Guau!");
}
}
El setter asigna un nuevo valor al atributo. this.nombre es el atributo; nombre es el parámetro que recibe.
class Perro {
// atributos
private String nombre;
// getter
public String getNombre() {
return nombre;
}
// setter
public void setNombre(String nombre) {
this.nombre = nombre;
}
// metodos
public void ladrar() {
System.out.println("¡Guau!");
}
}
El método ladrar() es el comportamiento del objeto: imprime un ladrido. void significa que no devuelve nada.
Instanciar una clase es el proceso de crear un nuevo objeto en base a ella. Se utiliza la palabra reservada new.
Perro miPerro = new Perro();
miPerro.setNombre("Scooby Doo");
miPerro.ladrar();
Creamos un objeto Perro con new. miPerro es la referencia al objeto; aún no tiene nombre.
Perro miPerro = new Perro();
miPerro.setNombre("Scooby Doo");
miPerro.ladrar();
Usamos el setter para asignarle el nombre al perro después de crearlo.
Perro miPerro = new Perro();
miPerro.setNombre("Scooby Doo");
miPerro.ladrar();
Invocamos el método ladrar() sobre el objeto: imprime "¡Guau!" en consola.
CuentaBancaria
- saldo: double
cuentaJuan -> saldo = Q500.00
cuentaMaria -> saldo = Q1500.00
Con un solo plano (la clase) se construyen mil casas (los objetos), cada una con sus propios valores.
class Perro {
private String nombre;
private String raza;
private int edad;
public String getNombre() { return nombre; }
public void setNombre(String nombre) { this.nombre = nombre; }
public String getRaza() { return raza; }
public void setRaza(String raza) { this.raza = raza; }
public int getEdad() { return edad; }
public void setEdad(int edad) { this.edad = edad; }
}
Cada atributo necesita su getter y su setter. Tres atributos ya son seis métodos; con más atributos, más código repetitivo.
Si la raza no cambia, un setRaza() sobra: deja la puerta abierta a modificar algo que debería ser fijo.
public void setUp(String nombre, String raza, int edad) {
this.nombre = nombre;
this.raza = raza;
this.edad = edad;
}
Un solo método asigna todo de una vez. Pero setUp es público: se puede llamar en cualquier momento y volver a cambiar los valores. La puerta sigue abierta.
class Perro {
private String nombre;
private String raza;
private int edad;
// constructor
public Perro(String nombre, String raza, int edad) {
this.nombre = nombre;
this.raza = raza;
this.edad = edad;
}
}
El constructor se ejecuta automáticamente al crear el objeto y asigna todo de una vez. Lleva el mismo nombre que la clase y no tiene tipo de retorno. Sin setters, los valores quedan fijos: el objeto nace válido.
Perro miPerro = new Perro("Scooby Doo", "Gran Danés", 5);
Un solo paso: new ejecuta el constructor y el perro queda listo, con todos sus atributos y sin necesidad de setters.
Si un atributo se define al crear el objeto y no va a cambiar después, el constructor basta: no necesitas un setter.
+----------------------------+
| CuentaBancaria |
+----------------------------+
| - saldo: double |
| - numero: int |
+----------------------------+
| + depositar(monto): void |
| + retirar(monto): void |
+----------------------------+
- = privado).+ = público).