Documentation Index
Fetch the complete documentation index at: https://mintlify.com/Jhaymayleth/unidad2_java/llms.txt
Use this file to discover all available pages before exploring further.
CuentaBancaria models a bank account where sensitive data — the account number and the balance — is strictly private and all mutations go through validated public methods. No external code can modify numeroCuenta at all (no setter exists), and every deposit, withdrawal, or transfer is checked before the internal saldo changes. Only tipoCuenta, which carries no financial risk, is left public for direct access.
Field Reference
| Field | Type | Access | Note |
|---|
numeroCuenta | String | private | Read-only — exposed by getNumeroCuenta(), no setter provided |
saldo | double | private | Modified only via depositar(), retirar(), or setSaldo() |
tipoCuenta | String | public | Account type label — not sensitive, can be assigned directly |
transacciones | int | private | Incremented automatically on every successful deposit or withdrawal |
Methods
| Signature | Returns | Description |
|---|
getNumeroCuenta() | String | Read-only getter — no corresponding setter exists |
getSaldo() | double | Returns the current balance |
setSaldo(double nuevoSaldo) | void | Sets balance directly when nuevoSaldo >= 0; rejects negative values |
depositar(double cantidad) | void | Adds cantidad to saldo and increments transacciones; requires cantidad > 0 |
retirar(double cantidad) | void | Subtracts cantidad from saldo and increments transacciones; validates against overdraft |
transferir(CuentaBancaria, double) | void | Calls retirar() on this account and depositar() on the target; inherits both validations |
mostrarDetalles() | void | Prints account number, type, balance, and transaction count |
getTransacciones() | int | Returns the total number of completed transactions |
Full Source — CuentaBancaria.java
package Taller7.ejercicio_2;
/**
* Clase que representa una cuenta bancaria
* Demuestra el uso correcto de modificadores public y private
* para proteger datos sensibles
*/
public class CuentaBancaria {
// ✅ PRIVADO: Datos sensibles protegidos
// numeroCuenta es de solo lectura (sin setter)
private String numeroCuenta;
// ✅ PRIVADO: Saldo protegido con getter y setter
private double saldo;
// ✅ PÚBLICO: Tipo de cuenta (información no sensible)
public String tipoCuenta;
// Otros atributos privados útiles
private int transacciones;
/**
* Constructor público de CuentaBancaria
* @param numeroCuenta Número único de la cuenta
* @param saldoInicial Saldo inicial de la cuenta
* @param tipoCuenta Tipo de cuenta (Ahorros, Corriente, etc.)
*/
public CuentaBancaria(String numeroCuenta, double saldoInicial, String tipoCuenta) {
this.numeroCuenta = numeroCuenta;
// Validar saldo inicial
if (saldoInicial >= 0) {
this.saldo = saldoInicial;
} else {
this.saldo = 0;
System.out.println("⚠️ Saldo inicial inválido. Se estableció en 0.");
}
this.tipoCuenta = tipoCuenta;
this.transacciones = 0;
}
/**
* Getter público para numeroCuenta (solo lectura)
* ✅ El número de cuenta NO puede modificarse
* @return El número de cuenta
*/
public String getNumeroCuenta() {
return numeroCuenta;
}
/**
* Getter público para obtener el saldo
* @return El saldo actual de la cuenta
*/
public double getSaldo() {
return saldo;
}
/**
* Setter público para establecer el saldo
* ✅ Incluye validación: el saldo debe ser >= 0
* @param nuevoSaldo El nuevo saldo
*/
public void setSaldo(double nuevoSaldo) {
if (nuevoSaldo >= 0) {
this.saldo = nuevoSaldo;
System.out.println("✅ Saldo actualizado: $" + String.format("%.2f", nuevoSaldo));
} else {
System.out.println("❌ Error: El saldo no puede ser negativo.");
}
}
/**
* Método público para realizar un depósito
* @param cantidad La cantidad a depositar
*/
public void depositar(double cantidad) {
if (cantidad > 0) {
saldo += cantidad;
transacciones++;
System.out.println("✅ Depósito realizado: $" + String.format("%.2f", cantidad));
System.out.println(" Saldo actual: $" + String.format("%.2f", saldo));
} else {
System.out.println("❌ Error: La cantidad debe ser mayor a 0.");
}
}
/**
* Método público para realizar un retiro
* @param cantidad La cantidad a retirar
*/
public void retirar(double cantidad) {
if (cantidad > 0 && cantidad <= saldo) {
saldo -= cantidad;
transacciones++;
System.out.println("✅ Retiro realizado: $" + String.format("%.2f", cantidad));
System.out.println(" Saldo actual: $" + String.format("%.2f", saldo));
} else if (cantidad > saldo) {
System.out.println("❌ Error: Fondos insuficientes. Saldo: $" +
String.format("%.2f", saldo));
} else {
System.out.println("❌ Error: La cantidad debe ser mayor a 0.");
}
}
/**
* Método público para transferir dinero a otra cuenta
* @param otraCuenta La cuenta receptora
* @param cantidad La cantidad a transferir
*/
public void transferir(CuentaBancaria otraCuenta, double cantidad) {
if (cantidad > 0 && cantidad <= saldo) {
this.retirar(cantidad);
otraCuenta.depositar(cantidad);
System.out.println("✅ Transferencia completada de " + this.numeroCuenta +
" a " + otraCuenta.numeroCuenta);
} else {
System.out.println("❌ Error: Transferencia no válida.");
}
}
/**
* Método público para mostrar los detalles de la cuenta
*/
public void mostrarDetalles() {
System.out.println("\n--- Detalles de la Cuenta Bancaria ---");
System.out.println("Número de Cuenta: " + numeroCuenta);
System.out.println("Tipo de Cuenta: " + tipoCuenta);
System.out.println("Saldo: $" + String.format("%.2f", saldo));
System.out.println("Total de Transacciones: " + transacciones);
}
/**
* Método público para obtener el número de transacciones
* @return El número de transacciones realizadas
*/
public int getTransacciones() {
return transacciones;
}
}
Usage Example — PruebaEjercicio2.java
// Create two accounts
CuentaBancaria cuenta1 = new CuentaBancaria("001-2024-12345", 5000.0, "Ahorros");
CuentaBancaria cuenta2 = new CuentaBancaria("001-2024-67890", 3000.0, "Corriente");
// Public field: read and write directly
System.out.println(cuenta1.tipoCuenta); // Ahorros
cuenta1.tipoCuenta = "Ahorros Premium"; // direct assignment
// Private numeroCuenta: getter only — no setter exists
System.out.println(cuenta1.getNumeroCuenta()); // 001-2024-12345
// cuenta1.numeroCuenta = "..."; // ❌ compile error — private access
// Private saldo: getter + validated setter
double saldo1 = cuenta1.getSaldo(); // 5000.0
cuenta1.setSaldo(6000.0); // ✅ updated
cuenta1.setSaldo(-1000.0); // ❌ rejected — negative value
// Banking operations
cuenta1.depositar(1500.0); // ✅ saldo: 7500.00
cuenta1.retirar(2000.0); // ✅ saldo: 5500.00
cuenta1.retirar(10000.0); // ❌ Fondos insuficientes
cuenta2.depositar(500.0); // ✅ saldo: 3500.00
// Peer-to-peer transfer
cuenta1.transferir(cuenta2, 1000.0); // retirar from cuenta1, depositar to cuenta2
// Inspect state
cuenta1.mostrarDetalles();
cuenta2.mostrarDetalles();
numeroCuenta intentionally has no setter. Once an account is created its number is immutable — any attempt to write cuenta1.numeroCuenta = "..." directly will cause a compile-time error because the field is private, and there is no setNumeroCuenta() method to call. This is the read-only getter pattern: expose data for reading without ever allowing external mutation.
Compile & Run
javac Taller7/ejercicio_2/CuentaBancaria.java Taller7/ejercicio_2/PruebaEjercicio2.java
java Taller7.ejercicio_2.PruebaEjercicio2