jueves, 11 de noviembre de 2010

TALLER HILOS

DIFINICION:
Es un mecanismo mediante el cual podemos ejecutar tareas secundarias dentro de una aplicación sin interferir con las tareas principales.


Desde el punto de vista de las aplicaciones los hilos son útiles porque permiten que el flujo del programa sea divido en dos o más partes, cada una ocupándose de alguna tarea de forma independiente. Por ejemplo un hilo puede encargarse de la comunicación con el usuario, mientras que otros actúan en segundo plano, realizando la transmisión de un fichero, accediendo a recursos del sistema (cargar sonidos, leer ficheros...), etc. De hecho, todos los programas con interface gráfico (AWT o Swing) son multihilo porque los eventos y las rutinas de dibujado de las ventanas corren en un hilo distinto al principal.


CICLO DE VIDA DE UN HILO

Un hilo puede presentar cuatro estados distintos:
Nuevo (New): El thread ha sido creado, pero no se ha ejecutado todavía el método start(), por lo que todavía no se ha lanzado.

Ejecutable (Runnable): El thread se está ejecutándose, pero esto no quiere decir que se esté ejecutándose en todo momento, pues ese thread tiene que repartirse el tiempo de CPU con los demás threads que sean también Runnable.

Muerto (Dead): Cuando el thread ya acabó con su función, es decir el método run() ha finalizado, o cuando el programa principal termina, u otro caso, como un error que provoque el paro total del thread.

Bloqueado (Blocked o Not Runnable): El thread podría estar ejecutándose, pero hay algo que se lo impide, como por ejemplo una operación de E/S. Mientras un thread esté en este estado, no se le asigna tiempo de CPU. También cuando se llama a los métodos sleep(long) y wait([long]).


SINTAXIS PARA LA CREACION DE UN HILO

Crear un hilo en java es una tarea muy sencilla. Basta heredar de la clase Thread y definir el método run(). Luego se instancia esta clase y se llama al método start() para que arranque el hilo. Más o menos esto


public MiHilo extends Thread

{

public void run()

{

// Aquí el código que queremos que se ejecute en un hilo separado



}

}

MiHilo elHilo = new MiHilo();



elHilo.start();

System.out.println("Creando hilos");


CLASES PARA CREAR HILOS

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.
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.

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.
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.

LA INTERFACE RUNNABLE

La interface Runnable proporciona un método alternativo a la utilización de la clase Thread, para los casos en los que no es posible hacer que la clase definida extienda la clase Thread. Esto ocurre cuando dicha clase, que se desea ejecutar en un hilo independiente deba extender alguna otra lase. Dado que no existe herencia múltiple, la citada clase no puede extender a la vez la clase Thread y otra más. En este caso, la clase debe implantar la interface Runnable.

viernes, 10 de septiembre de 2010

ENSAYO COFENCIA "CLUSTER"

V JORNADA DE COMPUTACION PARALELA.


 Cluster De Alto Rendimiento: Una Solución De Los Sistemas Distribuidos

“Un cluster de alto rendimiento es aquel conjunto de computadores que está diseñado para dar altas prestaciones en cuanto a capacidad de calculo

Los motivos para atizar el cluster de alto rendimiento son:

- Tamaño del problema a resolver.

- Precio de la maquina necesaria para resolverlo

Por medio de un cluster se puede conseguir capacidades de cálculo superiores a las de un ordenador más caro que el coste del conjunto de los ordenadores de un cluster.”

El pasado 7 de septiembre el Msc Miller Gomez en su conferencia nos recreo los beneficios que ofrecen los cluster de alto rendimiento y el papel importante q desempeñan en la solución de problemas de las ciencias y las ingenierías los cluster realizan un trabajo inteligente que permite optimizar algoritmos y técnicas de programación.

Donde podemos clasificarlos según sus características:

Cluster de alto rendimiento: son los cluster en los cuales se ejecutan tareas q requieren de de grandes cantidades de memoria, no ambos al a vez. Comprometiendo los recursos del cluster por largos periodos de tiempo.

Cluster de alta disponibilidad. Son cluster cuyo objetivo de diseño es el de proveer disponibilidad y confiabilidad, estos cluster tratan de brindar la máxima disponibilidad de los servicios que ofrecen la confiabilidad se provee mediante software q detecta fallos y permite recuperar se frente a los mismos, mientras que el hardware se evita tener un único punto de fallos.

Cluster de Alta eficiencia. Son cluster cuyo objetivo de diseño es el ejecutar la mayor cantidad de tareas en menor tiempo posible. Existe independencia de datos entre las tareas individuales. El retardo entre los nodos del cluster no es considerado un gran problema.

Los componentes de los cluster son.

Nodos

Software de base

Protocolos de comunicaciones y servicios (redes).

Middleware

Entorno de programación.

Bibliotecas herramientas de datos.
  1. ESCABILIDAD.
  • Vertical
  • Horizontal.
    2.Conexión.
           Procesamiento
  •  Distribuido.
  • Paralelo

Con esto nos damos cuenta que empleando los cluster podemos él mejorar el rendimiento de lo que es provisto por un solo computador.

Un cluster a la hora de construirlo puede tener la misma configuración de hardware y sistema operativo (cluster homogéneo). Diferente hardware y sistema operativo (cluster heterogéneo) estos hacen más fácil y económica su construcción permitiendo q hasta en nuestras mismas casa puedan ser empleados los cluster.

jueves, 26 de agosto de 2010

Programacion Applet

APPLETS:

Un applet es una pequeña aplicación accesible en un servidor Internet, que se transporta por la red, se instala automáticamente y se ejecuta como parte de un documento web (definición de Patrick Naughton).

Características de un applets:
1. Los applets no tienen un método main( ) con el que comience la ejecución.
2. Todos los applets derivan de la clase java.applet.Applet
3. Los applets deben redefinir ciertos métodos heredados de Applet que controlan su ejecución: init(), start(), stop(), destroy().
4. Los métodos gráficos se heredan de Component, mientras que la capacidad de añadir componentes de interfase de usuario de heredan de Container y de Panel.
5. También suelen redefinir ciertos métodos gráficos: los más importantes son paint(), update() y repaint().
6. Los applets disponen de métodos relacionados con la obtención de información, como por ejemplo: getAppletInfo(), getAppletContext(), getParameterInfo(), getParameter(),getCodeBase(), getDocumentBase() e isActive().



AWT.
El abstract window toolkit es una librería portable para aplicaciones y/o applets. Provee la conexión entre la aplicación y el sistema de ventanas nativo. Los componentes AWT dependen de sus contrapartes en código nativo (llamados peers) para manejar su funcionalidad, por lo que frecuentemente son llamados componentes “heavyweigth”.

Características de AWT

• Amplio conjunto de componentes para interfaz gráfica de usuario.
• Un modelo robusto para el manejo de eventos.
• Herramientas para manejo de gráficas e imágenes, incluyendo clases para forma, color y tipo de letra.
• Clases para transferencia de datos.
• Los componentes AWT son más rápidos porque usan peers nativos.
• La mayoria de los browsers soportan las clases AWT, así los applets pueden correr sin necesidad de un Java plugin.
• Los componentes AWT reflejan mejor la interfaz propia del sistema en el que están ejecutándose.

Swing

Esta implementado completamente en lenguaje Java. Los componentes swing no dependen de los peers
para su funcionalidad, por lo que a estos componentes frecuentemente se le llama componentes “lightweigth”.

Características de Swing.
•Tiene todas las características de AWT
•Un conjunto de componentes de mayor nivel.
•Diseño en Java, no depende de código nativo.
•El diseño en Java puro provee menores limitaciones de plataforma.
•El desarrollo de componentes Swing es más activo.
•Los componentes de swing soportan más características.


CLASES DE AWT

Clase Component
Es una clase abstract de la que derivan todas las clases del AWT. Los métodos de esta clase son importantes porque son heredados por todos los componentes del AWT. En las declaraciones de los métodos de dicha clase aparecen las clases Point, Dimension y Rectangle.

Clase EventObject y AWTEvent
La clase AWTEvent no define ningun método, pero hereda de EventObject el método getSource( ), que devulve una referencia al objeto que genero el evento.

Clase ComponentEvent
Se generan cuando un Component de cualquier tipo se muestra, se oculta o cambia de posición o de tamaño. Los eventos de mostrar u ocultar ocurren cuando se llama al método setVisible(boolean). Otro método útil es Component getComponent( ) que devuelve el componente que generó el evento. Se puede utilizan en lugar de getSource( ).

Clase InputEvent y MouseEvent
De la clase InputEvent descienden los eventos del ratón y el teclado. Esta clase dispone de métodos para detectar si los botones del ratón o las teclas especiales han sido pulsadas. Se produce MouseEvent cada vez que el cursor movido por el ratón esntra o sale de un componente visible en la pantalla, al clicar, o cuando se pulsa o se suelta un botón del ratón.

Clase FocusEvent
El Focus está relacionado con la posibilidad de sustituir al ratón por el teclado en ciertas operaciones. De los componentes que aparecen en pantalla, en un momento dado hay sólo uno que puede recibir las acciones del teclado y se dice que ese compoente tiene el Focus.

Clase Container
Es una clase muy general. Los métodos de esta clase son heredados por las clases Frame y Panel, los cuales son muy utilizados para crear objetos.

Clase Windows
Los objetos de ésta clase son ventanas de máximo nivel, pero sin bordes ni barras de menú. Las clases que derivan de ella son: Frame y Dialog.

Clase WindowEvent
Se produce cada vez que se abre, cierra, iconiza, restaura, activa o desactiva una ventana. El uso más frecuente de está clase es para cerrar ventanas (ctrl+alt+supr). También se utiliza para detener threads y liberar recursos al iconizar una ventana (por ejemplo animaciones) y comenzar de nuevo al restaurarla.

Clase Frame
Es una ventana con un borde y que puede tener una barra de menús. Si una ventana depende de otra, es mejor utilizar una Window que un Frame.

Clase Dialog
Es una ventana que depende de otra ventana (Frame). Si un Frame se cierra, se cierran también los Dialog que dependen de ella. Un Dialog modal requiere atención inmediata del usuario: no se puede hacer otra cosa hasta haber cerrado el Dialog.

Clase FileDialog
Muestra una ventan de diálogo en la cual se puede seleccionar un fichero. Las constantes enteras LOAD (abrir fichero para lectura) y SAVE (abrir fichero para escritura) definen el modo de apertura del fichero.

Clase Panel
Un Panel es el Container de propósito general. Se puede utilizar tal cual para contener otros componentes. Por default, el Layout Manager de Panel es FlowLayout. Los applets son sub-clase de Panel.

Clase Button
El evento más importante que recibe es que al clicar sobre él se genera un evento de la clase ActionEvent. Se puede cambiar el aspecto del botón y también se puede establecer si está activado o no.

Clase ActionEvent
Se producen al clicar con el ratón en un botón (Button), al elegir un comando de un menú (MenuItem), al hacer doble click en un elemento de una lista (List) y al pulsar intro para introducir un texto en una caja de texto (TextField).

Clase Canvas
Un Canvas es una zona rectangular de pantalla en la que se puede dibujar y en la que se pueden generar eventos. Las Canvas permiten realizar dibujos, mostrar imágenes y crear componentes a medida, de modo que se muestre un aspecto similar en todas las plataformas. Constructor: Canvas( ) Método de la clase: paint (Graphics g);

Component Checkbox y clase CheckboxGroup
Los objetos de la clase Checkbox son botones de opción o de selección con dos posibles valores: on y off. Al cambiar la selección en un Checkbox se produce un ItemEvent.

La clase CheckboxGroup permite la opción de agrupar varios Checkbox de modo que uno y solo uno este en on. Constructores: Checkbox( ), Checkbox(String), Checkbox(String, boolean), Checkbox(String,Boolean,CheckboxGroup), Checkbox(String,CheckboxGroup,Boolean).

Clase ItemEvent
Se produce cuando ciertos componentes (Checkbox, CheckboxMenuItem, Choice y List) cambian de estado (on/off).

Clase Choice
Permite elegir un elemento de la lista desplegable. Constructor Choice( ).

Clase Label
Introduce en un container un texto no seleccionable y no editable, por default se alinea a la izquierda. La clase Label define las constantesLabel.CENTER , Label.LEFT y Label.RIGHT para determinar la alineación del texto. Constructores: Label(String lbl) , Label(String lbl, int alineación).

Clase List
Viene definida por una zona de pantalla con varias líneas, de las que se muestran solo algunas, y entre las cuales se puede hacer una selección simple o múltiple. Constructores: List( ), List(int línea, boolena mult).

Clase Scrollbar
Un Scrollbar es una barra de desplazamiento con un cursor que permite introducir y modificar valores, entre unos valores mínimo y máximo, con pequeños y grandes incrementos. Esta clase tiene dos constantes, Scrollbar.HORIZONTAL y Scrollbar.VERTICAL, que indican la posición de la barra. Constructores: Scrollbar( ), Scrollbar(int pos), Scrollbar(int pos, int val, int vis, int min, int max) donde :

Pos es la posición de la barra vertical u horizontal; el rango es el intervalo entre los valores mínimo min., máximo máx y por ultimo, vis que es el tamaño de área visible.

Clase ScrollPane
Es una ventana de tamaño limitado en las que se pueden mostrar un componente de mayor tamaño con dos Scrollbar, uno vertical y otra horizontal. Constructores: ScrollPane(), ScrollPane(int scbs) .

Clases TextArea y TextField
Muestran texto seleccionable y editable. La diferencia principal es que TextField solo puede tener una línea, mientras que TextArea puede tener varias líneas.

Constructores de TextField: TextField(), TextField(int ncol), TextField(String s), TextField(String s, int ncol).

Constructores de TextArea: TextArea(), TextArea(int nfil, int ncol), TextArea(String text), TextArea(String text, int nfil, int ncol)

Clase Menu
Define las opciones que aparecen al seleccionar uno de los menús de la barra de menús. Constructores: Menu (String).

Clase MenuBar
A una MenuBar solo pueden añadirse objetos Menu. Constructor : MenuBar().

Clase MenuItem
Los objetos de esta clase representan las distintas opciones de un menú.

Clase CheckboxMenuItem
Son elementos de un menú que pueden estar activados o no. Constructores: CheckboxMenuItem(String lbl), CheckboxMenuItem(String lbl, boolean estado).

Menús pop-up  Son menús que aparecen en cualquier parte de la pantalla al clicar con el botón derecho del ratón. Constructores : PopupMenu( ), PopupMenu(String titulo).

 
Clase Label

La clase Label permite colocar un texto no seleccionable en un frame. Esta clase cuenta con métodos
que permiten cambiar el color, el fondo, la alineación y el tipo de letra del texto de la etiqueta.

Constructores
Label() Crea una etiqueta vacía
Label(String) Crea una etiqueta con el texto indicado por el
String. El texto esta justificado a la izquierda
Label(String, Alineacion) Crea una etiqueta con el texto indicado por el
objeto String. El texto esta justificado a la
izquierda (LEFT,RIGHT o CENTER)

Métodos
setText(String);  Establece el texto de la etiqueta.
setAlignment(int); Establece la alineación del texto
(LEFT,RIGHT o CENTER)
setBounds(int x,int y ,int ancho,int altura); Establece la posición y tamaño de la etiqueta.
pack() Ajusta el componente al tamaño indicado y
layouts de sus componentes.
setVisible(boolean); Aparece/Esconde el componente

Clase Button
La clase Button crea un botón con texto. Los objetos de esta clase, soportan cambio de color de fondo y
letra, pero no es posible agregarles imágenes.

Constructures
Button(); Crea un boton sin texto
Button(String); Crea un botos con el texto especificado

Métodos de la clase Button
setFont(Font); Establece el tipo Letra
setBackground(Color); Selecciona color del fondo
setForeground(Color); Cambia el color de la letra
setLabel(String) Cambia la etiqueta del botón.

Clase TextField
Los objetos de la clase TextField, proveen campos de texto seleccionable y permiten que el usuario edite
dicho texto. Al igual que los otros componentes tiene atributos para personalizar el texto.

Constructures
TextField() Construye un campo texto de 20 columnas de ancho.
TextField(columnas), Construye un campo texto con el tamaño indicado.
TextField(String), Construye un campo texto inicializado con la cadena indicada
TextField(String, int); Construye un campo texto. Lo inicializa con el texto y el número de texto indicado.

Métodos de la clase TextField
int getColumns() Devuelve el número de columnas del campo de texto.
setEchoChar(char) Establece el carácter que se verá al teclear en el campo.

Bibliografía:


INTRODUCCIÓN A LA PROGRAMACIÓN EN JAVA

Ing. Alma Leticia Palacios Guerrero
http://fcqi.tij.uabc.mx/docentes/palacios/java7.pdf
 
MANUAL DE JAVA
Patrick Naughton
editorial: Osborne / Mc Graw Hill

 1001 TIPS PARA PROGRAMACIÓN CON JAVA
Steven . W. Griffith
Marck C. Chan
Anthony F. Isai.
editorial: Mc Graw Hill

martes, 10 de agosto de 2010

Lenguaje de programacion

LENGUAJE DE PROGRAMACIÓN:

Los lenguajes de programación son herramientas que nos permiten crear programas y software. Entre ellos tenemos Delphi, Visual Basic, Pascal, Java, etc..
Una computadora funciona bajo control de un programa el cual debe estar almacenado en la unidad de memoria; tales como el disco duro.
Los lenguajes de programación de una computadora en particular se conoce como código de máquinas o lenguaje de máquinas.

JAVA:
Es un lenguaje de programación perfeccionado por Sun Microsystem q le proporciona animación e interacción al world wide web
Java es toda una tecnología orientada al desarrollo de software con el cual podemos realizar cualquier tipo de programa. Hoy en día, la tecnología Java ha cobrado mucha importancia en el ámbito de Internet gracias a su plataforma J2EE. Pero Java no se queda ahí, ya que en la industria para dispositivos móviles también hay una gran acogida para este lenguaje.
La tecnología Java está compuesta básicamente por 2 elementos: el lenguaje Java y su plataforma. Con plataforma nos referimos a la máquina virtual de Java (Java Virtual Machine).

JDK:
JDK es el acrónimo de "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.

MAQUINA VIRTUAL:
Una maquina virtual es aquella interface que mantiene una máquina mediante la cual nos comunicamos con los dispositivos hardware del ordenador. De esta forma nosotros trabajamos a un nivel superior eliminando la complejidad de dichos dispositivos. Así podemos mantener distintos Sistemas Operativos corriendo sobre una misma máquina.

TIPOS DE DATOS:


a.) Tipos de datos enteros Se usan para representar números enteros con signo. Hay cuatro tipos: byte, short, int y long.

Tipo          Tamaño
byte         1Byte (8 bits)
short        2 Bytes (16 bits)
int            4 Bytes (32 bits)
long         8 Bytes (64 bits)

b.) Tipos de datos en coma flotante Se usan para representar números con partes fraccionarias. Hay dos tipos de coma flotante: float y double. El primero reserva almacenamiento para un número de precisión simple de 4 bytes y el segundo lo hace para un numero de precisión doble de 8 bytes.


Tipo       Tamaño
float 4    Byte (32 bits)
double   8 Bytes (64 bits)

c.) Tipo de datos boolean Se usa para almacenar variables que presenten dos estados, que serán representados por los valores true y false. Representan valores bi-estado, provenientes del denominado álgebra de Boole.

d.) Tipo de datos carácter Se usa para almacenar caracteres Unicode simples. Debido a que el conjunto de caracteres Unicode se compone de valores de 16 bits, el tipo de datos char se almacena en un entero sin signo de 16 bits.

e.) arreglos.
Un array o arreglo es un conjunto de datos organizados en base a índices y valores, de tal manera que determinado índice dentro del array hace referencia a su valor, que puede ser también otro array. Puede ser usado de múltiples maneras.

lunes, 9 de agosto de 2010

Conceptos programación multinivel

POO:

“un método de implementaciones el q leo programas se organizan como colecciones cooperativas de objetos, cada uno de los cuales representa una instancia de una clase, y cuyas clases son todas miembros de una jerarquía de calces unidas mediante relaciones de herencia” GRANDY BOOCH

1 Utiliza objetos, no algoritmos, como bloques de construcción lógicos (jerarquía de objetos).
2. cada objeto es una instancia de una clase.
3. las clases se relacionan unas con otras por medio de relaciones de herencia.

OBJETO
Un objeto es sencillamente, un tipo abstracto de dato al q se añaden importantes innovaciones en compartición de código y reutilización

PASO DE MENSAJES:
El lenguaje es conveniente q soporte paso bidimensional de mensajes entre módulos, lo q implicara módulos débilmente acoplados y diseños flexibles. Esto significa q se deben poder pasar señales entre módulos, sin necesidad q pasar realmente ningún dato.

CLASE:
Una clase es una colección de información relacionada que incluye datos y funciones (las instrucciones por trabajar con esos datos, también conocidos como métodos).

ATRIBUTO:
Los atributos son datos específicos de una clase. En la definición de clase se indica cuales son los atributos y conque nombre se va a designar a cada uno de ellos. El que una declaración de atributo sea pública significa que el elemento definido pueda utilizarse libremente desde cualquier otro punto del programa.

METODO:
Un método consiste en la implementación en una clase de un protocolo de respuesta a los mensajes dirigidos a los objetos de la misma. La respuesta a tales mensajes puede incluir el envío por el método de mensajes al propio objeto y aun a otros, también como el cambio del estado interno del objeto.

POLIMORFISMO:
Un método virtual se utiliza cuando una clase base posee un método que debe tener un comportamiento diferente en clases derivadas. Siempre que una clase derivada no contenga la lógica deseada presente en la clase base, basta implementar una nueva lógica para la misma, a través de un método o función virtual.

La idea de métodos virtuales se basa en tener un nombre para cierta acción en una clase base, y usarlo de manera diferente en clases derivadas. Cada clase derivada va a ejecutar la acción del método virtual a su propio modo, acorde con sus necesidades.

HERENCIA:
Otra característica de OOP es la herencia, que es la reutilización de código.
A la acción de crear una clase de objeto a partir de otra clase ya existente se le llama derivación. Al tipo original se le conoce como tipo base o ascendiente, mientras que al nuevo tipo, que hereda las características del anterior se le llama tipo derivado o descendiente.
Al crear una instancia de la clase derivada se ejecuta automáticamente el constructor de la clase base. Lo mismo ocurre con el destructor.

UML:
El lenguaje unificado de modelación (UML), es un lenguaje no propietario de tercera generación para modelado y definición especificaciones.

El UML proporciona una forma sencilla, mediante diagramas e iconografías, de definir y trasmitir ideas complejas.

Se tiene la concepción de que el UML es un lenguaje destinado para el diseño de software, específicamente enfocado a los arquitectos de software, lo cual es incorrecto, ya que UML también puede ser utilizado para el modelaje de procesos de negocios, así como estructuras organizacionales.


Bibliografía:
Programación orientada a objetos. Segunda edición 1998
LUIS JOYANES AGUILAR
Editorial. OSBORNE McGraw-Hill
Interamericana de España S.A.U
PAG 13 70 71, 22, 91, 31,88, 154