


Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Hoja de problemas interfaces java
Tipo: Ejercicios
1 / 4
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!



Implementa un programa que permita realizar operaciones aritm´eticas utili- zando un int´erprete de comandos. Concretamente los comandos que podremos utilizar son:
Ayuda: Que muestra por pantalla informaci´on sobre los distintos comandos disponibles en el int´erprete.
Salir: Termina la ejecuci´on de la aplicaci´on.
Operacion Tipo Argumentos: Que permite la realizaci´on de operaciones aritm´eticas como la suma, multiplicaci´on, divisi´on, ra´ız cuadrada, etc. Ti- po representa el tipo de operaci´on a realizar, y Argumentos son los argu- mentos necesarios para realizar la operaci´on. Por ejemplo, Operacion Suma 2 3 devolver´ıa como resultado 5, o Operacion Raiz 81 devolver´ıa 9 como resultado.
Para implementar el programa utiliza dos interfaces OperacionAritmetica y Comando, para representar las operaciones asociadas a una operaci´on aritm´etica y a un comando respectivamente. La primera interfaz tiene los m´etodos Ope- racionAritmetica parsea(String s) y double ejecuta(), mientras que la segunda contiene Comando parsea(String cmd), void ejecuta() y boolean stop(). La OperacionAritmetica tiene que ser implementada por las clases Suma, Raiz, etc., mientras que las comandos Ayuda, Salir y Operacion implementar´an la in- terfaz Comando. Adem´as implementa dos clases ParserComando y ParserOpe- racionAritmetica, encargadas de parsear un String y devolver, si es posible, el correspondiente comando u operaci´on aritm´etica. Por ejemplo, en la clase Par- serComando tendremos el m´etodo public static Comando parsea(String s) que dependiendo de s devuelve el comando correspondiente o null si el String de entrada no representa comando alguno. La clase ParserOperacionAritmetica se define de forma similar, pero genera operaciones aritm´eticas. Finalmente implementa una clase Main, con su correspondiente m´etodo main para probar la aplicaci´on, de manera que de la aplicaci´on s´olo se puede salir cuando se ejecute el comando Salir.
Vamos a desarrollar una aplicaci´on que nos va a permitir medir el tiempo medio que requiere un determinado algoritmo de ordenaci´on en ordenar arrays de distinto tama˜no y de distintas caracter´ısticas. Para ello crea una interfaz Generador con un ´unico m´etodo generadorArray(int tam), que devolver´a un array que es el que utilizaremos en los algoritmos de ordenaci´on. Crea las clases Gene- radorAleatorio, GeneradorAscendente y GeneradorDescendente, que implementan la interfaz Generador, implementando el m´etodo generadorArray(int tam) como sigue:
GeneradorAleatorio. Crea un array con los elementos 0 ,... , tam introduci- dos aleatoriamente;
GeneradorAscendente. Genera un array con los elementos 0 ,... , tam orde- nados crecientemente;
GeneradorDescendente. Genera un array con los elementos 0 ,... , tam or- denados decrecientemente.
Despu´es crea una interfaz AlgoritmosOrdenacion con un ´unico m´etodo or- denar(int[] array), que servir´a para ordenar el array pasado como par´ametro. Crea las clases AlgoritmoSeleccion y AlgoritmoQuickSort e implementa el m´etodo anterior convenientemente. Crea la clase Benchmark para que nos permita probar los distintos algoritmos de ordenaci´on. Esta clase tendr´a un atributo de tipo Generador gen y otro de tipo AlgoritmosOrdenacion alg, que se inicializan en el constructor de la clase. Adem´as dicha clase contendr´a un m´etodo void ejecuta(), que ser´a el encargado de medir el tiempo que tarda en ordenarse un array generado por gen utilizando el algoritmo de ordenaci´on alg. Para medir el tiempo de ejecuci´on puedes utilizar el siguiente c´odigo dentro del m´etodo ejecuta:
// Generamos el array int[] prototipo = gen.generadorArray(); long totalTime = 0; // Repetimos la ordenacion nRep veces for (long i = 0; i < nRep; i++) { int [] array = Arrays.copyOf(prototipo, tam); long startTime = System.currentTimeMillis(); alg.ordenar(array); long endTime = System.currentTimeMillis(); totalTime += endTime - startTime; } System.out.println(”Avg time: ”+ totalTime/nRep ); Implementa una clase Main, con su correspondiente m´etodo main para probar los distintos algoritmos de ordenaci´on, creando distintos objetos de la clase Benchmark e invocando a su m´etodo ejecuta.
public class A implements A1, A2{ } public class B extends A { } public class C extends A { }
Explica razonadamente si las instrucciones siguientes son ciertas o falsas:
(a) A1 a = new A1(); (b) A1 a = new B(); (c) C c = new A(); (d) B b = new C();
(d) Dado el siguiente c´odigo:
interface I1 {} interface I2 {} class A {} class B {} class C implements I1 {} class D implements I2 {}
Indica cuales de las siguientes declaraciones de clase son correctas:
(a) class W extends A, B {} (b) class X extends C implements I1 {} (c) class Y extends D implements I1, I2 {} (d) class Z implements I1, I2 {}