Autor Tema: Para qué sirven las interfaces Java.Ventajas y ejemplos básicos. (CU00697B)  (Leído 2224 veces)

HumbertoAli

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 21
    • Ver Perfil
A continuación mi planteamiento al siguiente ejercicio... Me seria de ayuda que me corrigieran ;)

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 Edificio
Código: [Seleccionar]
public interface Edificio {
    double getSuperficieEdificio();
}

Interface InstalacionDeportiva
Código: [Seleccionar]
public interface InstalacionDeportiva {
    String getTipoDeInstalacion();
}

Clase abstracta InstalacionDeportes
Código: [Seleccionar]
public  abstract class InstalacionDeportes {
    private double superficie;
    public InstalacionDeportes(double superficie){
        this.superficie = superficie;
    }
    public InstalacionDeportes(){
       
    }
    public void setSuperficie(double superficie){
        this.superficie = superficie;
    }
    public double getSuperficie(){
        return superficie;
    }
    abstract public void mostrarDatos();
}

Clase Polideportivo
Código: [Seleccionar]
public class Polideportivo extends InstalacionDeportes implements InstalacionDeportiva,Edificio {
    private String nombre;
    public Polideportivo(String nombre, double superficie){
        super(superficie);
        this.nombre = nombre;
       
       
    }
    public void setNombre(String nombre){
        this.nombre = nombre;
    }
   
    public String getNombre(){
        return nombre;
    }
   
    public String getTipoDeInstalacion(){
        return nombre;
    }
    public double getSuperficieEdificio(){
        return super.getSuperficie();
    }
    public void mostrarDatos(){
        System.out.println("Polideportivo:\n"+("Nombre: "+nombre)+("\nSuperficie: ")+getSuperficieEdificio()+(" metros cuadrados"));
        System.out.print("\n");
    }
}

Clase oficinaDeportiva
Código: [Seleccionar]
public class OficinaDeportiva extends InstalacionDeportes implements Edificio{
    private int numeroDeOficinas;
   
    public OficinaDeportiva(int numeroDeOficinas){
        this.numeroDeOficinas = numeroDeOficinas;
       
    }
   
    public void setNumeroDeOficinas(int oficinas){
        this.numeroDeOficinas = oficinas;
    }
   
    public int getNumeroDeOficinas(){
        return numeroDeOficinas;
    }
    public double getSuperficieEdificio(){
        return super.getSuperficie();
    }
    public void mostrarDatos(){
        System.out.println("Oficina Deportiva:\n"+("Numero de Oficinas: "+numeroDeOficinas));
        System.out.print("\n");
    }
}

Clase TestInstalacionesDeportivas

Código: [Seleccionar]
import java.util.*;/**
 *
 * @author baseuser
 */
public class TestInstalacionesDeportivas {
    public static void main(String[]args){
        List <InstalacionDeportes> miLista = new ArrayList <InstalacionDeportes>();
        InstalacionDeportes poli1 = new Polideportivo("Venezuela",7522.5);
        InstalacionDeportes poli2 = new Polideportivo("URBAN",7850.5);
        InstalacionDeportes poli3 = new Polideportivo("Valle de la pascua",7880.5);
        InstalacionDeportes ofi1 = new OficinaDeportiva(50);
        InstalacionDeportes ofi2 = new OficinaDeportiva(98);
        miLista.add(poli1);miLista.add(poli2);miLista.add(poli3);miLista.add(ofi1);miLista.add(ofi2);
        Iterator <InstalacionDeportes> it = miLista.iterator();
        InstalacionDeportes tmp;
        System.out.println("LISTA DE INSTALACIONES DEPORTIVAS.........");
        while(it.hasNext()){
            tmp = it.next();
            tmp.mostrarDatos();
        }
    }
}

 

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
Buenas HumbertoAli, el ejercicio cumple con lo pedido aunque te indico algunas cosas

La clase InstalacionDeportes no sería necesaria, no es necesario tener una clase abstracta intermediaria. Las clases Polideportivo y OficinaDeportiva ya serían clases concretas.

Parece que hubieras utilizado esa clase abstracta para poder crear las instancias de objetos de la lista:

List <InstalacionDeportes> miLista = new ArrayList <InstalacionDeportes>();

Pero realmente podrías definir como tipo para la lista un tipo de interface, instanciando luego con una clase concreta:

ArrayList<Edificio> listaEdificios = new ArrayList<Edificio>();

En este enlace puedes revisar una buena solución: https://www.aprenderaprogramar.com/foros/index.php?topic=2965.0

Salu2

 

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