Manejar objeto como atributo de clase.

Airways

Newbie Lvl 2
#1
Buenas, vengo a consultar como debería seguir con un ejercicio:

Las consigas son las siguientes:

Se quiere crear una clase Cuenta la cual se caracteriza por tener asociado un número de cuenta y un saldo disponible. Además, se puede consultar el saldo disponible en cualquier momento, recibir ingresos y retirar monto.

Crear una clase Persona, que se caracteriza por un DNI y una cuenta bancaria. Agregar un método donde crea conveniente que devuelva si la persona es morosa o tiene saldo negativo.

Código:
public class Cuenta {
    private static int numeroCuenta = 0;
    private double saldo;
    private int id;
   
   
    public Cuenta(double saldo){
        numeroCuenta++;
        this.saldo = saldo;
        id = numeroCuenta;
    }
   
    //Devuelve saldo en la cuenta
    public double getSaldo(){
        return saldo;
    }
   
    //Agregar o quitar saldo
    public void setSaldo(double saldo){
        this.saldo += saldo;
    }
   
    //Mostrar numero cuenta. 
    public int getID(){
        return id;
    }
}
Código:
public class Persona {
    //Atributos
    private int dni;
    Cuenta cuenta;
   
    //Metodos
   
    //Metodo constructor
    public Persona(int dni){
        this.dni = dni;
    }
   
    //Mostrar DNI
    public int getDNI(){
        return dni;
    }
Mi duda seria, ¿como debería usar el Objeto Cuenta en la clase Persona? ¿Debería crear una instancia de la clase persona directamente también creándole la cuenta a la persona, por lo tanto también pasar los datos al constructor para crear también la cuenta? ¿Como accedería a la cuenta del usuario con los métodos luego?
 
#2
Primero, el numero de cuenta en la clase Cuenta podría ser tranquilamente el ID, ese atributo esta de mas.
"consultar el saldo disponible en cualquier momento, recibir ingresos y retirar monto. " (getSaldo, aumentarSaldo, retirarSaldo), YO prefiero hacer las funciones antes que un setSaldo si no voy a tener un handler.

-> private static int numeroCuenta = 0; ESTO ES UN HORROR, los atributos se inicializan en el CONSTRUCTOR! y no tiene por que ser estatico, podrias usar UUID ( https://stackoverflow.com/questions...uid-string-in-java-uuid-randomuuid-tostring-w ) para hacer el ID de la cuenta (es un dato COMPLETAMENTE INNECESARIO en este caso, lo vas a poner unicamente porque te lo pide), si el único acceso que va a tener va a ser desde la clase Persona, osea Persona.getCuenta().metodo();

Mi duda seria, ¿como debería usar el Objeto Cuenta en la clase Persona? ¿Debería crear una instancia de la clase persona directamente también creándole la cuenta a la persona, por lo tanto también pasar los datos al constructor para crear también la cuenta? ¿Como accedería a la cuenta del usuario con los métodos luego?
Esta bien, tenes que crear una instancia de la cuenta en la clase Persona, falta inicializarlo en el constructor de Persona y hacer un public Cuenta getCuenta() para operar desde la instancia de la persona con su cuenta. Pensa que cuando creas una persona, POR LO GENERAL, la cuenta va a estar vacía y con valores por defecto. Podes hacer por las dudas dos constructores (polimorfismo es el concepto creo), uno únicamente con dni (o los atributos de Persona que hagas) y otro que incluya una cuenta.

La función que calcula el saldo negativo la haría en la misma clase Cuenta 'if(saldo < 0)'....

Persona persona = new Persona("000000000");
Persona.getCuenta().aumentarSaldo()

Algo asi seria el uso
 

Airways

Newbie Lvl 2
#3
Primero, el numero de cuenta en la clase Cuenta podría ser tranquilamente el ID, ese atributo esta de mas.
"consultar el saldo disponible en cualquier momento, recibir ingresos y retirar monto. " (getSaldo, aumentarSaldo, retirarSaldo), YO prefiero hacer las funciones antes que un setSaldo si no voy a tener un handler.

-> private static int numeroCuenta = 0; ESTO ES UN HORROR, los atributos se inicializan en el CONSTRUCTOR! y no tiene por que ser estatico, podrias usar UUID ( https://stackoverflow.com/questions...uid-string-in-java-uuid-randomuuid-tostring-w ) para hacer el ID de la cuenta (es un dato COMPLETAMENTE INNECESARIO en este caso, lo vas a poner unicamente porque te lo pide), si el único acceso que va a tener va a ser desde la clase Persona, osea Persona.getCuenta().metodo();



Esta bien, tenes que crear una instancia de la cuenta en la clase Persona, falta inicializarlo en el constructor de Persona y hacer un public Cuenta getCuenta() para operar desde la instancia de la persona con su cuenta. Pensa que cuando creas una persona, POR LO GENERAL, la cuenta va a estar vacía y con valores por defecto. Podes hacer por las dudas dos constructores (polimorfismo es el concepto creo), uno únicamente con dni (o los atributos de Persona que hagas) y otro que incluya una cuenta.

La función que calcula el saldo negativo la haría en la misma clase Cuenta 'if(saldo < 0)'....

Persona persona = new Persona("000000000");
Persona.getCuenta().aumentarSaldo()

Algo asi seria el uso
Gracias por tomarte el tiempo arreglo mis errores, estaba encapsulando el objeto por eso no me dejaba hacerlo. Ya lo tengo casi listo hace todo lo que me pide. Es para un TP final de programación.

Código:
public class Cuentas {
   
    //Constantes
    private final int MAX_MOVIMIENTOS = 10;
   
    //Atributos
    private double monto; 
    private int numeroCuenta;
   
    private int numeroMovimientos;
   
    Clientes cliente;
   
    Movimientos[] listaMovimientos = new Movimientos[MAX_MOVIMIENTOS];
Con esos atributos me quedo la clase Cuentas, el numero lo manejaba desde un arreglo de 1000 cuentas que se crea en bancos. Después si alguno le interesa subo el practico completo.
 
Arriba