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

fedegaray

  • Principiante
  • **
  • Mensajes: 81
    • Ver Perfil
Bueno bueno, estoy llegoando al final! Aquí mi resolución del ejercicio 95.

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.

Clase Persona
Código: [Seleccionar]
public class Persona {
    private String nombre;
    private String apellido;
    private int edad;
    private boolean casado;

    public Persona () {
        nombre = "";
        apellido = "";
        edad = 0;
        casado = false;
    }

    public Persona (String nombre, String apellido, int edad, boolean casado) {
        this.nombre = nombre;
        this.apellido = apellido;
        this.edad = edad;
        this.casado = casado;
    }

    public void setNombre (String nombre) {
        this.nombre = nombre;
    }

    public void setApellido (String apellido) {
        this.apellido = apellido;
    }

    public void setEdad (int edad) {
        this.edad = edad;
    }

    public void setCasado (boolean casado) {
        this.casado = casado;
    }

    public String getNombre () {
        return this.nombre;
    }

    public String getApellido () {
        return this.apellido;
    }

    public int getEdad () {
        return this.edad;
    }

    public boolean getCasado () {
        return this.casado;
    }
   
    public String toString() {
         String estadoCivil = " ";
        if (this.casado == false) {
            estadoCivil = " no ";
        } else {};
        Integer datoEdad = edad;
        return getNombre() + " " + getApellido() + " tiene " + datoEdad.toString() + " años, y" + estadoCivil + "está casado";
    }
}

Clase Legislador
Código: [Seleccionar]
public abstract class Legislador extends Persona{
    String provinciaQueRepresenta;
    String partidoPolitico;
    int numeroDespacho;
   
    public Legislador () {
        super ();
        provinciaQueRepresenta = "";
        partidoPolitico = "";
        numeroDespacho = 0;
    }
   
    public Legislador (String nombre, String apellido, int edad, boolean casado, String provinciaQueRepresenta, String partidoPolitico, int numeroDespacho) {
        super (nombre, apellido, edad, casado);
        this.provinciaQueRepresenta = provinciaQueRepresenta;
        this.partidoPolitico = partidoPolitico;
        this.numeroDespacho = numeroDespacho;
    }
   
    public void setProvinciaQueRepresenta (String provinciaQueRepresenta) {
        this.provinciaQueRepresenta = provinciaQueRepresenta;
    }
   
    public void setPartidoPolitico (String partidoPolitico) {
        this.partidoPolitico = partidoPolitico;
    }
   
    public void setNumeroDespacho (int numeroDespacho) {
        this.numeroDespacho = numeroDespacho;
    }
   
    public String getProvinciaQueRepresenta () {
        return provinciaQueRepresenta;
    }
   
    public String getPartidoPolitico () {
        return partidoPolitico;
    }
   
    public int getNumeroDespacho () {
        return numeroDespacho;
    }
   
    public String toString () {
        return super.toString() + "\nRepresenta a la Provincia de " + getProvinciaQueRepresenta() + " para el " + getPartidoPolitico() + "\nSu número de despacho es " + getNumeroDespacho();
    }
   
    abstract public void getCamaraEnQueTrabaja();
   
}

Clase Diputado
Código: [Seleccionar]
public class Diputado extends Legislador {
    private int asientoCamaraBaja;
   
    public Diputado () {
        super ();
        asientoCamaraBaja = 0;
    }
   
    public Diputado (String nombre, String apellido, int edad, boolean casado, String provinciaQueRepresenta, String partidoPolitico, int numeroDespacho, int asientoCamaraBaja) {
        super (nombre, apellido, edad, casado, provinciaQueRepresenta, partidoPolitico, numeroDespacho);
        this.asientoCamaraBaja = asientoCamaraBaja;
    }
   
    public void setAsientoCamaraBaja (int asientoCamaraBaja) {
        this.asientoCamaraBaja = asientoCamaraBaja;
    }
   
    public int getAsientoCamaraBaja () {
        return asientoCamaraBaja;
    }
   
    public String toString () {
        return super.toString() + "\nSu número de asiento en la Cámara Baja es " + getAsientoCamaraBaja();
    }
   
    public void getCamaraEnQueTrabaja () {
        System.out.println ("Diputados");
    }
}

Clase Senador
Código: [Seleccionar]
public class Senador extends Legislador {
    private int asientoCamaraAlta;
   
    public Senador () {
        super ();
        asientoCamaraAlta = 0;
    }
   
    public Senador (String nombre, String apellido, int edad, boolean casado, String provinciaQueRepresenta, String partidoPolitico, int numeroDespacho, int asientoCamaraAlta) {
        super (nombre, apellido, edad, casado, provinciaQueRepresenta, partidoPolitico, numeroDespacho);
        this.asientoCamaraAlta = asientoCamaraAlta;
    }
   
    public void setAsientoCamaraAlta (int asientoCamaraAlta) {
        this.asientoCamaraAlta = asientoCamaraAlta;
    }
   
    public int getAsientoCamaraAlta () {
        return asientoCamaraAlta;
    }
   
    public String toString () {
        return super.toString() + "\nSu número de asiento en la Cámara Alta es " + getAsientoCamaraAlta();
    }
   
    public void getCamaraEnQueTrabaja () {
        System.out.println ("Senadores");
    }
}

Clase NominaLegisladores
Código: [Seleccionar]
import java.util.ArrayList;

public class NominaLegisladores {
    private ArrayList<Legislador> listaLegisladores;

    public NominaLegisladores () {
        listaLegisladores = new ArrayList <Legislador> ();
    }

    public void agregaLegislador (Legislador nuevoLegislador) {
        listaLegisladores.add (nuevoLegislador);
    }
   
    public int getTamaño () {
        return listaLegisladores.size();
    }

    public void muestraContenido () {
        for (Legislador tmp: listaLegisladores) {
            System.out.println (tmp.toString());
            String tmpStr = "";
            if (tmp instanceof Diputado) {
                tmpStr = "Diputados";
            } else {
                tmpStr = "Senadores";
            }
            System.out.println ("Este Legislador trabaja en la Cámara de " + tmpStr + "\n");
        }
    }
}

Clase TestLegisladores
Código: [Seleccionar]
public class TestLegisladores {
    public static void main (String [] args) {
        Legislador leg1 = new Diputado ("Carlos", "Pérez", 49, true, "Córdoba", "FPV", 506, 25);
        Legislador leg2 = new Diputado ("Diego", "Ramírez", 51, false, "Buenos Aires", "PRO", 208, 95);
        Legislador leg3 = new Diputado ("Alberto", "Garay", 19, false, "Formosa", "Radicalismo", 774, 104);
        Legislador leg4 = new Diputado ("María", "Lopérfido", 39, true, "Neuquén", "UNEN", 225, 100);
        Legislador leg5 = new Senador ("Luisina", "Brando", 62, false, "Santa Fe", "PRO", 58, 97);
        Legislador leg6 = new Senador ("Nestor", "Kirchner", 61, true, "Santa Cruz", "FPV", 012, 41);
        Legislador leg7 = new Senador ("Cristina", "Fernández", 60, true, "Santa Cruz", "FPV", 013, 42);
        NominaLegisladores listaCongreso = new NominaLegisladores ();
        listaCongreso.agregaLegislador(leg1); listaCongreso.agregaLegislador(leg2);
        listaCongreso.agregaLegislador(leg3); listaCongreso.agregaLegislador(leg4);
        listaCongreso.agregaLegislador(leg5); listaCongreso.agregaLegislador(leg6);
        listaCongreso.agregaLegislador(leg7);
        System.out.println ("\f");
        System.out.println ("El total de legisladores es de " + listaCongreso.getTamaño());       
        System.out.println ("");
        listaCongreso.muestraContenido();
    }
}
« Última modificación: 05 de Mayo 2015, 14:45 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
Re:Ejercicio CU00695B - Clases y métodos abstractos en Java
« Respuesta #1 en: 05 de Mayo 2015, 14:37 »
Hola Fede! Ya estás al final del camino, al menos de este curso. Pero lo que es java todavía tienes todo el camino que quieras por delante :)

El código del método toString de la clase Persona me pareció raro cuando vi String estadoCivil = " "; pero luego comprendí por qué lo habías hecho ¡buen truco!


Debes mejorar una cosa a nivel de conceptos.

Código: [Seleccionar]
    public void getCamaraEnQueTrabaja () {
        System.out.println ("Diputados");
    }


No es un método bien definido. El prefijo get se usa para indicar que el método devuelve algo. Lo correcto hubiera sido

Código: [Seleccionar]
    public String getCamaraEnQueTrabaja () {
        return "Diputados";
    }


Los métodos no deben encargarse de mostrar cosas por pantalla (excepto métodos específicamente preparados para ello como mostrarInformacion o imprimirInformacion)



En la clase NominaLegisladores tienes que mejorar este código

Código: [Seleccionar]
    public void muestraContenido () {
        for (Legislador tmp: listaLegisladores) {
            System.out.println (tmp.toString());
            String tmpStr = "";
            if (tmp instanceof Diputado) {
                tmpStr = "Diputados";
            } else {
                tmpStr = "Senadores";
            }
            System.out.println ("Este Legislador trabaja en la Cámara de " + tmpStr + "\n");
        }
    }


Fíjate cómo puedes dejarlo, ves que hay código que no era necesario:

Código: [Seleccionar]
    public void muestraContenido () {
        for (Legislador tmp: listaLegisladores) {
            System.out.println (tmp.toString());
            System.out.print ("Este Legislador trabaja en la Cámara de ");
            tmp.getCamaraEnQueTrabaja();
        }
    }

Realmente era mejor que el método devolviera un String y así tendríamos

Código: [Seleccionar]
    public void muestraContenido () {
        for (Legislador tmp: listaLegisladores) {
            System.out.println (tmp.toString());
            System.out.print ("Este Legislador trabaja en la Cámara de "+tmp.getCamaraEnQueTrabaja());
        }
    }

Lo anterior es interesante porque vemos cómo al llamar a un método se aplica el método de una clase u otra según el polimorfismo, eso nos ahorra tener que estar haciendo comprobaciones (aunque algunas veces sí tendremos que hacer comprobaciones).

Corrige esas pequeñas cosas y todo bien

Salu2

fedegaray

  • Principiante
  • **
  • Mensajes: 81
    • Ver Perfil
Qué buen ojo. Muchas gracias por la corrección. No podía encontrar la manera de pensarlo y me terminé enredando solo, y eso se notó en el código. Tendría que haberlo dejado un rato y retomarlo más tarde, seguro lo hubiera podido ver más claro.
Lo tendré muy en consideración, muchas gracias!!

 

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