24 feb 2011

Especificación técnica

Taller de Programación Orientada a Objetos 
Semana 5 

Ahora les muestro un documento donde encontrarán el escrito técnico que detalla la implementación del proyecto en el que estoy trabajando actualmente. No esta basado completamente en el estándar, pero incluyo los puntos que creo de mayor importancia.




Como conclusión de lo visto en la semana cinco, podemos destacar que la creación de documentación del proyecto y el documento con la especificación técnica, ayuda mucho a trabajos en equipo en un mismo proyecto, además que pueda surgir la necesidad de que una persona externa a nosotros deba continuar con el proyecto, y con esto tenga los recursos necesarios para trabajar inmediatamente y sin la pérdida de tiempo que causaría analizar que es lo que hace hasta el momento cierto programa y tener que preguntar a desarrolladores anteriores cuáles son los objetivos del programa, en que se esta trabajando, etcétera.

Cualquier aclaración, con gusto responderé aquí mismo en los comentarios.

17 feb 2011

Documentación y herramientas avanzadas de desarrollo

Taller de Programación Orientada a Objetos 
Semana 4 

Es momento de mostrarles mi avance en cuanto a la documentación que llevo hasta el momento con el código que tengo. Al código aún tengo cosas que corregir, pero ya que el punto a resaltar en esta semana es la documentación, les mostraré como trabaje documentando mi código.

La documentación la he subido a una cuenta de web hosting que cree en Byethost, donde cree un subdominio especial para este blog, donde se encuentra toda las páginas generadas con el javadoc.

> Ir a la Documentación

La documentación la genere con la herramienta javadoc del paquete de Java, esto fue incluyendo comentarios con cierta estructura necesaria para que esta herramienta logrará obtener correctamente los comentarios y parámetros.

En las siguientes imágenes les muestro parte de como esta mi código de momento y en lo que hay que fijarse es como estan escritos los comentarios para las clases y los métodos.






Mis archivos los tengo contenidos en un paquete llamado "proyecto" y desde fuera de la carpeta del paquete, en el terminal escribí lo siguiente para que me generará los archivos html de la documentación.

esteban@esteban:~/Documents/Avance$ javadoc -private proyecto

En mi navegador así es como se ven algunas de las páginas generadas por javadoc, que coinciden con el estilo de la página de la API de Java.




Si desean subir su documentación a una página tal y como lo hice yo, y tienen alguna dificultad, con gusto les ayudaré.

16 feb 2011

Documentación y herramientas de desarrollo

Programación Orientada a Objetos 
Semana 4 

Avanzando en el proyecto que definimos desde la primer semana, ahora corresponde crear la documentación necesaria, ya que forma parte esencial en el desarrollo de software.

Hasta el momento ya hemos entendido el uso de clases, la herencia y polimorfismo, sabemos que herramientas usaremos y cuales son necesarias, además ya tenemos un código escrito en diferentes archivos, uno para cada clase.

Como ya probablemente nos dimos cuenta, a pesar de no llevar un gran avance en cuanto a código escrito, es posible que ya nos topamos con la dificultad de recordar para que objetivo fue creada cada clase, cada atributo, cada variable. Es aquí donde encontramos una de las razones por las cuales es importante colocar comentarios en cada parte esencial del código, para en dado momento recordar con facilidad con que propósito escribimos cada línea.

Pero que pasará dentro de tres semanas cuando probablemente ya nuestro código este formado por una cantidad considerable de lineas, donde ya hayamos aplicado varios métodos, herencia a clases hijas, etcétera. Nos encontraremos tal vez con no recordar que hacia un cierto método y que parámetros recibe, y buscar donde se encuentra tal método entre tantas clases y entre tantas líneas de código, dificultará el avance a un ritmo apropiado. Aquí es donde aplica una de las razones por la cual es importante la documentación de nuestro software.

La documentación de software consiste en la creación de archivos de texto o en html donde se explique para que sirve cada clase, método, parámetro, etcétera, y donde sea fácil encontrar la relación que existe entre una clase y otra.

La importancia de la documentación de software radica principalmente en ayudar a los programadores cuando se trata de un trabajo en grupo o en equipo, donde cada integrante se hará cargo de una característica especifica del programa o software en el que se trabajará. Sería difícil tener que comunicarse y tener que estar preguntando un integrante a otro, en como esta creando su código, que métodos esta usando y como funcionan cada uno de ellos, tampoco deberá ser necesario tener que ver como funciona la parte del programa que esta creando un compañero para poder continuar con el nuestro. Por eso la documentación ayuda a evitar este tipo de problemas, cada uno muestra que clases tiene, sus métodos y que parámetros reciben, que son cada uno de ellos, y cuál es la función, así los demás en base a esa información pueden trabajar con su parte sin tener que ver el código de otra persona.

Herramientas
Existen varias herramientas para la creación rápida de la documentación como lo son Doxygen, NDoc, javadoc, Castillo de arena, ROBODoc, VAINA y TwinText. Estos crean documentos en base a los comentarios en el código y por lo general organizan en forma de guía de referencia, permitiendo que el programador observe el árbol o desglose de una función.

Dado a que mi programa lo estoy creando en Java, hago uso de la herramienta incluida en el paquete de JDK llamada javadoc, que como ya les mencione, en base a los comentarios que escribamos en nuestro código, genera en este caso documentos en html para visualizar la documentación generada.

Metodología para producir la documentación
El uso de javadoc no tiene mucho de complicado, en pocas palabras, lo que se tiene que hacer es comentar en el mismo código, pero con una cierta estructura para que se logre generar bien.

Para empezar hay que saber que estos comentarios se escriben de la siguiente manera:
/** * Comentarios */
Si vamos a escribir la descripción de una clase, el comentario se coloca arriba de la misma:
/** * Clase principal del programa y nos muestra una ventana en pantalla */ public class Ventana { }
Si hacemos uso de métodos en los que se tenga de entrada algunos parámetros, existe la forma de escribirlo en los comentarios y al momento de generar la documentación los detecte en automático:
/** * Generar una tabla con un numero de columnas y filas * @param c Columnas * @param f Filas */ crearTabla(int c, int f) { }
También existe @return para especificar que es el valor regresado, y no son los únicos, hay unos cuantos más que se tratan en el tutorial que les dejo al final.

Ligas a herramientas
1. How to Write Doc Comments for the Javadoc Tool
2. Javadoc Tool
3. Ejemplo de uso Javadoc

15 feb 2011

Presentación de proyecto

Programación Orientada a Objetos 
Semana 5 

Para esta semana tenemos programado la presentación del tema de nuestro proyecto, y hablaremos en clase en que estamos trabajando. En mi caso hablare acerca de mi programa que crea gráficas en base a una cierta tabla de datos.

Les dejo las diapositivas que estaré mostrandoles en clase, y espero su participación en los comentarios, ya que me será de gran ayuda que aporten con ideas.


Presentación de proyecto
Ver más presentaciones de Esteban González.


De antemano, gracias por sus comentarios.

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.

3 feb 2011

Sintaxis de clases

Taller de Programación Orientada a Objetos 
Semana 2 

En esta entrada no quiero ser redundante en cuanto a lo que hace cada clase del código, pero deseo dar una idea general de como esta estructurado mi programa.

La clase que genera mi ventana, por el momento no marca error al compilar, pero es evidente que no desplegara aun la ventana ya que le hacen falta muchas cosas.
package Alfa;
import javax.swing.JFrame;

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

public class Ventana {

 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;
 }
}

package Alfa;

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

public class Grafica {

 public void QueDatos() {
 }

 public void SolicitarGrafica() {
 }

}

package Alfa;

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

public class Tabla {

 public void ObtenerDatos() {
 }

 public void AcomodarDatos() {
 }

 public void Visualizar() {
 }

}

package Alfa;

public class GraficaHistograma extends Grafica {

 public void ObtenerDatos() {
 }

 public void Graficar() {
 }

}

package Alfa;

public class GraficaPastel extends Grafica {

 public void ObtenerDatos() {
 }

 public void Graficar() {
 }

}

package Alfa;

public class TablaAgregar extends Tabla{

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

}

Estoy considerando cambiar algunas clases, o mejor dicho hacer alguna que pueda realizar varias cosas, y no tener clases de más.

Y como el frío me inhibe el cerebro, esto es todo por el momento.

Definición de clases

Programación Orientada a Objetos 
Semana 2 

Según lo establecido en el programa del avance que debemos de llevar para esta segunda semana nos corresponde enfatizar en las "clases" que nuestro programa debe incluir. Aún con una idea un tanto alejada de las clases que realmente utilizare, me dispongo a solo hablar de las que ya tengo en claro y que debo incluir como un inicio en mi programa estadístico.

Por el momento tengo una clase principal, y ella depende de dos más, las cuales tendrán también unas subclases que creo serán las partes más funcionales del programa.

1. Clase Ventana
Ya que mi programa sera visualizado como una interfaz gráfica, es necesario que el programa cree una ventana donde sean visualizadas las opciones, botones, campos de texto y más, para que el usuario haga uso de la plataforma mediante clics y no con comandos como lo haría un usuario avanzado.

Esta clase es la que incluirá el main, cuya función principal, y como lo da ha entender su puro nombre, es la de desplegar en pantalla la ventana que integrará las opciones, tendrá un título, sus respectivos botones de minimizado, maximizado y cerrar. También debería de ser una ventana tipo de inicio donde como opciones mostradas serán las de visualización de datos como gráficas, o mostrar la visualización en tablas y también la de ingreso de datos nuevos.

2. Clase Grafica
Como ya había mencionado en mis dos entradas anteriores, al ser un programa estadístico lo ideal es mostrar los datos de las tablas con histogramas, gráficas de pastel, lineas de tiempo, etc. Está clase se encarga precisamente de eso, de según los tipos de datos que se tengan en las tablas, habrá opciones diferentes para mostrarlas.

2.1 Clase Histograma
La clase anterior se divide en varias, para cada tipo de gráfica. Esta dará las opciones para mostrar histogramas.

2.2 Clase Pastel
Cuando tengamos datos como porcentajes, una forma sencilla de visualizar son la gráficas de pastel ya que nos dan idea de cuanto hay de una cosa con respecto a el total.

2.3 Clase OtrasGraficas
En un principio solo habrá dos diferentes tipos de gráficas, pero en cuanto estas ya estén funcionanod como deberían, comenzare a agregar unas cuantas más.

3. Clase Tabla
Cuando ya se tengan datos ingresados, aparte de lograr visualizar las gráficas, podrá ser posible ver la tabla completa de datos con sus respectivas filas y columnas. Y como en cualquier tabla de datos será posible agregar información, editar un campo y eliminar datos.

3.1 Clase Agregar
Agregar nos deberá dar opciones para no solo añadir más filas de datos a las columnas existentes, sino también darnos la posibilidad de agregar las mismas columnas.

3.1 Clase Editar
Para seleccionar un cierto campo y lograr cambiar sus datos.

3.1 Clase Eliminar
Lograr eliminar ciertas filas o columnas de las tablas, así como tablas completas.

Mientras tanto creo que esto es suficiente para empezar a estructurar mi código. se aceptan sugerencias y aclaro que esto esta susceptible a cambios conforme avance en el desarrollo.