Autor Tema: Para qué sirven las interfaces Java. Implementar una interfaz del API. CU00697B  (Leído 2314 veces)

LuisM

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 131
    • Ver Perfil
Hola a todos !!! Paso a responder la pregunta y dejar el código del ejercicio. Desde ya muchas gracias.
Saludos,
Luis

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?

Rta: La clase Polideportivo implementa dos interfaces: InstalacionDeportiva y Edificio

Interface InstalacionDeportiva
Código: [Seleccionar]
/**
 * Write a description of interface InstalacionDeportiva here.
 *
 * @author Luis
 * @version CU00697B
 */
public interface InstalacionDeportiva
{
     int getTipoDeInstalacion();
}
Interface Edificio
Código: [Seleccionar]
/**
 * Write a description of interface Edificio here.
 *
 * @author Luis
 * @version CU00697B
 */
public interface Edificio
{
     double getSuperficieEdificio();
     String toString();
}
Clase Polideportivo
Código: [Seleccionar]
/**
 * Write a description of class Polideportivo here.
 *
 * @author Luis
 * @version CU00697B
 */
public class Polideportivo implements Edificio, InstalacionDeportiva
{
    // instance variables - replace the example below with your own
    private int tipoDeInstalacion;
    private double superficie;
    private String nombreEstadio;
    private int cantidadOficinas;

    /**
     * Constructor for objects of class Polideportivo
     */
    public Polideportivo(int tipoDeInstalacion, double superficie, String nombreEstadio)
    {
        // initialise instance variables
        this.tipoDeInstalacion = tipoDeInstalacion;
        this.superficie = superficie;
        this.nombreEstadio = nombreEstadio;
    }
    public Polideportivo()
    {
        // initialise instance variables
        tipoDeInstalacion = 0;
        superficie = 0;
        nombreEstadio = "";
    }

    /**
     * @param  y  a sample parameter for a method
     * @return    the sum of x and y
     */
    public int getTipoDeInstalacion()
    {
        return tipoDeInstalacion;
    }
    public double getSuperficieEdificio()
    {
        return superficie;
    }
    public String toString(){
    return "Polideportivo "+nombreEstadio+" del tipo "+tipoDeInstalacion+" y cuya superficie es "+superficie+" m2";
    }
}
Clase EdificioOficinas
Código: [Seleccionar]
/**
 * Write a description of class Polideportivo here.
 *
 * @author Luis
 * @version CU00697B
 */
public class EdificioOficinas implements Edificio
{
    // instance variables - replace the example below with your own
    private double superficie;
    private int cantidadOficinas;

    /**
     * Constructor for objects of class Polideportivo
     */
    public EdificioOficinas(double superficie, int cantidadOficinas)
    {
        // initialise instance variables
        this.superficie = superficie;
        this.cantidadOficinas = cantidadOficinas;
    }
    public EdificioOficinas()
    {
        // initialise instance variables
        superficie = 0;
        cantidadOficinas = 0;
    }

    public double getSuperficieEdificio()
    {
        return superficie;
    }
    public String toString(){
        return "Edificio de "+cantidadOficinas+" oficinas y cuya superficie es "+superficie+" m2";
    }
}
Clase Test (main)
Código: [Seleccionar]
import java.util.Iterator;
import java.util.ArrayList;

public class Test {
   
    public static void main (String [] args) {
        ArrayList<Edificio> listaEdificios = new ArrayList<Edificio>();
        Polideportivo p1 = new Polideportivo(1, 8000, "Colosseum Arena");
        listaEdificios.add(p1);
        Polideportivo p2 = new Polideportivo(2, 6500, "Polideportivo Nacional");
        listaEdificios.add(p2);
        Polideportivo p3 = new Polideportivo(3, 5450, "Stadium Luna Park");
        listaEdificios.add(p3);
        EdificioOficinas e1 = new EdificioOficinas(1000, 40);
        listaEdificios.add(e1);       
        EdificioOficinas e2 = new EdificioOficinas(500, 20);
        listaEdificios.add(e2);
        Iterator<Edificio> edificio = listaEdificios.iterator();
        Edificio tmp;
        while (edificio.hasNext()) {
            tmp = edificio.next();
            System.out.println(tmp.toString());
        }
    }
}

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola LuisM, el ejercicio es correcto. Creo que es el último ejercicio del curso Java, mis felicitaciones por haberlo completado  ;D A su vez, esperamos que igual que habrás recibido ayuda para ello, puedas colaborar respondiendo a otras personas que estén realizando el curso y expongan sus ejercicios en los foros o planteen dudas, agradecemos todas las colaboraciones.

Algún comentario sobre el código y ejercicio. En la declaración la interface Edificio no es necesario incluir String toString(); ya que toString() es un método disponible en Java para todos los objetos por defecto. Realmente no tiene ningún efecto el que esté ahí, pero por eso mismo y para evitar confusiones, es preferible omitirlo.

Dejo planteada una pregunta que si se razona es útil para comprender el polimorfismo en Java. Si modificamos el código de la clase Test y lo dejamos como se muestra a continuación el resultado obtenido es el mismo ¿Por qué? ¿Qué diferencia un código de otro?

Código: [Seleccionar]
import java.util.Iterator;
import java.util.ArrayList;

public class Test {
   
    public static void main (String [] args) {
        ArrayList<Edificio> listaEdificios = new ArrayList<Edificio>();
        Edificio p1 = new Polideportivo(1, 8000, "Colosseum Arena");
        listaEdificios.add(p1);
        Edificio p2 = new Polideportivo(2, 6500, "Polideportivo Nacional");
        listaEdificios.add(p2);
        Edificio p3 = new Polideportivo(3, 5450, "Stadium Luna Park");
        listaEdificios.add(p3);
        Edificio e1 = new EdificioOficinas(1000, 40);
        listaEdificios.add(e1);       
        Edificio e2 = new EdificioOficinas(500, 20);
        listaEdificios.add(e2);
        Iterator<Edificio> edificio = listaEdificios.iterator();
        Edificio tmp;
        while (edificio.hasNext()) {
            tmp = edificio.next();
            System.out.println(tmp.toString());
        }
    }
}

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