viernes, 20 de mayo de 2011

lunes, 16 de mayo de 2011

domingo, 15 de mayo de 2011

~Semana 13. Implementación de Interfaces Gráficas

Semana 13
Materia: Taller de Programación Orientada a Objetos
Hora: Jueves M1-M2



Hola a todos, en esta entrada les mostraré parte de código de mi interfaz gráfica. Para realizar mi interfaz gráfica utilicé una herramienta muy útil que te genera el código automáticamente. Netbeans:)




En este programa creé un JFrame que es el que se ve en la imagen de arriba, como pueden ver arriba se encuentran dos apartados, Source y Design en el apartado de Design se encuentran las paletas donde están los diferentes tipos de elementos para la interfaz (botones, panel, tablas, etc). Solo es cuestión de seleccionar el elemento que queramos poner y ponerlo en el JFrame. También se pueden modificar los elementos por ejemplo el tipo de letra, el color, etc. 




En esta ventana edite el Texto de Bienvenido a Nutrilife para hacerlo más grande y con letras negritas. Para hacer esto solo tienes que seleccionar el objeto que quieres modificar y hay un apartado del lado derecho que dice Properties. En ese apartado se encuentran diferentes propiedades de este objeto para que los puedas modificar. 

También puedes agregar Labels con imagenes como la imagen que yo puse del logo de mi programa. Para agregar la imagen al label tienes que crear un label y en sus propiedades hay una que dice icon, ahí puedes seleccionar la imagen que deseas poner en el Lable.






Ahora veamos partes del código. Primero les pondré la parte de código del Logo, de la frase Bienvenido a Nutrilife y de el primer botón.





setTitle("Nutrilife");

        jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/nutrilife/gui/logo_1201.png"))); // NOI18N

        jLabel2.setFont(new java.awt.Font("DejaVu Sans", 1, 48)); // NOI18N
        jLabel2.setText("Bienvenido a Nutrilife! ");

        jButton1.setFont(new java.awt.Font("DejaVu Sans Light", 1, 18));
        jButton1.setText("NUEVO PACIENTE");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }

Como pueden ver en esta partesita del código la parte de setTitle sirve para ponerle el nombresito que va mero arriba en la ventana y le puse que apareciera Nutrilife, luego viene el JLabel1 que tiene el ícono o la imagen de mi programa, como pueden ver se pone con setIcon y se pone en getResourse la ubicación de la imagen, luego viene el JLabel2 que es el Label donde puse Bienvenido a Nutrilife! primero se pone la letra con setFont y vienen las propiedades de la letra (tipo de letra, tamaño) y también tiene otro método que es setText que es al que se le tiene que poner que quieres que diga el Label en este caso es "Bienvenido a Nutrilife!". Luego viene el botón que es el JButton1 el que viene siendo Nuevo Paciente el cual tiene un actionListener y dentro de este un actionPerformed que es para que le pongas lo que quieres que haga el botón. En mi caso yo le puse que ese botón quiero que abra una nueva ventana.



private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    PacienteGUI form = new PacienteGUI();
    form.setVisible(true);
}              


Este botón habla a la ventana PacienteGUI que también esta declarada como JFrame. Se las muestro a continuación.


Vamos a correr estos JFrames.



Cuando le picamos al botón Crear Paciente nos aparece la siguente ventana.


Le agregué una línea al código del primer botón para que al momento de que abra la otra ventana se cierre la ventana anterior.

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    PacienteGUI form = new PacienteGUI();
    form.setVisible(true);
    this.dispose();
} 
  


Ahora mostraré el código de la interfaz gráfica del primer JFrame

private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jButton3 = new javax.swing.JButton();
        jButton4 = new javax.swing.JButton();
        jButton5 = new javax.swing.JButton();
        jButton6 = new javax.swing.JButton();
        jButton7 = new javax.swing.JButton();
        jButton8 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Nutrilife");

        jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/nutrilife/gui/logo_1201.png"))); // NOI18N

        jLabel2.setFont(new java.awt.Font("DejaVu Sans", 1, 48)); // NOI18N
        jLabel2.setText("Bienvenido a Nutrilife! ");

        jButton1.setFont(new java.awt.Font("DejaVu Sans Light", 1, 18));
        jButton1.setText("NUEVO PACIENTE");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jButton2.setFont(new java.awt.Font("DejaVu Sans Light", 1, 18));
        jButton2.setText("MODIFICAR PACIENTE");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });

        jButton3.setFont(new java.awt.Font("DejaVu Sans Light", 1, 18));
        jButton3.setText("BORRAR PACIENTE");
        jButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton3ActionPerformed(evt);
            }
        });

        jButton4.setFont(new java.awt.Font("DejaVu Sans Light", 1, 18));
        jButton4.setText("VER PACIENTES");
        jButton4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton4ActionPerformed(evt);
            }
        });

        jButton5.setFont(new java.awt.Font("DejaVu Sans Light", 1, 18));
        jButton5.setText("NUEVA DIETA");
        jButton5.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton5ActionPerformed(evt);
            }
        });

        jButton6.setFont(new java.awt.Font("DejaVu Sans Light", 1, 18));
        jButton6.setText("MODIFICAR DIETA");
        jButton6.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton6ActionPerformed(evt);
            }
        });

        jButton7.setFont(new java.awt.Font("DejaVu Sans Light", 1, 18));
        jButton7.setText("BORRAR DIETA");
        jButton7.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton7ActionPerformed(evt);
            }
        });

        jButton8.setFont(new java.awt.Font("DejaVu Sans Light", 1, 18));
        jButton8.setText("VER DIETAS");
        jButton8.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton8ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 206, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jLabel2))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(92, 92, 92)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                            .addComponent(jButton2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 250, Short.MAX_VALUE)
                            .addComponent(jButton3, javax.swing.GroupLayout.DEFAULT_SIZE, 250, Short.MAX_VALUE)
                            .addComponent(jButton4, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 250, Short.MAX_VALUE)
                            .addComponent(jButton1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                        .addGap(171, 171, 171)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jButton8, javax.swing.GroupLayout.DEFAULT_SIZE, 267, Short.MAX_VALUE)
                            .addComponent(jButton7, javax.swing.GroupLayout.DEFAULT_SIZE, 267, Short.MAX_VALUE)
                            .addComponent(jButton6, javax.swing.GroupLayout.DEFAULT_SIZE, 267, Short.MAX_VALUE)
                            .addComponent(jButton5, javax.swing.GroupLayout.DEFAULT_SIZE, 267, Short.MAX_VALUE))
                        .addGap(61, 61, 61)))
                .addGap(47, 47, 47))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(34, 34, 34)
                        .addComponent(jLabel1)
                        .addGap(63, 63, 63))
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap(129, Short.MAX_VALUE)
                        .addComponent(jLabel2)
                        .addGap(32, 32, 32)))
                .addGap(26, 26, 26)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jButton5, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(30, 30, 30)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jButton6, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(30, 30, 30)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton3, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jButton7, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(34, 34, 34)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton4, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jButton8, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(131, 131, 131))
        );

        pack();
    }// 

Bueno tengo un problema con mi interfaz, ya logré conectarla a la base de datos pero no he podido conectar cada JTextField con mi base de datos para que al escribir en los JTextFields se guarden los datos en la base de datos. Si me guarda los datos al correr el programa pero en "terminal" 


Elegimos la opcion 2..


Escribimos los datos que nos piden, no importa si algunos datos no los llenamos y ahora veamos que ya se muestra en la base de datos :).

Cloud Storage

Puntos extra :)
Materia: Taller de Programación Orientada a Objetos

Hola a todos compañeros, bueno en esta entrada les hablaré de algunas páginas que nos dan un espacio para guardar nuestros archivos Online. Esto es demasiado útil cuando pasan tragedias con nuestras computadoras, que se descomponen y se pierde algo importante que teníamos, o cuando se nos pierde el USB, para esto podemos hacer un respaldo al que puedas acceder por medio de internet.

Estuve buscando entre cuales eran las mejores gratuitas, y les recomiendo las siguientes. Yo normalmente uso Dropbox pero estuve buscando haber si había algunas con más capacidad de almacenamiento.

SugarSync.
Es un servicio similar a dropbox que te brinda una capacidad de almacenaje de 5GB, también es muy útil cuando quieres consultar un documento y estás fuera de tu casa, lo puedes consultar desde tu IPad, IPhone o IPod touch, Dispositivo Android, Blackberry, Windows Mobiles y Symbian.

Les dejo el link para que se registren. Registrarse.

 
Al momento que te registras y confirmas tu cuenta te va a pedir que descargues un archivo, esto es para tener sugarsync en tu computadora lo cual no es necesario yo no lo descargué. 



Aquí estan las cossas que puedes realizar, yo me fui directamente a share a folder y esto te va a llevar a lo siguiente.


Como pueden ver puedes compartir archivos, crear carpetas y lo más importante puedes subir tus archivos y tienes 5GB de almacenamiento. Así cuando tengas un proyecto importante o algo que no quieras perder puedes subirlo aquí y accesar a él de mil formas. 

DropBox
Dropbox es la herramienta ideal si trabajas con documentos en varios ordenadores a la vez.

Compatible con Windows, Mac y Linux, y accesible directamente desde el Explorador de archivos y desde el navegador web, Dropbox te ofrece hasta 2GB gratuitos de espacio en Internet para que subas toda clase de ficheros, ya sean canciones, fotografías, vídeos o documentos de texto.

Con Dropbox te será muy fácil compartir archivos en varios equipos, ya que cuando añadas uno nuevo, éste se sincronizará automáticamente con tu cuenta de Dropbox.
  • 2GB de espacio gratuito
  • Muy fácil de usar
  • Accesible desde cualquier SO y por web
  • Sincroniza las carpetas que escojas
  • Historial de archivos subidos y bajados
  • Sincronización instantánea y automática
El link de dropBox ---> DropBox






Bueno este es muy parecido al otro, tiene menos capacidad de almacenaje pero es muy  bueno también.

Al igual que en el pasado creas tu cuenta y accedes a la página donde puedes subir tus archivos.


 
Bueno esto es todo compañeros, espero que les sea útil :). Saludos!

jueves, 12 de mayo de 2011

~Semana 13. Diseño de Interfaces Gráficas


Semana 13
Materia: Programación Orientada a Objetos
Hora: Martes M1-M3

Hola a todos, en esta entrada les mostráre dibujos que realicé de mas o menos como quiero que quede mi programa con la interfaz gráfica. 

Primero que nada hablemos de las interfaces gráficas. La interfaz gráfica también conocida como GUI (Graphical User Interface) es la forma en que el programa se comunica más facilmente con el usuario, donde los comandos de nuestro programa se muestran por medio de objetos gráficos (botones, ventanas,etc.) e imagenes.

Los dispositivos de interfaz humana se diseñan para conectar alguna parte del cuerpo del ser humano con la interfaz gráfica de forma que puedan ser introducidos al sistema. La mayoría son dispositivos que permiten introducir directamente información de "acción" al ordenador que tiene una iterfaz gráfica.
Por ejemplo el mouse es un dispositivo de interfaz humana, puede representar en la interfaz gráfica cosas como "apuntar", "pulsar", "arrastrar", "mover", etc. Los dispositivos más importantes son el teclado, el mouse, el trackball (bola), el cursor táctil (touchpad), la tableta gráfica y el Joystick. 

Estos dispositivos se utilizan para introducir un tipo de información específica al sistema a través de interfaz gráfica. 

Las ventanas son utilizadas de forma interactiva para la visualización, navegación de la información en un interfaz gráfico de usuario. A través de ellas podemos ver documentos, aplicaciones, íconos en los cuales se pueden realizar diferentes acciones.

Las siguientes imagenes son los dibujos que realicé de como me gustaría que quedara mi sistema ya con interfaz gráfica.

Primero que nada la pantalla de bienvenida donde se muestra el logo, el nombre de mi programa y un mensaje de bienvenida que dice "Bienvenido a Nutrilife!". También están los botones de Paciente, Dieta y Salir. El botón de Paciente te lleva a otra pantalla donde te aparecen los datos del paciente que ahorita les mostraré. El botón de Dieta lleva a otra ventana donde se muestra la tabla de energía que también ahorita mostraré y explicaré. Por último el botón salir como su nombre lo dice es para salir del sistema.


Primero vemos la ventana de paciente en la siguiente imagen, mi idea es que esta ventana tenga pestañas arriba donde se vaya cambiando para ir a las diferentes clases de paciente, como antecedentes familiares, enfermedades, entre otras cosas. Bueno en esta ventana se llenan los datos personales del paciente: nombre, edad, fecha de nacimiento, etc.. No todos los campos son obligatorios si no tiene por ejemplo teléfono foráneo o dirección foranea no es necesario que lo ponga. Los campos donde se llenarán estos datos son cuadros de texto, en algunos casos y por ejemplo en estado civil puse circulitos donde seleccionará el estado civil en el que se encuentra. Esta ventana tiene dos botones el de Guardar datos y Salir. Guardar datos se utilizará para guardar los datos que ya se hayan ingresado, estos datos van para la base de datos. El botón salir es para salir del sistema.



Ahora veamos las ventanas de Dieta. En esta ventana se muestra una tabla que es la tabla que sirve para hacer la dieta. En la energía se pone las kcal que el paciente debe comer por día, luego dependiendo de los resultados de los estudios se pondrá el porcentaje de carbohidratos, proteínas y lípidos que debe consumir el paciente. En esta ventana se encuentran dos botones uno que es continuar que es para seguir con la dieta y salir para salir del sistema.



Ahora veamos que pasará si le damos continuar en esta ventana. Se mostrará la pestaña de lácteos donde aparecen los alimentos lácteos permitidos en la dieta. Al lado de cada lácteo puse un cuadrito donde tendrá que poner el número de intercambios que podrá consumir de ese alimento. Esto es para que se realicen los cálculos correspondientes dependiendo de cada alimento. Abajo de esto se encuentra una sugerencia con un * y están los botones de continuar y salir.


Bueno esto es todo lo de esta entrada, espero que quede así como lo planie estaría perfecto, no se que tan dificil este pero primero quiero hacerlo sencillo y que funcione y ya después estaré modificandolo para mejorarlo. Comenten para puntos extras ya saben :D saludos!

jueves, 5 de mayo de 2011

~Semana 11. Implementación de Pruebas Unitarias

Semana 11
Materia: Taller de Programación Orientada a Objetos
Hora: Jueves M1-M2

Hola a todos, en esta entrada les mostraré la implementación de pruebas unitarias en mi proyecto.

La clase con la que trabajaremos es Carbohidratos.java la cual la muestro a continuación.

ppublic class Carbohidrato {
    
    double lecheDescremada; 
    double lecheSemidescremada;
    double lecheEntera;
    double lecheConAzucar;
    double fruta;
    double verdura;
    double azucarSinGrasa;
    double azucarConGrasa;
    double leguminosa;
    double cerealSinGrasa;
    double cerealConGrasa;
    double alimentoMuyMagro;
    double alimentoMagro;
    double alimentoSemigraso;
    double alimentoGraso;
    double aceiteSinProteina;
    double aceiteConProteina;
    double subtotal1;
    double subtotal2;
    double subtotal3;
    double subtotal4;
    int intercambioLecheDescremada = 1;
    int intercambioLecheSemidescremada = 0;
    int intercambioLecheEntera = 0;
    int intercambioLecheConAzucar = 0;
    int intercambioFruta = 3;
    int intercambioVerdura = 3;
    int intercambioAzucarSinGrasa = 2;
    int intercambioAzucarConGrasa = 1;
    int intercambioLeguminosa = 3;
    int intercambioCerealConGrasa = 1;
    int intercambioCerealSinGrasa = 2;
    int intercambioAlimentoMuyMagro = 3;
    int intercambioAlimentoMagro = 1;
    int intercambioAlimentoSemigraso = 0;
    int intercambioAlimentoGraso = 0;
    int intercambioAceiteSinProteina = 1;
    int intercambioAceiteConProteina = 0;

    //Metodos set

    public void setLecheDescremada() {
        lecheDescremada = (intercambioLecheDescremada * 12);
    }
    public void setLecheSemidescremada() {
        lecheSemidescremada = (intercambioLecheSemidescremada * 12);
    }
    public void setLecheEntera() {
        lecheEntera = (intercambioLecheEntera * 12);
    }
    public void setLecheConAzucar() {
        lecheConAzucar = (intercambioLecheConAzucar * 30);
    }
    public void setFruta() {
        fruta = (intercambioFruta * 15);
    }
    public void setVerdura() {
        verdura = (intercambioVerdura * 4);
    }
    public void setAzucarSinGrasa() {
        azucarSinGrasa = (intercambioAzucarSinGrasa * 10);
    }
    public void setAzucarConGrasa() {
        azucarConGrasa = (intercambioAzucarConGrasa * 10);
    }
    public void setLeguminosa() {
        leguminosa = (intercambioLeguminosa * 20);
    }
    public void setCerealSinGrasa() {
        cerealSinGrasa = (intercambioCerealSinGrasa * 15);
    }
    public void setCerealConGrasa() {
        cerealConGrasa = (intercambioCerealConGrasa * 15);
    }
    public void setAlimentoMuyMagro() {
        alimentoMuyMagro = (intercambioAlimentoMuyMagro * 0);
    }
    public void setAlimentoMagro() {
        alimentoMagro = (intercambioAlimentoMagro * 0);
    }
    public void setAlimentoSemigraso() {
        alimentoSemigraso = (intercambioAlimentoSemigraso * 0);
    }
    public void setAlimentoGraso() {
        alimentoGraso = (intercambioAlimentoGraso * 0);
    }
    public void setAceiteSinProteina() {
        aceiteSinProteina = (intercambioAceiteSinProteina * 0);
    }
    public void setAceiteConProteina() {
        aceiteConProteina = (intercambioAceiteConProteina * 3);
    }
    public double setSubtotal1() {
        subtotal1 = ( lecheDescremada + lecheSemidescremada + lecheEntera + lecheConAzucar + fruta + verdura + azucarSinGrasa + azucarConGrasa + leguminosa );
 return subtotal1;
    }
    public double setSubtotal2() {
        subtotal2 = ( cerealSinGrasa + cerealConGrasa);
 return subtotal2;    
 }
    public double setSubtotal3() {
        subtotal3 = ( alimentoMuyMagro + alimentoMagro + alimentoSemigraso + alimentoGraso);
 return subtotal3;
    }
    public double setSubtotal4() {
        subtotal4 = ( aceiteSinProteina + aceiteConProteina);
 return subtotal4;
    }
   public void setClaseCarbohidrato()
    {
        setLecheDescremada();
        setLecheSemidescremada();
        setLecheEntera();
        setLecheConAzucar();
        setFruta();
        setVerdura();
        setAzucarSinGrasa();
        setAzucarConGrasa();
        setLeguminosa();
        setCerealSinGrasa();
        setCerealConGrasa();
        setAlimentoMuyMagro();
        setAlimentoMagro();
        setAlimentoSemigraso();
        setAlimentoGraso();
        setAceiteSinProteina();
        setAceiteConProteina();
 double subtotal1 = setSubtotal1();
 double subtotal2 = setSubtotal2();
 double subtotal3 = setSubtotal3();
        double subtotal4 = setSubtotal4();
    }
}

Bueno, en esta clase como pueden ver hago algunas operaciones, estas operaciones son operaciones necesarias para el calculo de las dietas, calculan cuanta energia tiene cada alimento. Al final estos calculos ayudan para saber si la dieta esta balanceada o no. Bueno en esta clase utilicé los metodos subtotal para la prueba. 

Diseño de prueba.

La prueba unitaria la diseñé de la siguiente manera.

1.- Primero lo que hacemos es importar las librerias JUnit, estas librerias son necesarias para hacer las pruebas ya que contienen los métodos necesarios para realizar nuestras pruebas.

package proyecto;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import junit.textui.TestRunner;

2.- Realizamos nuestra clase en mi caso yo la llame Prueba, esto quiere decir que mi archivo se llama Prueba.java. Esta clase extiende TestCase que por decir vendria siendo el papá. Tenemos que declarar una variable que sea el mismo nombre del nombre de la clase de la que estamos realizando la prueba, en mi caso mi clase es Carbohidrato por esto declare Carbohidrato C. Después tenemos un método setUp el en el cual vamos a inicializar un objeto de la clase Carbohidrato.

public class Prueba extends TestCase {

 protected Carbohidrato c;
 
 protected void setUp() {
 this.c = new Carbohidrato(); 
 return;
 }
 
 public static Test suite() {  
 return new TestSuite(Prueba.class);  
 }  




3.- Ahora programamos nuestras pruebas, en mi caso yo voy a comparar double como pueden ver puse que mi double expected en el test1() es 159.0. Esto se debe a que como yo puse los valores predeterminados de los numeros de intercambio se realizaron las operaciones y sume el resultado de subtotal1. Como pueden ver en la imagen de arriba el subtotal1 viene de la formula#1 si sumamos los valores que tengo ahí sería 12.0 + 0.0 + 0.0 + 0.0 + 45.0 + 12.0 + 20.0 + 10.0 + 60.0 = 159.0. En los otros test realicé lo mismo pero con subtotal2 y subtotal3.

public void test1() {

     double expected = 159.0;
     c.setClaseCarbohidrato();
     double actual = c.setSubtotal1();
     assertEquals(expected,actual); 
     return;

 }
     public void test2() {
     
     double expected = 40.0;
     c.setClaseCarbohidrato();
     double actual = c.setSubtotal2();
     assertEquals(expected, actual);
     return;

 }
 public void test3() {
     
     double expected = 0.0;
     c.setClaseCarbohidrato();
     double actual = c.setSubtotal3();
     assertEquals(expected,actual);
     return;
        }


Ahora veamos el resultado de estas pruebas.






En esta prueba que realice me dice que hay un error en el test2() ya que yo puse de double expected un 40.0 pero si nos regresamos a la imagen de arriba donde tenemos los resultados de las operaciones en la Formula#2 en subtotal2 tenemos 30.0 + 15.0 y esto es igual a 45.0 no a 40.0 como yo habia puesto. Vamos a ver ya corregido esto como salen nuestras pruebas.

public void test2() {
     
     double expected = 40.0;
     c.setClaseCarbohidrato();
     double actual = c.setSubtotal2();
     assertEquals(expected, actual);
     return;

 } 


Ahora si, las 3 pruebas se realizaron con éxito y sin ningun error :). Batallé un poco en que los resultados fueran exitosos primero me salia un error que solucioné gracias a la explicación de mi compañero José en su blog ya que yo ya había puesto en el CLASSPATH todo lo que debe configurarse pero me mandaba un error a la hora de ejecutar mi prueba. Hice los pasos que vienen en el blog de José para configurar JUnit y se solucionó dicho error. También otro error que tuve era al momento de poner los métodos de las pruebas test1, test2 y test3 ponía como double expected el resultado que debía ser pero después cuando lo corría me decia que no coincidian porque el resultado que obtenía de setSubtotal1() era 0.0 luego me di cuenta que era porque tenía que correr todos los métodos que tengo en este caso setClaseCarbohidrato() donde se realizan todos los métodos de operaciones y así ya setSubtotal1() tendría el valor real de la suma, por esto en los métodos agregue setClaseCarbohidrato para que se ejecutaran las operaciones y así obtener el subtotal correcto.

Bueno esto es todo, saludos a todos :)

~Semana11. Diseño de Pruebas Unitarias

Semana 11
Materia: Programación Orientada a Objetos
Hora: Martes M1-M3

Hola a todos en esta entrada les hablaré sobre pruebas unitarias de un sistema.




JUnit. Se preguntarán ¿Qué son pruebas unitarias? ¿Para que se utilizan? etc. Les explicaré. 

Las pruebas unitarias son pruebas como su nombre lo dice que se utilizan para verificar el funcionamiento de una parte de código. Esto quiere decir que se hacen pruebas para asegurarnos de que nuestro código funcione correctamente por separado. JUnit son un conjunto de librerías que se utilizan en Java para realizar estas pruebas unitarias.

Ventajas de pruebas unitarias
  • Las pruebas unitarias son la mejor forma para encontrar errores en nuestro código, no encuentra todos los errores que puedan haber pero si algunos.
  • El sistema llega a la fase de integración con un alto grado de seguridad de que el código funcione correctamente.
  • Las pruebas también sirven como documentación de tu código ya que muestran como utilizar tu código. 
  • El programador puede cambiar su código para darle una mejor estructura.
  • La única interacción entre los casos de prueba y las unidades que se prueban son las interfaces de dichas unidades que se estan probando, se puede cambiar cualquiera de los dos sin afectar al otro.
Como lo dije anteriormente, es importante recordar que estas pruebas no garantizan detectar TODOS los errores que tiene nuestro código.
 
JUnit

Es un conjunto de librerías como ya lo mencioné que se utilizan en java para realizar pruebas unitarias. Fueron creadas por Erich Gamma y Kent Beck. JUnit son clases (frameworks) que nos permiten realizar ejecuciones de clases Java para validar el funcionamiento de nuestros métodos los cuales queremos probar. Se basa en función de un valor de entrada y un valor esperado si la clase cumple con esto las pruebas pasarán exitosamente, en el caso contario que el valor esperado no sea el valor que regresó el método JUnit devuelve un mensaje de error.


JUnit ejecuta los siguientes pasos.
  1. Crear una subclase de junit.framework.TestCase.
  2. Opcionalmente sobre-escribir el método setUp() en el cual se inicializan los objetos y variables usados por los casos de prueba. 
  3. Opcionalmente sobre-escribir el método tearDown() en el cual se invocarrá al final de cada caso de prueba y sirve para liberar recursos utilizados en la prueba.
  4. Crear métodos de prueba a la clase en el cual pondrás los métodos que quieres poner a prueba de tu clase que estás probando.

Para realizar las pruebas unitarias en Java se necesita descargar las librerías JUnit de la página http://www.junit.org/ en los blogs de mis compañeros Juan Carlos y José encontrarán como configurarlas. 


Esto es todo :) saludos a todos!