Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: fedegaray en 04 de Mayo 2015, 00:32
-
Bueno bueno, estoy llegoando al final! Aquí mi resolución del ejercicio 95.
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
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
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
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
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
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
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();
}
}
-
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.
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
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
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:
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
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
-
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!!