Tratamiento de objetos en Java

Kartalon

#30 ¿Paso por referencia en cualquier lenguaje de paradigma OO? o.O

1 respuesta
elkaoD

#31 cómo?

1 respuesta
Kartalon

#32 El paso por referencia no tiene mucho sentido en cualquier lenguaje de paradigma OO porque rompe el principio de encapsulación. Y así es como se hacen bebés.

O eso creo.

2 respuestas
Khanser

#33 El paso por referencia lo hace internamente, tu ni te enteras porque no juegas con punteros, pero sí, es un paso por referencia. Mirate el libro que he puesto en #29 en la pagina 191 por favor.

#35 Exacto, punteros y referencias poco tienen que ver con el principio de encapsulación sino con la definición de la clase del tipo de datos.

1 1 respuesta
elkaoD

#33 no, rompe el principio de encapsulación sólo si te dejas atributos públicos. Si no pasas objetos por referencia no hay forma de llamar a los accesores de funciones no-estáticas.

1 2 respuestas
Kartalon

#34 #35 Ok, me refería al paso por referencia explícito :3

#37 En mi puta vida he hecho paso por referencia explícito de cualquier variable (sean objetos o atributos) en ningún lenguaje OO (Java, Ruby...) Pero vamos, en mi mente un paso por referencia explícito permite acceder directamente a una dirección de memoria lo cual claramente viola el principio de encapsulación si nos referimos a un atributo. Obviamente si nos referimos a un objeto no porque el objeto no está "encapsulado en sí mismo".

De todas maneras no estoy muy lúcido, pero estos son mis principios y así los veo yo :o

1 respuesta
elkaoD

#36 igual me da que me da lo mismo (a no ser que te refieras a referencia de atributos y no de objetos.)

#36 sigue siendo necesario a veces (ej. pasar un array) y aunque hay que tener mucho cuidado con ello (sólo usar para lectura, usar const, etc.) es una práctica útil en muchos casos.

Estoy seguro de que lo has usado más de lo que crees pero abstraído y no te has enterado.

1 respuesta
T

#29 antes de hablar mal aprende un poco: http://stackoverflow.com/questions/6044649/pass-object-by-reference-in-java
Por cierto estoy cursandop mis dos útlimas asignaturas de Ingeñería Informatica en la FIB.

edit: en la famosa página 191 de tu libro me estan dando la razón diciendo que la variable contiene una posición del heap de memoria cuando se le asigna un objeto y no el objeto en si...

1 respuesta
Khanser

#38 lo que tu digas tío. Antes dices que no es paso por referencia, hablas del paso de referencia, te paso una página que habla de las asignaciones de referencias en java que son a objetos del heap, y acabas dándome la razón pensándote que la tienes tú.

Que te aproveche la carrera, quizá de programación sabes un huevo pero de compresión lectora estás un poco falto.

Por cierto, el 'que coño hablas' significa 'te estás contradiciendo' no, 'no tienes razón'. Has explicado en #28 perfectamente lo que es un paso por referencia :)

1 respuesta
T

#39 exacto en #28 explico lo que es un paso por referencia y Java no hace paso por referencia que es lo que intento explicar desde el primer post que he puesto. Así que el que no ha comprendido nada eres tu: paso por referencia es diferente a una asignación por referencia. No tiene nada que ver una cosa con la otra. Una cosa es como se guarda la información y la otra es como se pasa información a una función.

Y vuelvo a repetir otra vez la que he dicho antes paa ver si queda claro y no se mezclan coneptos: en Java cuando instancias un objeto y lo asocias a una variable lo que haces es poner en la variable la dirección del objeto (referencias el objeto en la variable). Cuando pasas una variable a una función lo que haces es hacer una copia de la variable (paso por valor). La copia esta de la variable tiene el mismo contenido que la orignal (por algo es una copia): en el caso de un tipo simple el valor directamente y en el caso de un objeto la dirección de este objeto. Es decir que se tiene una variable nueva no una referencia a la variable original.

edit: seguramente aquí este explicado de manera más clara lo que llevo diciendo desde hace rato http://www.joseduenas.com/archivos/327

1 respuesta
elkaoD

#40 lo dicen en los comentarios y lo suscribo al 100%. El concepto del que trata es correcto, pero la terminología está mal usada (y de ahí tu confusión):

"Los objetos se pasan por referencia" -> Es decir, el objeto se pasa al método utilizando una referencia a él.
"La referencia a un objeto se pasa por valor" -> Es decir, se realiza una copia de la referencia al objeto.

No es que los objetos se pasen por valor, es que la referencia a los objetos se pasa por valor, pero la variable se sigue pasando por referencia.

Si los objetos en Java se pasaran por valor, habría que clonar el objeto entero en memoria.

Lo que se clona en Java es la referencia al objeto, pero sigue siendo paso por referencia, por mucho que esta referencia esté clonada en memoria. En este caso, el concepto es que Java trata los parámetros de la función como variables locales.

1 1 respuesta
T

#41 Si y no. Lo que dices es correcto pero el tema es que al clonar la referencia ya no se trata de un paso por referencia y el objeto que se pasa no "actua" de la misma manera que si realmente hubiese sido pasado por referencia. Una manera simple de verlo es con los ejemplos del link o con el que he explicado antes.
Como bien has dicho es terminalogía.

1 respuesta
elkaoD

#42 vale, es sólo terminología, pero hay una terminología correcta, y el paso por referencia no deja de ser paso por referencia aunque la referencia se pase por valor. Si acaso tiene otro nombre que no conozco, pero NO es paso por valor.

1 1 respuesta
BLZKZ

const type &var

que rico era c++

Khanser

#43 déjalo, no se va a bajar del burro.