Solucionado (ver solución)
Solucionado
(ver solución)
1
respuesta

[Duda] DUDA SOBRE TIPO DE DATO Y CLASES

Buenos dias, tengo una duda con relacion al sguiente codigo:

public boolean transfiere(double valor, Cuenta destino){

    if(this.saldo >= valor){
        this.saldo -= valor;
        destino.deposita(valor);    
        return true;
    }
    return false;
}
}

En el parámetro "Cuenta destino" "Cuenta es el tipo de dato" ¿Ese tipo de dato esta dado por la clase "Cuenta" previamente definida, es decir, el tipo objeto? ¿la clase entonces es compartida por ambas cuentas? Comprendo que pueden o no compartir la misma direccion de memoria, eso queda claro pero, si el tipo de dato "Cuenta" responde a la misma definicion de clase ¿como "comprende" el programa que por ejemplo el atributo saldo que referencio con "this" responde a tal o cual cuenta, ¿es porque definí a esa cuenta antes que la cuenta llamada "destino"?.Cualquier orientacion sera bienvenida.

1 respuesta
solución!

¡Buenas tardes Alumno! Que bueno que te pases por acá para dejar tus dudas. Intentaré apoyarte con tu inquietud.

Efectivamente, el tipo de dato del parámetro que se le está pasando al método transfiere, es Cuenta. Si, ese tipo de dato está dado por la clase Cuenta.

Verás, una clase es una representación lógica de una entidad, con sus respectivos atributos y comportamientos, que luedo podemos instanciar en otras clases a través de una referencia.

¿Qué quiere decir esto? Veamoslo con un ejemplo:

Digamos que tenemos la clase Gato, como se muestra a continuación:

public class Gato{

    String nombre;
    int edad;

    public Gato(){
    }

    public Gato(String nombre, int edad){
        this.nombre = nombre;
        this.edad = edad;
    }

    public String getNombre(){
        return this.nombre;
    }

    public void setNombre(String nombre){
        this.nombre = nombre;
    }

    public int getEdad(){
        return this.edad;
    }

    public void setEdad(int edad){
        this.edad = edad;
    }
}

Entonces tenemos una clase llamada Gato, con los atributos nombre y edad encapsulados.

Ahora vamos a ver otra clase llamada EntrenandoAnimal:

public class EntrenandoAnimal(){

    public static void main(String[] args){

        Gato garfield = new Gato("Garfield", 5);

        saltar(garfield); // Retornará "El animal Garfield ha aprendido a saltar".
    }

    public void saltar(Gato gato){
        String msg = "";

        msg = (gato.getEdad() > 3) ? "El animal " + gato.getNombre() + " ha aprendido a saltar") : 
                "el animal no tiene edad para aprender a saltar";

        System.out.println(msg);
    }
}

Como habrás podido ver, nuestra primera clase se transforma en un tipo de dato con atributos y métodos que nos ayudan a abstraer a un Gato para que pueda aprender a saltar en nuestra clase de EntrenarAnimal.

Esto no quiere decir que tanto la clase EntrenarAnimal como Gato compartan la misma referencia en memoria, para nada. Ambas clases tienen su propio espacio en memoria, diferente el uno del otro, pero existe una relación entre ambas gracias a la composición de objetos. Por eso mismo es que la palabra reservada this es bien utilizada por la máquina virtual de Java a la hora de hacer referencia a ciertos elementos de la clase en su propia instancia.

Espero que la explicación te ayude a despejar dudas, sino, podemos mejorarla.