Propuesta solución (parcial)

Anuncio
Esta es la solución propuesta por un estudiante, simplificada ligermente (en la solución original los
atributos de la clase Cuenta eran privados, así como sugieren los principios de ocultamiento de
información y encapsulación de la OO; para evitar excesivo código, se han declarados como protegidos
para que las clases derivadas puedan acceder a ellos, sin la necesidad de emplear métodos consultores).
Como ejercicio para el Contrato de Aprendizaje, se sugiere:
- definir la clase EjercicioBanco en la cual en el main crear un objeto miBanco de la clase Banco, tres
objetos de las clases CuentaCorriente
y/o Cuenta Deposito (en función de lo que decida el usuario) con los cuales rellenar el atributo secuencia
de
miBanco;
- simular las operaciones de ingresarDinero y sacarDinero por cada una de las cuentas del banco;
- visualizar en pantalla el número de cuentas corrientes del banco y el saldo de ellas (véase enunciado
ejercicio)
---------------------clase ExcepcionAlSacar.java
public class ExcepcionAlSacar extends Exception {
public ExcepcionAlSacar(String mensaje) {
super(mensaje);
}
}
---------------------clase Cuenta.java
public abstract class Cuenta {
protected String nombreCliente;
protected int numeroCuenta;
protected double saldo;
public Cuenta(String nombreCliente,int numeroCuenta,double saldo){
this.nombreCliente=nombreCliente;
this.saldo=saldo;
this.numeroCuenta=numeroCuenta;
}
public abstract void sacarDinero(double cantidad) throws ExcepcionAlSacar;
public void ingresarDinero(double cantidad){
saldo+=cantidad;
}
public String toString(){
String aux="Nombre cuenta: "+nombreCliente+" numero cuenta: "+numeroCuenta+" saldo: "+saldo;
return aux;
}
public double returnSaldo () {return saldo;}
public abstract String returnTipoCuenta();
}
----------------------
clase CuentaCorriente.java
public class CuentaCorriente extends Cuenta {
protected double limiteEnRojo; // valor negativo
public CuentaCorriente(String nombreCliente,int numeroCuenta,double saldo,double limite){
super(nombreCliente,numeroCuenta,saldo);
limiteEnRojo=limite;
}
public void sacarDinero(double cantidad) throws ExcepcionAlSacar{
if (saldo-cantidad<limiteEnRojo) throw new ExcepcionAlSacar("estas en numeros rojos y has
llegado al limite de tu cuenta corriente");
saldo-=cantidad;
}
public String toString(){
return super.toString()+"limite max en rojo:"+limiteEnRojo;
}
public String returnTipoCuenta() {
return "cuenta corriente";
}
}
---------------------clase CuentaDeposito.java
public class CuentaDeposito extends Cuenta {
public CuentaDeposito(String nombreCliente,int numero Cuenta,double saldo){
super(nombreCliente,numeroCuenta,saldo);
}
public void sacarDinero(double cantidad) throws ExcepcionAlSacar{
if (saldo-cantidad<0) throw new ExcepcionAlSacar("No puedes estar en numeros rojos, es decir, con
saldo menos que cero");
saldo-=cantidad;
}
public String returnTipoCuenta(){
return "cuenta deposito";
}
}
---------------------clase Banco.java
public class Banco{
static final int NUMAX=50;
Cuenta secuencia[];
private int numCuentas;
public Banco(){
secuencia=new Cuenta[NUMAX];
numCuentas=0;
}
public void anyadirCuenta(Cuenta c) {
if (numCuentas==NUMAX) System.out.println("El banco tiene el max num de 50 cuentas");
else secuencia[numCuentas++]=c;
}
public double saldoCuentasCorrientes(){
double aux=0;
for(int i=0;i<numCuentas;i++){
if (secuencia[i] instanceof CuentaCorriente) aux+=secuencia[i].saldo;
}
return aux;
}
public int numeroCuentasCorrientes() {
int num=0;
for(int i=0;i<numCuentas;i++){
if (secuencia[i] instanceof CuentaCorriente) num++;
}
return num;
}
}
---------------------------------------------------------------otra posibilidad por el método anyadirCuenta:
public void anyadirCuenta(Cuenta c) {
if (numCuentas==secuencia.length) doblaSecuencia();
secuencia[numCuentas++]=c;
}
private void doblaSecuencia(){
Cuenta aux[]=secuencia;
secuencia=new Cuenta[2*aux.length];
for(int i=0;i<aux.length;i++){
secuencia[i]=aux[i];
}
}
----------------------------------------------------------------
Descargar