lunes, 8 de noviembre de 2010

Actividad de la Cuarta Semana

Documentación y Herramientas de Desarrollo

La herramienta que he elegido es JAVADOC

Descripción:
Javadoc es una herramienta para la generación de documentación de API'S (Interfaz de programación de aplicaciones) en formato HTML a partir de código fuente JAVA.

Descarga de la herramienta:
Javadoc puede ser descargado solamente como parte del paquete Java JDK o SDK. La liga de descarga es la siguiente:
https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewProductDetail-Start?ProductRef=jdk-6u22-oth-JPR@CDS-CDS_Developer

Tutoriales de la herramienta:
http://www.mcs.csueastbay.edu/~billard/se/cs3340/ex7/javadoctutorial.html
http://www.oracle.com/technetwork/java/javase/documentation/index-137868.html

Para ejemplificar la utilización de Javadoc tomaremos como base el programa de la semana pasada, el programa de Bicycle, aquí esta el código de dicho programa:


Donde podemos observar que:
  • los comentarios van en el formato /** Comentario */
  • utilizamos varios como @author (que especifica el autor de la clase), @param (que especifica los parametros del método),  @version (muestra la version de la clase),  @since (donde ponemos la version de java que utilizamos), @see(es un link a alguna variable/parametro/metodo de la clase), @deprecated(nos muestra que un metodo fue reemplazado).
Para ejecutar javadoc, lo podemos hacer desde nuestra consola cmd desde windows posicionandonos en la carpeta del JDK instalado en el directorio /bin, ahi ejecutamos esta sentencia:
javadoc -author -version Bicycle.java
El -author y -version es para que nos traiga el author y la version que no se generan por defecto.

Al hacer esto inmediatamente despues nos genera un  Html en la carpeta raiz de Java, con la documentación:


Y aqui vemos como se transladan los comentarios y los tags de la clase hacia el HTML generado:

Los tags author, version y since se pasaron así
Los comentarios y el tag deprecated
Los tags see y deprecated ademas de los comentarios

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.