Conviértete en un emprendedor,profesional del conocimiento en la programación

lunes, 9 de enero de 2012

POLIMORFISMO CON COLECCIONES

Compartir con:


Polimorfismo
●Característica por la cual, objetos de diferentes clases pueden responder de manera diferente al mismo mensaje.
●En la práctica, es la posibilidad de que varias clases (en jerarquía) puedan tener métodos con el mismo nombre y el objeto que recibe el mensaje actúe según su propio método.
●El polimorfismo se implementa a través de reemplazo y/o refinamiento.


Polimorfismo con colecciones
Ejercicio 1
Cree un proyecto nuevo de nombre P01E01. Cree un paquete nuevo de nombre vehículos. Diseñe una clase de nombre Vehículo con los siguientes atributos privados: placa (cadena), marca (cadena), pasajeros (entero), precio (real).





Implemente el constructor y todos los métodos accesores(get,set) de los atributos de la clase. Considere un método abstracto de nombre clase() que retorne el nombre de la clase.
Considere un método no abstracto de nombre info() que retorne la información de un vehículo separando sus campos por un tabulador.
Diseñe otra clase de nombre Automovil que herede a la clase Vehiculo con los siguientes atributos: implemente








Implemente el constructor y todos los métodos accesores(get,set) de los atributos de la clase. Desarrolle el método abstracto clase() para que retorne el nombre de la clase.
Desarrolle el método no abstracto info() aplicando refinamiento para que considere sus propios atributos adicionales a la información del vehículo.
Diseñe otra clase de nombre Camión que herede la clase Vehículo con los siguientes atributos:





Implemente el constructor y todos los métodos accesores(get,set) de los atributos de la clase.
Desarrolle el método abstracto clase() para que retorne el nombre de la clase.
Desarrolle el método no abstracto info() aplicando refinamiento para que considere sus propios atributos adicionales a la información del vehículo.
Diseñe otra clase de nombre ColeccionVehiculos que tenga como atributo un objeto de la clase ArrayList e implemente los métodos de administración.
Diseñe otra clase de nombre PanelPrincipal que tenga una vista similar a la siguiente:




                        Programe la acción de los botones, Diseñe la clase Principal y ejecute su aplicación.




Solución:

Primero crearemos un paquete de nombre vehículos. Luego haremos las clases correspondientes y después hacemos el diseño del panel, programando los botones para ejecutar su aplicación.

package Vehiculos;

public abstract class Vehiculo {

// atributos
 private String placa;
 private String marca;
 private int pasajeros;
 private double precio;

// constructor
public Vehiculo(String placa,String marca,int pasajeros,double precio){
    this.placa=placa;
    this.marca=marca;
    this.pasajeros=pasajeros;
    this.precio=precio;    }

public abstract String clase();  // clase abstracta

public String info(){   // clase no abstracta
 return "clase\n:"+clase()+"clase\n:"+getPlaca()+"clase\n:"+getMarca()+"clase\n:"+getPasajeros()+"clase\n:"+getPrecio(); 
        }
// métodos get-set
        public String getPlaca() {
        return placa; }

   
        public void setPlaca(String placa) {
        this.placa = placa;  }
     
 public String getMarca() {
        return marca;   }
     public void setMarca(String marca) {
        this.marca = marca;   }
    
public int getPasajeros() {
        return pasajeros;  }
  public void setPasajeros(int pasajeros) {
        this.pasajeros = pasajeros;     }
     
 public double getPrecio() {
        return precio;  }
public void setPrecio(double precio) {
        this.precio = precio;
    }
} // Fin de la clase Vehiculo


package Vehiculos;

public class Automovil extends Vehiculo {
     
// atributos
 private boolean maletera;
       private double capacidad;
   
// constructor
  public Automovil(String placa,String marca,int pasajeros,double precio,boolean maletera,double capacidad){
      super(placa,marca,pasajeros,precio);
      this.maletera=maletera;
      this.capacidad=capacidad;
  }

      public String clase(){  
       return "Automovil"; }

      public String info(){  // clase no abstracta
      return super.info()+"clase\n:"+isMaletera()+"clase\n:"+getCapacidad();    }
  // metodos get - set
    public boolean isMaletera() {
        return maletera;    }
  public void setMaletera(boolean maletera) {
        this.maletera = maletera;  }
    public double getCapacidad() {
        return capacidad;  }

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

           }  Fin de la clase  Automovil.

package Vehiculos;

public class Camion extends Vehiculo {
  
// atributos
    private boolean tolva;
    private double carga;

 // constructor
    public Camion(String placa,String marca,int pasajeros,double precio,boolean tolva,double carga){

      super(placa,marca,pasajeros,precio);
      this.tolva=tolva;
      this.carga=carga;  }

      public String clase(){
       return "Camion"; }

       public String info(){  // clase no abstracta
      return super.info()+"clase\n:"+isTolva()+"clase\n:"+getCarga();    }

// métodos get - set
    public boolean isTolva() {
        return tolva;   }

   public void setTolva(boolean tolva) {
        this.tolva = tolva;   }
  public double getCarga() {
        return carga;  }
    public void setCarga(double carga) {
        this.carga = carga;
    }     }  Fin de la clase Camion

package Vehiculos;
import java.util.ArrayList;

public class ColeccionVehiculos {
// atributos
    protected ArrayList<Vehiculo> a;
// constructutor   
    public ColeccionVehiculos(){
        a=new ArrayList<Vehiculo>();   }
   
    public int getN(){
      return a.size();}
    public void agrega(Vehiculo v){
           a.add(v);}

   public Vehiculo getVehiculo(int i){
        return a.get(i);}
   public Vehiculo getVehiculo(){
         return a.get(0);}
    public Vehiculo busca(String placa){
for(int i=0;i<getN();i++){
if(getVehiculo(i).getPlaca().equals(placa))
return getVehiculo(i);
}
return null;}
    public void elimina(int i){
           a.remove(i);}
    public void elimina(Vehiculo v){
          a.remove(v);}
    public void elimina(String placa){
        if(busca(placa)!=null)
      a.remove(placa);     }
    } // Fin de la clase Colección vehículos





Panel





Frame para ejecutar la aplicación 







Contenido del Frame
package Vehiculos;
public class Principal extends javax.swing.JFrame {
         public Principal() {
        initComponents();
        add(new PanelPrincipal());
        setSize(600,400);
    }
public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Principal().setVisible(true);
            }
        });
    }  
 }



0 comentarios:

Publicar un comentario