Archive for Java

Pro tips para crear Clases en Java

¡Estimados lectores! En esta ocasión quiero compartir con ustedes algunos tips y recomendaciones para mejorar su estilo de programación orientada a objetos especialmente cuando escribimos nuestras propias clases para diseñar objetos que cumplan con los requisitos de cualquier programa, esto quiere decir no solo en Java pero también otro lenguaje que maneje conceptos de POO.

Algunos de estos “Pro tips para crear clases” son nada mas y nada menos que algunas pautas muy sencillas que hay que seguir para hacer código de mejor calidad, mas legible y estandarizado. Es así como se practica en muchas empresas por cualquier programador profesional. A continuación algunos de los puntos mas importantes para tomar en cuenta y un video explicando como se tiene que hacer.

  1. Al crear una clase debemos definir las variables de la misma como privadas, incluso pueden ser protegidas, esto para previnir que se puedan acceder desde otras clases y obligar a el desarrollador a usar getters y setters como debe de ser.
  2. Evitar el uso de “numeros magicos”, es decir que cuando sea necesario realizar alguna operación matematica o algún calculo en nuestros metodos, no debemos utilizar numeros naturales o enteros directamente incluidos en las operaciones, debemos crear constantes estaticas y utilizar las mismas en nuestra clase.
  3. Crear constructores multiples, de manera que podamos crear objetos a partir de nuestra clase con distintas opciones, siendo sin parametros definidos, o bien utilizando parametros para construirlos con valores definidos en los parametros.
  4. Crear nuestro propio metodo toString(), esto para poder representar nuestros objetos de manera totalmente personalizada en formato de cadena de texto.

Estos fueron solo algunos de los tips, a continuación el video.

Video de Tips para crear clases en Java

Estimados, eso es todo por este articulo y tutorial, espero que les haya sido de utilidad y puedan aplicar algunos conceptos sencillos pero muy útiles cada vez que creen clases en Java.

Recuerda que puedes comentar tus opiniones, criticas o dudas al respecto. Comentar es gratis.

Graficadora de funciones cuadradas en Java con Swing

Aqui les dejo el codigo y el video tutorial para la graficadora, esta graficadora es muy sencilla, sin embargo para lo que sirve les dejo las 3 clases basicas que la conforman.

Para el codigo se recomienda ampliamente tener conocimientos matematicos de funciones cuadradas asi como alguna base de aplicaciones swing en Java.

Video tutorial:

Codigo fuente:

package graficadora;

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

/**
 *
 * @author jorge
 */
public class Graficadora {

    //Importante, plano debe ser publico y estatico
    public static plano plano;

    public static void main(String[] args) {

        //Creando la ventana y el plano de dibujo
        Ventana frame = new Ventana();
        frame.setDefaultCloseOperation(Ventana.EXIT_ON_CLOSE);
        frame.setBounds(300, 300, 510, 600);
        frame.setLayout(new BorderLayout());
        plano = new plano();

        //Configuración del Boton
        JButton start = new JButton("Iniciar");
        start.addActionListener(frame);
        start.setText("Iniciar");

        //Bordes al panel
        frame.add( plano, BorderLayout.CENTER);
        frame.add(start, BorderLayout.SOUTH);

        frame.setVisible( true );

    }
}

 

package graficadora;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
/**
 *
 * @author jorge
 */
public class plano extends JPanel{

    public plano() {
        init();
    }

    public void init() {
        this.setBorder(BorderFactory.createLineBorder(Color.black));
    }

    @Override 
     public void paintComponent( Graphics g ) {
                    super.paintComponent(g);

                    g.setColor(Color.red);

                    g.drawLine(0, this.getHeight()/2, this.getWidth(), this.getHeight()/2);
                    g.drawLine(this.getWidth()/2, 0,this.getWidth()/2 , this.getHeight());

                 }

    // y=c*x2 +c*x +c

     public void paintSQRFunc(Graphics g, double x2mult,
             double x1mult,double cons, double x1,double x2)
     {

         for(double i=x1;i<x2;i++)
         {
             double y = ((double)Math.pow(i,2)*x2mult)+i*x1mult+cons;
             double xp = i+1;
             double yp = ((double)Math.pow(xp,2)*x2mult)+xp*x1mult+cons;
             g.drawLine((int)coord_x(i), (int)coord_y(y), (int)coord_x(xp), (int)coord_y(yp));

         }
     }

     private double coord_x(double x)
     {
         double real_x = x+this.getWidth()/2;
        return real_x;
     }
     private double coord_y(double y)
     {
          double real_y = -y+this.getHeight()/2;

          return (real_y);
     }
}

 

package graficadora;
import java.awt.event.ActionEvent;
import javax.swing.*;
import java.awt.event.ActionListener;
import graficadora.Graficadora;
/**
 *
 * @author jorge
 */
public class Ventana extends JFrame implements ActionListener{

    @Override
    public void actionPerformed(ActionEvent e) {

       Graficadora.plano.paintSQRFunc(Graficadora.plano.getGraphics(),-0.2,2,-15,-200,200);
    }

}

 

Java: Cifrado Vigenere (solo encriptacion)

En el siguiente tutorial vemos como hacer un sencillo ejemplo del cifrado Vigenere, el cual implemente caracteres del codigo ascii de la “a” a la “z” en minusculas, correspondientes a los valores desde el 97 al 122 en el codigo ascii, incluyendo así las 26 letras minusculas del abecedario.
Videotutorial cifrado vigenere:

public class Vigenere {

	char[] mensaje;
	char[] clave;
	char[] resultado; //resultado cifrado
	char matriz[][];

	public Vigenere(String msg,String clave)
	{
		this.mensaje = msg.toCharArray();
		char[] claveTemp = clave.toCharArray();
		this.clave = new char[mensaje.length];
		int cont =0;
		for(int i=0;i<mensaje.length;i++)//For mete la clave multiples veces en 1 arreglo
		{
			this.clave[i]=claveTemp[cont];
			cont++;
			if(cont==claveTemp.length)
				cont=0;
		}
		//la clave ya se guardo en un arreglo de igual tamaño que del mensaje

		this.matriz = generarMatrizABC();//Generamos matriz del abecedarioç
		cifrar(); //ciframos el texto
	}

	public void cifrar() //Genera cifrado
	{
		char[] cifrado = new char[mensaje.length];
		int i;
		int j;
		for(int cont=0;cont<mensaje.length;cont++)
		{
			//Primero calculamos el indice de cada matriz "i" y "j"
			//el indice "i" correspondera al arreglo del mensaje
			//el indice "j" correspondera al arreglo de la clave 
			//luego ejecutaremos el calculo para cifrar utilizando "i" y "j" como cordenadas de la matriz
			i=(int)this.mensaje[cont]-97; //restamos 97 para pasar de codigo ascii a un numero entero
			j=(int)this.clave[cont]-97;
			cifrado[cont]=this.matriz[i][j];

		}

		this.resultado = cifrado;
		//for(int k = 0;k<26;k++)
		//	System.out.println(this.matriz[k]);

		System.out.println(this.mensaje);
		System.out.println(this.clave);
		System.out.println(cifrado);
	}

	public String getMensajeCifrado()
	{
		String result="";
		for(int i=0;i<resultado.length;++i)
			result=result+this.resultado[i];
		return result;
	}

	private char[][] generarMatrizABC()
	{
		int contador;
		char abcTemp[] = this.generarAbecedario();
		char abc[] = new char[abcTemp.length*2];
		for(int c=0;c<26;c++) {
			abc[c]=abcTemp[c];
			abc[c+26]=abcTemp[c];
		}
		char[][] matriz = new char[26][26];
		for(int i=0;i<26;i++)
		{
			contador=0;
			for(int j=0;j<26;j++)
			{
				matriz[i][j]=abc[contador+i];
				contador++;
			}
		}
		return matriz;
	}

	private char[] generarAbecedario()
	{
		char[] abc = new char[26];

		for(int i= 97; i<= 122;i++)
		{
			abc[i-97]=(char)i;

		}
		return abc;
	}

}