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!!