Autor Tema: CU00697B para que sirven interfaces java implementar api ventaja ejemplo  (Leído 4816 veces)

Jarper

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 20
    • Ver Perfil
Buenos días,

 EJERCICIO

Se plantea desarrollar un programa Java que permita representar la siguiente situación. Una instalación deportiva es un recinto delimitado donde se practican deportes, en Java interesa disponer de un método int getTipoDeInstalacion(). Un edificio es una construcción cubierta y en Java interesa disponer de un método double getSuperficieEdificio(). Un polideportivo es al mismo tiempo una instalación deportiva y un edificio; en Java interesa conocer la superficie que tiene y el nombre que tiene. Un edificio de oficinas es un edificio; en Java interesa conocer el número de oficinas que tiene.

Definir dos interfaces y una clase que implemente ambas interfaces para representar la situación anterior. En una clase test con el método main, crear un ArrayList que contenga tres polideportivos y dos edificios de oficinas y utilizando un iterator, recorrer la colección y mostrar los atributos de cada elemento. ¿Entre qué clases existe una relación que se asemeja a la herencia múltiple?
Código: [Seleccionar]
public interface InstalacionDeportiva
{
   int getTipoDeInstalacion();
}
Código: [Seleccionar]
public interface Edificio
{
    double getSuperficieEdificio();
    String mostrarAtributos();
}
Código: [Seleccionar]
public class Polideportivo implements InstalacionDeportiva, Edificio
{
    private int tipoDeInstalacion;
    private double superficieEdificio;
    private String nombre;
    public Polideportivo(){
        tipoDeInstalacion = 0;
        superficieEdificio = 0;
        nombre = "Unknown";
    }
    public Polideportivo(int tipoDeInstalacion, double superficieEdificio, String nombre){
        this.tipoDeInstalacion = tipoDeInstalacion;
        this.superficieEdificio = superficieEdificio;
        this.nombre = nombre;
    }
    public void setTipoDeInstalacion(int tipoDeInstalacion){this.tipoDeInstalacion = tipoDeInstalacion;}
    public void setSuperficieEdificio(double superficieEdificio){this.superficieEdificio = superficieEdificio;}
    public void setNombre(String nombre){this.nombre = nombre;}
    public int getTipoDeInstalacion(){return tipoDeInstalacion;}
    public double getSuperficieEdificio(){return superficieEdificio;}
    public String getNombre(){return nombre;}
    public String mostrarAtributos(){
        return "El polideportivo es de tipo: " + getTipoDeInstalacion() + " con una superficie de: " + getSuperficieEdificio()+" m2. Y su nombre es: "+getNombre();
    }
}
Código: [Seleccionar]
public class Oficinas implements Edificio
{
  private int numeroOficinas;
  private double superficieEdificio;
    public Oficinas(){
      numeroOficinas = 0;
      superficieEdificio = 0;
    }
    public Oficinas(int numeroOficinas, double superficieEdificio){
        this.numeroOficinas = numeroOficinas;
        this.superficieEdificio = superficieEdificio;
    }
    public void setSuperficieEdificio(double superficieEdificio){this.superficieEdificio = superficieEdificio;}
    public void setNumeroOficinas(int numeroOficinas){this.numeroOficinas = numeroOficinas;}
    public double getSuperficieEdificio(){return superficieEdificio;}
    public int getNumeroOficinas(){return numeroOficinas;}
    public String mostrarAtributos(){
        return "La oficina tiene: " + getNumeroOficinas() + " oficinas y consta de "+getSuperficieEdificio()+" m2.";
    }
}
Código: [Seleccionar]
public class Test
{
    public static void main(String[] args){
        ArrayList<Edificio> lista = new ArrayList<Edificio>();
        Oficinas of1 = new Oficinas(4,500);
        Oficinas of2 = new Oficinas(2,300);
        Oficinas of3 = new Oficinas(6,1000);
        Polideportivo pd1 = new Polideportivo(1,1000,"Polideportivo BCN");
        Polideportivo pd2 = new Polideportivo(1,2000,"Polideportivo MAD");
        lista.add(of1);
        lista.add(of2);
        lista.add(of3);
        lista.add(pd1);
        lista.add(pd2);
        Iterator<Edificio> it = lista.iterator();
        while(it.hasNext()){
        System.out.println(it.next().mostrarAtributos());
        }
    }   
}


No se si he realizado correctamente lo que se pedía en el enunciado. He añadido a Edificio un método para poder mostrar los atributos.

Muchas gracias, atentamente.

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Hola Jarper

Tu ejercicio está bien.
Has creado las interface con sus métodos abstractos que luego has definido en las clases que las implementan. Bien.

Tal como dices has creado el método mostrarAtributos(), para eso, para mostrarlos.
Está bien hecho, pero podías haber hecho los mismo sobreescribiendo el método toString(), el estandard de Java para devolver eso, información sobre la clase.

Si hubieras hecho eso, sobreescribir el método toString(). Podrías cambiar la última línea de tu main:
System.out.println(it.next().mostrarAtributos());
por esta:
System.out.println(it.next());



No he tenido ocasión de decírtelo antes. A los métodos sobreescritos se les antepone una línea con la etiqueta
@Override.

La ausencia de esta etiqueta no da error. Su función, es:
Al que lee la clase, le informa que este método existe en la clase superior o en alguna de las anteriores y que aquí se sobreescribe realizando una función diferente
Y a quien escribe el código le dará error si después de esta etiqueta no sobreescribe un método de las clases superiores. Esta alarma le permitirá no crear código erróneo.



También, el hecho de usar interfaces nos permitía cambiar las siguientes declaraciones:
        Oficinas of1 = new Oficinas(4,500);
        Oficinas of2 = new Oficinas(2,300);
        Oficinas of3 = new Oficinas(6,1000);
        Polideportivo pd1 = new Polideportivo(1,1000,"Polideportivo BCN");
        Polideportivo pd2 = new Polideportivo(1,2000,"Polideportivo MAD");
por estas:
        Edificio of1 = new Oficinas(4,500);
        Edificio of2 = new Oficinas(2,300);
        Edificio of3 = new Oficinas(6,1000);
        Edificio pd1 = new Polideportivo(1,1000,"Polideportivo BCN");
        Edificio pd2 = new Polideportivo(1,2000,"Polideportivo MAD");



Y por último un detalle que no es importante, pero quiero comentarlo.
Dentro de una clase para conocer el valor de un atributo de nombre precio podemos hacerlo de dos formas:
System.out.println("Precio: =" + precio);
o
System.out.println("Precio: =" + getPrecio());

Y para cambiar el atributo:
precio = 25;
o
setPrecio(25);

Puedes escoger cualquiera de las dos formas, invocar al atributo directamente o por medio de su setter o su getter.

Hacer esto desde clases ajenas, solo puede hacerse usando los setters y getters.

En fin, eso es todo. Saludos

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

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".