Mostrando entradas con la etiqueta clases. Mostrar todas las entradas
Mostrando entradas con la etiqueta clases. Mostrar todas las entradas

17 mar 2011

Código autogenerado y comparación

Taller de Programación Orientada a Objetos 
Semana 6 

Ahora es momento de mostrarles el código autogenerado a partir del diagrama de clases creado desde Umbrello que como ya mencione es el programa que decidí usar para la creación de diagramas UML.

En la entrada anterior lo que realicé fue generar el diagrama a partir del código que tenía hasta ese momento, ahora haré lo contrario, crear el diagrama de clases y a partir de ello que Umbrello me genere el código.

Esta captura es la ventana del programa donde cree mi diagrama de clases, muy parecido a lo que me resulto cuando genere el diagrama a partir del código.


Para generar el código, hay que asegurarnos de seleccionar el lenguaje al que deseamos crearlo. Para esto vamos al menú Code, en la opción Active Lenguage seleccionamos nuestro lenguaje en mi caso es Java.


Ahora en el mismo menú Code encontramos la opción para generar el código que es Code Generation Wizard.


Después se nos desplegará una ventana para seleccionar las clases que deseamos que se genere código.


Al dar en siguiente nos muestra una ventana como la siguiente donde podemos cambiar nuevamente el lenguaje en el que deseamos el código, así como la ubicación en donde serán guardados los archivos.


Por último se nos muestra en resumen las clases y el estado en que se encuentra cada una, es decir si ya se genero código o no. Para generarlo damos clic en Generate y listo.


Si vamos a la carpeta en donde decidimos que se guardaran los archivos con el código generado, encontraremos los archivos con extensión java, los cuales podemos abrir para observar el código tal y como lo genero Umbrello.


Aquí les dejo la imagen del diagrama de secuencia:


Para el diagrama de secuencia use una página web que te facilita la creación del mismo mediante líneas de código simple, aquí les dejo el enlace:
Web Sequence Diagrams

Aquí les dejo unas partes del código que genero Umbrello.

/**
 * Class Grafica
 */
public class Grafica extends Menu {

  //
  // Fields
  //
  
  //
  // Constructors
  //
  public Grafica () { };
  
  //
  // Methods
  //

  //
  // Accessor methods
  //

  //
  // Other methods
  //

  /**
   */
  public void obtenerDatos(  )
  {
  }

  /**
   */
  public void solicitarGrafica(  )
  {
  }

  /**
   */
  public void guardar(  )
  {
  }
}

/**
 * Class Histograma
 */
public class Histograma extends Grafica {

  //
  // Fields
  //

  private String xlabel;
  private String ylabel;
  private float rangox;
  
  //
  // Constructors
  //
  public Histograma () { };
  
  //
  // Methods
  //

  //
  // Accessor methods
  //

  /**
   * Set the value of xlabel
   * @param newVar the new value of xlabel
   */
  private void setXlabel ( String newVar ) {
    xlabel = newVar;
  }

  /**
   * Get the value of xlabel
   * @return the value of xlabel
   */
  private String getXlabel ( ) {
    return xlabel;
  }

  /**
   * Set the value of ylabel
   * @param newVar the new value of ylabel
   */
  private void setYlabel ( String newVar ) {
    ylabel = newVar;
  }

  /**
   * Get the value of ylabel
   * @return the value of ylabel
   */
  private String getYlabel ( ) {
    return ylabel;
  }

  /**
   * Set the value of rangox
   * @param newVar the new value of rangox
   */
  private void setRangox ( float newVar ) {
    rangox = newVar;
  }

  /**
   * Get the value of rangox
   * @return the value of rangox
   */
  private float getRangox ( ) {
    return rangox;
  }

  //
  // Other methods
  //

  /**
   */
  public void editar(  )
  {
  }

  /**
   */
  public void visualizar(  )
  {
  }
}

/**
 * Class Nuevo
 */
public class Nuevo extends Registro {

  //
  // Fields
  //
  
  //
  // Constructors
  //
  public Nuevo () { };
  
  //
  // Methods
  //

  //
  // Accessor methods
  //

  //
  // Other methods
  //

  /**
   */
  public void agregarColumna(  )
  {
  }

  /**
   */
  public void agregarFila(  )
  {
  }

  /**
   */
  public void verContenido(  )
  {
  }
}

No pongo todas las clases para no hacer mas extenso esto, así que solo deje tres de ellas.

Haciendo una comparación rápida con mi código no es tan diferente, solo que en la clase histograma no me agrado como genero algunas cosas del código, así como deja el lugar donde deberían de ir los métodos, etcétera. Aún y sean parecidos prefiero seguir con la base de mi propio código.

Si tienen alguna duda en como genere el código pueden preguntarme, o si tienen alguna sugerencia háganme saber.

10 feb 2011

Implementación de herencia

Taller de Programación Orientada a Objetos 
Semana 3 

Aquí les mostraré mis códigos, donde comienzo a hacer uso de la herencia. En los códigos que aquí muestro no son la versión más reciente de ellos, ya que les he estado modificando cosas, sobre todo en cuanto a comentarizar de forma correcta para la creación de documentación que estaré mostrandoles en la próxima semana. Así que mientras tanto les dejo el código donde hago uso de la herencia como ya mencione.

Comienzo por la clase ventana. Esta hereda los métodos de un JFrame que es necesario para la creación de una ventana en la pantalla.

package proyecto;
import javax.swing.JFrame;

/* Esta clase desplegara la ventana principal del
programa */

public class Ventana extends JFrame {

 public static void main(String[] args) {
  JFrame f = new JFrame();
  f.setSize(800, 600);
  f.setLocation(100, 100);
  f.setTitle("Ventana");
  f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  f.setVisible(true);
  return;
 }
}

Luego tenemos la clase Grafica que hereda a la vez métodos de Ventana.

package proyecto;

/* Generador de graficas a partir de los datos
que se obtengas de las tablas */

public class Grafica extends Ventana {

 public void queDatos() {
 }

 public void obtenerDatos() {
 }

 public void solicitarGrafica() {
 }

}

Las siguientes dos clases que muestro heredan atributos propios de la clase anterior, ya que podemos decir que estas son hijas de Grafica, y tendrán rasgos de su predecesor. Y como mencioné en la entrada para la clase realice un cambio en cuanto a un método que repetía en las dos subclases y que ahora están solo en la anterior, este método es obtenerDatos() que haciendo uso de herencia ya no es necesario repetirlo dos veces.

package proyecto;

public class GraficaHistograma extends Grafica {

 public void graficarHistograma() {
 }

}

package proyecto;

public class GraficaPastel extends Grafica {

 public void graficarPastel() {
 }

}

Y al igual que la clase Grafica, la clase Registro hereda cosas de Ventana, y este a la vez heredara atributos a RegistroNuevo.

package proyecto;

/* Esta parte sera encargada de organizar toda
la informacion escrita en las tablas de datos */

public class Registro extends Ventana {

 public void obtenerDatos() {
 }

 public void acomodarDatos() {
 }

 public void visualizar() {
 }

}

package proyecto;

public class RegistroNuevo extends Registro {

 private String Columna1;
 private String Columna2;
 private int numcol;
 private int numfil;

}

Como podemos apreciar el uso de extend es lo que usamos en Java para heredar métodos y variables de otra clase, y no solo pueden ser clases creadas en cierto programa, sino otras que ya están incluidas en el paquete de java como lo es el JFrame, que usé para la creación de una ventana.

Por el momento es todo, cualquier sugerencia o corrección es bien recibida.

Herencia aplicada al proyecto

Programación Orientada a Objetos 
Semana 3 

Es momento de ir ampliando la relación entre una clase y otra de nuestro proyecto. Después de haber iniciado con las clases de nuestro programa y tener por lo menos una idea de la función que hará cada una de ellas, ahora es momento de analizar donde sería bueno el uso de herencia y polimorfismo.

En mi código de la entrada de taller en la semana dos, ya adelantaba sin saberlo algo de herencia, o por lo menos hasta como he comprendido el concepto, pero ahora que me queda más claro lo aplicaré a mi proyecto, pero primero introduzco un poco a mi árbol de clases. En el siguiente esquema muestro la relación entre una clase y otra de mi proyecto.

Ventana
  • Grafica
    • GraficaHistograma
    • GraficaPastel
  • Registro
    • RegistroNuevo

La herencia en java, a como yo he logrado entender hasta el momento, nos dice que es posible que una clase pueda tomar atributos y métodos de otra clase, que puede ser una clase padre. Esto es de gran ayuda ya que evitamos el tener que copiar y pegar código entero de una clase que ya habíamos definido anteriormente, a una clase nueva que estemos por crear y que esta ocupe métodos o atributos iguales a la anterior.

En mi proyecto mi clase Ventana es la que nos mostrara el marco donde estará contenida la información, ya sean los registros o las gráficas, que son precisamente dos clases hijas de Ventana.

Ya que la clase Grafica y Registro, harán toda su función dentro de la ventana, estas tendrán que heredar algunos atributos de su clase padre, y esto es claramente la herencia, que nos da la ventaja de no tener que andar copiando y pegando código repetido en diferentes clases, sino que una clase hija puede heredar todos los métodos usados por el padre.

En la clase GraficaHistograma y clase GraficaPastel será mas evidente el uso de herencia, ya que los atributos usados en la clase Grafica, serán necesarios en sus dos clases hijas que se tienen hasta el momento. Anteriormente en cada una de estas dos clases hijas de Grafica, tenía un método de obtención de datos, el cual se repetía, y ahora este método esta en la clase Grafica y como heredará sus métodos a sus dos hijas, no es necesario ponerlos de nuevo.

Lo mismo sucede con Registro, tiene una clase hija llamada RegistroNuevo, el cual hará uso de los atributos declarados en su padre.

En cuanto a polimorfismo no me queda claro donde lo podría incluir en mi código, pero por lo pronto queda claro lo que es la herencia.