En la última presentación del proyecto nos surgió una duda bastante buena acerca de las instancias (objetos) de clases.
Cuando a 2 objetos creados x1 y x2 (clase X)les asignamos a uno de sus atributos (X.Y) un mismo objeto y. Realmente hacen referencia al mismo objeto y o crean su propia instancia del susodicho objeto y,independiente la una de la otra?
Para resolver esta duda he creado un pequeño programa ejemplo que nos permite despejarla.
Se crearan 2 coches (coche1 y coche2) pertenecientes a la clase Coche con 1 atributo piloto. Que pasará al asignarles a ese atributo un mismo piloto creado? Al modificar el piloto de uno se modifica el piloto del otro? Que pasa si borro el piloto de uno de ellos? Y si borro uno de los coches?
CÓDIGO:
ass Prueba {
/**
* @param args
*/
public static void main(String[] args) {
Piloto alonso = new Piloto("Alonso") /creamos nuevo piloto
System.out.println("Piloto creado: " +alonso +"\n");
Coche coche1 = new Coche(alonso) //asignamos el mismo piloto a los 2 coches
Coche coche2 = new Coche(alonso);
System.out.println("Ref.Piloto: " +alonso);
System.out.println("Nomb.Piloto: " +alonso.getNombre() +"\n");
System.out.println("Ref.Piloto del coche 1: " +coche1.getPiloto());
System.out.println("Ref.Piloto del coche 2: " +coche2.getPiloto());
System.out.println("Nomb.Piloto del coche 1: " +coche1.getPiloto().getNombre());
System.out.println("Nomb.Piloto del coche 2: " +coche2.getPiloto().getNombre()+"\n");
System.out.println("Cambiamos el nombre del objeto a \"alonsillo traidor\" \n");
alonso.setNombre("Alonsillo traidor"); //cambiamos el nombre del piloto a Alonsillo
System.out.println("Ref.Piloto: " +alonso);
System.out.println("Nomb.Piloto: " +alonso.getNombre() +"\n");
System.out.println("Ref.Piloto del coche 1: " +coche1.getPiloto());
System.out.println("Ref.Piloto del coche 2: " +coche2.getPiloto());
System.out.println("Nomb.Piloto del coche 1: " +coche1.getPiloto().getNombre());
System.out.println("Nomb.Piloto del coche 2: " +coche2.getPiloto().getNombre());
}}
SALIDA POR CONSOLA:
Piloto creado: Piloto@82ba41
Ref.Piloto: Piloto@82ba41
Nomb.Piloto: Alonso
Ref.Piloto del coche 1: Piloto@82ba41
Ref.Piloto del coche 2: Piloto@82ba41
Nomb.Piloto del coche 1: Alonso
Nomb.Piloto del coche 2: Alonso
Cambiamos el nombre del objeto a "alonsillo traidor"
Ref.Piloto: Piloto@82ba41
Nomb.Piloto: Alonsillo traidor
Ref.Piloto del coche 1: Piloto@82ba41
Ref.Piloto del coche 2: Piloto@82ba41
Nomb.Piloto del coche 1: Alonsillo traidor
Nomb.Piloto del coche 2: Alonsillo traidor
Por lo tanto queda demostrado que en realidad es el mismo objeto o instancia de clase la que se referencia desde cada uno de los atributos de los objeto coche1 y coche2. Es más al modificar cualquier aspecto del objeto piloto este cambio se reflejará en todos los objetos que referencien a éste.
NOTA:Todo esto viene por el hecho de que en la base de datos db4o existe un método que consiste en borrar en cascada todos los objetos referenciados por un objeto "padre" (en el sentido de asociación y no herencia), entonces se debe tener mucho cuidado a la hora de utilizar este método .cascadeOnDelete() puesto que puede borrar un objeto que aún esté referenciado por otro objeto ("otro coche") el cual se quedaría sin "hijo".
Código fuente:
Coche.java
Piloto.java
Prueba.java
http://www.mhproject.org/htsrv/trackback.php/77
This post has 1 feedback awaiting moderation...
Blog referente al grupo de investigación y desarrollo (MHProject) realizado en la Universidad Pública de Navarra por más de 12 personas. El proyecto se basa en el desarrollo e investigación de aplicaciones y sistemas para Televisión Digital Interactiva desarroladas sobre Java y basadas en el estandard abierto MHP (Multimedia Home Platform).
Hola que tal soy Alejandro Fanjul, webmaster y fundador de MHProject, para cualquier consulta por favor dirigirse a: alex.fanjul@mhproject.org
Lun | Mar | Mie | Jue | Vie | Sab | Dom |
---|---|---|---|---|---|---|
<< < | ||||||
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 |
Documento Introducción a la Televisión DigitalPresentacion Introducción a la Television DigitalCompresión Vídeo standard MPEG2Compresión Imagen standard JPEGSDI: Señal de Vídeo en estudiosSistemas Vídeo Digital - DVBTelevisión Digital Interactiva - MHP
]más
Palbin es un Servicio que te permite crear tu Tienda Online fácil y rápidamente, y vender por Internet sin necesidad de conocimientos técnicos.
¿Qué ventajas tiene?
]más
Enlace a web con applet incrustado. Necesario aceptar la firma digital.
]más
]más
Esta obra está bajo una licencia de Creative Commons.