
Práctica 3
marzo 6, 2008“Esto son dos informáticos que deciden hacer un viaje en coche. Justo cuando están a mitad de camino, en la carretera, se les para el coche… y después de varios intentos de volverlo a arrancar le dice un informático al otro… ‘¡Espera, espera! ¿…Y si salimos y volvemos a entrar?’”
Bueno, se acabaron los chistes. Volviendo a la vida real… y a la práctica del viernes 7 de marzo, hay unas cuantas cosas que decir. En primer lugar, que fue una práctica muy interesante, aunque hay que reconocer que fue más bien una clase teórica que práctica… Bueno, pues para empezar hablemos del modificador static. El funcionamiento de este modificador es bastante interesante, y sirve, si hemos entendido bien, para relacionar una variable o un método directamente con la clase a la que pertenece, en vez de estar relacionada con cada objeto de esa clase. Por si nos lee algún compañero con dudas, lo que nosotros entendemos por una variable con modificador static, es una variable cuyo valor está almacenado “en la clase” (para entendernos); no sabemos exactamente en qué lugar de la memoria ni dónde se sitúa jerárquicamente, pero está ahí, modificando su valor único para esa clase en el mismo instante según las llamadas a distintos métodos. Por ejemplo, el más sencillo de todos: El contador de objetos de una misma clase. Si fuese una variable normal, habría una variable en memoria para cada objeto de esa clase, pero en este caso sólo hay una (eso creemos, que luego puede que haya una por objeto, todas iguales siempre…) y se puede definir de tal modo que cada vez que se cree un objeto de una clase, esta variable haga un “i++”. Por otro lado, los métodos estáticos… no los tenemos muy claros, a ver si alguien nos echa un cable. Nuestra idea de lo que puede ser un método estático, es la de uno que devuelve el valor de una variable estática (aparte del método main, que es void; no devuelve nada).
El otro punto interesante de esta práctica fue el investigar sobre el funcionamiento interno de los métodos en Java en lo que se refiere a los parámetros de entrada. Teníamos que buscar información sobre si Java pasa los parámetros por valor o por referencia. Leyendo un poco, sacamos conclusiones: Los pasa por referencia. Conclusiones precipitadas. Hay que leer mucho más para darse cuenta de (y comprender) lo contrario: los pasa por valor. ¿Qué significa esto? Pues bueno, no es fácil de explicar, pero lo que hemos creído entender es lo siguiente: Java es un lenguaje de programación que sólo permite pasar los parámetros por valor (otros lenguajes permiten decidir), esto es, sólo permite pasar parámetros en un método de manera que están protegidos frente a cambios que puedan intentar invocar sobre ellos los métodos en los que estén involucradas. Esta protección se debe a que se realiza una copia del atributo (si se mete un atributo) sobre la que se va a trabajar, conservando el valor original del atributo fuera del método. Cuando salimos del método, aunque hayamos modificado el valor dentro del mismo, la variable original conserva su valor. Esto parece ser que no sucede así cuando el parámetro es un objeto, porque, a fin de cuentas, en Java no trabajamos con objetos, sino con referencias a objetos, y al meter un objeto en un método (una referencia), realizas una copia de esta referencia, y trabajas sobre la copia de la referencia afectando al objeto guardado en memoria, de manera que al salir del método, conservas tu referencia a la posición de memoria original donde tenías el objeto, pero el objeto ha podido cambiar. También hemos leído que esto no pasa para los objetos de la clase String, a ver si hemos entendido el porqué:
Metemos en nuestro método “funcioncilla” una String “cadena”: funcioncilla(cadena){…} y metemos la cadena ‘cadena 1 = “hola” ‘ asignada previamente. En realidad hemos metido una referencia a la cadena ‘cadena1′, ¿no es así?, Pues bien ahora, dentro de nuestra funcioncilla, hacemos: cadena1 = “adiós”. Salimos del método. ¿Qué ocurre si hacemos un S.O.Pln(cadena1)? Teóricamente, al haber hecho la asignación ‘cadena1 = “adiós”‘, hemos dado un nuevo valor al objeto cadena1 de la clase String. Al salir del método, por contra, recuperamos el valor del objeto original, por lo que entendemos que necesariamente una asignación de este tipo para objetos de la clase String, lleva consigo la creación de una nueva cadena con una referencia distinta, quedando intacta la que está “fuera” del método.
Que nos corrijan si todo esto es una gran pirada de pinza… mucho leer me parece jajaja.
Bueno, que tengáis una buena práctica mañana y una bonita Semana Santa! Nos vamos a nuestros respectivos locales de ensayo.
Saludos Mandriles

Buenas, en esta práctica nosotros estamos totalmente perdidos, y gracias a leer vuestro post nos hemos enterado de algo más.
Muchas gracias pareja y a seguir asi
Buenos días, chicosss!!
Perdonad por no haberos resuelto la duda que nos comentasteis hace varios días, pero con el tema de la Semana Santa y el poco tiempo que tenemos en nuestra agenda nos lo ha impedido.
En nuestra práctica poníamos algo referente a método estátido, en realidad nos referíamos a modificador estático(fue una confusión a la hora de escribir en el blog)
De todas formas, os hemos comentado algo sobre los métodos estáticos en nuestro blog (en la práctica 3 después de vuestra pregunta);
Esperamos que os sirva de ayuda.
Un saludo y zuerte!!!
Incredibly well written blog..
Thats an all ’round amazingly written post!!