jueves, 29 de septiembre de 2011

Diagrama de Clases


Tarjetas CRC


Clase: Tablero
ID: 01
Tipo: Clase normal
Descripción: Escenario donde se desplazan los dos equipos
Casos de uso:
Responsabilidad: Sirve para diseñar donde los demás objetos interactúan al momento de jugar.
Colaboradores: Equipo, Pieza, Reina

Atributos: color, tamaño
Relación: asociación

Clase: Equipo
ID: 02
Tipo: Clase normal
Descripción: Sirve para generar las 12 piezas de cada jugador
Casos de uso: Configurar
Responsabilidad: Sirve para diseñar las pieza de cada equipo.
Colaboradores:  Pieza, Reina

Atributos: cantidad, color, nombre, activo
Relación: asociación
Clase: Pieza
ID: 03
Tipo: Clase padre
Descripción: Se encarga de modelar las características de las piezas
Casos de uso: Mover, Capturar, Coronar
Responsabilidad: Sirve para diseñar como mover la pieza de manera inclinida y además poder capturar a las piezas contrarias
Colaboradores:
Atributos: activa
Relación: asociación

Clase: Reina
ID: 04
Tipo: Clase hija
Descripción: Subclase que hereda de la clase pieza
Casos de uso: Mover, Capturar
Responsabilidad: Sirve para poder diseñar como mover la pieza de manera inclinada, además de poder moverse hacia adelante o hacia atrás y capturar a las otras piezas contrarias.  
Colaboradores:  Pieza

Atributos: activa
Relación: generalización

martes, 27 de septiembre de 2011

Retroalimentación en Pares

La retroalimentación sobre nuestros proyectos la hice con mi compañero Sergio, ambos estamos realizando un juego en java.

Su juego es el space invaders mientras que el mío es el de damas. Intercambiamos varias ideas y me recomendó buscar un buen algoritmo de movimiento definido. Además me aconsejo utilizar return para poder llamar datos de otra clase.

Considero que al estar haciendo el juego en el mismo lenguaje nos ayudará, así conforme vayamos avanzando en el proyecto podemos seguir intercambiando ideas.

Ejercicio Diagrama de clases



Elaborado con mi compañero Sergio Rdz

lunes, 26 de septiembre de 2011

Documentación

La documentación consiste en escribir comentarios para explicar el código de manera clara, con el fin de que se entienda lo que hace, ya que con el puro código no es suficiente.

Sin la documentación, nos puede suceder que al momento de retomar el proyecto después de un tiempo, ni nosotros mismos le entendamos. La documentación es importante para que no solo nosotros entendamos, si no que cuando otro programador retome el proyecto logre entenderlo fácilmente.

Una herramienta que podemos utilizar para documentar en Java es Javadoc. Una ventaja es que al momento en que instalamos el JDK, Javadoc se instala. Javadoc nos genera la documentación en un archivo html.

Para poder documentar se utiliza lo siguiente:
/**  Etiqueta  */
Para formar la etiqueta primero se coloca @ y después la palabra reservada.

Las etiquetas más comunes son las siguientes:


Etiqueta
Descripción
@autor
Nombre del autor
@deprecated
Indica que la clase o método son antiguos
@param
Indica parámetro que recibe un método
@return
Indica lo que devuelve el método
@see
Asocia un método o una clase con otro
@throws
Excepción lanzada por método
@version
Versión de la clase o método


Ejemplo

/** 
        * @author José A. Mañas - fprg5000
        * @version 23.9.2005
        */
       public class Circulo {
           private double centroX;
           private double centroY;
          private double radio;
          /**
           * Constructor.
           * @param cx centro: coordenada X.
           * @param cy centro: coordenada Y.
           * @param r radio.
           */
          public Circulo(double cx, double cy, double r) {
              centroX = cx;
              centroY = cy;
              radio = r;
          }
          /**
           * Getter.
           * @return centro: coordenada X.
           */
          public double getCentroX() {
              return centroX;
          }
          /**
           * Calcula la longitud de la circunferencia (perimetro del circulo).
           * @return circunferencia.
           */
          public double getCircunferencia() {
              return 2 * Math.PI * radio;
          }
          /**
           * Desplaza el circulo a otro lugar.
           * @param deltaX movimiento en el eje X.
           * @param deltaY movimiento en el eje Y.
           */
          public void mueve(double deltaX, double deltaY) {
              centroX = centroX + deltaX;
              centroY = centroY + deltaY;
         }
          /**
           * Escala el circulo (cambia su radio).
           * @param s factor de escala.
           */
          public void escala(double s) {
              radio = radio * s;
          }
      }
Para generar la documentación ponemos lo siguiente en la terminal
javadoc Circulo.java


Javadoc nos genera la documentación en html, buscamos el archivo index y al abrirlo nos aparecerá lo siguiente






Referencias

Herencia y Polimorfismo

La programación orientada a objetos (POO) tiene varias características importantes, entre ellas están la herencia y el polimorfismo.

La herencia es una característica que nos permite poder reutilizar código, es decir ahorramos código. Aquí manejamos una clase que contiene atributos y métodos de otra clase. A esta clase se le conoce como clase padre y las clases que heredan clases hijas.

El polimorfismo es una palabra que quiere decir muchas formas. Esta característica nos permite utilizar métodos con el mismo nombre, pero que tienen una función totalmente diferente.

Herencia aplicada al proyecto

En mi proyecto la clase padre es Pieza y la clase hija es Reina.

La clase Reina hereda lo siguiente:
  • Atributos: activa, color
  •  Métodos: capturar

“Reina es un tipo de Pieza”

Es importante analizar, ya que al utilizar herencia podemos caer en el error de querer utilizarla para todo y no siempre estamos ahorrando código.

Polimorfismo aplicado al proyecto

En la clase Pieza tengo el método mover y en la clase Reina también, sin embargo tienen funciones diferentes.

  • Clase Pieza mover (): Sirve para ir hacia adelante.
  •  Clase Reina mover (): Sirve para avanzar o retroceder.

Referencias:


miércoles, 31 de agosto de 2011

Ejemplo Moto

Clase Moto
public class Moto {
   //atributos
   private String placa;
   private boolean edoMotor;
   private int velocidad;
   private int vidaBateria;
   
   //constructor
   public Moto(String placa, boolean edoMotor, int velocidad, int vidaBateria)
   {
       this.placa = placa;
       this.edoMotor = edoMotor;
       this.velocidad = velocidad;
       this.vidaBateria = vidaBateria;
   }

   //métodos
   public String verPlaca ()
   {
       return placa;
   }
   
   public void encender()
   {
       edoMotor = true;
       if(vidaBateria>=0)
       {
           vidaBateria--;
       }
       
   }
   
   public void apagar()
   {
       edoMotor = false;
       velocidad = 0;
   }
   
   public void acelerar()
   {
       if(edoMotor = true)
       {
           velocidad = velocidad + 20;
       }
   }
   
   public void frenar ()
   {
       if(edoMotor = true && velocidad > 0)
       {
           velocidad = velocidad - 20;
       }
   }
   
   public void descMoto()
   {
       System.out.println("La placa es: "+placa);
       if(edoMotor == false){
       System.out.println("El motor esta apagado");
       }
       else {
       System.out.println("El motor esta encendido");
      }
       System.out.println("La velocidad es: "+velocidad);
       System.out.println("La vida de la Bateria es: "+vidaBateria);
       System.out.println("\n\n");
   }
}

Clase RunMoto

import java.util.Scanner;

public class RunMoto
{
   public static void main (String[] args)
   {
       
       Moto moto1 = new Moto("I4F230", false, 0, 100);
       
       int opcion = 0;
       Scanner read = new Scanner(System.in);
       
       do
       {
       System.out.println("1.-Describir Moto");
       System.out.println("2.-Encender Motor");
       System.out.println("3.-Apagar Motor");
       System.out.println("4.-Acelerar");
       System.out.println("5.-Frenar");
       System.out.println("6.- Salir\n");
                                   
       System.out.print("Ingrese: ");
       opcion = read.nextInt();
       System.out.println("\n");
       switch(opcion)
       {
           case 1:
               moto1.descMoto();
               break;
           case 2:
               moto1.encender();
               break;
           case 3:
                moto1.apagar();
               break;
           case 4:
               moto1.acelerar();
               break;
           case 5:
               moto1.frenar();
               break;
	 
       }
       }
while(opcion != 6);
   }
}


Programa realizado en equipo con mi compañero Sergio Rdz

martes, 30 de agosto de 2011

Esqueleto de clases

Clase Tablero
public class Tablero{
    private int color;
    private int tamano;
}

/*Constructor*/
public Tablero (int color, int tamano){
    this.color = color;
    this.tamano = tamano;
}

public void iniciar(){
}

public void empatar(){
}

public void salir(){
}


Clase Pieza
public class Pieza{
    private boolean activa;
    private int coordenada;
}
/*Constructor*/
public Pieza (boolean activa, int coordenada){
    this.activa = activa;
    this.coordenada = coordenada;
}

public void mover(int x, int y){
return coordenada;
}

public void capturar (){
}


Clase Reina
public class Reina{
    private boolean activa;
    int coordenada;

}
/*Constructor*/
public Reina (boolean activa, int coordenada){
    this.activa = activa;
    this.coordenada = coordenada;
   
}

public int mover(int x, int y){
return coordenada;
}

public void capturar (){
}


Clase Equipo
public class Equipo {
    private int cantidad;
    private int color;
    private string nombre;
    private boolean activo;
}
/*Constructor*/
public Equipo(int cantidad, int color, string nombre, boolean activo){
    this.cantidad = cantidad;
    this.color = color;
    this.nombre = nombre;
    this.activo = activo;
}

public void generar(){
}

Ejemplo

Programa simple para convertir de grados celsius a kelvin y fahrenheit

public class Temperatura {
    private double grados;
    private double kelvin = 273.15; //atributos

//constructor
public Temperatura(double grados){
    this.grados = grados;
}

//método
public double convertirk(){
    grados+=kelvin;
    return grados;
}

//método
public double convertirf(){
    grados=(1.8)*(grados)+32;
    return grados;
}

public static void main (String args[]){   
    Temperatura o1 = new Temperatura(10.5);
    Temperatura o2 = new Temperatura (30);
    System.out.println("Conversión a Kelvin es: "+o1.convertirk());
    System.out.println("Conversión a Fahrenheit es: "+o2.convertirf());
}
}