RSS

Solucion – Deberes Orientacion Objetos (I)

23 Jun

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 votar

¿Cómo ves esta entrada o el blog? Deja un comentario!

 
1 comentario

Publicado por en 23 junio, 2011 en Deberes

 

Etiquetas: , , , , , ,

Una respuesta a “Solucion – Deberes Orientacion Objetos (I)

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

     

Replica a netzulo Cancelar la respuesta