Ejercicio de Java POO en NetBeans sobre herencia de una cuenta bancaria [SOLUCIONADO]

En el mundo de la programación orientada a objetos, el manejo de la herencia es un pilar fundamental, especialmente en lenguajes robustos como Java. NetBeans, como entorno de desarrollo integrado (IDE), es una herramienta sumamente útil para desplegar las capacidades de Java en el campo de la POO (Programación Orientada a Objetos). Tomemos como ejemplo un caso práctico: el desarrollo de una **estructura de clases para gestionar cuentas bancarias** y sus diversas especializaciones mediante el concepto de herencia.

Al involucrar el concepto de herencia en una aplicación bancaria, establecemos una jerarquía de clases que refleja la relación entre una **cuenta bancaria general** y sus subtipos, como podrían ser la cuenta de ahorro y la cuenta corriente. Estructurar adecuadamente este ejercicio implica no solo pensar en las funcionalidades individuales de cada clase sino también en las características compartidas que podemos abstraer.

### Estructura de Clase Base: Cuenta Bancaria

Para comenzar, definamos la clase CuentaBancaria como nuestra clase padre. Esta clase incluirá los atributos y métodos comunes a todos los tipos de cuentas que queramos implementar. Estos son, por ejemplo, el saldo, la identificación de la cuenta y las operaciones básicas como depositar y retirar dinero.

public class CuentaBancaria {
    protected String id;
    protected double saldo;

    public CuentaBancaria(String id, double saldoInicial) {
        this.id = id;
        this.saldo = saldoInicial;
    }

    public void depositar(double cantidad) {
        if(cantidad > 0) {
            saldo += cantidad;
        } else {
            System.out.println("Cantidad a depositar debe ser positiva");
        }
    }

    public void retirar(double cantidad) {
        if(cantidad <= saldo) {
            saldo -= cantidad;
        } else {
            System.out.println("Fondos insuficientes");
        }
    }

    public double consultarSaldo() {
        return saldo;
    }

    public String getId() {
        return id;
    }
}

Esta clase sirve como punto de partida y garantiza que cualquier tipo de cuenta bancaria heredada contará con estos elementos básicos. Notarás que he utilizado modificadores de acceso como `protected`, lo que significa que estos atributos serán accesibles dentro de la misma clase y por aquellas que sean subclases.

### Especialización de Clases: Cuenta de Ahorros y Cuenta Corriente

Ahora, desarrollemos dos clases que extienden la funcionalidad de CuentaBancaria: CuentaAhorro y CuentaCorriente.

#### Cuenta de Ahorros

La CuentaAhorro podría incorporar un **interés anual** como característica distintiva. Así, además de las operaciones heredadas de CuentaBancaria, esta clase podría tener un método para aplicar el interés al saldo.

public class CuentaAhorro extends CuentaBancaria {
    private double tasaInteresAnual;

    public CuentaAhorro(String id, double saldoInicial, double tasaInteresAnual) {
        super(id, saldoInicial);
        this.tasaInteresAnual = tasaInteresAnual;
    }

    public void aplicarInteres() {
        double interes = saldo * (tasaInteresAnual / 100);
        depositar(interes);
    }
}

#### Cuenta Corriente

Por otro lado, una CuentaCorriente podría incluir la capacidad de establecer un **descubierto** permitido. Esto implicaría modificar la implementación del método retirar para tener en cuenta este nuevo feature.

public class CuntaCorriente extends CuentaBancaria {
    private double descubiertoPermitido;

    public CuentaCorriente(String id, double saldoInicial, double descubierto) {
        super(id, saldoInicial);
        this.descubiertoPermitido = descubierto;
    }

    @Override
    public void retirar(double cantidad) {
        if(cantidad <= (saldo + descubiertoPermitido)) {
            saldo -= cantidad;
        } else {
            System.out.println("Fondos insuficientes y descubierto excedido");
        }
    }
}

### Implementación de la Aplicación Bancaria

Con las clases ya definidas, es momento de **construir el núcleo de nuestra aplicación bancaria en Java**., añadimos métodos que permitan manejar clientes y sus cuentas bancarias, y realizamos operaciones típicas como abrir cuentas, hacer transferencias, entre otros.

Es relevante mencionar que NetBeans facilita toda esta tarea proporcionando herramientas de autocompletado, resaltado sintáctico y otras funciones que aceleran y facilitan el desarrollo del código Java.

### Aspectos Relevantes de Java y NetBeans

Al diseñar este tipo de ejercicios es importante hacer uso de conceptos clave de la **POO en Java**, tales como:

- **Encapsulamiento:** Utilizamos modificadores de acceso para proteger y ocultar la información dentro de nuestra clase y mostrar solo lo necesario a través de métodos públicos.
- **Abstracción:** Hemos creado clases que no solo contemplan características y comportamientos específicos sino que también abstraen los elementos comunes a través de la herencia.
- **Polimorfismo:** Gracias a la sobreescritura de métodos, como hemos visto en el método retirar de la CuentaCorriente, podemos definir comportamientos específicos en clases derivadas manteniendo la misma interfaz.

NetBeans, como plataforma de desarrollo, apoya la implementación de estos principios con características como refactoring, herramientas de debugging, y manejo integrado de sistemas de control de versiones como Git. Estos elementos son indispensables para mantener un **código organizado, eficiente y òŗáctico** en proyectos reales.

### Buenas Prácticas en Java y NetBeans

No olvides que seguir buenas prácticas es fundamental para mantener un código claro y mantenible. Entre ellas, documentar adecuadamente tu código mediante comentarios y JavaDoc te ayudará a ti y a otros desarrolladores a comprender rápidamente las funciones y propósitos de las diferentes clases y métodos.

Al programar en NetBeans, asegúrate también de configurar y usar la **herramienta de formateo automático de código** para mantener estilos de código consistentes, lo cual es vital en un entorno colaborativo y contribuye a la legibilidad del código.

Para concluir, desarrollar un sistema bancario utilizando **herencia en Java** con Netbeans implica más que la simple construcción de una jerarquía de clases. Es una oportunidad para ejercitar el pensamiento abstracto, organizar el código de forma eficiente y aplicar los principios de la POO de forma práctica y realista. Este tipo de ejercicio es una excelente manera de consolidar tu conocimiento en Java y prepararte para enfrentar desafíos de programación más complejos en el futuro.

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad