Resumen - Gestor de cuentas bancarias
Parte de la sección Programación Orientada a Objetos del Journey de Java de Coddy — lección 14 de 87.
Desafío
FácilVamos a construir un sistema de BankAccount completo que reúna todo lo que has aprendido sobre encapsulación, modificadores de acceso, getters, setters y la palabra clave final.
Crearás dos archivos para organizar tu código:
BankAccount.java: Diseña una clase de cuenta bancaria segura que proteja los datos financieros sensibles:- Un número de cuenta inmutable que nunca puede cambiar una vez creada la cuenta
- Un saldo privado que comienza en 0.0 y solo puede modificarse a través de métodos controlados
- Un nombre de propietario privado que se puede recuperar pero no cambiar directamente
- Un constructor que recibe el número de cuenta y el nombre del propietario
- Un getter para el número de cuenta
- Un getter para el nombre del propietario
- Un getter para el saldo
- Un método
deposit(double amount)que añade al saldo solo si el monto es positivo, devolviendotrueen caso de éxito ofalsesi es rechazado - Un método
withdraw(double amount)que resta del saldo solo si el monto es positivo Y existen fondos suficientes, devolviendotrueen caso de éxito ofalsesi es rechazado - Un método
getAccountSummary()que devuelve:"Account [accountNumber] | Owner: [ownerName] | Balance: $[balance]"(saldo formateado a 2 decimales)
Main.java: Crea un BankAccount y realiza una serie de transacciones. Recibirás cinco entradas: número de cuenta, nombre del propietario, monto de depósito, primer monto de retiro y segundo monto de retiro. Imprime cuatro líneas:- El resultado del depósito:
"Deposit: true"o"Deposit: false" - El resultado del primer retiro:
"Withdraw 1: true"o"Withdraw 1: false" - El resultado del segundo retiro:
"Withdraw 2: true"o"Withdraw 2: false" - El resumen final de la cuenta
- El resultado del depósito:
Recibirás cinco entradas en orden: accountNumber (String), ownerName (String), depositAmount (double), withdrawAmount1 (double), withdrawAmount2 (double).
Para formatear el saldo a 2 decimales, puedes usar String.format("%.2f", balance).
Pruébalo tú mismo
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Leer entradas
String accountNumber = scanner.nextLine();
String ownerName = scanner.nextLine();
double depositAmount = scanner.nextDouble();
double withdrawAmount1 = scanner.nextDouble();
double withdrawAmount2 = scanner.nextDouble();
// TODO: Crear un objeto BankAccount con accountNumber y ownerName
// TODO: Realizar el depósito e imprimir el resultado como "Deposit: true" o "Deposit: false"
// TODO: Realizar el primer retiro e imprimir el resultado como "Withdraw 1: true" o "Withdraw 1: false"
// TODO: Realizar el segundo retiro e imprimir el resultado como "Withdraw 2: true" o "Withdraw 2: false"
// TODO: Imprimir el resumen de la cuenta
}
}
Todas las lecciones de Programación Orientada a Objetos
1Fundamentos de OOP
Archivos externosIntroducción a la OOPClases vs. ObjetosLa palabra clave thisMétodosCampos (Atributos)Método constructorSobrecarga de constructoresResumen - Calculadora simple4Herencia
Herencia básica (extends)La palabra clave superSobrescritura de métodos (@Override)Encadenamiento de constructoresLa clase ObjectHerencia simple y multinivelPor qué no hay herencia múltiple de clasesResumen - Jerarquía de empleados7Métodos especiales y la clase Object
Método toString()equals() y hashCode()Método clone()compareTo() y ComparableInterfaz ComparatorResumen - Ordenamiento personalizado2Modificadores de acceso y encapsulamiento
Visión general de los niveles de accesoMétodos Getter y SetterOcultamiento de informaciónLa palabra clave finalResumen - Gestor de cuentas bancarias5Polimorfismo
Fundamentos de sobrecarga de métodosSobrescritura de métodos (tiempo de ejecución)Upcasting y DowncastingEl operador instanceofClases y métodos abstractosResumen - Calculadora de figuras8Conceptos avanzados de POO
Composición vs. HerenciaAgregación vs. ComposiciónClases internas, anidadas y anónimasEnums y métodos de EnumRecords (Java 16+)Clases selladas (Java 17+)11Patrones de diseño - Parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón BuilderPatrón ObserverPatrón Strategy3Propiedades de clase y miembros estáticos
Variables de instancia vs. estáticasMétodos estáticosBloques estáticosConstantes (static final)Repaso - Contador y utilidad6Interfaces y Clases Abstractas
Introducción a las InterfacesImplementación de InterfacesImplementación de Múltiples InterfacesMétodos Default y Static en InterfacesClases Abstractas vs InterfacesInterfaces FuncionalesResumen - Sistema de Pagos9Genéricos
Introducción a los genéricosClases genéricasMétodos genéricosParámetros de tipo delimitadosComodines (?, extends, super)Resumen - Contenedor genérico12Patrones de diseño Parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón CompositePatrón Iterator