lunes, 20 de octubre de 2008

Estandares Java

Sun recomienda las siguientes practicas para:

Las propiedades de los JavaBeans
  • Si la propiedad NO es de tipo boolean, los metodos getters deben tener como prefijo la palabra get. si la propiedad es size, su get es getSize( ).
  • Si la propiedad es de tipo boolean, los metodos getters en vez de llamarse get, se debe llamar is. Si la propiedad es stop, su get debe ser isStop( ).
  • Los metodos para setear debe tener el prefijo set a la propiedad, si la propiedad es size, debe ser setSize( ).
  • Como en los puntos anteriores despues del prefijo, el nombre de la propiedad comienza con mayúscula.
Listener JavaBeans
  • Para registrar un evento, aplicar addActionListener que es para agregar una acción.
  • Para desresgistrarlo, aplicar removeActionListener que es para quitar la acción.
  • Para agregar o quitar se debe pasar el Listener.
Ejemplos:
public void setMyValue(int v)
public int getMyValue()
public boolean isMyStatus()
public void addMyListener(MyListener m)
public void removeMyListener(MyListener m)

Próximo articulo, "Declaración de clases en Java 5 "

revision inicial de la scjp sun certified programmer Java 5

Estoy estudiando para la certificación para programadores java 5. El texto es bastante extenso y el comienzo es bastante obvio pero siempre es bueno repasarlo para no caer en error y malas practicas.

  • Los identificadores deben comenzar con letras minusculas, $ o _ nunca numeros.
  • es sensible a mayusculas.
  • no se puede usar las palabras reservadas para declarar identificadores.
  • no hay limites de caracteres.
Convensiones para Clases.
  • Las clases deben comenzar con mayusculas.
  • Debe ser capitalizado como nombre, ejemplo class Perro
Convensiones para Interfaces
  • El nombre debe ser un adjetivo.
Metodos
  • Debe comenzar con minuscula la primera palabra, luego la segunda palabra debe comenzar con mayúscula.
  • Debe nombrarse con la accion que va a tener ese metodo.
Variables
  • Debe comenzar con minuscula la primera palabra, luego la segunda palabra debe comenzar con mayúscula.
  • Deben ser nombres cortos y sobretodo descriptivos.
Constantes
  • Siempre con mayusculas.
  • para separar las palabras de debe usar "_"

En el proximo post acerca de la certificación Java 5, hableré sobre Los estandares de los JavaBeans.

lunes, 19 de noviembre de 2007

Patrón de Diseño, Chain of Responsibility

Evita acoplamiento al remitente de una petición a su receptor dando la posibilidad de un objeto de tramitar la solicitud. Cadena de la recepción de los objetos y pasar la solicitud a lo largo de la cadena hasta que un objeto se ocupa de él.

Este Patron es muy poco usado.



Participantes

Las clases y / o de los objetos que participan en este modelo son:

* Handler
Define una interfaz para el manejo de las solicitudes
(Opcional) implementa el sucesor enlace
* ConcreteHandler
Se ocupa de las solicitudes que es responsable
Puede acceder a su sucesor
Si el ConcreteHandler puede tramitar la solicitud, lo hace; de otra forma, lo que remite la solicitud a su sucesor
* Client
Inicia la petición a un ConcreteHandler objeto en la cadena













Puedes bajar el ejemplo y probarlo en tu pc. Fue desarrollado en Eclipse con Java 1.6SE
[descargar]

Este es el codigo Java,

abstract class Handler{

protected Handler successor;


public void SetSuccessor(Handler successor){
this.successor = successor;
}

public abstract void HandleRequest(int request);
}

class ConcreteHandler1 extends Handler{
public void HandleRequest(int request){
if (request >= 0 && request < 10){
System.out.println(this.getClass().toString() + " handled request " + request);
} else if (successor != null){
successor.HandleRequest(request);
}
}
}

class ConcreteHandler2 extends Handler{
public void HandleRequest(int request) {
if (request >= 10 && request < 20){
System.out.println(this.getClass().toString() + " handled request " + request);
} else if (successor != null){
successor.HandleRequest(request);
}
}
}

class ConcreteHandler3 extends Handler{
public void HandleRequest(int request) {
if (request >= 20 && request < 30){
System.out.println(this.getClass().toString() + " handled request " + request);
}else if (successor != null){
successor.HandleRequest(request);
}
}
}


public class Main {

public static void main(String[] args) {
// Configuracion del Chain of Responsibility
Handler h1 = new ConcreteHandler1();
Handler h2 = new ConcreteHandler2();
Handler h3 = new ConcreteHandler3();
h1.SetSuccessor(h2);
h2.SetSuccessor(h3);

// Generar y procesar request
int[] requests = {2, 5, 14, 22, 18, 3, 27, 20};

for(int request : requests){
h1.HandleRequest(request);
}
}
}

miércoles, 7 de noviembre de 2007

Problema Javac java lang OutOfMemoryError









Muchos desarrolladores Java habrán tenido este error al tratar de compilar una gran cantidad de clases, java.lang.OutOfMemoryError:

The system is out of resources.
Consult the following stack trace for details.
java.lang.OutOfMemoryError: Java heap space


Si estas compilando con javac em Apache Ant, sete el atributo fork como true, para correr javac en un proceso separado con su propio espacio. Si el atributo fork es seteado false o no es seteado (por defecto es false), javac correra en el mismo proceso que Ant y su heap size sera de 64m.


<javac fork="true"
srcdir="${basedir}/src"
destdir="${basedir}/build/classes"
classpath="${project.classpath}"
memoryinitialsize="256m"
memorymaximumsize="256m">
</javac>



Si no quieres modificar el archivo build.xml, otra opcion es incrementar el heap size de la JVM Ant y seguir ejecutando javac. Solo necesitas setear la variable de entorno ANT_OPTS:

export ANT_OPTS="-Xms256m -Xmx256m" (ksh/bash)
setenv ANT_OPTS="-Xms256m -Xmx256m" (tcsh/csh)
set ANT_OPTS="-Xms256m -Xmx256m" (Windows)


De estas maneras podrás lograr compilar tus clases java si te sale este problema de memoria
;)

Protege tu Sitio Web sin usar CAPTCHA








Aqui posteo una solucion para evitar q tu sitio web sea objeto de spam

1. Añada el campo de entrada a su formulario, con algun nombre interesante por ejemplo 'URL'.

<input name="url" value="" type="text">


2. Esconde el textbox utilizando estilos css para que los usuarios (auténtico) no puede ver directamente.
<style>
.style1 {
display: none;
}
</style>
<p class="style1"><input name="url" value="" type="text">


3. El form verifica si el "URL" contiene algun valor. Si es así, rechazar el envio.

if (strlen(trim($_POST['url'])) > 0){
//It is a spam, reject this post here
}

4. ¿Por qué esto funciona? Bueno, funciona simplemente porque los usuarios no pueden ver un cuadro de entrada oculto en su formulario y, por lo tanto, no van a ocupar de él, mientras que los robots lo van a hacer.