Autor Tema: Java implementar más de una Interface. Sobreescribir métodos Ejercicio CU00697B  (Leído 4377 veces)

RaGa

  • Moderador Global
  • Intermedio
  • *******
  • APR2.COM
  • Mensajes: 234
    • Ver Perfil
Mi versión del Ejercicio propuesto en la Entrega Nº97. Ejercicio CU00697B.

Citar
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?

Interface InstalacionDeportiva

Código: [Seleccionar]
public interface InstalacionDeportiva{
    /**
     * método getTipoDeInstalacion
     *
     * @return devuelve el tipo de instalacion segun la siguiente codificación:
     *
     * 0 = Instalacion deportiva de tipo abierta al público.
     * 1 = Instalacion deportiva de tipo escolar.
     * 2 = Instalacion deportiva de tipo exclusiva para socios.
     * 3 = Instalacion deportiva de tipo sindical.
     */
    int getTipoDeInstalacion();
}


Interface Edificio

Código: [Seleccionar]
public interface Edificio{
    /**
     * método getSuperficieEdificio
     *
     * @return retorna la superficie del edificio
     */
    double getSuperficieEdificio();
}


Clase Polideportivo

Código: [Seleccionar]
public class Polideportivo implements InstalacionDeportiva,Edificio{
    // Declaración de variables de instancia.
    private String nombre;
    private int tipoDeInstalacion;
    private double superficieEdificio;

    /**
     * Constructor de la clase Polideportivo
     */
    public Polideportivo(String nombre, int tipoDeInstalacion, double superficieEdificio){
        this.nombre = nombre;
        this.tipoDeInstalacion = tipoDeInstalacion;
        this.superficieEdificio = superficieEdificio;
    }

    /**
     * Setters
     */
    public void setTipoDeInstalacion(int tipoDeInstalacion){
        this.tipoDeInstalacion = tipoDeInstalacion;
    }

    public void setSuperficieEdificio(double superficieEdificio){
        this.superficieEdificio = superficieEdificio;
    }
   
    public void setNombre(String nombre){
        this.nombre = nombre;
    }
       
    /**
     * Getters
     */
   
    @Override
    public int getTipoDeInstalacion(){
        return tipoDeInstalacion;
    }
   
    @Override
    public double getSuperficieEdificio(){
        return superficieEdificio;
    }
   
    public String getNombre(){
        return nombre;
    }
   
    /**
     * Otros métodos
     */
   
    @Override
    public String toString(){
        String aux="";
        switch (tipoDeInstalacion){
                    case 0:
                        aux="abierta al público";
                        break;
                    case 1:
                        aux="escolar";
                        break;
                    case 2:
                        aux="exclusiva para socios";
                        break;
                    case 3:
                        aux="sindical";
                        break;
                }
        return "Polideportivo "+nombre+", de tipo "+aux+", cuenta con una superficie de "+superficieEdificio+" m2.";
    }

} // fin de la clase


Clase EdificioDeOficinas

Código: [Seleccionar]
public class EdificioDeOficinas implements Edificio{
    // Declaracion de campos de instancia.
    private double superficieEdificio;
    private int numeroDeOficinas;

    /**
     * Constructor de clase EdificioDeOficinas
     */
    public EdificioDeOficinas(double superficieEdificio, int numeroDeOficinas){
        this.superficieEdificio = superficieEdificio;
        this.numeroDeOficinas = numeroDeOficinas;
    }

    /**
     * Setters
     */
    public void setSuperficieEdificio(double superficieEdificio){
        this.superficieEdificio = superficieEdificio;
    }
   
    public void setNumeroDeOficinas(int numeroDeOficinas){
        this.numeroDeOficinas = numeroDeOficinas;
    }
   
    /**
     * Getters
     */
   
    @Override
    public double getSuperficieEdificio(){
        return superficieEdificio;
    }
   
    public int getNumeroDeOficinas(){
        return numeroDeOficinas;
    }
   
    /**
     * Otros métodos
     */
   
    @Override
    public String toString(){
        return "Edificio de "+numeroDeOficinas+" oficinas, con una superficie de "+superficieEdificio+" m2.";
    }
   
} // fin de la clase


Clase Test2

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

public class Test2{
    // Declaración de campos de instancia vacía.

    /**
     * Constructor de clase Test2
     */
    public Test2(){ // vacío
    }

    /**
     * método main
     */
    public static void main(String[] args){
        //Declaración de campos de clase.
       
        List<Edificio> miLista = new ArrayList<Edificio>();
       
        // creación de objetos
        miLista.add(new Polideportivo("Juventud Unida",3,2000d));
        miLista.add(new Polideportivo("Club Atlético Universitario",1,3500d));
        miLista.add(new Polideportivo("Gimnasia y Esgrima",0,1800d));

        miLista.add(new EdificioDeOficinas(200d,20));
        miLista.add(new EdificioDeOficinas(500d,34));

        // recorrido de la lista.
       
        System.out.println("\fEdificios contenidos en la lista");
        System.out.println("---------------------------------");
        System.out.println("\n");
       
        Iterator it = miLista.iterator();

        while(it.hasNext()){
            System.out.println(it.next().toString()+"\n");
        }// fin de while       
       
    } // fin de método main
   
} // fin de clase
« Última modificación: 08 de Mayo 2015, 08:53 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola RaGa lo veo buen código y haces uso de conceptos vistos durante el curso por ejemplo en

Código: [Seleccionar]
    @Override
    public String toString(){
        String aux="";
        switch (tipoDeInstalacion){
                    case 0:
                        aux="abierta al público";
                        break;
                    case 1:
                        aux="escolar";
                        break;
                    case 2:
                        aux="exclusiva para socios";
                        break;
                    case 3:
                        aux="sindical";
                        break;
                }
        return "Polideportivo "+nombre+", de tipo "+aux+", cuenta con una superficie de "+superficieEdificio+" m2.";
    }

Además el main muy sintético por ejemplo miLista.add(new Polideportivo("Juventud Unida",3,2000d)); en esta línea se añade a la lista, se crea el objeto y se inicializa todo en una misma línea, eso indica que vas dominando el lenguaje.

Faltó decir entre qué clases existe una relación semejante a la herencia múltiple: sería la clase Polideportivo, que implementa las interfaces InstalacionDeportiva y Edificio (realmente no hereda de ellas, pero es lo más similar a herencia múltiple que existe en Java).

A seguir así, saludos

RaGa

  • Moderador Global
  • Intermedio
  • *******
  • APR2.COM
  • Mensajes: 234
    • Ver Perfil
Muchas gracias Alex! Me había olvidado de decir eso que tu aclaras.
Suerte repondiste por mí así quien lee este hilo lo encuentra completo.
Seguimos adelante!  :)

 

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