Autor Tema: Ejemplo clases y métodos abstractos en Java. (CU00695B) Ejercicio resuelto  (Leído 4878 veces)

adrit

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 59
    • Ver Perfil
Hola! Dejo mi código para el ejercicio CU00695B.

Citar
EJERCICIO

Declara una clase abstracta Legislador que herede de la clase Persona, con un atributo provinciaQueRepresenta (tipo String) y otros atributos. Declara un método abstracto getCamaraEnQueTrabaja. Crea dos clases concretas que hereden de Legislador: la clase Diputado y la clase Senador que sobreescriban los métodos abstractos necesarios. Crea una lista de legisladores y muestra por pantalla la cámara en que trabajan haciendo uso del polimorfismo.


Código: [Seleccionar]
public class Persona {
private String nombre; private String apellidos; private int edad;
public Persona() { nombre = ""; apellidos = ""; edad = 0; }
public Persona (String nombre, String apellidos, int edad) { this.nombre = nombre; this.apellidos = apellidos; this.edad = edad; }
public String getNombre() { return nombre;  }
public String getApellidos() { return apellidos;  }
public int getEdad() { return edad;  }
public String toString() {   Integer datoEdad = edad;
return "-Nombre: ".concat(nombre).concat(" -Apellidos: ").concat(apellidos).concat(" -Edad: ").concat(datoEdad.toString() ); } 
}

Código: [Seleccionar]
public abstract class Legislador extends Persona {
    private String provinciaQueRepresenta;
   
    public Legislador (String nombre, String apellidos, int edad, String provinciaQueRepresenta){
        super(nombre, apellidos, edad);
        this.provinciaQueRepresenta=provinciaQueRepresenta;
    }
   
    public String getProvinciaQueRepresenta() {return provinciaQueRepresenta;}
   
    public String toString () {
        return super.toString().concat("\nProvincia que representa: ").concat(provinciaQueRepresenta);
    }

    abstract public String getCamaraEnQueTrabaja();
}

Código: [Seleccionar]
public class Diputado extends Legislador{
    private String camaraEnQueTrabaja;
   
    public Diputado(String nombre, String apellidos, int edad, String provinciaQueRepresenta,
                        String camaraEnQueTrabaja){
        super(nombre, apellidos, edad, provinciaQueRepresenta);
        this.camaraEnQueTrabaja=camaraEnQueTrabaja;
    }

    public String getCamaraEnQueTrabaja() {
        return camaraEnQueTrabaja;
    }
   
    public String toString() {
        return super.toString().concat("\nCamara en que trabaja: ").concat(camaraEnQueTrabaja);
    }
}

Código: [Seleccionar]
public class Senador extends Legislador{
    private String camaraEnQueTrabaja;
   
    public Senador (String nombre, String apellidos, int edad, String provinciaQueRepresenta,
                        String camaraEnQueTrabaja){
        super(nombre, apellidos, edad, provinciaQueRepresenta);
        this.camaraEnQueTrabaja=camaraEnQueTrabaja;
    }

    public String getCamaraEnQueTrabaja() {
        return camaraEnQueTrabaja;
    }
   
    public String toString() {
        return super.toString().concat("\nCamara en que trabaja: ").concat(camaraEnQueTrabaja);
    }
}

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

public class Listador {
    private List<Persona> lista;
    private Iterator<Persona> iterador;
   
    public Listador() {
        lista = new ArrayList<Persona>();
    }
    public void add (Persona persona) {
        lista.add(persona);
    }
    public void mostrarLista() {
        iterador = lista.iterator();
        String tmp = "";
        Persona tmpPersona;
        while(iterador.hasNext()){
            tmpPersona=iterador.next();
            if(tmpPersona instanceof Diputado){
                tmp = "Diputado";
            }else tmp = "Senador";
            System.out.println("Listando datos del "+tmp+" :\n"+tmpPersona.toString());
        }
    }   
}

Código: [Seleccionar]
public class Test {
    public static void main (String[] args) {
        Listador lista = new Listador();
        lista.add(new Diputado ("Jose", "Gomez" , 40, "Rio Negro", "Camara alta"));
        lista.add(new Diputado ("Alberto", "Perez", 39, "Neuquen", "Camara baja"));
        lista.add(new Diputado ("Enrique", "Lopez", 45, "Salta", "Camara alta"));
        lista.add(new Senador ("Alberto", "Esteves", 51, "Mendoza", "Camara alta"));
        lista.add(new Senador ("Roberto", "Gomez", 55, "Jujuy", "Camara baja"));
        lista.add(new Senador ("Ricardo", "Bargas", 52, "Santa Fe", "Camara baja"));
        lista.mostrarLista();
    }
}

Gracias!!
« Última modificación: 09 de Agosto 2015, 12:56 por Alex Rodríguez »

RaGa

  • Moderador Global
  • Intermedio
  • *******
  • APR2.COM
  • Mensajes: 234
    • Ver Perfil
Re:Clases y métodos abstractos en Java. (CU00695B) ejercicio resuelto
« Respuesta #1 en: 07 de Agosto 2015, 05:37 »
Hola Adrián:

Estuve revisando tu ejercicio y lo veo muy bien. Solamente haría una observación que sería respecto a las clases Diputado y Senador.
Tal como están codificadas estas clases, daría la impresión de que el atributo 'camaraEnQueTrabaja' debiera haber sido declarado en la clase abstracta y así heredado por ambas clases para optimizar el diseño de las clases.
Otro detalle: si analizamos las clase Senador y Diputado son exactamente iguales, duplicidad de código, y esto no sería óptimo.

Mi sugerencia sería la siguiente:
Como al momento de instanciar un objeto tipo Diputado ya estoy conociendo de antemano que trabaja en la 'Cámara Baja', entonces no sería necesario que sea un atributo que pudiera contener otro valor. Lo mismo sucedería con los objetos tipo Senador.
Por lo tanto eliminaría el atributo 'camaraEnQueTrabaja' de ambas clases.

De esta manera, la clase Diputado podría codificarse:

Código: [Seleccionar]
public class Diputado extends Legislador{
   
    public Diputado(String nombre, String apellidos, int edad, String provinciaQueRepresenta)
    {
        super(nombre, apellidos, edad, provinciaQueRepresenta);
    }

    public String getCamaraEnQueTrabaja() {
        return "Cámara Baja";
    }
   
    public String toString() {
        return super.toString().concat("\nCamara en que trabaja: Cámara Baja");
    }
}

Y muy parecida sería la clase Senador (la única diferencia sería que habría que cambiar "Camara Baja" por "Cámara Alta").
Luego habría que eliminar el parámetro que ya no existe al momento de instanciar los objetos en la clase Test.

Analízalo y cualquier incoveniente seguimos discutiéndolo. Saludos!


adrit

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 59
    • Ver Perfil
Perfecto!!

Muchas gracias por la devolucion.

 

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