RSS

Archivo de la etiqueta: polimorfismo

Solución – Deberes Orientación Objetos (II)

Ejercicio 1:

Hemos creado la clase Producto:

public class Producto {
    //Atributos privados.
    private int idProducto;
    private String nombreProducto;
    private boolean disponible;
    private float precio;

    //Métodos getters y setters.
    public int getIdProducto() {
        return idProducto;
    }

    public void setIdProducto(int idProducto) {
        this.idProducto = idProducto;
    }

    public String getNombreProducto() {
        return nombreProducto;
    }

    public void setNombreProducto(String nombreProducto) {
        this.nombreProducto = nombreProducto;
    }

    public boolean isDisponible() {
        return disponible;
    }

    public void setDisponible(boolean disponible) {
        this.disponible = disponible;
    }

    public float getPrecio() {
        return precio;
    }

    public void setPrecio(float precio) {
        this.precio = precio;
    }

    //Constructor por defecto.
    public Producto()
    {
         idProducto = -1;
         nombreProducto = "ProductoxDefecto";
         disponible = false;
         precio = 0.0f;
    }

    //Constructor con parámetros.
    public Producto(int idProducto, String nombreProducto, boolean disponible, float precio){
         this.idProducto = idProducto;
         this.nombreProducto = nombreProducto;
         this.disponible = disponible;
         this.precio = precio;
    }

    //Procedimiento mostrar()
    public void mostrar(){
         System.out.println("Producto: " + idProducto + "-" + nombreProducto + "\n Disponible: "
                             + disponible + "\n Precio: " + precio);
    }

    //Procedimiento rebajarPrecio(float f)
    public void rebajarPrecio(float r){
         if (precio > r) {
             precio = precio - r;
         }
    }
}

Y las subclases que se indicaban en el diagrama:

La clase DiscoDuro:

public class DiscoDuro extends Producto {
    //Atributos privados.
    private String idHd;
    private String marca;
    private String capacidad;

    //Getters y Setters.
    public String getIdHd() {
        return idHd;
    }

    public void setIdHd(String idHd) {
        this.idHd = idHd;
    }

    public String getMarca() {
        return marca;
    }

    public void setMarca(String marca) {
        this.marca = marca;
    }

    public String getCapacidad() {
        return capacidad;
    }

    public void setCapacidad(String capacidad) {
        this.capacidad = capacidad;
    }

    //Constructor por defecto.
    public DiscoDuro(){
        super();
        idHd = "-1";
        marca = "HDxDefecto";
        capacidad = "OTB";
    }

    //Constructor con parámetros.
    public DiscoDuro(int idProducto, String nombreProducto, boolean disponible, float precio,
                     String idHd, String marca, String capacidad){
        super(idProducto, nombreProducto, disponible, precio);
        this.idHd = idHd;
        this.marca = marca;
        this.capacidad = capacidad;
    }

    //Procedimiento mostrar()
    public void mostrar(){
        System.out.println("Disco Duro: " + idHd +
                           " Marca: " + marca + " Capacidad : " + capacidad +
                           "\n Disponible: " + this.isDisponible() + "\n Precio: " + this.getPrecio());
    }
}

La clase Mp3:

public class Mp3 extends Producto {
    //Atributos privados.
    private String idMp3;
    private String marca;

    //Getters y Setters.
    public String getIdMp3() {
        return idMp3;
    }

    public void setIdMp3(String idMp3) {
        this.idMp3 = idMp3;
    }

    public String getMarca() {
        return marca;
    }

    public void setMarca(String marca) {
        this.marca = marca;
    }

    //Constructor por defecto.
    public Mp3(){
        super();
        idMp3 = "-1";
        marca = "Mp3xDefecto";
    }

    //Constructor con parámetros.
    public Mp3(int idProducto, String nombreProducto, boolean disponible,
                float precio, String idMp3, String marca){
        super(idProducto, nombreProducto, disponible, precio);
        this.idMp3 = idMp3;
        this.marca = marca;
    }

    //Procedimiento mostrar()
    public void mostrar(){
        System.out.println("Mp3: " + idMp3 + " Marca: " + marca
                           + "\n Disponible: " + this.isDisponible()
                           + "\n Precio: " + this.getPrecio());
    }
}

La clase Ordenador:

public class Ordenador extends Producto {
    //Atributos privados.
    private String idOrdenador;
    private String sistemaOperativo;
    private String velocidad;
    private String procesador;

    //Getters y Setters.
    public String getIdOrdenador() {
        return idOrdenador;
    }

    public void setIdOrdenador(String idOrdenador) {
        this.idOrdenador = idOrdenador;
    }

    public String getSistemaOperativo() {
        return sistemaOperativo;
    }

    public void setSistemaOperativo(String sistemaOperativo) {
        this.sistemaOperativo = sistemaOperativo;
    }

    public String getVelocidad() {
        return velocidad;
    }

    public void setVelocidad(String velocidad) {
        this.velocidad = velocidad;
    }

    public String getProcesador() {
        return procesador;
    }

    public void setProcesador(String procesador) {
        this.procesador = procesador;
    }

    //Constructor por defecto.
    public Ordenador(){
        super();
        idOrdenador = "-1";
        sistemaOperativo = "OSxDefecto";
        velocidad = "0 Mhz";
        procesador ="Intel 0";
    }

    //Constructor con parámetros.
    public Ordenador(int idProducto, String nombreProducto, boolean disponible
                     , float precio, String idOrdenador, String sistemaOperativo,
                     String velocidad, String procesador){
        super(idProducto, nombreProducto, disponible, precio);
        this.idOrdenador = idOrdenador;
        this.procesador = procesador;
        this.velocidad = velocidad;
        this.sistemaOperativo = sistemaOperativo;
    }

    //Procedimiento mostrar()
    public void mostrar(){
        System.out.println("Ordenador: " + idOrdenador +
                           "\n Procesador: " + procesador +
                           "\n Velocidad: "  + velocidad +
                           "\n SistemaOperativo: " + sistemaOperativo +
                           "\n Disponible: " + this.isDisponible() +
                           "\n Precio: " + this.getPrecio());
    }
}

Veamos la clase principal:

Tenemos al principio un procedimiento estático cartel que está sobrecargado y nos devuelve un mensaje dependiendo del tipo del parámetro de entrada, Producto, Ordenador, Mp3 o DiscoDuro.
Se harán varias llamadas en el procedimiento main.

En el procedimiento main se comienza instanciando varios objetos.
Veamos si son correctas.

public class MainProducto {

  public static void cartel(Producto p){
    System.out.println("¡¡Los mejores productos!!");
  }

  public static void cartel(Ordenador o){
    System.out.println("Oferta HP 620 T4500 - solo 378€");
  }

  public static void cartel(Mp3 m){
    System.out.println("Oferta MP3 Creative Zen 8GB 80.20€");
  }

  public static void cartel(DiscoDuro d){
    System.out.println("Oferta Western Digital 1 Tera 45.30€");
  }

  public static void main(String[] args) {
      Producto p1 = new Ordenador();  //Correcto. El padre está contenido en el hijo.
      //Ordenador o1 = new Producto();  Incorrecto. El hijo no está contenido en el padre.
      //Mp3 m1 = new Producto();        Incorrecto. El hijo no está contenido en el padre.
      //Ordenador o2 = new DiscoDuro(); Incorrecto. Son hijos, no tienen nada que ver.
      Producto p2 = new DiscoDuro();  //Correcto. El padre está contenido en el hijo.
      Producto p3 = new Mp3();        //Correcto. El padre está contenido en el hijo.

      p1.mostrar(); //Llama a mostrar de Ordenador
      p2.mostrar(); //Llama a mostrar de DiscoDuro
      p3.mostrar(); //Llama a mostrar de Mp3
      //Importa el tipo en tiempo de ejecución.

      cartel(p1); //Llama a cartel de parámetro Producto.
      cartel(p2); //Llama a cartel de parámetro Producto.
      cartel(p3); //Llama a cartel de parámetro Producto.
      //En la sobrecarga importa el tipo en tiempo de compilación.
  }

}

Compilamos las clases y ejecutamos:

Ejercicio 2:

Hemos creado un vector de tamaño 5 y hemos añadido objetos Producto, Ordenador, Mp3 y DiscoDuro.
Recorremos el vector y llamamos a las funciones rebajarPrecio() y mostrar().

public class MainProducto2 {

    public static void main(String[] args) {
        //Declaramos un array de Producto.
        Producto[] listap = new Producto [5];

        //Instanciamos diferentes objetos.
        Producto p1 = new Producto(100, "USB", true, 50f);

        Ordenador o1 = new Ordenador(200, "Ordenador VAIO", true, 450.30f,
                                     "VPC", "SonyVAIO", "500 Mhz", "Windows7");

        Mp3 m1 = new Mp3(300, "Mp3 Zen", false, 80.2f, "Zen 8GB", "Zen Creative 8GB" );

        Ordenador o2 = new Ordenador(300, "Ordenador HD", true, 500f, "HD",
                                     "HD 244", "233 Mhz", "Windows 2000");

        DiscoDuro d1 = new DiscoDuro(400, "Western Digital", true, 80f, "WD", "WD 1TB", "1TB");

        //Los añadimos a la lista de Producto.
        listap[0] = p1;
        listap[1] = o1;
        listap[2] = m1;
        listap[3] = o2;
        listap[4] = d1;

        System.out.println("Lista de los productos con la rebaja aplicada: \n");
        //Recorremos la lista.
        //Por cada elemento rebajamos su precio y llamamos al metodo mostrar()
        for (int i=0; i<listap.length; i++){
            listap[i].rebajarPrecio(10.50f);
            listap[i].mostrar();
            System.out.println();
        }
    }

}

Compilamos y ejecutamos:

Si te gusta esta entrada, vótala en Bitácoras.com votar

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

Anuncios
 
Deja un comentario

Publicado por en 12 julio, 2011 en Deberes

 

Etiquetas: , , , , , ,

Deberes – Orientación a objetos (II)

En Orientación a objetos (II) hablamos del Polimorfismo, de las colecciones hetereogéneas y de la Sobrecarga de métodos.

Vamos a practicar y a resolver ejercicios relacionados con estos temas.

  • Ejercicio 1: Crear las siguientes clases.

Realizar constructores por defecto y constructor con parámetros.
Sobrescribir el método mostrar() en las subclases para que muestren sus atributos específicos.
Razonar qué instrucciones serían correctas y cuales serían los resultados en la siguiente clase principal. Comprobar ejecutando.

public class MainProducto {

  public static void cartel(Producto p){
    System.out.println("¡¡Los mejores productos!!");
  }

  public static void cartel(Ordenador o){
    System.out.println("Oferta HP 620 T4500 - solo 378€");
  }

  public static void cartel(Mp3 m){
    System.out.println("Oferta MP3 Creative Zen 8GB 80.20€");
  }

  public static void cartel(DiscoDuro d){
    System.out.println("Oferta Western Digital 1 Tera 45.30€");
  }

  public static void main(String[] args) {
      Producto p1 = new Ordenador();
      Ordenador o1 = new Producto();
      Mp3 m1 = new Producto();
      Ordenador o2 = new DiscoDuro();
      Producto p2 = new DiscoDuro();
      Producto p3 = new Mp3();

      p1.mostrar();
      p2.mostrar();
      p3.mostrar();

      cartel(p1);
      cartel(p2);
      cartel(p3);

}

}
  • Ejercicio 2: Crear una clase principal que cree varios objetos de las clases anteriores, tanto de Producto como de DiscoDuro, MP3 y Ordenador. Crear un array de Producto para guardarlos. Rebajar el precio de todos los productos en 10.50 y mostrar el resultado.

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 29 junio, 2011 en Deberes

 

Etiquetas: , , , , , ,

 
A %d blogueros les gusta esto: