Sobre JAVA

Hola:
Me cuesta mucho entender el "paso de objetos como parámetros.
Tengo un ejemplo sencillo como el del libro que utilizo, dice que no hace nada útil, que solo sirve de ejemplo:
//**************************************
//la clase
clase Probador
{
public void miMetodo(StringBuffer strBuf)
{
strBuf.setCharAt(0,Y);
}
}
//código
Probador probador;
StringBuffer palabra = new
StringBuffer("Java");
probador = new Probador();
probador.miMetodo( palabra );
cuadroSalida.printLine("La palabra es" + palabra);
//**************************************
Viendo estas dos partes del programa no entiendo muy bien como interactúan.
¿Que relación hay entre:
"public void miMetodo(StringBuffer strBuf)" y "probador.miMetodo( palabra );"
Es decir, entre (StringBuffer strBuf) y (palabra).
No logro coger la idea de esto; si pudiea darme una pequeña explicación.
"Mi modesta teória es la siguiente:que el objeto palabra pasa a ser un objeto del método miMetodo y se renombra strBuf"
Eso es todo, espero que sea sencillo y simplemente haya sido que me he liado.
Muchas gracias al menos por leer este mensaje.
Saludos

4 respuestas

Respuesta
1
No se el nivel que tienes en programación, voy a suponer que es muy bajo, disculpa si no es así y te doy explicaciones demasiado obvias.
En java los parámetros siempre se pasan por referencia, es decir, el objeto es exactamente el mismo incluso físicamente.
Cuando se crea un objeto (StringBuffer palabra = new
StringBuffer("Java");), java guarda una parte de la memoria física para lamacenarlo.
Cuando pasas el objeto al método (probador. MiMetodo( palabra );), java realmente esta pasando la dirección de memoria donde están almacenados los datos.
En resumen, los datos son exactamente los mismos, la única diferencia es que durante el programa principal, la dirección de la memoria donde esta se llama "palabra" y durante el método de la clase se llama "strBuf". Pero recuerda, son los mismos datos en la misma dirección de memoria.
Espero haberte ayudado, si quieres ampliar la información sobre este u otros temas cuenta conmigo.
Muchísimas gracias.Ya me has sacado de dudas. Tengo más preguntillas de este tipo que me van surgiendo.
Y vaya, mi nivel de programación es bastante bajo, estoy empezando y vaya, al ser todo nuevo me cuesta un poco.
Gracias, un saludo
Respuesta
1
Es muy fácil, la clase Probador, simplemente es una entidad con un método, que es miMetodo, que tiene como único parámetro un StringBuffer.
Luego, para usar esta clase, es necesario tener una clase de tipo Probador, y para utilizar el método, tener un StringBuffer. Para ello se crea la variable palabra, que es de tipo StringBuffer.
Digamos que la relación entre palabra y StringBuffer, es que la primera es una variablae del tipo StringBuffer. Si sigue sin quedarte claro, vuelve a consultarme.
Hola de nuevo, he leído tu respuesta hasta aprendérmela y no sé si he cogido la idea. Te explico brevemente mis conclusiones, .(Creo que sigo liado)voy punto por punto para verlo más claro, algunas obvias pero que me ayudan:
*********SOBRE LA CLASE*************
1.- Tengo una clase que es "Probador" y un objeto que es "probador"
2.- Esa clase "Probador" tiene un método que es "miMetodo".
3.- Esa clase tiene un objeto de tipo StringBuffer que es "palabra"
*********SOBRE EL METODO*********
4.- "miMetodo" esta dentro de la clase "Probador"
5.- "miMetodo" tiene un parámetro, que es un objeto de StringBuffer. Este objeto se llama "strBuf".
Vaya, no puedo sacar más conclusiones y me falta lo esencial.
a.- ¿Tanto la clase como el método tienen dos objetos distintos de tipo StringBuffer?
b.-¿Que papel juega ese objeto "strBuf")
Bua, cuantas más vueltas le doy menos lo veo. ¿Algunos de los puntos es incorrecto?
Lo siento si te aburro, pero confío en que una segunda explicación me saque de dudas.
Muchísimas gracias.
Un saludo
Punto 3- No es que la clase tenga un objeto, sino que en el método de la clase (miMetodo), se recibe un parámetro de tipo StringBuffer.
Creo que lo que te liá es lo siguiente: en el ejemplo tienes dos partes bien diferenciadas, que son la clase Probador, y otra es el código que se podría meter en cualquier clase.
Las clases simplemente tienen variables, atributos, etc que utilizan ellas.
Luego, desde otras clases o desde un programa principal, es desde donde se llaman a las funciones de esa clase, etc etc.
Te explico como quedaría tu ejemplo:
Fichero Probador.java
***************************
public class Probador
{
public void miMetodo(StringBuffer strBuf)
{
strBuf.setCharAt(0,Y);
}
}
*************************
Fichero Principal.java
**************************
public class Principal {
public static void main ( String args [ ] ) {
//codigo que quieres meter
Probador probador;
StringBuffer palabra = new
StringBuffer("Java");
probador = new Probador();
probador.miMetodo( palabra );
cuadroSalida.printLine("La palabra es" + palabra);
}
********************
Prueba con estos ejemplos, a ver si entiendes mejor.
Respuesta
1
Antes de nada, decirte que entiendo tus dudas si estás comenzando, te recomendaría el libro "Cómo programar en Java" de Deitel&Deitel, editado por PrenticeHall (creo), que es un gran libro para entender esas pequeñas cosas de la programación orientada a objetos que no se suelen explicar... Bien, dicho esto, el tema es que en una clase tú defines unos métodos y unas propiedades; los métodos reciben una serie de parámetros (que pueden ser objetos o tipos de datos básicos (int, String, long, char...)) o no. Para poder utilizar un método (a no ser que sea un método static), tienes que invocarlo a través de un objeto de esa clase (en tu ejemplo ese objeto sería probador, que tú defines como Probador probador, como si dijeras "creo un objeto llamado probador" (que podría tener cualquier otro nombre) que pertenece a la clase Probador) y luego lo inicializo (indispensable si no quieres que se generen errores) haciendo probador=new Probador();. Después creas un objeto de tipo StringBuffer que contiene la palabra "Java". A todos los efectos (por ahora), un StringBuffer es como un String... con unas pocas diferencias pero lo es. Utilizas el objeto llamado probador para invocar al método miMetodo pasándole por parámetro ese objeto StringBuffer pero que se sustituya el carácter que está en la posición 0 (la J) por una Y, quedando la palabra Yava. Después imprimes por pantalla la palabra resultante. La afirmación que tú haces, desgraciadamente, es falsa. Es decir, no se renombra ni sucede nada de lo que dices. Internamente, eso sí, se crea una copia de "palabra", se modifica en ese método y se actualiza el contenido de ese objeto. En ningún momento hay conversiones de objetos ni de nombres, lo único que sucede es que en tu método tienes que definir el tipo de datos que vas a recibir (si te van a pasar int, String, u otro tipo de objetos...), y se les asigna un nombre arbitrario para su uso dentro del método. Ese nombre es independiente del nombre del objeto que le hayas pasado por parámetro, es simplemente para utilizarlo dentro del método, no es visible fuera de ese método. Espero no haberme liado yo también y haberte ayudado en lo posible, si no te he ayudado o no te queda algo claro, no dudes en volver a preguntar.
Bien; creo que lo he entendido; te lo explico brevemente con mis palabras para ver si estoy en lo cierto:
"Hay que definir el tipo de datos que el método va a recibir, por lo tanto, dentro del paréntesis se pone el tipo de datos ( int, char,...) y se le asigna un nombre, ( en nuestro caso "strBuf", pero podía haber sido cualquier otro.
En definitiva, el parenetsis indica con que tipo de datos va a "trabajar" el método.
Bien, si esto es correcto, dímelo por favor.
Muchísimas gracias
Sí, efectivamente es exactamente lo que tú has dicho, en el paréntesis indicamos el tipo de datos que va a recibir como parámetros el método, al igual que delante del nombre del método indicamos el tipo de parámetro (aquí sólo se permite un tipo), que va a devolver el método. Veo que lo tienes muy claro, así que me alegro mucho. Si tienes alguna otra duda no te cortes y pregunta, que muchas veces nos quedamos atascados con dudas que alguien nos puede solucionar...
Perfecto;muchas gracias de nuevo;seguro que vuelves a saber de mí, empiezo a ir comprendiendo. Resolviendo dudas es como más avanzo.Un saludo
Respuesta
1
Creo que lo ha entendido:
La primera parte es la declaración de un método, indica como se llama el método, qué parámetros y de que tipo recibe y que tipo de parámetro devuelve (en esta caso void, o sea, nada).
La segunda es la invocación del método, es decir, el momento de usarlo. Para ello, debes pasar parámetros del tipo descrito en la declaración (aunque no se llamen igual) y si capturas el retorno (en este caso no se captura), hacerlo a un objeto del mismo tipo.
Tu ejemplo crea un buffer con la palabra java y se lo pasas al método miMetodo de la clase probador, el cual hace algo con el (cambia la j por la Y).

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas