PROGRAMACION Ejercicios 13 SHEILA NIETO UREÑA INTERFACES Crear un interfaz para realizar las 4 operaciones básicas de las Matemáticas. Crear un interfaz para cargar, ver, sumar y restar arrays. 1. Escriba un programa para una biblioteca que contenga libros y revistas. a) Las características comunes que se almacenan tanto para las revistas como para los libros son el código, el título y el año de publicación. Estas tres características se pasan por parámetro en el momento de crear los objetos. b) Los libros tienen además un atributo prestado. Los libros cuando se crean no están prestados. c) Las revistas tienen un número. En el momento de crear las revistas se pasa el número por parámetro. d) 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. También tienen un método que devuelve el año de publicación y otro para el código. e) Para prevenir posibles cambios en el programa se tiene que implementar una interfaz Prestable con los métodos prestar(), devolver(), y prestado(). la clase Libro implementa esta interfaz. Planteamiento: a) Se implementa una superclase de Libro y Revista con sus características comunes, que se llama Publicación. En esta clase además de declarar los tres atributos, se implementa un constructor que reciba por parámetro el valor de los tres atributos. También se implementan los métodos getAño(), getCódigo() y un método toString() que devuelve la información d estos tres atributos en forma de cadena de texto. b) Se implementan las clases Libro y Revista que añaden sus nuevos atributos. c) Se escriben sus constructores, que llaman al constructor de la superclase. d) Se sobrescribe el método toString() que también llama al método toString() de la superclase. e) La interfaz Prestable declara los métodos indicados sin implementarlos, la clase Libro implementa Prestable y, por tanto, todos los métodos. 1 PROGRAMACION Ejercicios 13 SHEILA NIETO UREÑA ejercicios13 claseInterfaz .......................................................................................................................................................3 OpBasicas........................................................................................................................................................ 3 OpMatematicas............................................................................................................................................ 3 AppMain ......................................................................................................................................................... 3 claseInterfaz2 ..................................................................................................................................................... 4 OperacionesArrays ................................................................................................................................... 4 Constante ....................................................................................................................................................4 Operaciones ................................................................................................................................................ 4 AppOp ............................................................................................................................................................. 5 ejer1 .................................................................................................................................................................... 5 Prestable ......................................................................................................................................................... 5 Publicacion......................................................................................................................................................5 Libro ................................................................................................................................................................ 6 Revista ............................................................................................................................................................6 AppMain ......................................................................................................................................................... 7 2 PROGRAMACION Ejercicios 13 SHEILA NIETO UREÑA claseInterfaz OpBasicas package claseInterfaz; public interface OpBasicas { public abstract int sumar (int a , int b); void restar (int a1, int a2); public abstract void producto (int a1, int a2); double dividir (int a1, int a2); } OpMatematicas package claseInterfaz; import java.util.Scanner; public class OpMatematicas implements OpBasicas { public int sumar (int a , int b){ int suma; suma=a+b; return suma; } public void restar (int a1, int a2){ System.out.println("La resta es "+(a1-a2)); } public void producto (int a1, int a2){ int producto; producto=a1*a2; System.out.println("El producto es "+producto); } public double dividir (int a1, int a2){ double division; System.out.println("No es posible realizar la division por 0"); division=(double)a1/a2; return division; } public int cargarValor(){ Scanner sc=new Scanner(System.in); int valor=sc.nextInt(); sc.close(); return valor; } } AppMain package claseInterfaz; public class AppMain { public static void main(String[] args) { int a, b; OpMatematicas om= new OpMatematicas(); System.out.println("Introduce el valor de a"); a=om.cargarValor(); System.out.println("Introduce el valor de b"); b=om.cargarValor(); System.out.println("La suma es: "+om.sumar(a, b)); om.restar(a, b); om.producto(a, b); if(b==0) System.out.println("No se puede calcular la division entre 0"); else System.out.println("La division es: "+om.dividir(a, b)); } } 3 PROGRAMACION claseInterfaz2 Ejercicios 13 OperacionesArrays package interfaces; public interface OperacionesArrays { public abstract void cargar(int tab[]); public abstract void ver(int tab[]); public abstract int[] suma(int tab1[], int tab2[]); public abstract int[] resta(int tab1[], int tab2[]); public abstract void resta(int tab1[], int tab2[], int tab3[]); } Constante package interfaces; public interface Constante { public final int N=5; } Operaciones package interfaces; public class Operaciones implements OperacionesArrays, Constante{ public int t1[]=new int[N]; public int t2[]=new int[N]; public int t3[]=new int[N]; public Operaciones(){} public Operaciones(int tab1[],int tab2[]){ t1=tab1; t2=tab2; } } public void cargar(int tab[]){ for (int i=0; i<N; i++) tab[i]=(int)(Math.random()*10); } public void ver(int tab[]){ for (int i=0; i<N; i++) System.out.print(tab[i]+" "); } public int[] suma(int tab1[], int tab2[]){ int sum[]=new int[N]; for (int i=0; i<N; i++) sum[i]=tab1[i]+tab2[i]; return sum; } public int[] resta(int tab1[], int tab2[]){ int res[]=new int[N]; for (int i=0; i<N; i++) res[i]=tab1[i]-tab2[i]; return res; } public void resta(int tab1[], int tab2[], int tab3[]){ for (int i=0; i<N; i++) tab3[i]=tab1[i]-tab2[i]; for (int i=0; i<N; i++) System.out.print(tab3[i]+" "); } 4 SHEILA NIETO UREÑA PROGRAMACION Ejercicios 13 SHEILA NIETO UREÑA AppOp package interfaces; public class AppOp { } public static void main(String[]args){ Operaciones op=new Operaciones(); op.cargar(op.t1); op.cargar(op.t2); System.out.print("Array 1:\t"); op.ver(op.t1); System.out.print("\nArray 2:\t"); op.ver(op.t2); System.out.println(); //Suma op.t3=op.suma(op.t1, op.t2); System.out.print("\nArray suma:\t"); op.ver(op.t3); //Resta 1 op.t3=op.resta(op.t1, op.t2); System.out.print("\nArray resta:\t"); op.ver(op.t3); //Resta 2 System.out.print("\nArray resta:\t"); op.resta(op.t1, op.t2, op.t3); } ejer1 Prestable package ejer1; public interface Prestable { void prestar(); public abstract void devolver(); /*public abstract*/ String prestado(); //por def. todos los métodos //son públicos y abstractos, por lo que se pueden omitir al escribirlos. } Publicacion package ejer1; public class Publicacion { protected String cod,tit; protected short fecha; public Publicacion (){} public Publicacion (String codigo,String titulo,short fecha){ cod=codigo; tit=titulo; this.fecha=fecha; } public String toString() { return "Titulo: "+tit+"\nCod: "+cod+"\nFecha publicacion: "+fecha; } public String getTit() { return tit; } public String getCod() { return cod; 5 PROGRAMACION } Ejercicios 13 } public int getFecha() { return fecha; } public void setCod(String cod) { this.cod = cod; } public void setTit(String tit) { this.tit = tit; } public void setFecha(short fecha) { this.fecha = fecha; } Libro package ejer1; public class Libro extends Publicacion implements Prestable{ protected boolean prestado; public Libro(){ super(); } public Libro(String c,String t,short f,boolean p){ super(c,t,f); this.prestado=p; } public String toString() { return super.toString()+"\nPrestado: "+prestado; } public void prestar(){} public void devolver(){} public String prestado(){ if (getPrestado()) return super.toString()+"Libro no disponible"; else return super.toString()+"Libro disponible"; } public boolean getPrestado() { return prestado; } } Revista package ejer1; public class Revista extends Publicacion implements Prestable{ protected int num; public Revista(){ super(); } public Revista(String c,String t,short f,int n){ super(c,t,f); num=n; } public void prestar(){} public void devolver(){} public String prestado(){ Libro l=new Libro(); if (l.getPrestado()) return super.toString()+"Libro no disponible"; 6 SHEILA NIETO UREÑA PROGRAMACION Ejercicios 13 SHEILA NIETO UREÑA else return super.toString()+"Libro disponible"; } } public String toString() { return super.toString()+"\nNº Revista: "+num; } public int getNum() { return num; } AppMain import java.util.Scanner; public class AppMain { Scanner sc; static int op,libro,revis; Libro t[]=new Libro[3]; Revista tab[]=new Revista[2]; // // // // public static void main(String[] args) { Scanner sc=new Scanner(System.in); AppMain a=new AppMain(); //1ª parte Libro l1=new Libro("B612","La Metarmorfosis",1915,false); // ¿¿?? l1.toString(); Revista r1=new Revista("B613","El Buscon",1626,false); // ¿¿?? r1.toString(); //2ª parte - MENU System.out.print("¿Cuantos libros tienes? "); libro=sc.nextInt(); System.out.print("¿Cuantas revistas tienes? "); revis=sc.nextInt(); a.menu(); sc.close(); } public void menu(){ sc=new Scanner(System.in); do{ do{ System.out.print("\nMENU:\n1. REGISTRAR LIBRO\n2. REGISTRAR REVISTA\n" + "3. VISUALIZAR COLECCION\n0. SALIR\n Introduce una opcion: "); op=sc.nextInt(); }while (op<0 || op>3); switch (op) { case 1: cargarLibro(t); break; case 2: cargarRevis(tab); break; case 3: verLibros(t); verRevis(tab); break; case 0: System.out.println("¡HASTA PRONTO!"); break; } }while(op!=0); } 7 PROGRAMACION } Ejercicios 13 public void cargarLibro(Libro t[]){ sc=new Scanner(System.in); Libro l=new Libro(); int c=0; for(int i=0;i<t.length;i++) if (t[i]==null) c++; if (c>0){ System.out.print("Introduce codigo del libro: "); l.cod=sc.nextLine(); System.out.print("Introduce titulo: "); l.tit=sc.nextLine(); System.out.print("Introduce año de publicacion: "); l.fecha=sc.nextShort(); sc.nextLine(); t[t.length-c]=new Libro(l.tit,l.cod,l.fecha, false); System.out.println(); }else System.out.println("No se pueden introducir mas libros"); } public void cargarRevis(Revista tab[]){ sc=new Scanner(System.in); Revista r=new Revista(); int c=0; for(int i=0;i<tab.length;i++) if (tab[i]==null) c++; if (c>0){ System.out.print("Introduce codigo de la revista: "); r.cod=sc.nextLine(); System.out.print("Introduce titulo: "); r.tit=sc.nextLine(); System.out.print("Introduce año de publicacion: "); r.fecha=sc.nextShort(); System.out.print("Introduce nº de revista: "); r.num=sc.nextInt(); sc.nextLine(); tab[tab.length-c]=new Revista(r.tit,r.cod,r.fecha,r.num); System.out.println(); }else System.out.println("No se pueden introducir mas libros"); } public void verLibros(Libro t[]){ System.out.println("\nLISTADO LIBROS"); if(t[0]==null) System.out.println(" No hay libros"); else for (int i=0;i<t.length;i++) if (t[i]!=null) System.out.print(t[i]+"\n"); } public void verRevis(Revista tab[]){ System.out.println("\nLISTADO REVISTAS"); if(tab[0]==null) System.out.println(" No hay revistas"); else for (int i=0;i<tab.length;i++) if (t[i]!=null) System.out.print(tab[i]+"\n"); } 8 SHEILA NIETO UREÑA