Autor Tema: preguntas examen programación orientada a objetos Ingeniería Informática UNED  (Leído 115729 veces)

nosferacento

  • Avanzado
  • ****
  • Mensajes: 375
    • Ver Perfil
En este post se encuentran preguntas tipo examen UNED resueltas de la asignatura "Programación orientada a objetos" de la UNED (Grado en Ingeniería Informática – Grado en Ingeniería de las Tecnologías de la Información), en general serán interesantes pero a veces te parecerán absurdas o rebuscadas.. Incluiré muchos enunciados correspondientes a las preguntas tipo test pero también algunos enunciados (y sus respuestas) correspondientes a problemas (parte de desarrollo del examen). Los exámenes constan de dos partes: una parte con preguntas tipo test y otra con un problema de programación.

Algunas preguntas son de exámenes reales y otras son inventadas, muchas veces por los comentarios tendrás pistas adicionales que te ayudarán a razonar la respuesta.

Otros post de interés para quienes busquen exámenes resueltos:

Preguntas de Examen de la Asignatura "Fundamentos de Programación" del primer curso de Grado en Ingeniería Informática – Grado en Ingeniería de las Tecnologías de la Información de la UNED (basada en lenguaje C/C++) se puede encontrar aquí: http://www.aprenderaprogramar.com/foros/index.php?topic=401.0

Preguntas de Examen de la Asignatura "Autómatas, gramáticas y lenguajes" del primer curso de Grado en Ingeniería Informática – Grado en Ingeniería de las Tecnologías de la Información de la UNED se puede encontrar aquí: http://www.aprenderaprogramar.com/foros/index.php?topic=638.0

He revisado las preguntas con vistas al curso 2017-2018 y en principio está todo "OK". De cualquier manera si encuentras alguna errata puedes escribirme tanto públicamente en el foro como por mensaje privado.


Comenzamos con la asignatura de programación orientada a objetos:

PREGUNTA: ¿Una clase puede manejar objetos?

RESPUESTA   Sí, una clase puede manejar objetos. Aunque esta frase es bastante ambigua, apréndetela de memoria para el examen y no le des más vueltas.
« última modificación: 15 de Diciembre 2017, 21:25 de Alex Rodríguez »

nosferacento

  • Avanzado
  • ****
  • Mensajes: 375
    • Ver Perfil
crear objetos sin constructor en java
« Respuesta #1 : 04 de Septiembre 2011, 17:55 »
PREGUNTA: ¿Pueden crearse objetos del tipo definido por una clase sin constructor declarado?

RESPUESTA: Sí, en caso de que no haya constructor declarado, java aplica por defecto el criterio de permitir la creación de objetos como si existiera el constructor vacío (sin código).
« última modificación: 14 de Septiembre 2012, 12:14 de nosferacento »

nosferacento

  • Avanzado
  • ****
  • Mensajes: 375
    • Ver Perfil
pregunta nombre clase java puede empezar con número?
« Respuesta #2 : 04 de Septiembre 2011, 22:28 »
PREGUNTA: ¿Una clase puede tener como nombre un número o su nombre empezar por un número?

RESPUESTA: No. Al igual que no es válido que el nombre de una variable empiece con un número, tampoco el nombre de una clase puede empezar con un número.

patagonico

  • Sin experiencia
  • *
  • Mensajes: 29
    • Ver Perfil
preguntas examen absurdas o rebuscadas
« Respuesta #3 : 05 de Septiembre 2011, 09:52 »
¿Por qué hablas de preguntas absurdas o rebuscadas? ¿Por qué dices que son tipo test si luego no son tipo test?

nosferacento

  • Avanzado
  • ****
  • Mensajes: 375
    • Ver Perfil
Re:preguntas examen programación orientada a objetos uned
« Respuesta #4 : 05 de Septiembre 2011, 14:31 »
Lo de absurdas o rebuscadas, porque cuando analizas las preguntas de examen te das cuenta de que muchas no tienen ni pies ni cabeza. Son preguntas relativas a detalles muy concretos de código que nunca en la vida se te va a plantear en la vida profesional... y cuando ves eso dices ¿y esto para qué demonios sirve? No digo que todas las preguntas sean así, pero sí muchas de ellas.
Sobre lo del tipo test, efectivamente lo que estoy posteando no incluyo las opciones del test, sino que directamente voy a la respuesta. Esto es para ahorrar espacio y no marear al personal... al final lo que te tienes que saber es la respuesta.

nosferacento

  • Avanzado
  • ****
  • Mensajes: 375
    • Ver Perfil
declarar variables locales con modificadores de acceso java
« Respuesta #5 : 05 de Septiembre 2011, 17:21 »
PREGUNTA: Dado este fragmento de código, ¿cuál sería el resultado de compilarlo / ejecutarlo?

Código: [Seleccionar]
public static void main (String Args[] ) {
    int valor = 5;
    cambiarValor(valor);
    System.out.println (valor);
}

public static void cambiarValor (int valor) {
    private int valor = valor * 2;
}

RESPUESTA: Hemos de suponer que el código está dentro de una clase, porque si no no se puede compilar ni ejecutar. El resultado es error en la línea 10 porque dentro de un método no pueden declararse variables locales precedidas de modificadores de acceso (public/private/protected)

nosferacento

  • Avanzado
  • ****
  • Mensajes: 375
    • Ver Perfil
clase privada java
« Respuesta #6 : 05 de Septiembre 2011, 19:24 »
PREGUNTA: ¿Este código compila y si compila, qué sentido tiene?

private class MiClase1 {  }

RESPUESTA:    No, el código no compila. Solo se admite public. Podría compilar si se tratara de una clase interna dentro de otra clase, pero tal y como está no.

nosferacento

  • Avanzado
  • ****
  • Mensajes: 375
    • Ver Perfil
clase protegida java
« Respuesta #7 : 05 de Septiembre 2011, 21:15 »
PREGUNTA: ¿Este código compila y si compila, qué sentido tiene?

protected class MiClase1 {  }


RESPUESTA: No, el código no compila. Solo se admite public. Podría compilar si fuera una clase interna a otra clase.

nosferacento

  • Avanzado
  • ****
  • Mensajes: 375
    • Ver Perfil
varias clases en una clase
« Respuesta #8 : 05 de Septiembre 2011, 21:18 »
PREGUNTA: ¿Este código compila y si compila, qué sentido tiene?

Código: [Seleccionar]
class MiClase1 { }

class MiClase2 { }

class MiClase3 { }

RESPUESTA: Sí, el código compila. La clase se denomina con el nombre de la primera declaración que aparezca, es decir: MiClase1. Si hay varias clases en un mismo fichero, java sólo permite que se pueda usar una de ellas desde código que esté fuera del fichero.
MiClase1 define un tipo.
Al no declararse usando public, el compilador le da visibilidad dentro del package en que esté definida. El resto de clases que se declaran tienen consideración de clases solo accesibles por otras clases dentro del fichero.

nosferacento

  • Avanzado
  • ****
  • Mensajes: 375
    • Ver Perfil
tres clases en un archivo java
« Respuesta #9 : 06 de Septiembre 2011, 07:56 »
PREGUNTA: ¿Este código compila y si compila, qué sentido tiene?

class MiClase1 { }

public class MiClase2 { }

class MiClase3 { }
   

RESPUESTA: Sí, el código compila. La clase (archivo) se denomina con el nombre de la clase que se declara como pública, es decir: MiClase2. Las otras clases se consideran clases privadas dentro de esta clase.

nosferacento

  • Avanzado
  • ****
  • Mensajes: 375
    • Ver Perfil
dos clases declaradas public en un archivo
« Respuesta #10 : 06 de Septiembre 2011, 22:16 »
PREGUNTA: ¿Este código compila y si compila, qué sentido tiene?

public class MiClase1 {  }

public class MiClase2 { }

class MiClase3 { }   



RESPUESTA: No, el código no compila. El compilador no sabe qué nombre ponerle a la clase si se declaran dos nombres como público. En un archivo se pueden definir varias clases, pero en un archivo no puede haber más que una clase public. Este archivo se llamará como la clase public que contiene con extensión *.java. Con excepciones, lo habitual es escribir una sola clase por archivo.

nosferacento

  • Avanzado
  • ****
  • Mensajes: 375
    • Ver Perfil
dos clases con mismo nombre y distinto modificador
« Respuesta #11 : 07 de Septiembre 2011, 18:15 »
PREGUNTA: ¿Este código compila y si compila, qué sentido tiene?

public class MiClase1 { }
class MiClase1 {}


RESPUESTA: No, el código no compila. En un fichero no puede haber dos clases con el mismo nombre.

nosferacento

  • Avanzado
  • ****
  • Mensajes: 375
    • Ver Perfil
Re:preguntas examen programación orientada a objetos uned
« Respuesta #12 : 09 de Septiembre 2011, 10:07 »
PREGUNTA: ¿Este código compila y si compila, qué sentido tiene?

public class MiClase1 {
    private MiClase2 prueba = new MiClase2();
    public void mostrarMiClase1 () {
        System.out.println (prueba.getContenido());
    }
}
class MiClase2 {
    String soy2 = "Hola soy 2";
    public String getContenido() { return soy2; }
}
class MiClase3 {
    MiClase1 pp;
    MiClase2 jj;
}


RESPUESTA: Sí, el código compila. El fichero lleva el nombre de la clase pública. Las otras clases dentro del fichero se conocen entre sí, pero no pueden ser usadas fuera del fichero.

javi in the sky

  • Avanzado
  • ****
  • Mensajes: 369
    • Ver Perfil
Re:preguntas examen programación orientada a objetos uned
« Respuesta #13 : 10 de Septiembre 2011, 10:53 »
Esto más que preguntas de examen parecen preguntas de un concurso de la tele   ::)

roquesomajorero

  • Sin experiencia
  • *
  • Mensajes: 32
    • Ver Perfil
Re:preguntas examen programación orientada a objetos uned
« Respuesta #14 : 11 de Septiembre 2011, 00:44 »
Concurso de la tele sí, pero tele china porque no entiendo nada

nosferacento

  • Avanzado
  • ****
  • Mensajes: 375
    • Ver Perfil
Re:preguntas examen programación orientada a objetos uned
« Respuesta #15 : 12 de Septiembre 2011, 08:30 »
No hay que preocuparse por no entender... para llegar a entenderlo hace falta un tiempo de estudio previo y Java no es un lenguaje lo que se dice sencillito.

nosferacento

  • Avanzado
  • ****
  • Mensajes: 375
    • Ver Perfil
método estático no es sobreescribible en java
« Respuesta #16 : 12 de Septiembre 2011, 08:32 »
PREGUNTA: Dado este fragmento de código, ¿cuál será su salida?

class Cantante { public static String cantar() { return "la"; } }
public class Tenor extends Cantante {
    public static String cantar () { return "fa"; }
        public static void main (String [] args ) {           
        Tenor t = new Tenor ();
        Cantante s = new Tenor ();
        System.out.println (t.cantar () + " " + s.cantar() );
    }
}


RESPUESTA: Do, re, mi, fa, sol… qué simpática la pregunta. Qué derroche de imaginación y simpatía. Veamos el fondo del asunto. Primera cuestión:
El fichero lleva el nombre de la clase pública. La otra clase no es conocida fuera del fichero.
Al crear un Tenor no ocurre nada puesto que no hay constructor ni campos.
El método cantar de Tenor es estático: esto significa que es un método de clase y que se puede invocar tanto sobre un objeto como sobre el nombre de la clase. Idem para el método cantar de Cantante.
Aunque parece que hay una sobreescritura de métodos, en realidad no la hay: un método estático no es sobreescribible y no funciona la ligadura dinámica de métodos. Si el método de la superclase fuera estático y el de la subclase no, saltaría un error “overridden method is static”.
Al crear un Cantante s con tipo Tenor, el tipo estático es Cantante, y el dinámico Tenor. Al invocar el método cantar sobre t se nos devuelve fa, y al invocar cantar sobre s, dado que s dispone de un método estático de s nombre se ejecuta y devuelve la. Por tanto la salida es : fa-la
« última modificación: 14 de Septiembre 2012, 12:15 de nosferacento »

nosferacento

  • Avanzado
  • ****
  • Mensajes: 375
    • Ver Perfil
objeto no inicializado solo declarado salida null
« Respuesta #17 : 13 de Septiembre 2011, 23:13 »
PREGUNTA: ¿Qué se obtiene al ejecutar el siguiente código?
public class MiClase1 {
    private MiClase2 prueba;
    public void mostrarMiClase1 () {
        System.out.println (prueba);
    }
}
class MiClase2 {
    String soy2 = "Hola soy 2";
}


RESPUESTA: Obtenemos como salida por pantalla: null.
¿Por qué? Porque el atributo prueba, que es un objeto, no está inicializado, sino solo declarado.
Si lo inicializáramos con una declaración como private MiClase2 prueba = new MiClase2(); la salida por pantalla sería del tipo MiClase2@1428ea
¿Por qué? Porque estamos pidiendo la salida por pantalla de un objeto, y lo que nos sale es la referencia de memoria de dónde se encuentra alojado el objeto. Usando System.out.println (prueba.toString()); el resultado sería el mismo. Para rescatar el contenido “Hola soy 2” necesitaríamos un método get e invocar este método. Por ejemplo: public String getContenido() { return soy2; }, y en la otra clase System.out.println (prueba.getContenido());

nosferacento

  • Avanzado
  • ****
  • Mensajes: 375
    • Ver Perfil
java.lang.ClassCastException y conversiones de tipos java
« Respuesta #18 : 16 de Septiembre 2011, 11:53 »
PREGUNTA: ¿Qué se obtiene al ejecutar el siguiente código?

class Vehiculo {
    public void imprimirSonido() {
            System.out.print("Vehiculo");
        }
    }
    class Coche extends Vehiculo {
            public void imprimirSonido() {
                    System.out.print ("Bicicleta");
                }
     }
     class Bicicleta extends Vehiculo {
            public void imprimirSonido() {
                    System.out.print ("Bicicleta");
                }
            }
     public class Test {
            public static void main (String [] args) {
                Vehiculo v = new Coche();
                Bicicleta b = (Bicicleta) v;
                v.imprimirSonido();
                b.imprimirSonido();
            }
        }


RESPUESTA: El código compila, pero se produce una excepción en tiempo de ejecución. El error nos indica java.lang.ClassCastException: Coche cannot be cast to Bicicleta at Test.main(Test.java:22). Esto está relacionado con conversiones de tipo permitidas y no permitidas. Tanto coche como bicicleta heredan de vehiculo, podríamos decir que coche y bicicleta "son hermanos". El código compila porque un vehiculo podría contener una bicicleta (polimorfismo de vehiculo). Sin embargo, en tiempo de ejecución lo que realmente contiene v es un coche. El resultado, que se detecta un intento de conversión de lado a lado (entre hermanos) y nos salta el error en tiempo de ejecución.
Bueno, no sé si lo he explicado muy claro pero por lo menos lo he intentado.
« última modificación: 14 de Septiembre 2012, 12:16 de nosferacento »

nosferacento

  • Avanzado
  • ****
  • Mensajes: 375
    • Ver Perfil
java.lang.ClassCastException: Padre cannot be cast to Hijo.
« Respuesta #19 : 18 de Septiembre 2011, 11:29 »
PREGUNTA: ¿Qué ocurre al ejecutar el siguiente código?

class Padre {}
class Hijo extends Padre {}
class Hijo2 extends Padre {}
public class CEx {
    public static void main (String [] args) {
        Padre p = new Padre(); 
        Hijo h = (Hijo) p;
    }
}


RESPUESTA: No sabemos si lo de (Hijo) p tiene algún doble sentido. El código compila, ya que el compilador no llega a conocer el tipo que almacena la variable p. En tiempo de ejecución, para hacer el casting Hijo h = (Hijo) p; sería necesario que p almacenara dinámicamente una variable tipo Hijo. Como no es el caso, salta un error en tiempo de ejecución tipo java.lang.ClassCastException: Padre cannot be cast to Hijo.
Este código sí compila y se ejecuta:

class Padre {}
class Hijo extends Padre {}
class Hijo2 extends Padre {}
public class Preg8CEx {
    public static void main (String [] args) {
        Padre p = new Hijo();
        Hijo h = (Hijo) p;
    }

« última modificación: 14 de Septiembre 2012, 12:16 de nosferacento »

 

Esto es un laboratorio de ideas...
Aprender a programar

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".