Java 278-287 Ejercicios Interfaces



Comments



Description

•.• • • • ---- Programación en Java 2 Problemas resueltos INTERFACES Ejercicio 8.1: Escriba una interfaz ColeccionSimple , que declare los siguientes métodos: estáVacía(): devuelve true si la colección está vacía y false en caso contrario. extraer(): devuelve y elimina el primer elemento de la colección. primero(): devuelva el primer elemento de la colección. añadir(): añade un objeto por el extremo que corresponda y devuelve true si se ha añadido y false en caso contrario. A continuación, escriba una clase PilaArray que implemente esta interfaz utilizando para ello un array de Object y un contador de objetos. Planteamiento: En la interfaz se declaran todos los métodos sin implementar ninguno. Para la clase se utilizan como atributos un array de Object y un entero que sirve de contador de objetos. El constructor recibe por parámetro el tamaño máximo de la pila. El método estáVací a () comprueba si el contador es O. El método añadi r() comprueba que cabe el elemento y si es así, lo añade en la celda que indica el contador, posteriormente incrementa el valor del contador. Devuelve true o fa 1se según si se ha añadido o no. primero() si está vacía lanza NoSuchElementException, si no devuelve el elemento que está en la celda indicada por contador - lo extraer () si está vacía lanza NoSuchElementExcept ion, si no decrementa el contador y devuelve el elemento que está en la celda indicada por el contador después de decrementarse. NoSuchElementExcept ion hereda de Runt i meExcept ion, por lo que no necesita ser declarada en la cláusula throws del método. Se sobreescribe el método toString() de manera que devuelva los objetos encerrados entre corchetes y separados por comas, comenzando por el último elemento insertado y terminando por el primero. Solución: public interface ColeccionSimple boolean estáVací a() : -+-------------------' boolean añadir(Object o): Losmétodosson pub1i c aunque Object primero(): -+-------------11 nose indique expl ícitamente. Object extraer(): } import java.util.NoSuchElem entException: Pi 1aArray implementa public class PilaArray impl ements ColeccionSimple{ ColeccionSimple. ¿ private ObjectCJ array: private int contador: I Array de Object, podráreferenciar a cualquier lipode objetos. public PilaArray(int tamañoMaxlmo) { array = new ObjectCtamañoMáximoJ: contador = O: } public boolean estáVacía(){ Escriba en la pantalla el contenido de la pila antes y después de llamar a imprimirYVaciar().Interfaces return contador == O.lengthO .1) + "]". . public Object primero(){ if (estáVacía()) throw new NoSuchElementExceptionO. ? . En la aplicación principal cree un objeto de tipo PilaArray. se podría declarar la variable s del tipo Stri ngBuffer mayor eficiencia. else return array[ --contador] . public Object extraer(){ if (estáVacía()) throw new NoSuchElementException(). } if (!estáVacía()) return s. ---- •. ] Comentario: En el método toStri ng().". else{ array[contador] = o.substring(O. llame a los métodos rellenar() e imprlmirYVaciar() pasando este objeto por parámetro.length) return false.• ~------------11 Se predecrementaelcontador. i-) { S += array[i]. contador++. de nombre PruebaColeccionSimple. a) b) c) para conseguir en la que se implementen dos métodos: rellenar(): recibe por parámetro un objeto de tipo ColeccionSimple y añade los números del uno al diez. ] public String toString(){ String s = "I": for (int i = contador . imprimirYVaciar(): recibe por parámetro un objeto de tipo ColeccionSimple y va extrayendo e imprimiendo los datos de la colección hasta que se quede vacía. else return array[contador-l]. Ejercicio 8.••• ~-----1 Se elimina laúltima coma. else return s + "I": s.toString()+" . No es necesario declarar en +----------11 lacabeceralaexcepción NoSuchElementException.2: Escriba una clase. return true. public boolean añadir(Object o){ if (contador == array.1: i >= O.••. Nota: Fíjese que los métodos rellenarO e imprimirYVaciarO son exactamente iguales que en el Ejercicio 5. se inserta por el final de la Li nkedL i st y se extrae por el principio. ~ -. r Se crea el objeto de tipo Pi 1aArray. al pasarlo por parámetro a los métodos que reciben Colecci onSimpl e no hay problemas de tipo.LinkedList. +-------------------------------------11 System. no importa si el tipo es una clase o una interfaz. por tanto. y mientras que no esté vacía se imprime en la pantalla el resultado del método extraer(). p se conviertea Co1ecci onSi mp 1e automáticamente. es que reciba un objeto de una clase que implemente esta interfaz y. Planteamiento: Cola implementa la interfaz ColeccionSimple. Se realiza una conversión automática de i nt en I nteger. Ejercicio 8. a) b) e) ---- Programación en Java 2 Planteamiento: En los métodos rellenar() e imprimi rYVaci are )el parámetro puede ser un objeto declarado del tipo de una interfaz. la conversión de tipo hacia arriba se realiza automáticamente. Solución: import java. public static void main(String[] args) PilaArray p = new PilaArray(20). out. lo importante es que con el objeto recibido se pueda llamar a los métodos. re 11enar( p) . out.3: Escriba una clase Cola que implemente la interfaz ColeccionSimple usando un objeto de la clase LinkedList.extreer O). Como Pi 1a hereda de Co 1ecc i onS i mp1e. public class Cola implements ColeccionSimple{ Cola implementaColeccionSimpl e.util. imprimirYVaciar(): se realiza un whi le.estáVacía(»{ System.•.añadir(i). Se establece una relación de composición entre Cola y Li nkedL i sto Para implementar la clase Co1a. Cuando se recibe un parámetro.21 del Capítulo 5. printl n( "La pi 1a: "+p). colección){ +-----------------. imprimi rYVaci arO imprimirá en el contrario al que se han añadido. Solución: public class PruebaColeccionSimple ( public static void rellenar(ColeccionSimple c){ tor (i nt i = 1: i <= 10: i ++) ( c.1 Se llamaautomáticamente al métodotoStri ng() del objetoque devuelve.. para ello delegará en un atributo de tipo Li nkedL i st. imprimirYVaciar(p). Lo importante. printl n(colección . out. publiC static void imprimirYVaciar(ColeccionSimple while(!colección. rellenarO: se realiza un for con un int que vaya de uno a diez y se llama a añadirO pasando este entero por parámetro. ~------------------------------------~I Porligaduradinámicase llamaal métodoañadi r() que correspondaa c. printl n( "La pil a: "+p). System. Por ligadura dinámica se llamará al método correspondiente a la clase del objeto que se reciba por parámetro. y con lo que cuenta el método. tendrá implementados los métodos de ColeccionSimple.J . 4: Escriba una clase PilaArrayList que implemente la interfaz ColeccionSimple heredando de ArrayList.addLast(obj).getFirst(). para este ejercicio. ya que siemprese añade elelemento.st paraelementosObject.util.toString(). public boolean añadir(Object obj){ lista. Comentarios: En los métodos primero() o extraer(). •. los métodos de LinkedList lanzan la excepción Ejercicio 8. public Cola() ( lista = new LinkedList<Object>(). public boolean estáVacía(){ return lista. I Llama a super () automáticamente. i I obj){ public boolean estáVacía (){ return isEmpty(). Por tanto. public boolean añadir(Object . public class PilaArrayList public PilaArrayList() } extends ArrayList<Object> ~ implements ColeccionSimple{ Hereda de ArrayL .isEmpty().st de Object e implementaCo 1eccí onS. la clase Pi 1aArrayL i st hereda de ArrayL i st e irnplementa la interfaz Co1ecci onSimp 1e.nkedL .ArrayList. Planteamiento: Java permite heredar de una sola clase e irnplementar todas las interfaces que se desee.Interfaces pri vate Li nkedl.removeFirst(). ---I Atributo L. NoSuchEl ementExcept ion si la cola estuviese vacía.í st<Object> 1ista: +--------. return true: +------------------11 Siempre devuelvetrue. mp 1e almismo tiempo.En estecaso alconstructor de ArrayL ist. Para irnplementar los métodos de Col ecci onSi mp1e se utilizan los métodos heredados de ArrayL i st. public Object primero(){ return lista. public Object extraer(){ return lista. En esta implementación se inserta y se extrae por el principio del ArrayL i sto Solución: import java. public String toString(){ return lista. co1ección){ ¡¡==============. System. se creen dos objetos de tipo Cola y PilaArrayList. ng() no se implementa porque se hereda de ArrayL i st.out. En los métodos primero() o extraer-O. imprimirYVaciar(co1a).----add(O..estáVacía()){ System. rellenar(co1a). Nota: El método toStri Programación en Java 2 Se invocan los métodos de ArrayL i st como si estuviesen en esta clase. Realice las mismas operaciones que realizó para el objeto PilaArray . +---~I Por ligadura dinámica se ejecutan los métodos que corresponden a la clase de c. ya que se heredan. Son los mismos métodos que en el Ejercicio8.añadir(i). println(colección. printl n( "La col a: " + col a). Pi1aArrayList pila = new PilaArrayList().2. public static void imprimirYVaciar(Co1eccionSimp1e while( !co1ección. .5: Modifique el método main de la clase del Ejercicio 8.2 para que en lugar de crear un objeto de tipo PilaArray. por tanto el código será el mismo excepto por la creación de los objetos.extraer()). Se hace automáticamente la conversión a Co1eccionSimp 1e. Solución: public class Main ( public static void rellenar(ColeccionSimple colección){ for (tnt i = 1: i <= lO.2. i++){+-----------------11 colección. public Object extraer(){ return remove(O). printl n( "La col a: " + col a) .6 del Capítulo 9.. } public static void main(String[] args) ( Cola cola = new Cola().~-""I return true. Obj). Comentario: La interfaz Co1ecci onS i mp1e y sus descendientes se han implementado para almacenar objetos de tipo Object. los métodos rell enar() e imprimi rYVaciar() sirven para objetos de cualquier clase que implemente Col eccionSimpl e. +--------------------11 System. los métodos de ArrayL i st lanzan la excepción IndexOutOfBounds Except ion si la pila estuviese vacía. Es preferible declarar estas clases genéricas con tipo parametrizado. Ejercicio 8. out. Para más información acerca de cómo hacer la clase ColeccionSimple genérica consulte el Ejercicio 9. public Object primero(){ return get(O). Planteamiento: Es el mismo que en el Ejercicio 8. de manera que el cliente elija qué tipo de datos quiere almacenar. out. Tanto las revistas como los libros deben tener (aparte de los constructores) un método toString() que devuelve el valor de todos los atributos en una cadena de caracteres. Las revistas tienen un número.println("La imprimirYVaciar(pila).println("La ~ pila: pila: " " + pila). Para prevenir posibles cambios en el programa se tiene que implementar una interfa: Prestable con los métodos prestar(). b) Se implementan las clases Libro y Revi sta que añaden sus nuevos atributos. el título y el año de publicación. También se implementan los métodos getAño(). e) La interfaz Prestable declara los métodos indicados sin implementarlos.6: Escriba un programa para una biblioteca que contenga libros y revistas. devolver() y prestado(). que se llama Pub1i caci ón. public Publicacion(String código. this. la clase Libro implementa Prestab 1e y. todos sus métodos. Los libros tienen además un atributo prestado. private String título. System. System. public int getAño(){ return año. this. También tienen un método que devuelve el año de publicación y otro para el código. String título. e) Se escriben sus constructores.Interfaces rellenar(pila) . this.título = título.código = código.out. La clase Libro implementa esta interfaz. se implementa un constructor que reciba por parámetro el valor de los tres atributos. public String getCódigo(){ return código. + Ejercicio 8. Solución: public class Publicacion { private String código. int año)] . En el momento de crear las revistas se pasa el número por parámetro. Los libros cuando se crean no están prestados. a) b) c) d) Las características comunes que se almacenan tanto para las revistas como para los libros son el código. getCódigo() y un método toString() que devuelve la información de estos tres atributos en forma de cadena de texto. . d) Se sobreescribe el método toStri ng() que también llama al método toStri ng() de la superclase.out. que llaman al constructor de la superclase. pila). private int año. Estas tres características se pasan por parámetro en el momento de crear los objetos.año = año. e) Planteamiento: a) Se implementa una superclase de Libro y Revi sta con sus características comunes. En esta clase además de declarar los tres atributos. por tanto. d) Se sobreescribe el método toStri ng() que también llama al método toStri ng() de la superclase. b) Se implementan las clases Libro y Revi sta que añaden sus nuevos atributos. se implementa un constructor que reciba por parámetro el valor de los tres atributos. Estas tres características se pasan por parámetro en el momento de crear los objetos. También tienen un método que devuelve el año de publicación y otro para el código.Interfaces rellenar(pila) : System. En el momento de crear las revistas se pasa el número por parámetro. public int getAño(){ return año: public String getCódigo(){ return código: . String título. todos sus métodos.año = año: int año)] . Para prevenir posibles cambios en el programa se tiene que implementar una interfa: Prestable con los métodos prestar().código = código: this.pr-tnt lntLa pila: imprimirYVaciar(pila): Systen. En esta clase además de declarar los tres atributos.6: Escriba un programa para una biblioteca que contenga libros y revistas.. Tanto las revistas como los libros deben tener (aparte de los constructores) un método toString() que devuelve el valor de todos los atributos en una cadena de caracteres. Planteamiento: a) Se implementa una superclase de Libro y Revi sta con sus características comunes. a) b) c) d) ÚJs características comunes que se almacenan tanto para las revistas como para los libros son el código. e) La interfaz Prestab 1e declara los métodos indicados sin implementarlos. Las revistas tienen un número. e) Se escriben sus constructores. el título y el año de publicación. por tanto. getCódigo() y un método toString() que devuelve la información de estos tres atributos en forma de cadena de texto. También se implementan los métodos getAño().out.outpr-tnt lnr'La pila: ---n . this. devolver() y prestado().título = título: this. que se llama Pub1i caci ón. Los libros cuando se crean no están prestados. que llaman al constructor de la superclase. e) Los libros tienen además un atributo prestado. Solución: public class Publicacion { private String código: private String título: private int año: public Publicacion(String código. la clase Libro implementa Prestab 1e y. + + pila): pila): n Ejercicio 8. La clase Libro implementa esta interfaz. toString() + (prestado? "prestado" "no prestado") + "vn": . título. int año. año): prestado = false: public void prestar(){ prestado = true: public void devolver(){ prestado = false: public boolean prestado(){ return prestado: public String toString(){ return super.número = número: de lasuperclase. título. añO):+----. public Revista(String código. public String toString(){ return super. String título. String t1tulo. public class Libro extends Publicacion implements Prestable{ private boolean prestado: public Libro(String código. int año){ super(código.. int número){ super(código.toString() + "Número: " + número + "\n": t public interface Prestable void prestar(): void devolver(): boolean prestado(): Llamada almétodo toStri ng() de lasuperclase. Llamada almétodo toString() this.~ public String toString(){ return "Código: " + código + "\nT1tulo: " + t1tulo + "\nAño de publicación: " Programación en Java 2 + año + "\n": public class Revista extends Publicacion private int número: +-------11 Llamada alconstructor de lasuperclase. "El jueves". Planteamiento: a) cuenta Prestados C) recibe un array de Objetos para que se pueda utilizar tanto con Publicaciones como con cualquier otro tipo de objetos que se puedan prestar. contador++: } return contador: } public static void main(String[] args) { Publicacion[] biblioteca = {new Libro("CCl". 2002. b) pub 1i caci onesAnteri oresAC) utiliza también un contador inicializado a O. int año){ public static int publicacionesAnterioresA(Publicacion[] int contador = O: for (Publicacion p: lista){ Todas las clases que hereden de if (p. new Revista("CR1". "La fundación". Solución: public class public Main static int cuentaPrestados(Object[] 1i sta) { i nt contador = O: ----------I~[ Se comprueba que es Prestab 1 e.tP=I======="""\\ 11 Se transforma a Prestab 1e } 11 para llamara prestadoC ). Se recorre el array obteniendo el año de cada una de las publicaciones. se utiliza un contador que se inicializa a O. publicacionesAnterioresA(): recibe por parámetro un array de Publicaciones y un año. Para comprobar si está prestado. Para prestar uno de los libros. "Quo". if (o instanceof Prestable && «Prestablelol. se accede a una de las celdas. mostrar por pantalla los datos almacenados en el' array y mostrar por pantalla cuántas publicaciones hay prestadas y cuántas hay anteriores a 1980 utilizando los métodos escritos anteriormente. 11 for CObject o: 1i sta l { ~ ~ . En el método main() crear un array de Publicaciones con 2 libros y 2 revistas. return contador: t lista. Para mostrar por pantalla la información se recorre el array y se muestra cada uno de los objetos utilizando su método toStri ngC). 1305). 81)}: . 2002. Si lo es. se comprobará si está prestado y en este caso se incrementará un contador. al que no es necesario llamar explícitamente. Después se llama a los métodos implementados anteriormente.7: Escriba una aplicación en la que se implementen dos métodos: a) b) c) ---~ •• cuentaPrestados(): recibe por parámetro un array de objetos y devuelve cuántos de ellos están prestados. new Revista("DR1". se comprueba si es menor que el año recibido por parárnetro y si es así. new LibroC"CC2" . Para contar cuántos objetos están prestados. ya que la clase Object no tiene el método prestadot). se transforma a Libro y se llama al método prestarO.prestado(ll contador++: . . en esta ocasión se le dan los datos en el momento de crearlo. se incrementa el contador. "El neuromante" . antes hay que convertirlo a Prestab 1e. getAño() <año) +--------11 Publ icación tienen el métodogetAñoC). devuelve cuántas publicaciones tienen fecha anterior al año recibido por parámetro. prestar uno de los libros. 1984). e) El array se puede crear de varias maneras. Se recorre el array comprobando si cada una de las celdas es Prestab 1e.Interfaces Ejercicio 8. 1951). Formato formato. formato. autor.1 1 . Para implementar los métodos de Prestab 1e declara un atributo boa 1ean prestado.• } ---Libro 1 = (LibrO)biblioteCa[OJ. duración. Ejercicio 8. Genero género) ( super(título. public String toString(){ return super.out. String autor. prestar() .println(publicacionesAnterioresA(biblioteca. toString() + (prestado? "\nprestado" "\nno prestado") + "vn": Comentario: Si la clase Diseo estuviera en otro paquete. Implementación de losmétodosde Prestab 1e. Planteamiento: La clase Di seoPrestab 1e hereda de Di seo e implementa el interfaz Prestab 1e implementando todos sus métodos.+--------------------.. public DiscoPrestable(String título. double duración. prestado = false. escrita en el Ejercicio 5. habría que importar del paquete la cláusula import. Heredade Diseo e implementaPrestab 1 e. Ejercicio 8. sobre herencia e implemente la interfaz Prestable. public boolean prestado(){ return prestado.println(cuentaPrestados(biblioteca)+ " libros prestados").8: Escriba una clase DiscoPrestable que herede de la clase Disco.out. Programación en Java 2 Se transfonna a Libro para poderllamar a prestar-o. public void devolver(){ prestado = false. Solución: public class DiscoPrestable extends Disco implements Prestable{ private boolean prestado. género).out. " publicaciones anteriores a 1980"). pub 1ie void prestar() { +-----------------11 prestado = true.13 del Capítulo 5. System.9: En el Ejercicio 8.println(p). for(Publicacion p: biblioteca){ System.7 modifique el programa principal para que: . 1980)+ System. Llamadaalconstructor de lasuperclase. prestar(): for (Disco d: discos){ System.prestado()) contador++: } Igual que en elEjercicio 8. Calcule e imprima por pantalla cuántos están prestados utilizando el método cuentaPrestados(). Genero. Genero. ) return contador: public static void main(String[J args) Disco[J discos = new Disco[3J: discos[OJ = new DiscoPrestable("Hopes and Fears".------I1 int contador = O: for (Object o: lista){ if (o instanceof Prestable && «Prestable)o).7. "U2". Formato.. 40. acepta el array de Diseo. y serviría para cualquier clase que implemente Prestab 1e.println(d): ~=====.mp3. Genero. 50.flamenco): ((Prestab 1e )discos [OJ) . Cree un array de tres objetos Disco. Se necesita hacer una conversión de tipo a DiseoPrestabl e para llamar al método prestar( l. out. Comentario: Di seoPrestab . System. "Keane".out. Conversiónde tipopara poderllamar a prestar()..rock): di scos[2J = new DiscoPrestabl e( "Soy gitano". Formato. que ha permitido tratar por igual a 1e que a Libro.Interfaces a) b) c) d) ---- •.prestar( ) : +------------il «Prestable)discos[2J). Introduzca un DiscoPrestable en cada celda. 60. printl n(cuentaPrestados(di scos) + " di scos prestados"): 1 Se convierte automáticamente a arrayde Object.cdAudio. que al recibir un array de Objeet. Al mismo tiempo Di seoPrestab 1e sigue siendo un Di seo y Libro sigue siendo una Pub 1i eaei ón.pop): discos[lJ = new DiscoPrestable("How to dismantle an atomic bomb". El mismo método sirve para ambas clases. Solución: public class Main public static int cuentaPrestados(Object[J lista){<III(:. d) Se llama al método euentaPrestados ( l. Preste dos de ellos.cdAudio. Fíjese en la utilidad de la interfaz Prestabl e. Planteamiento: a) Se declara el array de Diseo y se crea con tamaño 3. "Camarón". Formato. b) Se crean y se introducen los objetos DiseoPrestab 1e celda a celda e) Se prestan dos de ellos accediendo a la celda específica.
Copyright © 2024 DOKUMEN.SITE Inc.