Pongo la solución a los ejercicios anteriores en esta nueva entrada para no hacer excesivamente larga la anterior.
Ejercicio 1: Veamos las clases y qué debemos cambiar.
La clase Concurso tiene sus atributos públicos y de esta forma se puede acceder a ellos directamente en la clase mainConcurso e incluso darles valores incorrectos a los atributos.
Deberíamos hacer estos atributos privados y proveer métodos getters y setters que tengan en cuenta las condiciones que vemos para los atributos en el constructor.
En la clase mainConcurso se deben usar los métodos getters y setters de la clase Concurso.
Modificaciones clase Concurso:
import java.util.*; import java.text.*; public class Concurso{ //1. Ponemos privados los atributos private int codConcurso; private int codOrgano; private String titulo; private int tipo; private Date fechaResolucion; //2. Creamos métodos getters y setters para los atributos. public void setCodConcurso(int codConcurso){ if(codConcurso>0){ this.codConcurso = codConcurso; } } public int getCodConcurso(){ return codConcurso; } public void setCodOrgano(int codOrgano){ this.codOrgano = codOrgano; } public int getCodOrgano(){ return codOrgano; } public void setTitulo(String titulo){ this.titulo = titulo; } public String getTitulo(){ return titulo; } public void setTipo(int tipo){ if(tipo>0 && tipo<4){ this.tipo = tipo; } else { System.out.println("Fecha incorrecta"); } } public int getTipo(){ return tipo; } public void setFechaResolucion(String fechaResolucion){ DateFormat df = new SimpleDateFormat("dd/MM/yyyy")<wbr>; try { this.fechaResolucion = df.parse(fechaResolucion); } catch (ParseException e){ System.out.println("Fecha incorrecta"); } } //Aunque se guarde internamente como Date para los que //usen la clase vamos a devolver un string formateado. public String getFechaResolucion(){ SimpleDateFormat sdf = new SimpleDateFormat ("dd/MM/yyyy"); String fecha = sdf.format(fechaResolucion); return fecha; } public Concurso(int codConcurso, int codOrgano, String titulo, int tipo, String fechaResolucion){ if (codConcurso > 0){ this.codConcurso = codConcurso; } else { this.codConcurso = -1; } this.codOrgano = codOrgano; this.titulo = titulo; if (tipo>0 && tipo <4) { this.tipo = tipo;} else { this.tipo = -1; } DateFormat df = new SimpleDateFormat("dd/MM/yyyy")<wbr>; try { this.fechaResolucion = df.parse(fechaResolucion); } catch (ParseException e){ e.printStackTrace(); } }
Modificamos la clase principal MainConcurso:
public class mainConcurso{ public static void main(String[] args) { Concurso c = new Concurso(100, 105082, "Adjudicación suministro licencias SW.",1, "20/06/2011"); //Modificamos los atributos con setters. c.setCodConcurso(-199); c.setTipo(5); //Para mostrar los datos utilizamos los getters. //Como getFechaResolucion devuelve ahora un String la salida es más //amigable. System.out.println("Concurso " + c.getCodConcurso() + ": " + c.getTitulo() + "\n Tipo: " + c.getTipo() + " Fecha Res: " + c.getFechaResolucion()); } }
Ejercicio 2: Creamos la jerarquía de clases.
Primero la clase Persona:
public class Persona{ private String codPersona; private String nombre; private int edad; private String telContacto; //Constructor public Persona(String codPersona, String nombre, int edad, String telContacto){ this.codPersona = codPersona; this.nombre = nombre; this.edad = edad; this.telContacto = telContacto; } //Getters y Setters public String getCodPersona(){ return codPersona; } public void setCodPersona(String codPersona){ this.codPersona = codPersona; } public String getNombre(){ return nombre; } public void setNombre(String nombre){ this.nombre = nombre; } public int getEdad(){ return edad; } public void setEdad(int edad){ this.edad = edad; } public String getTelContacto(){ return telContacto; } public void setTelContacto(String telContacto){ this.telContacto = telContacto; } //Métodos public void mostrar(){ System.out.println("Persona: " + codPersona + "-" + nombre + "\n Edad: " + edad + "\n TelContacto: " + telContacto + "\n"); } }
La clase Alumno:
Para poder mostrar bien el atributo asignaturas, que es un array de String, hemos creado una función AsignaturasToString que se utiliza en el método a sobrescribir mostrar().
public class Alumno extends Persona{ private int curso; private String[] asignaturas; //Constructor public Alumno(String codPersona, String nombre, int edad, String telContacto,int curso, String[]asignaturas){ super(codPersona, nombre, edad, telContacto); this.curso = curso; this.asignaturas = asignaturas; } //Getters y Setters public int getCurso(){ return curso; } public void setCurso(int curso){ this.curso = curso; } public String[] getAsignaturas(){ return asignaturas; } public String AsignaturasToString(){ String resultado = "Asignaturas: "; for (int i=0; i<asignaturas.length; i ++) { if (i == 0){ resultado = resultado + asignaturas[i]; } else { resultado = resultado + ", " + asignaturas[i]; } } return resultado; } public void setAsignaturas(String []asignaturas){ this.asignaturas = asignaturas; } //Métodos public void mostrar(){ System.out.println("Alumno: " + getNombre() + "\n Curso: " + curso + " " + AsignaturasToString() + "\n"); } }
La clase Profesor:
public class Profesor extends Persona{ private float salario; private String fecContratacion; //Constructor public Profesor(String codPersona, String nombre, int edad, String telContacto, float salario, String fecContratacion){ super(codPersona, nombre, edad, telContacto); this.salario = salario; this.fecContratacion = fecContratacion; } //Getters y Setters public float getSalario(){ return salario; } public void setSalario(float salario){ this.salario = salario; } public String getFecContratacion(){ return fecContratacion; } public void setFecContratacion(String fecContratacion){ this.fecContratacion = fecContratacion; } //Métodos public void mostrar(){ System.out.println("Profesor: " + getNombre() + "\n Salario: " + salario + "\n FecContratacion: " + fecContratacion + "\n"); } }
Creamos una clase principal para ver los resultados:
public class MainPersonas { public static void main(String[] args) { //Creamos una persona Persona p = new Persona("001", "Lola Gomez", 19, "600101010"); //Creamos un alumno y lo mostramos. String[] asigA = {"IP1", "IP2", "IMD", "CI", "EST"}; Alumno a = new Alumno("002", "Novatín Chiquitito", 20, "606514458", 2, asigA); a.mostrar(); //Cambiamos las asignaturas del alumno y lo mostramos. String[] asigB = {"IP1","IP2","CI"}; a.setAsignaturas(asigB); a.mostrar(); //Creamos un profesor Profesor pro = new Profesor("003", "Amparo Osuna", 45, "615010250", 1500.50f, "12/03/1990" ); //Mostramos la persona y el profesor. p.mostrar(); pro.mostrar(); } }
Si te gusta esta entrada, vótala en Bitácoras.com
¿Cómo ves esta entrada o el blog? Deja un comentario!
netzulo
15 diciembre, 2015 at 7:23 pm
En mi caso, supongo que sera por que .NET me ha embaucado, pero me gusta usar StringBuilder a la hora de generar Strings con arrays,
StringBuilder sb = new StringBuilder(«»);
for(String asig : asignaturas){
sb.append(asig);
sb.append(‘,’);
}
Un saludo! y muchas gracias por toda la info!