Unidad 3 Programación Orientada a Objetos. Programación...

22
Profesor: Juan Antonio López Quesada. Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 1 Unidad 3 Programación Orientada a Objetos. Programación JAVA. Parte I (7.5p) 85% [Parte I (___/9.75p-max(7.5p)) + Parte II (___/3.75p-max(2.5p))] + 15%[Parte III WEB (___)] Alumno: ____________________________________________ Apartado 1 Ejercicio 1-2 0.5p/ejer 1p 9.75p Apartado 2 Ejercicio 3-5 0.25p/ejer 0.75p Apartado 3 Ejercicio 6-7 0.5p/ejer 1p Apartado 4 Ejercicio 8-13 (11 métodos - 0.5p/m) 5.5p Apartado 5 Ejercicio 14 1.5p Apartado 6 Ejercicio 15-16 (15 métodos - 0.25p/m) 3.75p 3.75p Apartado 1.- Corrige los errores sintácticos/semánticos que se plantean en las siguientes cuestiones. (1p) 1. Corregir los errores del siguiente código JAVA. (0.5p): // Obtener el menor divisible por n proporcionado por el usuario public class Ejercicio1 { public static void main(String[] args) throws IOException { int vector[]; int numero=0; int mayor= Integer.MIN_VALUE; int menor= Integer.MAX_VALUE; BufferedReader in=new BufferedReader(new InputStreamReader(System.in)); System.out.println("¿Dime la longitus del vector?"); int longitud=Integer.valueOf(in.readLine()).intValue(); System.out.println("¿Dime el n divisible?"); numero=Integer.valueOf(in.readLine()); vector=new int[longitud]; for(int i=0 ; i<vector.length ;) { System.out.println("......................:"); vector[i] = Integer.valueOf(in.readLine()).intValue(); if ((vector[i] % numero) == 0) || (vector[i] < menor)) menor= vector[i]; } System.out.println("....: "+mayor); System.out.println("....: "+menor); }

Transcript of Unidad 3 Programación Orientada a Objetos. Programación...

Profesor: Juan Antonio López Quesada.

Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 1

Unidad 3

Programación Orientada a Objetos. Programación

JAVA. Parte I (7.5p)

85% [Parte I (___/9.75p-max(7.5p)) + Parte II (___/3.75p-max(2.5p))] + 15%[Parte III WEB (___)]

Alumno: ____________________________________________

Apartado 1 Ejercicio 1-2

0.5p/ejer 1p

9.75p

Apartado 2 Ejercicio 3-5

0.25p/ejer 0.75p

Apartado 3 Ejercicio 6-7

0.5p/ejer 1p

Apartado 4 Ejercicio 8-13

(11 métodos - 0.5p/m) 5.5p

Apartado 5 Ejercicio 14 1.5p

Apartado 6 Ejercicio 15-16

(15 métodos - 0.25p/m) 3.75p 3.75p

Apartado 1.- Corrige los errores sintácticos/semánticos que se plantean en las siguientes cuestiones. (1p)

1. Corregir los errores del siguiente código JAVA. (0.5p):

// Obtener el menor divisible por n proporcionado por el usuario public class Ejercicio1 {

public static void main(String[] args) throws IOException { int vector[]; int numero=0; int mayor= Integer.MIN_VALUE; int menor= Integer.MAX_VALUE; BufferedReader in=new BufferedReader(new InputStreamReader(System.in)); System.out.println("¿Dime la longitus del vector?"); int longitud=Integer.valueOf(in.readLine()).intValue(); System.out.println("¿Dime el n divisible?"); numero=Integer.valueOf(in.readLine()); vector=new int[longitud]; for(int i=0 ; i<vector.length ;) {

System.out.println("......................:"); vector[i] = Integer.valueOf(in.readLine()).intValue(); if ((vector[i] % numero) == 0) || (vector[i] < menor))

menor= vector[i]; } System.out.println("....: "+mayor); System.out.println("....: "+menor);

}

Profesor: Juan Antonio López Quesada.

Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 2

}

2. Corregir los errores del siguiente código JAVA. (0.5p):

import java.io.*; public class Ejercicio2 {

public static void factorial(int num){ int producto = 0; for (; num>1 ; num++) { producto = producto * num; } return(producto);

} public static void main(String[] args) throws IOException{

BufferedReader in=new BufferedReader(new InputStreamReader(System.in)); System.out.println("Introduce un numero: "); int num = Integer.valueOf(in.readLine().trim()).intValue(); System.out.println("………… "+num+" es "+ factorial(num));

} }

Profesor: Juan Antonio López Quesada.

Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 3

Apartado 2.- Analiza el código con el fin de determinar el enunciado asociado al flujo de control. (0.75p)

3. ¿Qué resuelve el método? (0.25p):

public boolean z(int h) {

int d=1; int w=0; while(d < h) { w+= h%d==0?d:0; d++; } return h==w?true:false;

}

4. ¿Qué resuelve el método? (0.25p):

public int z(int [] h) {

Arrays.sort(h); return h[0]+h[h.lenght-1];

}

5. ¿Qué resuelve el método? (0.25p):

public int z(int [] h) {

int x=0; for(int i=0; i<h.length; x+=h[i++]); return x/h.length;

}

Profesor: Juan Antonio López Quesada.

Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 4

Apartado 3.- Ejercicios para mejorar la calidad del código java proporcionado. (1.5p)

6. Qué se añadiría para mejorar -robustez- el código que se proporciona (0.5p):

public class Dispositivo {

private Instruccion[] cola; // vector de instrucciones private int numInstrucciones; // número de instrucciones en el dispositivo // Constructor con tamaño inicial proporcionado por el usuario public Dispositivo (int limite)

{ this.cola=new Instrucción[limite]; this.numInstrucciones=-1; }

7. Qué se añadiría para mejorar -robustez- el código que se proporciona (0.5p):

public class Usuario Atributos:

public String email; public double [] aficiones;

Métodos: void Usuario(String correo) {…} public void setAficion (double aficion, int indice) {…} public double getAficion (int indice) {…} public double grado_afinidad(Usuario a) public Usuario pedir_amistad(Usuario a[])

Profesor: Juan Antonio López Quesada.

Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 5

private double calcular_medio_aficion(Usuario a[],int indice_afi) { /* devuelve el valor medio que tienen unos usuarios respecto a una determinada afición. Las aficiones se representan con un vector double[20].*/

double vm=0.0; for(int i=0;i<a.length;i++) {

vm+=a[i].aficiones[indice_afi]; } return vm/a.length;

}

Recordatorio para la creación de Excepciones: public class Error01Exception extends Exception {

public Error01Exception(String mensaje) {

super(mensaje); }

}

Para lanzarlo: throw new Error01Exception("XXXXXXXXXXXXXX");

Profesor: Juan Antonio López Quesada.

Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 6

Apartado 4.- Rellena el cuerpo de los siguientes métodos nuevos y resueltos de proyectos Netbeans de cursos

anteriores. (5.5p)

8. Clase Java que represente un Dispositivo:

public class Instrucción {

private String codigo; // nombre de la instrucción public int prioridad; // prioridad de la instrucción public long tiempo; // instante en el que se invoca la instrucción // Contructor de inicializar cada uno de los atributos de una instrución public Instruccion (String codigo, int prioridad, long tiempo) { ... } // Devuelve el código/nombre de la insrtucción. Por ejemplo podría devolver “SUM” public String getCodigo () {…. } // Método que compara dos instrucciones devolviendo true si ambas tienen el mismo código/nombre de acción public boolean compareToIntruccion (Instrucción aux){…}

} public class Dispositivo {

private Instruccion[] cola; // vector de instrucciones private int numInstrucciones; // número de instrucciones en el dispositivo // Constructor tamaño inicial de 100 public Dispositivo () { this.cola=new Instrucción[100]; this.numInstrucciones=-1; } // Constructor con tamaño inicial proporcionado por el usuario public Dispositivo (int tama_max) { …}; // Método que se ejecuta cuando se quiere introducir una instrucción public void putInstruccion (Instruccion i) { ... } // Método que determina cuantas instrucciones son del nombre/código “XX” public int count_codigo (String codigo) { ... } // Método que ejecuta una instrucción. public void ejecutarInstruccion(){….} public int pos_mayor prioridad () {/* Devuelve la posición de la instrucción con mayor prioridad. Si el sistema está vacío devuelve -1} public void ejecutarInstruccion(int pos){ /*Método que ejecuta la instrucción que ocupa la posición p. La ejecución de la instrucción cola[p] implica simularlo mostrando por pantalla las instrucción y a continuación desplazando todas la siguientes una posición a la izquierda y actualizando el valor de numInstrucciones. Si no hay instrucciones debe aparecer por pantalla “dispositivo vacío” */} public Dispositivo mayor_carga (Dispositivo [] aux) {/*Método que devuelve el dispositivo con mayor número de instrucciones a ejecutar */}

Profesor: Juan Antonio López Quesada.

Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 7

public void exec_MAX_Prioridad(){ Ejecutar la instrucción de máxima prioridad} public void exec_DISPOSITIVO_Mcarga(Dispositivo [] aux){ } // Ejecutar la instrucción del dispositivo de mayor carga!!!! public Dispositivo count_Mcodigo (String codigo, Dispositivo [] aux) { } // Método que determina qué dispositivo tiene el mayor número de instrucciones son “XX”.

}

public Dispositivo mayor_carga (Dispositivo [] aux) { (0.5p) M1 /*Método que devuelve el dispositivo con mayor número de instrucciones a ejecutar */ } // Fin del new método

public int ejecutarCodigoInstruccion (String codigo) { (0.5p) M2 // Método que ejecuta la instrucción perteneciente a la primera aparición de la instrucción con código “XX”. S el dispositivo está vaco devuelve -1, sino se ha encontrado una instrucción con está características devuelve -2 y si ha podido realizar el proceso devuelve 0. } // Fin del new método

Profesor: Juan Antonio López Quesada.

Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 8

9. Implementa los métodos de la clase CajeroAutomático:

public class Operacion {

private String nTarjeta; // número de la tarjeta public String operacion; // tipo de operación por ejemplo VERSALDO public int cantidad; // Cantidad monetaria retirada en una operación de RETIRAR // Contructor de inicializar cada uno de los atributos de una instrución public Operacion (String nt, String op) { ... } // En este caso la cantidad tendrá un valor de -1 euros public Operacion (String nt, String op, int cantidad) { ... } // Devuelve el código de la operación. public String getOperacion () {…. }

} public class CajeroAutomatico {

public Operacion[] cola; // vector de operaciones private int numTransacciones; // número de instrucciones en el dispositivo // Constructor tamaño inicial de 100 public CajeroAutomatico () { this.cola=new Operacion[100]; this. numTransacciones =0; } // Constructor con tamaño inicial proporcionado por el usuario public CajeroAutomatico (int tama_max) { …}; // Método que incorpora una operación al sistema public void putTransacciones (Operacion i) { ... } // Método que determina cuantas operaciones ha realizado una trajeta public int count_operaciones(String nt) { ... } // Método que dado una tarjeta determina la cantidad total de dinero retirada.

public int cantidadRetirado(String nt){….} public String mayorRetirada(String [] nt) { ... } /*Método que dado un vector de tarjetas de crédito determina y devuelve aquella que ha retirado más efectivo. */

}

public int cantidadRetirada(){….}// (0.5p) M3 /*Método que devuelve la cantidad de dinero retirado y por tanto la suma de las cantidades en operaciones RETIRADA. */

{

} // Fin del new método

Profesor: Juan Antonio López Quesada.

Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 9

public CajeroAutomatico cajeroMaximaRetirada(CajeroAutomatico [] banco)// (0.5p) M4 /*Método que devuelve el cajero automático donde se ha retirado una total mayor cantidad monetaria. */ {

} // Fin del new método

10. Escriba los métodos que se proponen de la clase Usuario:

Cada usuario se representará mediante un objeto, que contiene su dirección de correo electrónico y un array de 20 números reales entre 0.0 y 1.0, que indican el interés del usuario respecto a 20 aficiones diferentes.

Atributos:

public String email; public double [] aficiones;

Métodos: void Usuario(String correo) {…} public void setAficion (double aficion, int indice) {…} public double getAficion (int indice) {…} public double grado_afinidad(Usuario a) public Usuario pedir_amistad(Usuario a[]) private double calcular_medio_aficion(Usuario a[],int i) public Usuario usuario_medio(Usuario a[])

Profesor: Juan Antonio López Quesada.

Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 10

public Usuario pedir_amistad(Usuario a[]) { // (0.5p) M5 /* Devuelve el Usuario que tiene mayor afinidad conmigo. La afinidad es una valor entre 0.0 y 1.0, determinamos que la mayor afinidad en cuanto más cercano es el valor calculado a 0.0*/

} // Fin del new método

public double grado_afinidad_usuario_medio(Usuario a[]) { // (0.5p) M6 // Determina el grado de afinidad entre yo y el usuario medio de un grupo de personas

} // Fin del new método

Profesor: Juan Antonio López Quesada.

Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 11

11. Implementa los métodos de laclase Paquete y de la clase Router:

Clase Ip: Atributos:

public int x: 0..255 // x.168.1.250 public int y: 0..255 // 192.y.1.250 public int w: 0..255 // 192.168.w.250 public int z: 0..255 // 192.168.1.z

Métodos public Ip (int ax,int by,int cw,int dz) {…} public boolean compareToIp (Ip aux) {…}

Clase Paquete que modela el datagrama a nivel ip: Atributos:

public Ip ip_origen: ip de origen del datagrama public Ip ip_destino: ip de destino del paquete de información public int QoS: factor de calidad del servicio -0,1..5- public int saltosmax: número máximo de saltos o router transitados

Métodos public Paquete(Ip origen,Ip destino,int calidad,int saltos) {…} public boolean compareToPaquete(Paquete aux) {…} private boolean es_claseABC(int cod) {…} // int cod [1: clase A, 2: clase B, 3: clase C] public int cantidad_paquetes_Clase_ABC (Paquete []a, int clase) {…} //Determina cuantos paquetes son de la clase a la que se pregunta

public int cantidad_paquetes_saltos (Paquete []a, int nsaltos) { // (0.5p) M7 //Determina cuantos paquetes tienen un número menor en el atributo this.saltosmax respecto al propocionado como parámetro.

} // Fin del new método

Profesor: Juan Antonio López Quesada.

Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 12

Clase que modela un Router: Atributos: public String marca_route; public Ip ip_route; public Paquete [] in: // Buffer de entrada de paquetes public Paquete [] out: // Buffer de salida de paquetes public int np_int: //número de paquetes ip que están a la espera de entrar public int np_out: //número de paquetes ip que están a la espera de salir La clase Router tendrán las método: un constructor : se definir un buffer de un buffer in/out con tamaño máximo de 20 public boolean llenoRouterIn() {…} public boolean vacioRouterIn() {…} public void put_int(Paquete a) {…} public Paquete get_int() {…} // Obtiene el in[0] despalzando los siguientes una pos public int numero_paquetes_Iporigen_in(Ip origen) {…} public int numero_paquetes_QoS_in(int q) {…} public int [] numero_paquetes_tipos_QoS_in(){…} // numero de paquetes para cada tipo de valores QoS 0,1..5 public Router mayor_paquetes_QoS_in(Router [] a, int q) { // Devuelve el router con mayor número de paquetes in (entrada) de calidad q proporcionada por parámetro public int vaciosRouterIn(Router [] a) { // Devuelve cuantos router están vacios en la entrada de su sistema

public Router mayor_paquetes_QoS_in(Router [] a, int q) { // (0.5p) M8 // Devuelve el router con mayor número de paquetes in (entrada) de calidad q proporcionada por parámetro

} // Fin del new método

Profesor: Juan Antonio López Quesada.

Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 13

12. Implementa los métodos para la Clase ExamenTest que permita la corrección de los exámenes tipo test de los alumnos del curso de 2ºASIR (1.5p)

package examen_2016_2017;

/*

Clase que representa las respuesta de un examen

tipo test.

*/

public class ExamenTest

{

//Atributos:

public String dni; // El dni del alumno

public int quita; // n mal quitan 1 bien

public int [] respuestas;

/* [0] guarda la respuesta de la primera pregunta,

[1] guarda la respuesta de la segunda respuesta, ......

Las respuestas pueden ser 1,2,3 o 4 (si es 1 equivale a seleccionar A ....)

Si no se contesta una cuestión de almacenará un -1

*/

public ExamenTest(String d, int [] res) { // para la quita pondremos 0 }

public ExamenTest(int q, int [] res) { // para el dni será null y quita 0 }

public int n_preguntas_mal(ExamenTest alumno) { // Cuantas preguntas del examen

pasado como parámetro están mal respecto a this }

public int n_preguntas_bien(ExamenTest alumno) { // Cuantas preguntas del

examen pasado como parámetro están bien respecto a this }

public double nota (ExamenTest alumno) { // Nota que ha sacado el alumno pasado

como parámetro }

public String mejorAlumno (ExamenTest [] alumnos) { // Se devuelve el alumno con

mejor calificación

}

}

public double notaMedia (ExamenTest [] alumnos) { (0.5p) M9 // Devuelve la nota media de los alumnos para el examen tipo test

} // Fin del new método

Profesor: Juan Antonio López Quesada.

Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 14

Suponemos que tenemos este método: public ExamenTest mejorExamenTest (ExamenTest [] alumnos) { // Se devuelve el examen con mejor calificación }

public double notaMejorExamen(ExamenTest [] alumnos) { (0.5p) M10 // Devuelve la nota del mejor examen realizado

} // Fin del new método

13. Implementa los nuevos métodos a la clase InterpreteComandos que permite simular la ejecución de comandos Ubuntu

package examen_2016_2017;

public class Comando

{

//Atributos:

public String cmd; // es el comando como por ejemplo ls

public String parameter; // parámetros del comando

public int modo; // modo de ejecución

public int n_parameter; // número de parámetros que se pasan al comando

public Comando (String c, String p, int m, int np) (0.25p) //método 1 { }

public boolean compareToComando (Comando aux) (0.25p) //método 2 { }

}

package examen_2016_2017;

/* Clase que representa una secuencia de

comandos enviados al sistema para ser ejecutados.*/

public class InterpreteComando

{

//Atributos:

public Comando [] buffercmd; // Lista de comandos a ejecutar

public int pos; // Posición del último comando a ejecutar

public InterpreteComando() (0.25p) //método 1 { // Por dejecto la capacidad del Interprete será de 10 comandos y pos=0

Profesor: Juan Antonio López Quesada.

Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 15

}

public InterpreteComando(int capacidad) (0.25p) //método 2 { // La capacidad del Interprete la proporciona el usuario y pos=0

}

public boolean llenoInterprete() (0.25p) //método 3 { // Devuelve true si no puede almacenar más comandos

}

public boolean vacioInterprete() (0.25p) //método 4 { // Devuelve true si no hay comando para ejecutar

}

public boolean ejecutarComando(Comando aux) (0.25p) //método 5 { // Añade el comando proporcionado al final del interprete devolviebndo true. Sino

// puede añadirse por estar lleno se devolverá un false

}

public Comando buscarComando(String cmd) (0.25p) //método 6 { // Devuelve el primer comando donde coincida su cmd y el cmd pasado por parámetro.

// Sino existe dicho comando devolverá null

}

public int numero_comando_modo(int modo) (0.25p) //método 7 { // Devuelve la cantidad de comando del modo indicado

}

}

public int numeroInterpretesVacios (InterpreteComando [] cmds) (0.5p) M11 { // Devuelve el número de interpretes que no tienen comando para ejecutar

} // Fin del new método

Profesor: Juan Antonio López Quesada.

Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 16

Apartado 5.- Cuestionario Tipo Test

14. Cuestionario tipo test (2 mal quitan 1 bien): (1.5 puntos)

1) ¿ Qué ocurre cuando se compila y ejecuta la siguiente clase ?

class MiClase { public static void main (String[] args) { String s1[] = new String[5]; String str = s1[0].toUpperCase(); System.out.println(str); } }

a. Imprime NULL. b. Da un error al compilar. c. Imprime null. d. Da una excepción NullPointerException al ejecutar.

2) Qué se escribe por pantalla con la siguiente línea de código: System.out.println ((int)

Math.PI); a. 3.1415926 b. 3 c. nada, hay un error al compilar. d. nada, hay un error durante la ejecución.

3) Dada la siguiente definición: ¿Cuál debería ser el contenido del constructor?

class Temperatura {

double t; Temperatura(double t) { ¿? } }

a. t=t;

b. double t=t; c. this.t=t; d. No se puede llamar igual el parámetro del constructor que el atributo de la clase

4) "for (x= 5; x <100; x*= 2) { cosas; }" es equivalente a ...

a. x= 5; do { cosas; x*= 2; } while (x <100); b. x= 5; while (x <100) { cosas; x*= 2; }

5) 2. Dado el siguiente fragmento de programa: Indique que afirmación es cierta:

int k; for (k=5 ; k>0 ; k--)

System.out.print(k); System.out.print(k);

a. Se imprime 543210 b. Se imprime 5432100 c. Se imprime 554433221100 d. Se imprime 543210-1

6) Indique el elemento que no es obligatorio en una declaración de variable:

a. La asignación del valor inicial. b. El identificador o nombre. c. El punto y coma.

d. El tipo.

Profesor: Juan Antonio López Quesada.

Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 17

7) Indique la salida de:

int a= 7, b= 3; System.out.println ((++a) * b);

a. 24 b. 21

c. 10

d. 73

8) Evalúe el valor final que toma la variable "s":

int n= 1; s= 0;

while (n <= 9) s+=n;

a. 45 b. 0 c. 9 d. el programa no termina nunca

9) ¿ Qué imprime este programa ? int metodo (int v1) { return v1*v1; }

……… int v = 3; System.out.print (metodo (metodo (v))); ...

a. Tiene errores que impiden su compilación b. 9 c. 81

d. Compila; pero tiene errores que impiden su ejecución

10) ¿Qué se imprimirá al ejecutar el siguiente bucle? for (int i=0; i < 5; i++) { if (i==3) { i=5; } System.out.println (i + " ");

}

a. 0 1 2 3 4 b. 0 1 2 5 c. 0 1 2 4 d. 0 1 2

11) Indique qué ocurre con el siguiente código:

int a[] = new int[10]; for (int i=0 ; i<=a.length ; i++) System.out.print(a[i]);

a. Error de ejecución: índice fuera de rango. b. Error de compilación: no se asignaron valores al array. c. Escribe los 10 valores almacenados en a. d. Escribe 10 ceros.

Profesor: Juan Antonio López Quesada.

Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 18

12) Indique qué escribe una llamada al método m() void m() { int x = 0; try { System.out.print(x++); if (x>0) throw new Exception();

System.out.print(x++); } catch (Exception e) { System.out.print(x++); } finally { System.out.print(x++); } }

a. 012 b. 0 c. 01

d. 0123

13) Dados los siguientes fragmentos de código: class ClaseC { public void fmet (int i) { ... }

public int fmet (int i) { ... } } ... ClaseC c = new ClaseC(); c.fmet(4);

Se produce:

a. la llamada al primer método fmet. b. la llamada a ningún método porque hay sobrecarga. c. un error al compilar. d. un error al ejecutar.

14) Dado el método "imprime": void imprime (boolean ok) { System.out.println ("La respuesta " + (ok?"NO":"") + " está mal"); } ¿qué imprime la llamada imprime(false)?

a. La respuesta está mal

b. La respuesta NO está mal c. Se produce un error de compilación

15) En una sentencia try-catch-finally:

a. Los bloques catch se pueden repetir tantas veces como excepciones de distinto

tipo se desee atrapar. El bloque finally debe aparecer al menos una vez y se ejecuta siempre.

b. Los bloques catch se pueden repetir tantas veces como excepciones de distinto tipo se desee atrapar. El bloque finally no es opcional y se ejecuta siempre.

c. Los bloques catch se pueden repetir tantas veces como excepciones de distinto tipo se desee atrapar. El bloque finally es opcional y solo puede aparecer una vez. Este bloque se ejecuta siempre.

d. Todas las afirmaciones son falsas

Profesor: Juan Antonio López Quesada.

Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 19

Unidad 3

Programación Orientada a Objetos. Programación

JAVA. Parte II (2.5p)

15. Implementa la Clase ProgramaJava(1.50p)

package examen_2017_2018.programacion;

/*

Clase que representa un programa Java.

*/

public class ProgramaJava // (1.50p) 6 métodos

{

//Atributos:

public String [] lineas_codigo;

public int numero_lineas;

public int modo_ejecucion;

public String path;

public String [] argumentos;

public int numero_argumentos;

//---------------------------------------------------------------------------------------

//Métodos: Constructor

//---------------------------------------------------------------------------------------

public ProgramaJava (int modo,String path) // (0.25p) método 1

{

/* Se inicializa los atributos y se considera que la longitud del vector

de líneas de codigo es 10 y el vector de argumentos es 3.

numero_lineas=0 y numero_argumentos=0

*/

}

//---------------------------------------------------------------------------------------

// Otros métodos

//---------------------------------------------------------------------------------------

public void insertar_linea(String l) // (0.25p) método 2

{ // Añade al final del vector de líneas de código una nueva.

}

public int contar_tokens(String inst) // (0.25p) método 3

{

/* Determina por ejemplo cuantos for hay en nuestro programa ¿Cuántas líneas hay un for??.

Utiliza el método contains de la clase String.

Ejemplo: aux.contains("int") dada la variable String aux,

esta expresión es true si contiene el String literal "int".

*/

}

Profesor: Juan Antonio López Quesada.

Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 20

public void sustituir_linea_codigo(String l,int pos) // (0.25p) método 4

{ /* Reemplaza la linea que se encuentra en [pos] por la

que se ha pasado como parámetro.

Se valorará la robustez del método.*/

}

@SuppressWarnings("empty-statement")

public boolean compareToProgramaJava(ProgramaJava aux)// (0.25p) método 5

{ /*

2 programas son iguales si tienen el mismo

número de líneas, así como su contenidos.

Recuerdo que para comparar dos String tenemos el método compareTo() que

devuelve un 0 se son String son iguales.*/

}

@Override

public String toString() // (0.25p) método 6

{ /* Devolver para println() las líneas que componen el programa en MAYÚSCULAS

Utiliza la clase StringBuffer y su método append. Véase el método ejecutar

en el examen del Dispositivo.*/

StringBuffer resul=new StringBuffer();

resul.append("VISUALIZACIÓN:").append("\n");

}

/* Al ejecutar el main debe obtenerse:

VISUALIZACIÓN:

BUFFEREDREADER IN=NEW BUFFEREDREADER(NEW INPUTSTREAMREADER(SYSTEM.IN));

SYSTEM.OUT.PRINTLN("INTRODUCE UN NUMERO: ");

INT NUM = INTEGER.VALUEOF(IN.READLINE().TRIM()).INTVALUE();

INT PRODUCTO = 1;

FOR (; NUM>1 ; NUM--)

{

PRODUCTO = PRODUCTO * NUM;

}

SYSTEM.OUT.PRINTLN("………… "+NUM+" ES "+ PRODUCTO);

VISUALIZACIÓN:

BUFFEREDREADER IN=NEW BUFFEREDREADER(NEW INPUTSTREAMREADER(SYSTEM.IN));

SYSTEM.OUT.PRINTLN("INTRODUCE UN NUMERO: ");

INT NUM = INTEGER.VALUEOF(IN.READLINE().TRIM()).INTVALUE();

INT PRODUCTO = 1;

FOR (; NUM>1 ; NUM--)

{

PRODUCTO *= NUM;

}

SYSTEM.OUT.PRINTLN("………… "+NUM+" ES "+ PRODUCTO);

El número de tokens es: 1

El número de tokens es: 2

SON IGUALES

NO SON IGUALES

*/

}

Profesor: Juan Antonio López Quesada.

Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 21

Implementa la CalculadoraAsir(2.25p) package examen_2017_2018.estadistica;

public class ExpresionAritmetica // (0.75p) 3 métodos

{

//Atributos:

public String expresion; // "3+5*5-4"

public int numero_operadores; // sería para el caso anterior 3 [+,*,-]

public int numero_operandos; // sería para el caso anterior 4 [3,5,5,4]

public static final String [] OPERADORES_NO_VALIDOS={"/","%"};

//Métodos:

public ExpresionAritmetica (String expre, int n_operadores, int n_operandos) // (0.25p) método 1

{ // Inicializa los atributos, menos la constante de operadores no validos.

}

public boolean compareToExpresion (ExpresionAritmetica a) // (0.25p) método 2

{ // determina si la expresion pasada como parámetro es igual a la this.expresion

}

@SuppressWarnings("empty-statement")

public boolean es_expresion_valida () // (0.25p) método 3

{ /* Devuelve false si contiene al menos un operador no válido.

Utiliza el método de los String aux.contains(String) de devuelve true si

la secuencia o String proporcionado no está en el texto/String contenido

en la variable aux.

Para referenciar al vector constante de operadores no validos hay que

hacerlo así: ExpresionAritmetica.OPERADORES_NO_VALIDOS[i] i:0..length-1

y su longitud sería así: ExpresionAritmetica.OPERADORES_NO_VALIDOS.length

*/

}

}

package examen_2017_2018.estadistica;

import javax.script.ScriptEngine;

import javax.script.ScriptEngineManager;

import javax.script.ScriptException;

/*

Clase que representa una secuencia de comandos enviados al sistema para ser ejecutados.

*/

public class CalculadoraAsir // (0.75p) 3 métodos + (1.5p) 6 métodos = (2.25p) 9 métodos

{

//Atributos:

public ExpresionAritmetica [] buffercalculadora; // Lista de expresiones a evaluar

public int pos; // Posición de la última expresion a evaluar

//Métodos:

Profesor: Juan Antonio López Quesada.

Ciclo Formativo de Grado Superior: IAW WEB: http://dis.um.es/~lopezquesada Pag. 22

public CalculadoraAsir() // (0.25p) método 1

{ // Por defecto la capacidad de la calculadora será de 10 y pos=0

}

public CalculadoraAsir(int capacidad) // (0.25p) método 2

{ // La capacidad de la calculadora la proporciona el usuario y pos=0

}

public int estadoCalculadoraAsir() // (0.25p) método 3

{ // Devuelve 1 si está lleno, 2 si está vacio, 3 en otro caso.

}

public boolean agregarExpresion(ExpresionAritmetica aux) // (0.25p) método 4

{ // Añade una nueva expresion al final devolviendo true. Sino

// puede añadirse por estar lleno se devolverá un false

}

public void evaluarExpresion(int pos) throws ScriptException // (0.25p) método 5

{ /* Visualiza el resultado de evaluar la expresion

que se encuentra en [pos] -se considerará la robustez-.

Si dicha expresión no es válida de mostrará el mensaje pertinente.

Para evaluar expresiones engine.eval("3+5");

*/

ScriptEngineManager manager = new ScriptEngineManager();

ScriptEngine engine = manager.getEngineByName("js");

}

@SuppressWarnings("empty-statement")

public boolean existeEqualExpresion(ExpresionAritmetica aux) throws ScriptException // (0.25p)

método 6

{ /* Devuelve true si existe al menos una expresion

en la calculadora cuya evaluación coincida con la evaluacion

del parámetro proporcionado.

No vamos a tener en cuenta la validez de las expresiones en la calculadora.

*/

ScriptEngineManager manager = new ScriptEngineManager();

ScriptEngine engine = manager.getEngineByName("js");

}

/* Al ejecutar el main debe obtenerse:

Las dos expresiones son iguales

Las dos expresiones son diferentes

La expresión es válida

La expresión no es válida

El resultado de evaluar la expresion [3+3*5] es:18

El resultado de evaluar la expresion [3/140*5] es:Expresión no válida

El resultado de evaluar la expresion [10+3*5+3] es:28

El resultado de evaluar la expresion [4+3*5] es:19

El valor de la expresion no existe en la calculadora.

El valor de la expresion si existe en la calculadora.

*/

}