Skip to main content

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

FieldTypeAccessNote
numeroCuentaStringprivateRead-only — exposed by getNumeroCuenta(), no setter provided
saldodoubleprivateModified only via depositar(), retirar(), or setSaldo()
tipoCuentaStringpublicAccount type label — not sensitive, can be assigned directly
transaccionesintprivateIncremented automatically on every successful deposit or withdrawal

Methods

SignatureReturnsDescription
getNumeroCuenta()StringRead-only getter — no corresponding setter exists
getSaldo()doubleReturns the current balance
setSaldo(double nuevoSaldo)voidSets balance directly when nuevoSaldo >= 0; rejects negative values
depositar(double cantidad)voidAdds cantidad to saldo and increments transacciones; requires cantidad > 0
retirar(double cantidad)voidSubtracts cantidad from saldo and increments transacciones; validates against overdraft
transferir(CuentaBancaria, double)voidCalls retirar() on this account and depositar() on the target; inherits both validations
mostrarDetalles()voidPrints account number, type, balance, and transaction count
getTransacciones()intReturns 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

Build docs developers (and LLMs) love