sábado, 6 de noviembre de 2010

Actividad de la Tercera Semana

Herencia y poliformismo
Primero comenzaremos por definir algunos conceptos que se utilizan en la herencia y poliformismo:

Subclass (subclase): Es una clase derivada de otra clase. También se puede llamar, clase derivada, clase extendida o clase hijo.

Superclass (superclase). Es la clase sobre la cual se derivan otras clases, es decir, la clase de la cual esta derivada la subclase. También se puede llamar clase padre o clase base.

HERENCIA

El concepto de herencia en la programacion orientada a objetos consiste en utilizar las atributos y metodos de las clases en la realización de nuevas clases. Es decir que si vamos a definir alguna clase y ya existe alguna clase que incluye código que vamos a utilizar en la nueva, podemos heredarlo.

Una subclase hereda todos los componentes (objetos, atributos, métodos) de la superclase.

A continuación presentaremos un ejemplo de Herencia, en código Java:


public class Bicycle {
 
    // La bibicleta contiene atributos 
public int cadence;
    public int gear;
    public int speed;
 
    // La clase bicicleta contiene un constructor 
public Bicycle(int startCadence, int startSpeed, int startGear) {
        gear = startGear;
        cadence = startCadence;
        speed = startSpeed;
    }
 
    // La clase contiene 4 métodos
    public void setCadence(int newValue) {
        cadence = newValue;
    }
 
    public void setGear(int newValue) {
        gear = newValue;
    }
 
    public void applyBrake(int decrement) {
        speed -= decrement;
    }
 
    public void speedUp(int increment) {
        speed += increment;
    }
 
}
Para declarar la clase bicicleta de montaña como subclase de bicicleta se usa el siguiente código:

public class MountainBike extends Bicycle {
 
    // la clase de bicicleta de montaña adiere un atributo
    public int seatHeight;

    // la clase tiene un constructor
    public MountainBike(int startHeight, int startCadence, int startSpeed,  
        int startGear) {
        super(startCadence, startSpeed, startGear);
        seatHeight = startHeight;
    } 
 
    // la clase tiene un método
    public void setHeight(int newValue) {
        seatHeight = newValue;
    } 

}
 Con esto la clase Bicicleta de Montaña hereda los atributos y métodos de la clase padre Bicicleta, exepto por los constructores que esos no se pueden heredar pues son unicos de clase clase.

Una subclase hereda todos los miembros de tipo protected y public de la clase padre,  sin embargo no hereda los miembros private.

Aplicación en la actividad de la semana dos (tienda en linea tipo amazon):
Superclase: Producto
Subclase: Pedido


Superclase: Cliente
Subclase: Pedido

Superclase: Pedido
Subclases: Envío, Estatus


POLIFORMISMO
 
El diccionario define el término poliformismo como un principio de biología en el cual, cada organismo o especie puede adquirir diferentes formas o estados. Si queremos llevar este término a la programación orientada a objetos tenemos por poliformismo, que la subclase de una clase puede definir su propio comportamiento y compartir funcionalidades de la clase padre.

Para ejemplificar el poliformismo tomaremos el ejemplo antes mencionado solo que lo modificaremos un poco. Agregaremos un método de impresión a la clase padre, bicicleta.


public void printDescription(){
 System.out.println("\nBike is in gear " + this.gear + " with a cadence of " +
        this.cadence + " and travelling at a speed of " + this.speed + ". ");
}
Despues agragaremos otra subclase Bicicleta de carrera. A la clase bicicleta de 
montaña le agregaremos otro método en el cual extraeremos la suspención de esta 
bicicleta. Asi es como quedo la clase bicicleta de montaña:
public class MountainBike extends Bicycle{
  private String suspension;

  public MountainBike(int startCadence, int startSpeed, int startGear, String 
    suspensionType){
    super(startCadence, startSpeed, startGear);
    this.setSuspension(suspensionType);
  }

  public String getSuspension(){
    return this.suspension;
  }

  public void setSuspension(String suspensionType){
    this.suspension = suspensionType;
  }

  public void printDescription(){
    super.printDescription();
    System.out.println("The MountainBike has a " + getSuspension()
            + " suspension.");
  }
} 
Notamos como se sobreescribe el método de la impresion de la clase padre bicicleta, 
adiriendo la descripción de la suspencion de la clase de la bicicleta de montaña.
Ahora definimos la otra clase de la siguiente manera:
public class RoadBike extends Bicycle{
  private int tireWidth; // In millimeters (mm)

  public RoadBike(int startCadence, int startSpeed, int startGear, int 
    newTireWidth){
    super(startCadence, startSpeed, startGear);
    this.setTireWidth(newTireWidth);
  }

  public int getTireWidth(){
    return this.tireWidth;
  }

  public void setTireWidth(int newTireWidth){
    this.tireWidth = newTireWidth;
  }

  public void printDescription(){
    super.printDescription();
    System.out.println("The RoadBike has " + getTireWidth()
            + " MM tires.");
  }

}
 
Igual que en la clase anterior vemos como se sobreescribe sobre el método de 
impresión de la clase padre. Esta es una prueba sobre las clases que tenemos:
public class TestBikes {
  public static void main(String[] args){
    Bicycle bike01, bike02, bike03;

    bike01 = new Bicycle(20, 10, 1);
    bike02 = new MountainBike(20, 10, 5, "Dual");
    bike03 = new RoadBike(40, 20, 8, 23);

    bike01.printDescription();
    bike02.printDescription();
    bike03.printDescription();

  }
}
Y la salida que obtenemos es la siguiente:
Bike is in gear 1 with a cadence of 20 and travelling at a speed of 10. 

Bike is in gear 5 with a cadence of 20 and travelling at a speed of 10. 
The MountainBike has a Dual suspension.

Bike is in gear 8 with a cadence of 40 and travelling at a speed of 20. 
The RoadBike has 23 MM tires.
Aplicación en la actividad de la segunda semana(tienda en línea tipo Amazon)
En el método, mostrar estatus de la clase estatus de pedido
puede obtenerse diferentes impresiones
Estatus(en almacen)
Estatus(en envio)
Estatus(recibido)
Estatus(rechazado)
Podemos utilizar el poliformismo en la impresion de estos estatus.
Fuente:
http://download.oracle.com/javase/tutorial/java/IandI/subclasses.html
Escogí esta fuente por que me pareció simple la explicación y muy buen ejemplo, aparte de que como estamos viendo java pensé que lo mejor sería ir a la página principal del lenguaje.

No hay comentarios:

Publicar un comentario