Problema 1 · Programació II UDL Juny 2011

Tema: Diseño de clases y objetos en Java, herencia e igualdad · Del examen Juny (2011)

Enunciado

Problema 1 (3 puntos). Traza de ejecución con objetos Vector3D

Considérese la siguiente definición de clase en Java:

public class Vector3D {

private double x;

private double y;

private double z;

public Vector3D(double x, double y, double z) {

this.x = x; this.y = y; this.z = z;

}

public void add(Vector3D other) {

x += other.x; y += other.y; z += other.z;

}

public void normalize() {

double mag = Math.sqrt(x*x + y*y + z*z);

x = x/mag; y = y/mag; z = z/mag;

}

public static Vector3D mistery(Vector3D v1, Vector3D v2) {

Vector3D result = new Vector3D(v1.x, v1.y, v1.z);

v2.normalize();

result.add(v2);

return result;

}

public String toString() {

return "x=" + String.valueOf(x)

+ " y=" + String.valueOf(y)

+ " z=" + String.valueOf(z);

}

}

Y el siguiente fragmento de código que interactúa con ella:

1 Vector3D first = new Vector3D(1.0, 2.0, 3.0);

2 Vector3D second = new Vector3D(0.0, 0.0, 3.0);

3 Vector3D third = Vector3D.mistery(first, second);

4 println("first: " + first.toString());

5 println("second: " + second.toString());

6 println("third: " + third.toString());

Indique con precisión qué salida produce este código por pantalla. Para justificar la respuesta, muestre paso a paso el flujo de ejecución de los métodos invocados, señalando el estado y las referencias de cada objeto manipulado (variables locales del programa principal, parámetros, variables auxiliares y la referencia implícita this en las llamadas donde exista).

Enunciado: Problema 1 · Programació II UDL Juny 2011

Solución

Según los criterios oficiales de corrección

println("first: " + first.toString());

Solución: first: x=1.0 y=2.0 z=3.0

println("second: " + second.toString());

Solución: second: x=0.0 y=0.0 z=1.0

println("third: " + third.toString());

Solución: third: x=1.0 y=2.0 z=4.0

Justifique de forma clara el seguimiento de objetos y referencias, mostrando paso a paso el flujo de ejecución de los métodos invocados.

Solución: Traza de ejecución detallada según solucionario: 1. Línea 1: Instanciación de first en memoria dinámica con x=1.0, y=2.0, z=3.0. 2. Línea 2: Instanciación de second con x=0.0, y=0.0, z=3.0. 3. Línea 3: Llamada a Vector3D.mistery(first, second): - Parámetros v1 y v2 reciben copias de las referencias first y second. - Se crea result con x=1.0, y=2.0, z=3.0. - v2.normalize(): this apunta al objeto de second. mag = sqrt(0^2+0^2+3^2) = 3.0. Se modifican sus atributos a x=0.0, y=0.0, z=1.0. - result.add(v2): this es result, other es v2. x=1.0+0.0=1.0, y=2.0+0.0=2.0, z=3.0+1.0=4.0. - Retorna result asignándose a third. 4. Líneas 4 a 6: Invocación de toString() en cada objeto.

La explicación paso a paso, hecha con IA, es Premium. Premium

Resuélvelo aquí mismo: corrección automática, pistas y solución paso a paso.

‹ Problema 1 · 2011 · Problema 2 · Juny 2011 ›

Más ejercicios de Diseño de clases y objetos en Java, herencia e igualdad