Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: pedro,, en 26 de Julio 2015, 22:28

Título: Ejercicio interfaces java simular implementación herencia múltiple CU00697B
Publicado por: pedro,, en 26 de Julio 2015, 22:28
otro mas,

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?

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

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

Clase Polideportivo
Código: [Seleccionar]
public class Polideportivo implements InstalacionDeportiva, Edificio{
      private String nombre;
      private int tipoDeInstalacion;
      private double superficie;     
      public Polideportivo(){
          nombre = "";
          tipoDeInstalacion = 0;
          superficie = 0;
      }
      public Polideportivo(String nombre, int tipoDeInstalacion, double superficie){
          this.nombre = nombre;
          this.tipoDeInstalacion = tipoDeInstalacion;
          this.superficie = superficie;
      }
      public void setNombre(String nombre){ this.nombre = nombre; }
      public void setTipoDeInstalacion(int tipoDeInstalacion){ this.tipoDeInstalacion = tipoDeInstalacion; }
      public void setSuperficie(double superficie){ this.superficie = superficie; }
      public String getNombre(){ return nombre; }
      public int getTipoDeInstalacion(){ return tipoDeInstalacion; }
      public double getSuperficieEdificio(){ return superficie; }
      public String toString(){
          return "Edificio tipo Polideportivo.\nNombre del polideportivo: " + nombre + "\nTipo de instalación: "
              + tipoDeInstalacion + "\nSuperficie: " + superficie + "m2\n-------------------";
      }
}

Clase EdificioDeOficinas
Código: [Seleccionar]
public class EdificioDeOficinas implements Edificio{
    private int numOficinas;
    private double superficie;
    public EdificioDeOficinas(){
        numOficinas = 0;
        superficie = 0;
    }
    public EdificioDeOficinas(int numOficinas, double superficie){
        this.numOficinas = numOficinas;
         this.superficie = superficie;
    }
    public void setNumOficinas(int numOficinas){ this.numOficinas = numOficinas; }
    public void setSuperficie(double superficie){ this.superficie = superficie; }
    public int getNumOficinas(){ return numOficinas; }
    public double getSuperficieEdificio(){ return superficie; }
    public String toString(){
        Integer valorNumOficinas = numOficinas;
        Double valorSuperficie = superficie;
        return "Edificio tipo Edificio de Oficinas.\nNumero de oficinas: " + numOficinas + "\nSuperficie: "
            + superficie + "m2\n-------------------";
    }
}

Clase TestInterface2
Código: [Seleccionar]
import java.util.ArrayList;
import java.util.Iterator;
public class TestInterface2{
    public static void main (String [] Args){
        ArrayList<Edificio> listaEdificios = new ArrayList<Edificio>();
        listaEdificios.add(new Polideportivo("RHY", 1, 1233.45));
        listaEdificios.add(new Polideportivo("GJKL", 1, 45687.56));
        listaEdificios.add(new Polideportivo("SDW", 1, 78988.56));
        listaEdificios.add(new EdificioDeOficinas(44, 45778.22));
        listaEdificios.add(new EdificioDeOficinas(136, 5889.78));
        Iterator<Edificio> it = listaEdificios.iterator();
        while (it.hasNext()){
            System.out.println(it.next().toString());
        }
    }
}

y respondiendo a la pregunta ¿Entre qué clases existe una relación que se asemeja a la herencia múltiple?
Es en la clase Polideportivo.

por otro lado quería preguntar sobre esta parte del código de la clase TestInterface2.

Código: [Seleccionar]
while (it.hasNext()){
            System.out.println(it.next().toString());
        }

si quito el .toString() sigue imprimiendo lo mismo por consola, ¿a que se debe?
Título: Re:Ejercicio interfaces java simular implementación herencia múltiple CU00697B
Publicado por: Alex Rodríguez en 27 de Julio 2015, 23:01
Hola Pedro código revisado y todo bien, la pregunta también bien respondida.

Citar
si quito el .toString() sigue imprimiendo lo mismo por consola, ¿a que se debe?

Esto se debe a mecanismos automáticos incorporados en el compilador de Java. Cuando el compilador se encuentra un código como System.out.println(algo); trata de hacer las siguientes comprobaciones:

- Si algo es un String lo considera correcto y lo ejecuta

- Si algo no es un String trata de buscar su representación en forma de String, para ello automáticamente transforma la expresión en System.out.println(algo.toString()); que es como dentro de la convención de Java algo sería representado en forma de String. Si encuentra el método, ejecuta el método y muestra el String representación de algo.

- Si no logra con éxito nada de lo anterior lanza un error.

Por ello en el caso que comentas obtienes el mismo resultado si incluyes toString() que si no lo incluyes. En el caso de no incluirlo es el compilador Java quien lo hace

Saludos  ;D
Título: Re:Ejercicio interfaces java simular implementación herencia múltiple CU00697B
Publicado por: pedro,, en 28 de Julio 2015, 00:06
Muchas gracias Alex.

Ahora me quedó todo claro.