lunes, 15 de diciembre de 2008

Un poco de UML (V 0.1)

Uno de los principales objetivos del programador Java es crear objetos para construir un sistema y mediante este resolver un problema.

Al alcance del problema a resolver se le denomina dominio del problema

Por ejemplo, el dominio de un problema podría ser: Crear un sistema que permita a las personas que ingresan órdenes de compra, entrar y aceptar pagos para una orden. Así, el dominio del problema describe brevemente lo que el desarrollador debe resolver.

Enseguida se procede a la captura de requerimientos mediante casos de uso.

Luego se deben identificar los objetos, a partir de los casos de uso, que interactuan para resolver el problema. Al respecto:

  • Los objetos pueden se físicos o conceptuales. Por ejemplo, una cuenta de un cliente es un objeto conceptual y un cajeto automático es un objeto físico.
  • Los objetos tienen características llamados atributo. Por ejemplo, color, forma, otros.
  • El valor de todos los atributos de un objeto se denomina estado del objeto. Por ejemplo, un objeto puede tener su atributo color en valor "rojo".
  • Los objetos tiene operaciones que son las acciones que los objetos peuden desarrollar. Por ejemplo, asignar un valor, desplegar una pantalla o invrementar una velocidad.
  • Al conjunto de operaciones que un objeto puede realizar se conoce con el nombre del comportamiento del objeto
Por lo general, los nombre de los objetos son sustantivos (por ejemplo, cuenta, camisa) los atributos de los objetos son sustantivos (por ejemplo, color, tamaño) y las operaciones son verbos o combinaciones de verbos y sustantivos (por ejemplo, desplegar, enviar orden).

Por ejemplo, una puerta es un objeto en le dominio del problema "construir casa". Este objeto tiene al menos un atributo con valor abierta o cerrada y una operación cerrar la puerta.

Veamos algunas definiciones de clase:
  • Un conjunto de elementos con característics comunes.
  • La declaración o abastracción de un objeto cuando se programa según el paradigma de orientación a objetos.
  • Lo anterior significa que una clase es la definición de un objeto.
  • Es un contenedor de datos (atributos) junto con las operaciones de manipulación de dichos datos.

class Nombre {

// Variables miembro (habitualmente privadas)
miembro_1;
miembro_2;
miembro_3;

//Métodos (habitualmente públicos)
metodo_1( );
metodo_2 ( );

// Propiedades (habitualmente públicas)
propiedad_1;
propiedad_2;
propiedad_3;
propiedad_4;
}

Las propiedades se generan para dar acceso a las variables miembro de la clase (que habitualmente son privadas) y para mantener la coherencia.






viernes, 12 de diciembre de 2008

Introducción a la persistencia usando JAVA (V 0.1)

Para que una aplicación distribuida funcione correctamente debe proporcionar una manera mediante la cual se puedan guardar objetos con propiedades y luego se permita restaurarlos. Si estos objetos se pueden restaurar más allá de ejecución del programa que los creo, entonces se hablará de persistencia. Para implementar lo anterior se maneja el concepto de serialización

La serialización ofrece la posibilidad de escribir un objeto en un flujo y de leerlo posteriormente.


La serialización permite almacenar objetos en archivos que se comunican por redes y que se usan en aplicaciones distribuidas. Bajo estas circunstancias se almacenará al menos el objeto, la información de la clase a la cual pertenece y las referencias a la cual apunta.

La interfaz Serializable está contenida en el paquete java.io

public interface Serializable

Esta interfaz no contiene métodos y sólo se debe implementar para efectuar un uso de la propiedad de serialización

Se entiende por persistencia (en programación) como la acción de preservar la información de un objeto de forma permanente (guardar), pero a su vez también se refiere a poder recuperar la información del mismo (leer) para que pueda ser nuevamente utilizada.

En el caso de persistencia de objetos la información que persiste en la mayoría de los casos son los valores que contienen los atributos en ese momento, no necesariamente la funcionalidad que proveen sus métodos.

La persistencia no es ni una capacidad ni una propiedad de la Programación Orientada a Objetos no tiene nada que ver con el paradigma en sí, solo es el mecanismo que se usa para persistir información de un determinado tipo (como puede ser serializar, guardar los datos en una tabla, en un archivo plano, otros).

Una clase (llamada en persistencia entidad) representa típicamente una tabla en el modelo relacional. Cada instancia de la entidad corresponde a una fila de la tabla


El API de persistencia usa el término entidad para definir clases que serán mapeadas a la base de datos relacional.

Restricciones a una Entidad de persistencia
  • No puedes crear entidades desde enumeraciones o interfaces.
  • La clase no puede ser final
  • La clase no puede contener métodos finales
  • La clase no puede contener variables de instancias de persistencia final.


Permitido en una Entidad de persistencia
  • Las entidades pueden ser clases abstractas o concretas.
  • Estas clases deben contener un método constructor sin parámetros.
  • Los atributos persistentes deben ser privados y proporcionar métodos get/set.
  • Los atributos de tipo colección deben usar interfaces desde java.util.Collection con genéricos del tipo Java 5.0.


Anotaciones: @
El API de persistencia de Java requiere que definas las clases que serán almacenadas en una base de datos. Debes identificar las entidades persistentes y definir sus relaciones usando anotaciones. El compilador de Java reconocerá y usará las anotaciones para ahorrarte el trabajo. Usando anotaciones, el compilador generará clases adicionales para ti y realizar la comprobación de errores en tiempo de compilación.

Las anotaciones comienzan con el símbolo @. Por ejmplo, para identificar que una clase es persistente usamos la anotación @Entity


Las anotaciones pueden aplicarse a las declaraciones de clases de un programa, los campos, métodos y otros elementos del programa

@Deprecated: Indica que el elemento marcado se desprecia y ya no se usa. El compilador genera una advertencia siempre que un programa usa un método, clase o campo con la anotación @Deprecated.

@Deprecated
static void deprecatedMethod() { }

@Override: Informa al compilador que el elemento está pensado para sobreescribir a un elemento declarado en una superclase.

@Override
int overriddenMethod() { }

@SuppressWarnings: Le dice al compilador que suprima advertencias específicas que de otra forma generaría. En este caso la anotación causa que la advertencia se suprima

@SuppressWarnings("deprecation")
void useDeprecatedMethod() {
obj.deprecatedMethod();
}

@SuppressWarnings(“unchecked ”): Es simplemente un warning, indica que no estás usando los generics de la 1.5. En algún lugar del código estás haciendo algo como:

List listaDeClientes = new ArrayList();

y ese warning te indica que ahora podrías hacer

List listaDeClientes = new ArrayList();


Primary Key en entidades
Todas las entidades deberían tener un PK que puede ser simple o compuesta. Para identificar una PK se debe usar la anotación @Id

Las componentes de una PK pueden ser:


Los tipos en coma flotantes no puden usarse como PK.

El siguiente ejemplo define una PK como un autocorrelativo

@Entity
public class Empleado implemenets Serializable{
private Long Id;
....
@Id //Indica que maneja una PK
@GeneratedValue //Son valos autogenerados (correlativos)
public Long getId(){
return Id;
}

public void setId(Long Id){
this.Id=Id;
}

@Transient: Indica que un método o campo no es persistente. Esto implica que estos métodos o campos no serán almacenados permanentemente en la base de datos.