Autor Tema: Ejemplo herencia múltiple con interfaces java Ejercicio CU00697B del tutorial  (Leído 7745 veces)

fedegaray

  • Principiante
  • **
  • Mensajes: 81
    • Ver Perfil
Mi respuesta al ejercicio 97!!! El último del curso!!!!

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

Voy a comenzar respondiendo a la pregunta:

En la clase Polideportivo hay una relación semejante a la herencia múltiple, pues implementa las dos interfaces Edificio e InstalacionDeportiva. La clase EdificioDeOficinas, por otro lado, sólo implementa la interface Edificio, por lo que su "herencia" es simple.

Aquí van las clases:

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

Interface Edificio
Código: [Seleccionar]
public interface Edificio {
    double getSuperficieEdificio();
   
    String toString();
}

Clase Polideportivo
Código: [Seleccionar]
public class Polideportivo implements InstalacionDeportiva, Edificio {
    private double largo;
    private double ancho;
    private String nombre;
    private String tipoInstalacion;
   
    public Polideportivo () {
        largo = 0;
        ancho = 0;
        nombre = "";
        tipoInstalacion = "";
    }
   
    public Polideportivo (double largo, double ancho, String nombre, String tipoInstalacion) {
        this.largo = largo;
        this.ancho = ancho;
        this.nombre = nombre;
        this.tipoInstalacion = tipoInstalacion;
    }
   
    public void setLargo (double largo) {
        this.largo = largo;
    }
   
    public void setAncho (double ancho) {
        this.ancho = ancho;
    }
   
    public void setNombre (String nombre) {
        this.nombre = nombre;
    }
   
    public void setTipoInstalacion (String tipoInstalacion) {
        this.tipoInstalacion = tipoInstalacion;
    }
   
    public double getLargo () {
        return largo;
    }
   
    public double getAncho () {
        return ancho;
    }
   
    public String getNombre () {
        return nombre;
    }
   
    public double getSuperficieEdificio () {
        return ancho * largo;
    }
   
    public int getTipoInstalacion () {
        if (tipoInstalacion.equals("Techado")) {
            return 1;
        } else if (tipoInstalacion.equals("Abierto")) {
            return 2;
        } else {
            return 3;
        }
    }
   
    public String toString () {
        return "\"Polideportivo " + getNombre() + "\": Posee una superficie de " + getSuperficieEdificio() + " metros, y es de tipo " + tipoInstalacion;
    }
}

Clase EdificioDeOficinas
Código: [Seleccionar]
public class EdificioDeOficinas implements Edificio {
    private int numeroDeOficinas;
    private double ancho;
    private double largo;
    private int numeroDePisos;
   
    public EdificioDeOficinas () {
        numeroDeOficinas = 0;
        ancho = 0;
        largo = 0;
        numeroDePisos = 0;
    }
   
    public EdificioDeOficinas (int numeroDeOficinas, double ancho, double largo, int numeroDePisos) {
        this.numeroDeOficinas = numeroDeOficinas;
        this.ancho = ancho;
        this.largo = largo;
        this.numeroDePisos = numeroDePisos;
    }
   
    public void setNumeroDeOficinas (int numeroDeOficinas) {
        this.numeroDeOficinas = numeroDeOficinas;
    }
   
    public void setAncho (double ancho) {
        this.ancho = ancho;
    }
   
    public void setLargo (double largo) {
        this.largo = largo;
    }
   
    public void setNumeroDePisos (int numeroDePisos) {
        this.numeroDePisos = numeroDePisos;
    }
   
    public int getNumeroDeOficinas () {
        return numeroDeOficinas;
    }
   
    public double getLargo () {
        return largo;
    }
   
    public double getAncho () {
        return ancho;
    }
   
    public int getNumeroDePisos () {
        return numeroDePisos;
    }
   
    public double getSuperficieEdificio () {
        return ancho * largo * numeroDePisos;
    }
   
    public String toString () {
        return "Edificio de " + getSuperficieEdificio() + " metros de superficie, con " + getNumeroDePisos() + " pisos, que alojan a " + getNumeroDeOficinas() + " oficinas";
    }
}

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

public class TestConstrucciones {
    public static void main (String [] args) {
        List <Edificio> listaEdificios = new ArrayList <Edificio> ();
        Edificio poli1 = new Polideportivo (180.6, 25.7, "Municipal", "Techado");
        Edificio poli2 = new Polideportivo (205.8, 52, "Central", "Abierto");
        Edificio poli3 = new Polideportivo (190, 32, "Recrearte", "Techado");
        Edificio edi1 = new EdificioDeOficinas (52, 17.2, 55, 10);
        Edificio edi2 = new EdificioDeOficinas (109, 153.2, 290, 5);
        listaEdificios.add(poli1); listaEdificios.add(poli2); listaEdificios.add(poli3);
        listaEdificios.add(edi1); listaEdificios.add(edi2);
        Iterator <Edificio> it = listaEdificios.iterator ();
        while (it.hasNext()) {
            Edificio tmp = it.next();
            System.out.println (tmp.toString());
        }
    }
}

Al final de este último ejercicio tengo que decir gracias a todos los que sostienen este sitio, a los que redactan los cursos, a los que tanto ayudan a través de los foros y a toda esta comunidad en general. Esta ha sido una experiencia más que gratificante, que no se termia aquí, pues prontito nomás estaré iniciando el nivel avanzado, y de ahí a lo que siga. Por haber logrado que sea capaz de hacer algo que nunca hubiera imaginado hacer, solo puedo decir gracias, gracias y gracias.
« Última modificación: 06 de Mayo 2015, 21:28 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:Ejercicio CU00697B - Para qué sirven las interfaces Java
« Respuesta #1 en: 06 de Mayo 2015, 21:28 »
Hola fede, sobre el ejercicio decir que las respuestas y código son buenas. Señalarte que implementar (implements) no se considera herencia en Java. Simplemente es cumplir con la interface. La herencia real se hace con extends. Decimos que a través de interfaces se consigue algo similar a la herencia, pero no realmente herencia.

En el código main empleas el polimorfismo ¡perfecto!

Es gratificante recibir el agradecimiento de personas que han seguido los cursos y obtenido ayuda a través de los foros, lo hago extensible a todos los que participan y ayudan. El curso java avanzado no está completo, pero hay algunas cosas interesantes. Esperamos seguir viéndote por aquí :)

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