jueves, 30 de agosto de 2012

comentario

El texto nos habla  de u  señor que se llamaba Nikolai Ivanovich Vavilov quien era un científico que vivió hasta los 56 años y cuyos trabajos contribuyeron a catalogar la biodiversidad agrícola del planeta este señor viajo por todo el mundo recolectando semillas de diferentes especies para ayudar a cambiar el estilo de siembras y que la agricultura fuera mas prospera para el murió luchando por el bien común. 

miércoles, 25 de abril de 2012

PROGRAMACION CONCURRENTE MULTIHILO

 PROGRAMACION CONCURRENTE MULTIHILO

Al escuchar la palabra multi-hilo, tal vez lo primero que te viene a la mente son muchos "hilos" de los que conocemos normalmente en casa, pero al hablar en términos de programación, no nos estamos refiriendo a esos "hilos".

En programación, nos estamos refiriendo a los lenguajes de programación que permiten la ejecución de varias tareas en forma simultánea.

Por ejemplo, consideremos la cantidad de aplicaciones que corren a la vez dentro de un mismo entrono gráfico. Mientras una persona escribe un documento, esta corriendo Microsoft Windows además de Internet Explorer, Windows Explorer, CD Player y el Control de Volúmen. Estas aplicaciones son ejecutadas dentro de alguna versión de Windows. De esta forma, podemos pensar que los procesos son análogos a las aplicaciones o a programas aislados, pero realmente tiene asignado espacio propio de ejecución dentro del sistema.

Java, es un lenguaje multihilo, ya que permite la ejecución de varias actividades en forma simultánea, tanto en un programa creado en este lenguaje como en el corazón mismo del lenguaje (en la parte interna). Teniendo como resultado, que se pueden usar hilos Java como standard, en cualquier plataforma.

3.1 Concepto de hilo.

Los hilos o threads, son básicamente, pequeños procesos o piezas independientes de un gran proceso. También podemos decir, que un hilo es un flujo único de ejecución dentro de un proceso (un proceso es un programa ejecutándose dentro de su propio espacio de direcciones).

Un hilo no puede correr por sí mismo, se ejecuta dentro de un programa, ya que requieren la supervisión de un proceso padre para correr. Se pueden porgramar múltiples hilos de ejecución para que corran simultáneamente en el mismo programa. La utilidad de la programación multihilo resulta evidente. Por ejemplo, un navegador Web puede descargar un archivo de un sitio, y acceder a otro sitio al mismo tiempo. Si el navegador puede realizar simultáneamente dos tareas, no tendrá que esperar hasta que el archivo haya terminado de descargarse para poder navegar a otro sitio.

Los hilos a menudo, son conocidos o llamados procesos ligeros.

3.2 Comparación.

Un thread o hilo es, al igual que un proceso, un flujo de control que puede gozar de cierta autonomía (puede tener sus propias estructuras de datos), pero a diferencia de un proceso, diversos hilos dentro de una aplicación pueden compartir los mismos datos.

El beneficio de ser multihilo, consiste en un mejor rendimiento interactivo y un mejor comportamiento en tiempo real.

Aunque el comportamiento en tiempo real, esta limitado a las capacidades del sistema operativo sobre el que corre, aún supera a los entornos de flujo único de programa (single-thread) tanto en facilidad de desarrollo, como en rendimiento.

Mientras los procesos mantienen su propio espacio de direcciones y entorno de operaciones, los hilos dependen de un programa padre en lo que se refiere a recursos de ejecución.

En Java, los hilos comparten el mismo espacio de memoria. Incluso comparten gran parte del entorno de ejecución, de modo que la creación de nuevos hilos es mucho más rápida que la creación de nuevos procesos. La ventaja que proporcionan los hilos, es la capacidad de tener más de un camino de ejecución en un mismo programa.
3.3 Creación y control de hilos.
3.3.1. Atributos de hilos.

Los atributos o propiedades de un hilo varían de una implementación a otra. Sin embargo, de forma general los atributos que definen un thread son:
  • Estado de espera: permite que otros hilos, esperen hasta que termine de ejecutarse un hilo en especial.
  • Dirección de stack. apuntador al inicio del stock del hilo.
  • Tamaño de la dirección: longitud del stock del hilo.
  • Alcance (scope): define quien controla la ejecución del hilo: el proceso o el núcleo del sistema operativo.
  • Herencia: los parámetros de calendarización son heredados o definidos localmente.
  • Política de calendarización: se define que proceso se va a ejecutar y en qué instante.
  • Prioridad: un valor de prioridad alto corresponde a una mayor prioridad.
3.3.2. Creación de hilos.

En Java, existen dos mecanismo que nos permiten la creación de hilos:
  • Implementando la interfaz Runnable
  • Extendiendo la clase Thread, es decir, creando una subclase de ésta.
En cualquiera de los dos casos, se debe definir un método run que será el que incluya las instrucciones que se ejecutarán en el thread (hilo) y se pueden definir prioridades aunque no se puede confiar en que la máquina virtual escoja para ejecutar, siempre, el de mayor prioridad, por lo que no se pueden utilizar para basar en ellas el scheduler de un sistema en tiempo real.

La clase Thread.

class Repeticion extends Thread {
private int repeticiones;
private String mensaje;
Repeticion (String msg, int n) {
mensaje = msg;
repeticiones = n;
}
public void run() {
for (int i= 1; i <= repeticiones; i++)
System.out.println (mensaje + " " +i);
}
public static vouid main (String args [ ] {
Repeticion r1 = new Repeticion ("Rojo", 5);
Repeticion r2 = new Repeticion ("Azul", 80);
r1.start();
r2.start();
}
}

Cuando creamos un hilo extendiendo la clase Thread, se pueden heredar los métodos y variables de la clase padre. Si es así, una misma subclase solamente puede extender o drivar una vez la clase padre Thread. Esta limitación de Java puede ser superada a través de la implementación de Runnable que es una interfaz.

La interfaz Runnable.

class Repeticion2 implements Runnable {
private int repeticiones;
private String mensaje;
Repeticion2 (String msg, int n) {
mensaje = msg;
repeticiones = n;
}
public void run ( ) {
for (int i=1; i<= repeticiones; i++;)
System.out.println(mensaje + " " + i);
}
public static void main (String args [ ]) {
Repeticion r1 = new Repeticion ("Rojo", 5);
Thread r2 = new Thread (new Repeticion2 ("Azul", 80))
r1.start ();
r2.start ();
}
}

3.3.3. Arranque de hilos.
Como se pudo apreciar en los ejemplos anteriores, el arranque de un hilo debe realizarse dentro del método principal de Java, que como todos sabemos, es el método main. Y lo arrancamos llamando al método start.

r1.start ( );

start, es el método oculto en el hilo cuya función es llamar al método run.

3.3.4. Manipulación de hilos.

Una vez que realizamos la creación de un hilo, éste debe contener una traza de ejecución válida, la cual controlaremos en el método run del objeto.

El cuerpo de ésta función (las acciones del hilo), vienen a ser el cuerpo del programa. Es como referirnos a la rutina main pero a nivel del hilo. Es decir, todas las acciones que nos interesa que nuestro hilo realice, deben estar especificadas en el método run. Al terminar de ejecutarse el método run, también terminará la ejecución de nuestros hilos.

Por lo anterior, la manipulación de nuestro hilos, se realiza dentro del método run.

Suspensión de hilos.
También podemos realizar la suspensión de un hilo, es decir, detenerlo o desactivarlo por un intervalo de tiempo indeterminado, para ésto utilizamos la función suspend.

Este método no detiene la ejecución en forma permanente. El hilo es suspendido indefinidamente y para volver a activarlo nuevamente es necesario realizar una invocación a la función resume.

Es importante mencionar, que también existe la función sleep, pero en ésta se especifica el tiempo en milisegundos en el que el hilo permanecerá "dormido" y al término de éste tiempo el hilo continua ejecutándose.

 Parada de hilos.

El método que debemos utilizar para detener la ejecución de nuestro hilo, es stop, el cual detendrá la ejecución en forma permanente.

t1.stop();

Este método no destruye el hilo, simplemente detiene su ejecución y ésta no puede ser reanudada con el método start.

Su utilidad tiene sentido, sobre todo, en aplicaciones complejas que necesiten un control sobre cada uno de los hilos que se ejecuten.

 Sincronización de hilos.
La necesidad de la sincronización de hilos, tiene lugar cuando varios hilos intentan acceder al mismo recurso o dato. Es decir, los hilos necesitan establecer cierto orden, a la hora de acceder a datos comunes. Para asegurarse de que los hilos concurrentes no se estorban y operan correctamente con datos o recursos compartidos, un sistema estable previene la inacición y el punto muerto o interbloqueo. La inanición tiene lugar cuando uno o más hilos están bloqueados al intentar conseguir el acceso a un recurso compartido de ocurrencias limitadas. El interbloqueo es la última fase de la inanición; ocurre cuando uno omás hilos están esperando una condición que no puede ser satisfecha. Esto ocurre muy frecuentemente cuando dos o más hilos están esperando a que el otro u otros desbloqueen algún dato u objeto común.

  

miércoles, 28 de marzo de 2012

JAVA BEANS COMPONENTS

QUE ES UN JAVA BEAN COMPONENT

Un JavaBean o bean es un componente hecho en software que se puede reutilizar y que puede ser manipulado visualmente por una herramienta de programación en lenguaje Java.
Para ello, se define un interfaz para el momento del diseño (design time) que permite a la herramienta de programación o IDE, interrogar (query) al componente y conocer las propiedades (properties) que define y los tipos de sucesos (events) que puede generar en respuesta a diversas acciones.
Aunque los beans individuales pueden variar ampliamente en funcionalidad desde los más simples a los más complejos, todos ellos comparten las siguientes características:
  • Introspection: Permite analizar a la herramienta de programación o IDE como trabaja el bean
  • Customization: El programador puede alterar la apariencia y la conducta del bean.
  • Events: Informa al IDE de los sucesos que puede generar en respuesta a las acciones del usuario o del sistema, y también los sucesos que puede manejar.
  • Properties: Permite cambiar los valores de las propiedades del bean para personalizarlo (customization).
  • Persistence: Se puede guardar el estado de los beans que han sido personalizados por el programador, cambiando los valores de sus propiedades.
En general, un bean es una clase que obedece ciertas reglas:
  • Un bean tiene que tener un constructor por defecto (sin argumentos)
  • Un bean tiene que tener persistencia, es decir, implementar el interface Serializable.
  • Un bean tiene que tener introspección (instrospection). Los IDE reconocen ciertas pautas de diseño, nombres de las funciones miembros o métodos y definiciones de las clases, que permiten a la herramienta de programación mirar dentro del bean y conocer sus propiedades y su conducta.
Una propiedad es un atributo del JavaBean que afecta a su apariencia o a su conducta. Por ejemplo, un botón puede tener las siguintes propiedades: el tamaño, la posición, el título, el color de fondo, el color del texto, si está o no habilitado, etc.
Las propiedades de un bean pueden examinarse y modificarse mediante métodos o funciones miembro, que acceden a dicha propiedad, y pueden ser de dos tipos:
  • getter method: lee el valor de la propiedad
  • setter method: cambia el valor de la propiedad

ACONTINUACION LES PRESENTARÈ LOS PASOS PARA INSTALAR UN JAVA BEAN:

  • Primero tenemos que  encontrar nuestro proyecto en el que vamos a insertar el java bean.
  • despues nos dirigimos hacia la paleta del proyecto, despues precionamos el boton derecho del raton y nos aparesera una ventana la cual presionaremos la opcion admnistrador de paleta.
  • acontinuacion nos aparesera otro cuadro de texto y presionaremos la opcion añadir archivo jar.
  • .Despues nos dirigimos a la parte donde tengamos guardado la  carpeta del archivo.
  • precionamos la opcion del carpeta que sea la correcta.

  • la damos doble click para pasar a la siguente carpeta.




  • otra vez doble click hasta encontrar la carpeta deseada.



  • seguimos dandole doble click


  • por ultimo nos dirigimos a la extencion de la carpata y la seleccionamos.


  • al  abrir esta  carpeta nos desplegara barios de nuestros beans que encotramos y seleccionamos el bean que bamos a instalar y le damos finalizar.



  • acontinuacion le damos en beans personalizados y precionanos siguiente.



  • y listo nuestro bean esta instalado correctamente en nuestra paleta y listo para ser arrastrado a nuestro proyecto.



martes, 7 de febrero de 2012

Eventos En Java

Manejo de Eventos – JTextField JPasswordField [JAVA]

Manejo de eventos en Java
 Las GUI están controladas por eventos, alguno de estos eventos son, mover el Mouse, seleccionar o escribir en un campo de texto, hacer click  en un botón, ya sea en la pantalla o en el Mouse etc..
Cuando ocurre una interaccion con el usuario, se envia un mensaje al programa. La informacion de los eventos de la GUI se almacena en un objeto de la clase que extiende a AWTEvent.
 Los Tipos de eventos del paquete java.awt.event se utilizan con componentes de AWT y de Swing. Los tipos de eventos adicionales, especificos para SPNG, se declaran en el paquete javax.swing.event.
 El mecanismo de eventos consta de tres partes:
  • El origen del evento
  • El objeto del evento
  • El componente de escucha del evento
 Origen del evento:Es el componente de la GUI especifico con el cual interactua el usuario.
Objeto del evento:Es el encargado de encapsular la informacion acerca del  evento que ocurrio. Esta informacion incluye una referencia al origen del evento  y cualquier informacion especifica del evento que pueda ser requerida por el objeto escucha.
Objeto escucha:Es un objeto que recibe la notificación del origen del evento cuando este ocurre;en efecto “escucha” a la espera de un evento y se ejecuta en respuesta a ese evento.
 El programador debe realizar dos tareas clave para procesar un evento de interfaz grafica de usuario en un programa. 
  1. Primero debe registrar un componente de escucha del evento para el componente de la GUI que se espera que genere ese evento.
  2. Segundo: debe implementar un manejador para ese evento
 Básicamente un componente de escucha para un evento GUI es un objeto de una clase que implementa a una o mas de las “interfaces de componentes” de escucha de eventos de los paquetes java.awt.event y javax.swing.event.
     Cada interfaz de escucha de eventos especifica uno o mas métodos manejadores de eventos que deben declararse en la clase que lo implemente (que implemente dicha interfaz) esto es porque la interfaz al ser abstracta y como toda clase abstracta debe implementar todos sus métodos.
     En el momento que ocurre un evento, el componente de la GUI con el que el usuario interactuó notifica a sus componentes de escucha registrados, llamando al método manejador de eventos apropiado de cada componente de escucha
A continuación se muestra un breve ejemplo usando JTexField y JPasswordField en donde manipulamos campos de texto.
Estas son algunas imagenes de la aplicacion

EventoJTextField - Campo1
EventoJTextField - Campo2
EventoJTextField - Campo3
EventoJTextField - Campo4