Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: RaGa en 07 de Mayo 2015, 17:17
-
Mi versión del Ejercicio propuesto en la Entrega Nº97. Ejercicio CU00697B.
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
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
public interface Edificio{
/**
* método getSuperficieEdificio
*
* @return retorna la superficie del edificio
*/
double getSuperficieEdificio();
}
Clase Polideportivo
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
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
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
-
Hola RaGa lo veo buen código y haces uso de conceptos vistos durante el curso por ejemplo en
@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
-
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! :)