jueves, 19 de febrero de 2009

Operaciones con Bits

Les invito a ver los siguientes videos que he creado y que explican de forma suscinta el código y estructura de una aplicación Android que hace uso de un servicio de sockets en Java. Se trata de un concepto de chat, sin pretender que realmente se trate de una aplicación funcionalmente completa. https://www.youtube.com/watch?v=KsGQBSoVLYs Y este otro https://www.youtube.com/watch?v=o9UQX6Y4Bb4 Acabo de publicar un interesante artículo sobre operaciones con Bits. Espero que lo lean y generen retroalimentación al respecto. Incluye teoría bássica de operaciones binarias y lógica And, Or y Negación sobre la que se sustentan este tipo de operaciones.

Operaciones con Bits y Corrimientos (Beta)

martes, 10 de febrero de 2009

Visite mi página Web

Amigos visitantes, les invito a que revisen en mi página web los contenidos de interesantes artículos que tengo publicados y que me sigan durante la publicación de otros más. Haga clic aqui para verla.

En próximos días estaré publicando un interesante artículo sobre corrimientos de bits y operaciones a nivel de bits.

jueves, 5 de febrero de 2009

Tipos de datos Enum (Enumerados)

Los tipos enum son básicamente estructuras que almacenan objetos propios de ella. El concepto suena un poco raro, por lo que voy a ser un poco más gráfico al respecto. Cuando se escriben o escribían programas (los enums de hecho deben marcar un antes y un después), por ejemplo para definir el género de una persona MASCULINO, FEMENINO un programador escribiría algo como:

public static final int MASCULINO = 1;
public static final int FEMENINO = 2;

La firma del método que asigna el género puede verse como:


public void setGenero(int GENERO)

Como podemos apreciar, es simplemente un tipo de dato entero que bien puede tomar cualquier valor distinto de 1 o 2, y que si no es correctamente validado dentro de las rutinas del método de asignación, puede derivar en problemas con la consistencia de los datos.

La solución a este problema la ofrece java con la Orientación a Objetos. A partir de la versión 1.5, ofrece los tipos enumerados los cuales son definiciones de estructuras, que de una vez definen sus propias instancias u objetos derivados de las mismas. Las podemos tener simples, o parametrizadas.

La solución al problema del género en términos de tipos enumerados podría verse así:

enum genero {MASCULINO,FEMENINO};

El siguiente programa ilustra de una mejor forma el uso de tipos enumerados:


/**
* @author William Enrique Parra Alba
*/

1 public class pruebaEnum {
2 enum Genero{MASCULINO,FEMENINO};
3 private Genero gen = Genero.FEMENINO;
4
5 public pruebaEnum() {
6 // Cambiamos el género por defecto a MASCULINO
7 System.out.println("El genero actual es: "+this.gen);
8 this.setGenero(Genero.MASCULINO);
9 System.out.println("El nuevo genero es: "+this.gen);
10 }
11
12 public void setGenero(Genero gen)
13 {
14 this.gen = gen;
15 }
16
17 public static void main(String[] args) {
18 new pruebaEnum();
19 }
20 }
21
22

En la linea 2 es definida la estructura (Por no usar el término clase) Genero la cual se compone de dos instancias Una con el valor MASCULINO, y otra con el valor FEMENINO. En la linea 3, se define un atributo del tipo de la estructura enumerada Genero, el cual es iniciado con una referencia al Objeto FEMENINO del tipo Genero.

Antes de continuar, vale aclarar que estos tipos enumerados, pueden ser definidos por fuera de la clase, es decir que la linea 2 perfectamente pudiera estar ubicada en donde está ahora pintada la linea 21 o 22, y el comportamiento del programa sería el mismo.

Las lineas 7 imprime valor con el que fue inicializada la variable gen. La linea 8, fija un nuevo valor a esta variable. La linea nueve, imprime el nuevo valor de la variable gen.

De lo anterior podemos concluir que los tipos enumerados mejoran la seguridad en los programas java restringiendo el dominio de los datos con los que un programador puede interactuar. Y mejorando la calidad del código ya que se ahorran comprobaciones como la que se hubiera tenido que hacer en la fijación del género usando los tipos de datos static final.

Los tipos de datos enumerados permiten argumentos en su constructor, y la definición de sus propios atributos y métodos para el manejo de los mismos. El siguiente programa muestra ese comportamiento.

/**
* @author William Enrique Parra Alba
*/
1 public class pruebaEnum {
2 private Genero gen = Genero.FEMENINO;
3
4 public pruebaEnum() {
5 // Cambiamos el género por defecto a MASCULINO
6 System.out.println("El genero actual es: "+this.gen+" Id del Genero "+this.gen.getIdGenero());
7 this.setGenero(Genero.MASCULINO);
8 System.out.println("El nuevo genero es: "+this.gen+" Id del Genero "+this.gen.getIdGenero());
9 }
10
11 public void setGenero(Genero gen)
12 {
13 this.gen = gen;
14 }
15
16 public static void main(String[] args) {
17 new pruebaEnum();
18 }
19 }
20
21 enum Genero{
22 MASCULINO(1),FEMENINO(2);
23 int id;
24 Genero(int id)
25 {
26 this.id = id;
27 }
28 int getIdGenero()
29 {
30 return id;
31 }
32 }
33

Las lineas 6, 7 y 8 se comportan de una manera similar a las ya explicadas en el ejemplo anterior; excepto porque ahora se está imprimiendo el atributo identificador asociado a cada uno de los objetos enum.

Vamos a concentrarnos en las lineas 21 a la 32.
La linea 22, define dos objetos los cuales hacen el llamado al constructor de Genero, y le pasan un valor de identificador.
La linea 23 define el atributo que almacenará el valor del identificador.
Las lineas 24 a 27, definen el constructor con el parámetro de Identificación e inicializa el atributo propio de la instancia u objeto (puede ser masculino o femenino).
Las lineas 28 a la 30, simplemente hacen el retorno del valor del Objeto correspondiente.

Así; despues de correr el anterior programa tendríamos una salida como la siguiente:

El genero actual es: FEMENINO Id del Genero 2
El nuevo genero es: MASCULINO Id del Genero 1


Espero les sirva...

En los próximos días les estaré publicando entradas relacionadas con operaciones a nivel de Bits