jueves, 24 de febrero de 2011

[TALLER]Especificación técnica de proyectos individuales

Las personas, generalmente alumnos, necesitan de un organizador para hacer las cosas de una forma ordenada y a tiempo. Utilizar agendas es bueno pero no muy cómodo, puesto que la juventud demanda tecnología, para ellos es mejor realizar esto desde la comodidad de su PC.

Entre las ventajas de utilizar este programa se encuentran:
  • Tareas siempre organizadas y a tiempo ya sea en equipo o individual.
  • Mantiene actualizada la evaluación del alumno.
  • Recibe notificaciones de los profesores o de compañeros.
  • Muestra el horario y materia en la que se debería estar en ese momento.
Aspectos generales:

En general este programa muestra información relevante sobre semestre cursado, además cuenta con un practico visor de horario académico, el cual muestra la hora y el lugar actual donde se debería estar. Analizando cada aspecto tenemos que:

Horario: Es la zona donde nosotros vemos nuestro horario. El horario varía en función del día actual, por lo que siempre estará actualizado, esto es determinado con funciones que operan sobre fechas en Java. Además cada celda en la que se encuentran los distintos horarios del día funcionan como botones de acceso a información sobre la materia inscrita en el horario. Por defacto el horario seleccionado es el primero que aparece.

Materia: La parte principal del programa. Nos muestra información de la materia en general, un resumen de las evaluaciones, y un botón que muestra el resto de la información. El programa ya tiene asignadas las evaluaciones que normalmente se utilizan, pero si el profesor utiliza otro tipo de evaluaciones, entonces tiene la opción "Otras evaluaciones", que básicamente muestra información generalizada de datos que no están presentes en el programa.

Notas (antes novedades): Una de las opciones que se tiene es la de Notas, cada persona con acceso a el programa puede enviar notas a sus compañeros, donde hay de dos tipos:
  • Notas publicas: La persona publica una nota y todos los que tengan en común el mismo horario podrán visualizar la nota.
  • Notas privadas: La persona puede enviar notificaciones al profesor, a un alumno, o a un equipo en especifico sin importar el horario.


Eventos: Al seleccionar un horario libre, en lugar de aparecer la información de materia, aparecerán varios campos para agregar un evento en los que se puede involucrar a una persona o un equipo siempre y cuando estos tengan el mismo horario libre.


Aspectos técnicos:
  • Utiliza una base de datos basada en los sistemas adminisrativos de siempre (SIASE, NEXUS).
  • Java como base para su programación, lo que lo convierte en multiplataforma.
  • Interfaz simplista y agradable para el usuario.
  • Dependiendo de si el usuario es profesor o estudiante, la interfaz cambia para edición de calificaciónes(para profesores).
Concluciones:

Puesto que es un programa para PC, y se trata de un organizador, lo mas recomendabe para mi es utilizar plataformas moviles, pero por motivos de tiempo solo será para PC, sinembargo pienso continuar aportando más a este proyecto, ya que ha sido de interes para mi desde que inicie con materias de programación.

Dudas o comentarios todos son bienvenidos.

jueves, 17 de febrero de 2011

[TALLER] Documentación y herramientas avanzadas de desarrollo

La documentación la genere utilizando la herramienta que mencioné anteriormente.

Aquí se encuentra alojada la documentación de mi proyecto:

http://victoralex-poo.net76.net/

miércoles, 16 de febrero de 2011

Documentación y herramientas de desarrollo

La documentación de un código es una forma de mantener legible éste mediante etiquetas. Ademas podemos continuar  con el trabajo sin tener que revisar a fondo el codigo, muy util si se trata de un trabajo muy largo. Independientemente del lenguaje en que trabajamos, la documentacion es necesaria y esta disponible para todos los lenguajes conocidos.

Para generar la documentación en Java es necesaria la herramienta llamada "javadoc", incluida en el JDK, que nos generará un .html de las etiquetas dentro del código.

Éstas etiquetas son:

/**
 *Descripcion de la clase
 */
public class clase{
}

Donde lo que va entre /** y */ es la descripción de la clase.

Tambien existen tags para agregar información de variables, autor, versión, etc.

@author Donde se coloca el nombre del desarrollador.

@deprecated Indica que un método o clase es antigua y no se reco mienda su uso.

@param Es la definición de un parametro de un método.

@return Informa lo que devuelve el método.

@see Asocia con otro método o clase.

@throws Excepción lanzada por el método.

@version Versión del método o clase.

Con Eclipse podemos generar la documentación de la siguiente manera:

Abrimos el menú "Project" y damos clic en "Generate Javadoc..."

Se abrirá una ventana como la iguiente:


Tildeamos la carpeta de nuestro proyecto y elegimos "private" para que genere documentación de todas las clases. Damos clic en finish.

Por ultimo nos genera una serie de documentos .html que es la documentación de nuestro proyecto.

miércoles, 9 de febrero de 2011

Herencia y polimorfismo: modularidad y reutilización de código

En el proyecto agregare un poco de herencia, mientras sigo pensando en que mas agregar a este.

La clase "Informacion" y la clase "Materia" son las clases que mas se adaptan a este concepto, puesto que "Materia" tiene ciertos atributos que bien comparte con "Informacion", asi que implemetnare sobre la clase "Materia" herencia de "Informacion".

Ahora, no ocupare toda la información de "Informacion", o que hace que cambie algunos especificadores de acceso, esto es, cambiar "private" por "protected", ya que private no me permite heredar atributos, y protected si.

Otra cosa que implementare son las clases que ya estan predefinidas en Java, para esto tengo que utilizar la herencia.

Como ejemplo coloco un codigo que encontre donde se implementa herencia para llamar funciones de otras clases:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;


public class Ventana extends JFrame implements ActionListener{
              //JFrame es utilizado para crear GUI's ademas de otras clases.
 private JButton botonsito;
 private JTextField textito;
 private JLabel etiquetita;
 
 public Ventana(){
  
  super("Ventanita");
  
  this.definirventana();
  
  this.setResizable(false);
  this.setLocationRelativeTo(null);
  this.setSize(400,400);
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  this.setVisible(true);
  
 }
 
 public void definirventana(){
  this.setLayout(new FlowLayout());
  botonsito = new JButton("Enviar");
  textito = new JTextField(20);
  etiquetita = new JLabel();
  this.add(textito);
  this.add(botonsito);
  this.add(etiquetita);
  botonsito.addActionListener(this);
 }

 public void actionPerformed(ActionEvent e) {
  if(e.getSource()==botonsito){
   etiquetita.setText(textito.getText());
  }
 }
}

Tomare como base estos ejemplos para avanzar. El programa lo que hace es imprimir un texto en ventana al dar clic en el boton.

[TALLER] Herencia y polimorfismo: modularidad y reutilización de código

Puesto que mi proyecto no tiene mucha información que mostrar, la herencia es una de las pocas cosas que tiene dentro de mis clases, sin embargo, puedo tomar herencia de clases de Java ya predefinidas.

Primero la clase "Informacion", de la cual se tomara informacion para la clase "Materia".
package organizador;

public class Informacion{
 protected String Mat;
 protected int tp;
 private int tc;
 private int max_tc;
 private int tnc;
 protected int ft;
 private int pe;
 private int ef;
 private int ot;
 protected float Cf;
 
 public Informacion(int tar_pen, int tar_cu, int max_tar_cu, 
        int tar_no_cu, int falta, int prim_ex, 
        int ex_fin, int otra, float calif, String Mt){
  this.Mat=Mt;
  this.tp=tar_pen;
  this.tc=tar_cu;
  this.max_tc=max_tar_cu;
  this.tnc=tar_no_cu;
  this.ft=falta;
  this.pe=prim_ex;
  this.ef=ex_fin;
  this.ot=otra;
  this.Cf=calif;
 }
 
 public void Info_extra(){
  System.out.println(Mat);
  System.out.println("Tareas pendientes: ");
  System.out.println(tp);
  System.out.println("Tareas cumplidas: ");
  System.out.println(tc +"de " + max_tc);
  System.out.println("Tareas no cumplidas: ");
  System.out.println(tnc);
  System.out.println("Faltas totales: ");
  System.out.println(ft);
  System.out.println("Primer examen: ");
  System.out.println(pe);
  System.out.println("Examen final: ");
  System.out.println(ef);
  System.out.println("Otras evaluaciones: ");
  System.out.println(ot);
  System.out.println("Calificación actual: ");
  System.out.println(Cf);
 }
}

"Materia" hereda de la clase "Informacion" algunos atributos.
package organizador;

public class Materia extends Informacion{

 
 public Materia(int tarPen, int tarCu, int maxTarCu, int tarNoCu, int falta,
   int primEx, int exFin, int otra, float calif, String Mt) {
  super(tarPen, tarCu, maxTarCu, tarNoCu, falta, primEx, exFin, otra, calif, Mt);
 }

 public void mostrar_info(){
  System.out.println(Mat);
  System.out.println(tp);
  System.out.println(ft);
  System.out.println(Cf);
  
  /*boton*/
  
  System.out.println();
 }

}

Pienso utilizar JFrame para añadir eventos al realizar ciertas acciones en el proyecto, y pues como mencione arriba, no hay mucho de donde aplicar herencia.

jueves, 3 de febrero de 2011

[TALLER] Sintaxis de clases: métodos, atributos, visibilidad

La primera clase explicada en mi post anterior:, estas son las clases de la funcion principal de el programa, así que aún no demuestra lo que haré como proyecto en general.

Clase Org:

package organizador;

public class Org {//la clase principal para desplegar el organizador, espero colocar esta clase como una subclase de mi proyecto ya completo.
 
 private Horario h;
 private Materia m;
 private Novedades n;
 
 public Org(Horario hora, Materia materia, Novedades novedades){
  this.h=hora;
  this.m=materia;
  this.n= novedades;
 }
 
 public void mostrar_opciones(){
  /*...
   * 
   * 
   */
  
 }
 
 public void cerrar_sesion(){//Esto es nuevo, tambien servira para mi proyecto completo
  /*...
   * 
   * 
   */
 }
  
}
 

Clase Horario:

package organizador;

public class Horario {//muestra un horario dependiendo de el dia de la semana
 private String dia[];
 private int hora;
 
 public Horario (String d[], int h){
  this.dia=d;
  this.hora=h;
 }
 
 public void horario(){ //funcion para mostrar un boton de cada materia
  System.out.println(dia);
  
  /*boton*/
  System.out.println(hora);
  
 }
}

Clase Materia:

package organizador;

public class Materia {//muestra un resumen de la informacion de la materia
 private String nomb_mat[];
 private int tarea_pen;
 private int faltas;
 private float calif;
 private Informacion inf;
 
 public Materia(String mt[], int tar, int ft, float cal, Informacion info){
  this.nomb_mat=mt;
  this.tarea_pen=tar;
  this.faltas=ft;
  this.calif=cal;
  this.inf=info;
 }
 
 public void mostrar_info(){
  System.out.println(nomb_mat);//esto es temporal mientras aprendo a crear interfaces
  System.out.println(tarea_pen);
  System.out.println(faltas);
  System.out.println(calif);
  
  /*boton*/
  
  System.out.println(inf);
 }

}

Clase Novedades:

package organizador;

public class Novedades {//despliega una lista de novedades
 private String Mat[];
 private String Nov[];

 public Novedades(String m[], String n[]){
  this.Mat=m;
  this.Nov=n;
 }

 public void mostrar_novedades(){//muestra la lista de novedades
  System.out.println(Mat);
  System.out.println(Nov);
 }
}

Clase Informacion:

package organizador;

public class Informacion {//esta informacion se muestra al pulsar el boton más info de la clase Materia
 private int tp;
 private int tc;
 private int max_tc;
 private int tnc;
 private int ft;
 private int pe;
 private int ef;
 private int ot;
 private int Cf;
 
 public Informacion(int tar_pen, int tar_cu, int max_tar_cu, 
        int tar_no_cu, int falta, int prim_ex, 
        int ex_fin, int otra, int calif){
  this.tp=tar_pen;
  this.tc=tar_cu;
  this.max_tc=max_tar_cu;
  this.tnc=tar_no_cu;
  this.ft=falta;
  this.pe=prim_ex;
  this.ef=ex_fin;
  this.ot=otra;
  this.Cf=calif;
 }
 
 public void Info_extra(){
  System.out.println("Tareas pendientes: ");
  System.out.println(tp);
  System.out.println("Tareas cumplidas: ");
  System.out.println(tc +"de " + max_tc);
  System.out.println("Tareas no cumplidas: ");
  System.out.println(tnc);
  System.out.println("Faltas totales: ");
  System.out.println(ft);
  System.out.println("Primer examen: ");
  System.out.println(pe);
  System.out.println("Examen final: ");
  System.out.println(ef);
  System.out.println("Otras evaluaciones: ");
  System.out.println(ot);
  System.out.println("Calificación actual: ");
  System.out.println(Cf);
 }
}
Se que esto no es un trabajo bueno pero aún no esta terminado, espero tener más ideas para hacerlo mejor.

miércoles, 2 de febrero de 2011

Diseño de programas en términos de clases múltiples

Debido a que aún hay muchas ideas que puedo aplicar para el proyecto, solo me enfocare por ahora en la parte central del programa, se trata del organizador, que es una ventana donde el alumno puede ver información de una materia dada, además el maestro tendría la posibilidad de colocar tareas y noticias en un área dedicada a esto. pero lo ultimo lo agregare conforme vaya creciendo el proyecto.

Para dar una idea de que es lo que tengo en mente para esta parte de mi proyecto he creado un simple gráfico que ilustra mi idea:

Es algo simple, pero no es la versión final, tratare de explicar que clases utilizare con este gráfico.

Clase org:

Es la clase principal con la que funciona esta parte del proyecto, en pocas palabras es la que abriría una ventana parecida a la del gráfico.

Clase Horario:
En esta clase se muestra el horario del día correspondiente, obtenido con alguna clase de Java (Date por ejemplo).

Cada opción es un botón que al darle clic mostrará en el apartado Materia la información correspondiente. Las opciones que están en un tono mas claro son horas libres. Una de las ideas que he tenido es agregar la opción citas para estas horas libres. en la que un alumno puede etiquetar a algunos compañeros suyos, y crear una cita o reunión para hacer un determinado trabajo, pero por ahora solo funcionará de la forma antes explicada.

Clase Materia:

Creo que esta es la que le dará la mayor parte de funcionalidad al programa, se trata de un apartado donde el alumno puede ver informacipon actual de su materia. A primera vista muestra un resumen de esta información como tareas pendientes, faltas y su calificacion actual, esta tomada en base a el puntuaje actual, tareas cumplidas, examenes, etc. Ademas, el botón "mas info" daría acceso a una información más detallada.

Clase Información:
Es una clase que desplegará una ventana parecida a la anterior, se acciona al dar clic en el boton "mas info", mostrara de forma predeterminada estas opciones, pero conforme avance, puede que tenga más opciones.

Clase Novedades:
Algo así como un twitter o facebook, pero a diferencia de estos, el profesor agregará informacion de tareas o avisos, cabe la posibilidad de que el alumno pueda agregar dudas o noticias (sobre la materia) en esta sección, pero aún estoy pensando en agregar o no esta opción, puede que algun vivo llene de spam ésta área.

Por ahora, esta es la parte más importante del proyecto y en la que me enfocaré en estos días.