jueves, 11 de noviembre de 2010

HILOS EN JAVA

HILOS EN JAVA

Un hilo es un único flujo de ejecución dentro de un proceso. Pero será mejor comenzar desde el principio y explicar qué es un proceso.

Un hilo es una secuencia de código en ejecución dentro del contexto de un proceso. Los hilos no pueden ejecutarse ellos solos; requieren la supervisión de un proceso padre para correr.
Dentro de cada proceso hay varios hilos ejecutándose. Por ejemplo, Word puede tener un hilo en background chequeando automáticamente la gramática de lo que estoy escribiendo, mientras otro hilo puede estar salvando automáticamente los cambios del documento en el que estoy trabajando. Como Word, cada aplicación (proceso) puede correr varios hilos los cuales están realizando diferentes tareas. Esto significa que los hilos están siempre asociados con un proceso en particular
.
Los hilos a menudo son conocidos o llamados procesos ligeros. Un hilo, en efecto, es muy similar a un proceso pero con la diferencia de que un hilo siempre corre dentro del contexto de otro programa. Por el contrario, 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. La siguiente figura muestra le relación entre hilos y procesos.

 
CICLO DE VIDA DE UN HILO




CICLO DE VIDA DE UN THREADS
• Quantum es la cuota de tiempo en que un Thread está en la CPU. Los Threads se intercambian entre sí mediante un algoritmo circular ("round-robin")
• La operación de dispatch consiste en seleccionar un proceso para que sea él el que entre en ejecución.
• suspend y resume son metodos de Thread.
• Cuando se realiza una petición de operación de I/O el Thread queda bloqueado hasta que termine la operación.
• El mecanismo de wait, notify y notifyAll se utiliza para coordinar el sincronismo cuando varios Threads intentan acceder simultáneamente a un recurso (objeto) común.
• El thread en ejecución incluso el correspondiente al programa principal (main) se puede obtener con el método estático currentThread() de la clase Thread.
• Con ello se podría detener la ejecución del hilo un tiempo determinado:
...
Thread.currentThread().sleep(2000); // el programa se detiene durante 2 segundos
...


Clases Relacionadas con los Hilos
El lenguaje de programación Java proporciona soporte para hilos a través de una simple interfaz
y un conjunto de clases. La interfaz de Java y las clases que incluyen funcionalidades sobre hilos son las siguientes:
• Thread
• Runnable
• ThreadDeath
• ThreadGroup
• Object
Todas estas clases son parte del paquete Java.lang.


Thread
La clase Thread es la clase responsable de producir hilos funcionales para otras clases. Para
añadir la funcionalidad de hilo a una clase simplemente se deriva la clase de Thread y se ignora el método run. Es en este método run donde el procesamiento de un hilo toma lugar, y a menudo se refieren a él como el cuerpo del hilo. La clase Thread también define los métodos start y stop, los cuales te permiten comenzar y parar la ejecución del hilo, además de un gran número de métodos útiles.

Runnable(CLASE INTERFAZ)
Java no soporta herencia múltiple de forma directa, es decir, no se puede derivar una clase de varias clases padre. Esto nos plantea la duda sobre cómo podemos añadir la funcionalidad de
Hilo a una clase que deriva de otra clase, siendo ésta distinta de Thread. Para lograr esto se utiliza la interfaz Runnable. La interfaz Runnable proporciona la capacidad de añadir la funcionalidad de un hilo a una clase simplemente implementando la interfaz, en lugar de derivándola de la clase Thread.

Las clases que implementan la interfaz Runnable proporcionan un método run que es ejecutado por un objeto hilo asociado que es creado aparte. Esta es una herramienta muy útil y a menudo es la única salida que tenemos para incorporar multihilo dentro de las clases. Esta cuestión será tratada más ampliamente en el apartado de Creación de hilos.

ThreadDeath
La clase de error ThreadDeath proporciona un mecanismo que permite hacer limpieza después de que un hilo haya sido finalizado de forma asíncrona. Se llama a ThreadDeath una clase error porque deriva de la clase Error, la cual proporciona medios para manejar y notificar errores. Cuando el método stop de un hilo es invocado, una instancia de  ThreadDeath es lanzada por el moribundo hilo como un error. Sólo se debe recoger el objeto ThreadDeath si se necesita para realiza una limpieza específica a la terminación asíncrona , lo cual es una situación bastante inusual. Si se recoge el objeto, debe ser relanzado para que el hilo realmente muera.


ThreadGroup
La clase ThreadGroup se utiliza para manejar un grupo de hilos de modo conjunto. Esto nos proporciona un medio para controlar de modo eficiente la ejecución de una serie de hilos. Por ejemplo la clase ThreadGroup nos proporciona métodos stop, suspend y resume para controlar la ejecución de todos los hilos pertenecientes al grupo. Los grupos de hilos también pueden contener otros grupos de hilos permitiendo una jerarquía anidada de hilos. Los hilos individuales tienen acceso al grupo pero no al padre del grupo.


Object
Aunque, estrictamente hablando, no es una clase de apoyo a los hilos, la clase objeto proporciona unos cuantos métodos cruciales dentro de la arquitectura multihilo de Java. Estos métodos son wait, notify y notifyAll. El método wait hace que el hilo de ejecución espere en estado dormido hasta que se le notifique que continúe. Del mismo modo, el método notify informa a un hilo en espera de que continúe con su ejecución. El método notifyAll es similar a notify excepto que se aplica a todos los hilos en espera. Estos tres métodos solo pueden ser llamados desde un método o bloque sincronizado (o bloque de sincronización).

Normalmente estos métodos se utilizan cuando hay ejecución multihilo, es decir, cuando un
método espera a que otro método termine de hacer algo antes de poder continuar. El primer hilo espera hasta que otro hilo le notifique que puede continuar. La clase objeto está en la parte superior de la jerarquía de Java, lo cual significa que es el padre de todas las clases. En otras palabras, cada clase Java hereda la funcionalidad proporcionada por la clase objeto, incluyendo los métodos wait, notify y notifyAll.


Lo más habitual es crear hilos implementando la interfaz Runnable, dado que las interfaces representan una forma de encapsulamiento del trabajo que una clase debe realizar.
Así, se utilizan para el diseño de requisitos comunes a todas las clases que se tiene previsto implementar. La interfaz define el trabajo, la funcionalidad que debe cubrirse, mientras que la clase o clases que implementan la interfaz realizan dicho trabajo (cumplen esa funcionalidad).
Todas las clases o grupos de clases que implementen una cierta interfaz deberán seguir las mismas reglas de funcionamiento.

El otro mecanismo de creación de hilos, como ya hemos dicho, consistiría en la creación previa de una subclase de la clase Thread, la cual podríamos instanciar después.

Por ejemplo,

Class MiThread extends Thread {
Public void run() {
. . .
}
}
se corresponde con la declaración de un clase, MiThread, que extiende la clase Thread, sobrecargando el método Thread.run heredado con su propia implementación.
Es en el método run donde se implementa el código correspondiente a la acción (la tarea)
que el hilo debe desarrollar . El método run no es invocado directa o explícitamente (a menos
que no quieras que se ejecute dentro de su propio hilo). En lugar de esto, los hilos se arrancan
con el método start, se suspenden con el método suspend, se reanudan con el método
resume, y se detienen con el método stop (el cual supone también la muerte del hilo y la
correspondiente excepción ThreadDeath), como ya explicaremos en el apartado de Estado y
Control de Hilos. Un hilo suspendido puede reanudarse en la instrucción del método run en la que fue suspendido.

En el caso de crear 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 derivar una vez de la clase padre Thread. Esta limitación de Java puede ser superada a través de la implementación de Runnable. Veamos el siguiente ejemplo:

Public class MiThread implements Runnable {
Thread t;
Public void run () {
// Ejecución del thread una vez creado
}
}
En este caso necesitamos crear una instancia de Thread antes de que el sistema pueda ejecutar el proceso como un hilo. Además, el método abstracto run que está definido en la interfaz Runnable tiene que implementarse en la nueva clase creada.



DIFERENCIAS EN LOS MÉTODOS DE LA CREACIÓN DE HILOS

La diferencia entre ambos métodos de creación de hilos en Java radica en la flexibilidad con que cuenta el programador, que es mayor en el caso de la utilización de la interfaz Runnable.
Sobre la base del ejemplo anterior, se podría extender la clase MiThread a continuación, si fuese necesario. La mayoría de las clases creadas que necesiten ejecutarse como un hilo implementarán la interfaz Runnable, ya que así queda cubierta la posibilidad de que sean extendidas por otras clases.

Métodos en Hilos


Put ()
Get ()
Run ()
Start ()
Yield ()
Wait ()
Sleep ()
Synchronized ()
stop()
resume()
notifyAll()
notify()
isAlive() : Para saber si el thread esta vivo.

viernes, 27 de agosto de 2010

Pantallazos de los ejercicios

 
PROGRAMA SERIE FABUNACCI
Paquete presentacion
paquete logica 






PROGRAMA primo relativo
Paquete presentacion
paquete logica



PROGRAMA CALCULADORA
Paquete presentacion
paquete logica 


PROGRAMA PARES ORDENADOS
Paquete presentacion
paquete logica 

Programas de Java

PROGRAMAS REALIZADOS HASTA EL 26/08/2007 EN JAVA.
  1. calculadora en java
  2. primos relativos en java
  3. serie fibonaccci
  4. serie de numeros pares ordenado
  1. http://www.megaupload.com/?d=6AVFGHWQ
  2. http://www.megaupload.com/?d=VUCSF8FR
  3. http://www.megaupload.com/?d=7MTMEF4P
  4. http://www.megaupload.com/?d=W6UEY5PO

lunes, 23 de agosto de 2010

Los Applets



LOS APPLETS

Los applets son programas Java que respetando una estructura particular permitirán ser insertados en un documento HTML (Pagina Web) y ejecutados por la JVM del navegador. Los applets están sometidos a ciertas restricciones, como la imposibilidad de acceder al disco duro del usuario, de leer informaciones de un sistema, de comunicarse con otro servidor que no sea desde el que se han cargado los applets (el servidor que contiene los applets), o de mostrar ventanas, salvo si estás muestran un mensaje de advertencia.
Los applets son muy útiles para mostrar informaciones mediante una forma imposible de obtener a través del lenguaje HTML, o para comunicarse con el servidor del que provienen, por ejemplo para reenviar los datos de un formulario. Los applets pueden servir para tratar de forma local informaciones delicadas para el usuario.
El navegador Web o la aplicación appletviewer carga un objeto llamado SecurityManager, cuyo papel es el de controlar las operaciones efectuadas por los applets.
Los applets poseen tamaños pequeños, pudiéndose compaginar con una gran riqueza de recursos. Esto es así porque se apoyan en el navegador en el que se encuentran para su ejecución. La ejecución es , en general, rápida y ágil. No obstante, no hemos de olvidar que se ejecuta un programa. Habremos de tener en cuenta la cantidad de memoria requerida y los recursos del sistema disponibles.

Las tareas más significativas que puede realizar un applet son:
·         La reproducción de música, sonidos y animaciones graficas.
·         Permite establecer comunicaciones con el servidor de donde proceden para realizar descargas diversas.
·         Creación de una interfaz grafica en formatos estándares en entornos de ventanas; entornos que suelen relacionarse con la apariencia de los sistemas Windows de Microsoft, y en los que existen, entre otros, por ejemplo, barras de desplazamiento y menús desplegables o emergentes.
·         La demanda de datos al usuario para su proceso, dotándole de alta iteración gracias a una completa gestión de eventos. Un evento consiste, por ejemplo, en la pulsación de una tecla, en el movimiento del ratón, o en el paso del mismo por alguna determinada zona, imagen o hito.

ESTRUCTURA DE UN APPLET

El funcionamiento de los applets viene determinado por un conjunto de actividades que están determinadas por varios eventos durante su ciclo de vida.  La clase Java proporciona una serie de métodos que son llamados por el navegador cada vez que se produce uno de dichos eventos. La clase applet define estos métodos básicos para la ejecución de un applet:
·         Init (): Es el método utilizado para la iniciación del applet. Cuando se ejecuta por primera vez es llamado por el navegador. En este método se inicializan las variables. Este método se ejecuta una vez durante el ciclo de vida del applet.

·         Stert (): Es el siguiente paso en la ejecución de un applet. A diferencia de init (), el método start() se ejecuta cada vez que se muestra en pantalla el documento Web que contiene el applet. En este método se suelen crear subprocesos.

·         Stop (): Es utilizado cada vez que el documento Web que contiene el applet pasa a segundo plano. Dentro de este método se suelen dar instrucciones para detener los subprocesos creados en el método init ().


·         Destroy (): Determina el final del ciclo de vida de un Apple. Con este método se eliminan los recursos de memoria utilizados por el applet, antes de ser liberado. Suele ir precedido del método stop ().

·         String getParameter (String nombre): Este método se utiliza para recuperar parámetros que especifican en la página Web en la que se ubica el applet.

·         Paint (): El método paint pertenece a Java.awt*, y es utilizado para dibujar y pintar en la pantalla. Cualquier cosa que queramos dibujar en un  applet debe ser sobrescrito en este método.

Los applets tienen las siguientes características:
  •   Tamaño pequeño, esto es debido a que se requiere su descarga a través de la red, aunque existen applets d gran tamaño. 
  •   Uso de interfaces gráficos, utiliza las clases AWT y Swing, las cuales dotan al interface del applet de una gran versatilidad y operabilidad para el usuario.

[Saney, NICOLAS. Su Primer Programa Java.] [Lázaro Laporta, JORGE. Miralles Aguiñiga, MARCEL. Fundamentos de telemática.]

lunes, 9 de agosto de 2010

Conceptos


CONCEPTOS 

1.    P.O.O.  Es un método de implementación en el que los programas se organizan como colecciones cooperativas de objetos, cada uno de los cuales representa una instancia de alguna clase, y cuyas clases son todos miembros de una jerarquía de clases unidas mediante relaciones de herencia. Todos los lenguajes de P.O.O. comparten tres características: Polimorfismo, encapsulamiento y herencia.
      [JOYANES AGUILAR, Luis. Programación Orientada a Objetos. 2 ed. Editorial: Mc graw Hill.]


2.    Paradigma: La P.O.O. se suele conocer como un nuevo paradigma de la programación, en el libro de: the Structure of Scientific Revolutions, el historiador Thomas Kuhn, describía un paradigma como un conjunto de teorías estándar y métodos que juntos representan un medio de organización del conocimiento  La orientación a objetos fuerza a reconsiderar nuestro pensamiento sobre la computación sobre lo que significa realizar computación y sobre cómo se estructura la información dentro de la computadora. 
     [JOYANES AGUILAR, Luis. Programación Orientada a Objetos. 2 ed. Editorial: Mc graw Hill.]

3.    Clase: Una clase es la descripción de un conjunto de objetos, consta de métodos y datos que resumen características comunes de un conjunto de objetos. Se pueden definir muchos objetos de la misma clase, es decir, una clase es la declaración de un tipo de objeto.
Ejemplo: Madona, Michael Jackson y Prince son objetos de una clase cantantes de Rock. [JOYANES AGUILAR, Luis. Programación Orientada a Objetos. 2 ed. Editorial: Mc graw Hill.]

4.    Objeto: Los objetos son las entidades básicas en tiempo de ejecución en un sistema orientado a objetos. Puede representar una persona, un lugar, una tabla de datos o cualquier elemento que el programa tenga que manipular; también datos definidos por el usuario como vectores, tiempo y listas. Los objetos ocupan un lugar en la memoria y tienen una dirección asociada.  
     [JOYANES AGUILAR, Luis. Programación Orientada a Objetos. 2 ed. Editorial: Mc graw Hill.]

5.    Atributo: Un atributo es una propiedad o característica de una clase y describe y rango de valores que la propiedad podrá contener en los objetos (instancias) de la clase. 
     [JOYANES AGUILAR, Luis. Programación Orientada a Objetos. 2 ed. Editorial: Mc graw Hill.]

6.    Método: Para que una clase de u objeto procese el mensaje debe estar de acuerdo a esa finalidad, no se puede enviar un mensaje a cualquier clase u objeto. Para que el mensaje sea enviado y comprendido y una clase u objeto procese el mensaje que recibe debe poseer un método que coincida con el mensaje, es decir, una secuencia de instrucciones. Un método para una clase es denominado método de clase, un método definido por un objeto es denominado método de instancia. 
     [JOYANES AGUILAR, Luis. Programación Orientada a Objetos. 2 ed. Editorial: Mc graw Hill.]

7.    Encapsulamiento: La encapsulación o el encapsulamiento es la propiedad que permite asegurar que el contenido de la información de un objeto esta oculta al mundo exterior: el objeto A no conoce lo que hace el objeto B, y viceversa.  
      [JOYANES AGUILAR, Luis. Programación Orientada a Objetos. 2 ed. Editorial: Mc graw Hill.]

8.    Polimorfismo: Es la propiedad que indica, literalmente, la posibilidad de que una entidad tome muchas formas. En términos prácticos, el polimorfismo permite referirse a objetos de clases diferente mediante el mismo elemento de programa y realizar la misma operación de diferentes formas, según sea el objeto que se referencia en ese momento. Por ejemplo, cuando se describe la clase mamífero, se puede observar que la operación comer es una operación fundamental en la vida de los mamíferos, de modo que cada mamífero debe poder realizar la operación o función comer. 
      [JOYANES AGUILAR, Luis. Programación Orientada a Objetos. 2 ed. Editorial: Mc graw Hill.]

9.    Herencia: Es la propiedad que permita a los objetos ser construidos a partir de otros objetos. El objetivo final es la reutilización o reutilizabilidad, es decir, reutilizar el código anteriormente ya desarrollado. La herencia supone una clase case y una jerarquía de clases que contienen las clases derivadas de la clase base. Las clases derivadas pueden heredar el código y los datos de su clase base, añadiendo su propio código especial y datos a ellas, incluso cambiar aquellos elementos de la clase base que necesita sean diferentes. Existe la herencia simple, la herencia múltiple y la herencia virtual. 
      [JOYANES AGUILAR, Luis. Programación Orientada a Objetos. 2 ed. Editorial: Mc graw Hill.]

10.  Paso de mensaje: Los objetos se comunican entre sí a través del uso de mensajes. El interfaz del mensaje se define un interfaz claro entre el objeto y el resto de su entorno. Esencialmente, el protocolo de un mensaje implica dos partes: el emisor y el receptor. Cuando un objeto emisor envía un mensaje a un objeto receptor, tiene que especificar lo siguiente: un receptor, un nombre de mensaje, argumentos y parámetros (si se necesita).       En primer lugar, un objeto receptor que ha de recibir el mensaje que se ha especificado. Los objetos no especificados por el emisor no responderán. El receptor trata de concordar el nombre del mensaje con los mensajes que él entiende. Si el mensaje no se entiende, el objeto receptor no se activara.  Si el mensaje se entiende por el objeto receptor, el receptor aceptara y responderá al mensaje invocando el método asociado.
     [JOYANES AGUILAR, Luis. Programación Orientada a Objetos. 2 ed. Editorial: Mc graw Hill.]

11.  Tipo de dato: Un tipo de dato proporciona una descripción de sus instancias que indican al compilador cosas como cuanta memoria se debe asignar para una instancia, como interpretar los datos en memoria y que operaciones son permisibles para esos datos.  Cada lenguaje de programación incorpora una colección de tipos de datos fundamentales, que incluyen normalmente enteros, reales, carácter, etc. 
     [JOYANES AGUILAR, Luis. Programación Orientada a Objetos. 2 ed. Editorial: Mc graw Hill.]


12.  Acoplamiento: Describe la interconectividad de las clases. Nos esforzamos por lograr un acoplamiento débil del sistema, es decir, en el que cada clase es altamente independiente y se comunica con otras clases mediante una pequeña interfaz bien definida.  El grado de acoplamiento determina el grado de dificultad de realizar modificaciones en una aplicación. [BARNES, David – KOLLING, Michael. Programación Orientada a Objetos con Java. 3 ed.]

13.  Cohesión: Este término describe cuanto se ajusta una unidad de código a una tarea lógica o a una entidad. En un sistema altamente cohesivo cada unidad de código (método, clase o modulo) es responsable de una tares bien definida o de una entidad. Un diseño de clases de buena calidad exige un alto grado de cohesión. La cohesión es relevante para unidades formadas por una sola clase y para métodos individuales. 
      [BARNES, David – KOLLING, Michael. Programación Orientada a Objetos con Java. 3 ed.]

14.  U.M.L: El  U.M.L. (El Lenguaje Unificado de Modelado) es ante todo un lenguaje, un lenguaje de modelado, como su nombre lo indica. Este lenguaje nos indica cómo crear y leer los modelos, pero no dice cómo crearlos.               El  U.M.L  es un conjunto de notaciones y diagramas estándar  para modelar sistemas orientados a objetos, y describe la semántica esencial de lo que estos símbolos y diagramas significan.  El lenguaje unificado de modelado ejecuta cuatro funciones: 1) Visualizar, 2). Especificar, 3) Construir y 4). Documentar.
       [HALL, Prentice. Aprendiendo Uml en 24 Horas.]

15.  Lenguajes de programación: Los lenguajes de programación son  como idiomas que constituyen el sistema de comunicación entre el hombre y el ordenador, mediante el cual se transmiten a este las instrucciones e información en un formato comprensible para la maquina. Los lenguajes de programación que se aproximan al código maquina (ceros y unos) se denominan de bajo nivel, mientras que los que se parecen al de los usuarios (lenguaje natural o humano, normalmente en ingles) se denominan de alto nivel. 
      [RODRIGUEZ SALA, Jesús Javier. Introducción a la programación: Teoría y Práctica.]

16.  Archivo Fuente: Consiste en la secuencia de caracteres que componen el programa. [GARRIDO, Antonio. Fundamentos de programación en C++.]

17.  Recolector de basura: El recolector de basura ayuda a recuperar memoria ocupada por objetos que no se están utilizando. El recolector de basura se ejecuta síncronamente cuando el sistema funciona fuera de memoria o en respuesta a una petición de un programa Java. El recolector de basura es llamado de manera explícita:                                                            system.gc ( ) // sugiere llamar al recolector de basura.
            [GARRIDO, Antonio. Fundamentos de programación en C++.]

18.  Maquina Virtual: Una maquina virtual de Java (JVM) es un programa encargando de interpretar código intermedio  de los programas Java. La JVM proporciona al programa Java independencia de la plataforma son respecto al hardware y al sistema operativo. Las implementaciones tradicionales de JVM son, en general, muy pesadas en cuanto a memoria ocupada y requerimientos computacionales. 
      [ GALVEZ , Sergio. Java a tope.]

19.  El principio de abierto-cerrado: Da la potencia a la programación orientada a objetos. Software abierto a ser extensible, y cerrado a ser modificado. Esa mentalidad de desarrollar el software de manera que sea extensible sin modificarlo, se consigue utilizando la herencia, el polimorfismo, la modularidad, el encapsulamiento, abstracción, es decir, la características fundamentales de la POO.       
            [GARRIDO, Antonio. Fundamentos de programación en C++.]
 
   20.  J.D.K o (Java Development Kit): Es decir Kit de desarrollo de Java. Se puede definir como un conjunto de herramientas, utilidades, documentación y ejemplos para desarrollar aplicaciones Java.              [BARNES, David – KOLLING, Michael. Programación Orientada a Objetos con Java. 3 ed.]