IMPLEMENTACION DE LA INTERFAZ RUNNABLE


Por este método se debe implementar la interfaz Runnable para la cual se debe sobreescribir el método run(). Una instancia de la clase puede ser creada y pasarla como argumento cuando se cree Thread e iniciarla.

La interfaz Runnable debe ser implementada por cualquier clase cuyas instancias sean ejecutadas por un hilo. Dicha clase debe implementar el método run(). La implementación de la interface Runnable es la forma más habitual de crear tareas, ya que proporciona al desarrollador una forma para agrupar el trabajo de infraestructura de la clase. La interfaz establece el trabajo a realizar y la clase o clases que la implementan, indican como realizar ese trabajo. Se puede construir un hilo sobre cualquier objeto que implemente la interfaz Runnable. Para implementar esta interfaz, una clase sólo tiene que implementar el método run(). Dentro de run() se define el código que constituye el nuevo hilo. Despues de haberse creado una clase que implemente la interfaz Runnable se requiere crear un objeto del tipo Thread dentro de esa clase, usando cualquiera de los constructores de Thread.

LA CLASE THREAD


Un thread es un hilo de ejecución de un programa. La Maquina Virtual de Java (JVM) permite la ejecución de concurrente de múltiples hilos. En la clase Thread se encapsula todo el control necesario sobre los hilos de ejecución o tareas. Un objeto Thread se le puede entender como el panel de control sobre una tarea o hilo de ejecución. Dispone de métodos para controlar el comportamiento de las tareas, los cuales se tratarán más adelante. Los siguientes son los principales métodos de Thread:
   
static int activeCount(): Retorna el múmero de el hilo activo en el grupo de hilos.

void checkAccess(): Chequea si eel hilo que se esta ejecutando tiene permiso para modificar este hilo.

static Thread currentThread(): Retorna el objeto Thread que representa a la tarea que se está ejecutando.

void destroy(): Destruye la tarea actual.

String getName(): Retorna el nombre actual del hilo, asignado con
setName().

int getPriority(): Retorna un valor entre 1 y 10, correspondiente a la prioridad de la tarea en ejecución.

ThreadGroup getThreadGroup(): Retorna el grupo de hilo a que pertenece el hilo actual.

void interrupt():Interrumpe el hilo.

static boolean interrupted(): Chequea si el hilo actual se ha interrumpido.

boolean isAlive(): Chequea si el hilo esta vivo.

boolean isDaemon(): Chequea si el hilo es un hilo de servicio a otros.

boolean isInterrupted(): Chequea si el hilo ha sido interrumpido.

void join(): Espera a que el hilo se muera.

void join(long millis): Espera hasta millis milisegundos para que el hilo muera.

void run(): Constituye el cuerpo de una tarea o hilo. Es llamado por el método start(), despues que la tarea apropiada del sistema se haya inicializado. La tarea actual se detendrá cada vez que run() devuelva el control. Este es el único método de la interfaz Runnable.

void setDaemon(boolean on): Marca este hilo como un hilo de servi iusuario o hilo demonio.

void setName(String name): Permite asignarle a la tarea un nombre con el cual se la puede identificar.

void setPriority(int newPriority): Cambia la prioridad de la tarea, entre los valores 1 y 10.

static void sleep(long millis): Provoca que el intérprete de Java ponga la tarea a dormir durante un tiempo indicado en milisegundos, transcurrido dicho tiempo la tarea estará disponible para ejecución.

void start(): Le indica al interprete de Java que cree un contexto de ejecución de una tarea e inicie su ejecución. Acto seguido se invoca el método run() de esta tarea en el nuevo contexto de ejecución. Debe tenerse cuidado de llamar a start() no más de una vez para una tarea determinada.

String toString(): Retorna la cadena que representa el hilo, que incluye nombre, prioridad y grupo del hilo.

static void yield(): Hace que el interprete detenga temporalmente la ejecución del objeto del hilo y permita que el siguiente hilo disponible se ejecute. 

SINTAXIS PARA CREAR 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 pesado que tarda mucho
}
};
...
MiHilo elHilo = new MiHilo();
elHilo.start();
System.out.println("Yo sigo a lo mio");


Listo. Hemos creado una clase MiHilo que hereda de Thread y con un método run(). En el método run() pondremos el código que queremos que se ejecute en un hilo separado. Luego instanciamos el hilo con un new MiHilo() y lo arrancamos con elHilo.start(). El System.out que hay detrás se ejecutará inmediatamente después del start(), haya terminado o no el código del hilo.





CICLO DE VIDA DE UN HILO

Un hilo tiene un ciclo de vida que va desde su creación hsta su terminación. Durante su ciclo de vida cada uno de los hilos o tareas de una aplicación puede estar en diferentes estados, algunos de los cuales se indican a continuación:

• Nacido: Cuando se acaba de crear un hilo, se dice que está nacido, y continúa en ese estado hasta que se invoca el método start() del hilo. La siguiente sentencia crea un nuevo thread pero no lo arranca, por lo tanto deja el thread en el estado de nacido.

       Thread miHilo = new MiClaseThread();

Cuando un thread está en este estado, es sólo un objeto Thread vacío o nulo. No se han asignado recursos del sistema todavía para el thread. Así, cuando un thread está en este estado, lo único que se puede hacer es arrancarlo con start().

• Listo: Cuando se invoca el método start() del hilo, se dice que está en estado listo. El método se arranca con la siguiente instrucción, para el caso del hilo miHilo:

       miHilo.start();

• Ejecutable: cuando el método start() se ejecuta, crea los recursos del sistema necesarios para ejecutar el thread,programa el thread para ejecutarse, y llama al método run() del thread que se ejecuta en forma secuencial. En este punto el thread está en el estado ejecutable. Se denomina así puesto que todavía no ha empezado a ejecutarse.

• En ejecución: Un hilo en estado de listo de la más alta prioridad, pasa al estado de ejecución, cuando se le asignan los recursos de un procesador, o sea cuando inicia su ejecución. Aquí el thread está en ejecución.Cada hilo tiene su prioridad, hilos con alta prioridad se ejecutan preferencialmente sobre los hilos de baja prioridad.

• No ejecutable :Un hilo continúa la ejecución de su método run(), hasta que pasa al estado de no ejecutable originado cuando ocurre alguno de los siguientes cuatro eventos:

Se invoca a su método sleep().
Se invoca a su su método suspend().
El thread utiliza su método wait() para esperar una condición variable.
El thread está bloqueado durante una solicitud de entrada/salida.

Por ejemplo, en el siguiente fragmento de codigo se pone a dormir
miHilo durante 10 segundos (10.000 milisegundos):

Thread miHilo = new MiClaseThread();
miHilo.start();
try {
miHilo.sleep(10000);
} catch (InterruptedException e){
}

Durante los 10 segundos que miHilo está dormido, incluso si el proceso se vuelve disponible, miHilo no se ejecuta. Después de 10 segundos, miHilo se convierte en "Ejecutable" de nuevo y, si el procesador está disponible se ejecuta. Para cada entrada en el estado "No Ejecutable", existe una ruta de escape distinta y específica que devuelve el thread al estado "Ejecutable". Por ejemplo, si un thread ha sido puesto a dormir dutante un cierto número de milisegundos deben pasar esos milisegundos antes de volverse "Ejecutable" de nuevo.

La siguiente es una secuencia de las acciones a realizar para cada entrada en el estado "No Ejecutable":

Si se ha puesto a dormir un hilo, deben pasar el número de milisegundos especificados en sleep().

Si se ha suspendido un hilo, se debe llamar a su método resume().

Si un hilo está esperando una condición variable, siempre que el objeto propietario de la variable renuncie mediante notify() o notifyAll().

Si un hilo está bloqueado durante la I/O, cuando se complete la I/O.

• Muerto: Un hilo pasa al estado de muerto cuando se termina su método run(), o cuando se ha invocado su método stop(). En algún momento el sistema dispondrá entonces del hilo muerto. Un hilo puede morir de dos formas:

Muerte natural: se produce cuando su método run() sale normalmente. Por ejemplo, el bucle while en este método es un bucle que itera 100 veces y luego sale. Por tanto el hilo morirá naturalmente cuando se llegue al final de la iteración, es decir se termina su método run().

public void run() {
int i = 0;
while (i < 100) {
i++;
System.out.println("i = " + i);
 }
}

Por muerte provocada: en cualquier momento llamando a su método
stop(). El siguiente código crea y arranca miHilo luego lo pone a
dormir durante 10 segundos. Cuando el thread actual se despierta, se lo mata con miHilo.stop(). El método stop() lanza un objeto
ThreadDeath hacia al hilo a eliminar. El thread moririá cuando reciba realmente la excepción ThreadDeath.

Thread miHilo = new MiClaseThread();
miHilo.start();
try {
Thread.currentThread().sleep(10000);
} catch (InterruptedException e){
}miHilo.stop();

El método stop() provoca una terminación súbita del método run() del hilo. Si el método run() estuviera realizando cálculos sensibles, stop() podría dejar el programa en un estado inconsistente. Normalmente, no se debería llamar al método stop() pero si se debería proporcionar una terminación educada como la selección de una bandera que indique que el método run() debería salir. El método stop() se encuentra depreciado en la version JDK1.2.1.

• Bloqueado: un hilo se encuentra en el estado bloqueado cuando el hilo realiza una solicitud de entrada/salida. Cuando termina la entrada/salida que estaba esperando, un hilo bloqueado queda en el estado listo.



DEFINICION DE HILOS


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.




Los hilos representan uno de los recursos más importantes de los que dispone un programador para crear aplicaciones complejas donde puede ser conveniente, o incluso necesario, realizar varias tareas de manera simultánea. El mecanismo de hilos de proceso de Java es sencillo, potente y productivo. De hecho muchos de los estándares de la plataforma Java, como por ejemplo los applets o los servlets, emplean hilos de proceso para llevar cabo algunas tareas en paralelo.

CONFERENCIA DE CLUSTERS DE ALTO RENDIMIENTO

Uno de los temas expuestos en la conferencia fue el de los clusters pero para hacer referencia a estos, primero tenemos que tener en claro a que se le denomina cluster. El termino cluster se aplica a los conjuntos de computadoras mediante la utilizacion de componentes de hardware comunes y que se comportan como si fuese una única computadora.

La tecnología de clusters ha sido un gran apoyo en actividades que van desde aplicaciones de supercomputo, hasta base de datos de alto rendimiento, entre otros usos.

De cierta manera un cluster es un grupo de múltiples ordenadores que se unen mediante una red de alta velocidad, de tal manera que se forma un solo ordenador, pero que  es mas potente que los de escritorio.

En distintos proyectos se hace uso de los clusters debido a que estos ofrecen las siguientes características a un costo relativamente bajo: Alto rendimiento, Alta disponibilidad, Alta eficiencia y Escalabilidad.

Otro de los temas trabajados, fue el de los sistemas distribuidos que es una coleccion de computadoras separadas físicamente y conectados entre si por una red de comunicaciones distribuidas, cada maquina posee sus componentes de hardware y software que el usuario percibe como un solo sistema, de tal manera que el usuario pueda acceder a los recursos remotos de una manera sencilla y eficaz.

Los sistemas distribuidos son considerados muy confiables debido a que si un componente del sistema se descompone, otro componente debe ser capaz de reemplazarlo.

Los temas tratados son bastante interesantes e importantes para ser trabajados en cualquier proyecto o problema que se nos presente debido a que las ventajas son varias y son un gran apoyo para el procesamiento de datos, lo único que hay que tener en cuenta es que hay que tener unos previos conocimientos debido a que no es fácil llevar este proceso, al mismo tiempo que para darle un buen uso hay que contar con los elementos indicados.

PROGRAMA CALCULADORA

package logica;


public class Calculadora
{
private int dato;

public Calculadora ()
{
}

public int getDato ()
{
return dato;
}

public void setDato (int val)
{
this.dato = val;
}

public int suma (int dato2)
{
return (dato+dato2);
}

public long factorial ()
{
long respuesta=1;
for (int i=dato;i>0;i--)
respuesta*=i;
return respuesta;
}

public int resta (int dato2)
{
return (dato-dato2);
}

public int multiplicar (int dato2)
{
return (dato*dato2);
}

public int mod (int dato2)
{
return (dato%dato2);
}

public boolean verificarprimo ()
{
boolean resp=true;
int cont=2;
while ((resp==true) && (cont != dato))
{
if (dato % cont == 0)
resp = false;
cont++;
}
return (resp);
}

}

 
package presentacion;


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import logica.*;

public class FrmCalculadora
{
private Calculadora obj1=new Calculadora();

public FrmCalculadora ()
{
}

public Calculadora getObj1 ()
{
return obj1;
}

public void setObj1 (Calculadora val)
{
this.obj1 = val;
}

public static void main (String args[]) throws IOException
{
Calculadora obj1 =new Calculadora();
System.out.println("Digite dos numeros: ");
int dato1=leer();
int dato2=leer();
obj1.setDato(dato1);
System.out.println("La suma es: "+obj1.suma(dato2));
System.out.println("El factorial es: "+obj1.factorial());
System.out.println("La resta es: "+obj1.resta(dato2));
System.out.println("La multiplicacion es: "+obj1.multiplicar(dato2));
System.out.println("El modulo es: "+obj1.mod(dato2));
System.out.println("El numero es primo?: RTA: "+obj1.verificarprimo());
}

public static int leer () throws IOException
{
InputStreamReader entrada =new InputStreamReader(System.in);
BufferedReader lectura= new BufferedReader(entrada);
String cadena=lectura.readLine();
return (Integer.parseInt(cadena));
}

}
 
 
 
 

PROGRAMA VECTOR

package Logica;


public class Vector
{
private int v[];

public int[] getV()
{
return v;
}

public void setV(int[] v)
{
this.v = v;
}

public Vector(int[] v)
{
this.v = v;
}

public int[] ordenarVector (int v[])
{
int temp;
int t = v.length;
for (int i = 1; i < t; i++)
{
for (int j = (t- 1); j >= i; j--)
{
if(v[j] < v[j-1])
{
temp = v[j];
v[j] = v[j-1];
v[j-1]= temp;
}
}
}
return (v);
}

}

 
package Presentacion;


import Logica.Vector;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Formulario
{
public static void main(String arg[]) throws IOException
{
int dato=0;
System.out.println("Cuantos numeros quiere trabajar en el Vector: ");
dato=leer();
System.out.println("Digite "+dato+" numeros");
int v[]=new int [dato];
Vector obj1=new Vector(v);
for(int i=0;i
{
v[i]=leer();
}
v=obj1.ordenarVector(v);
System.out.println("El vector modificado es : ");
for(int i=0;i
{
System.out.print(v[i]+" ");
}
}

public static int leer() throws IOException
{
InputStreamReader entrada=new InputStreamReader (System.in);
BufferedReader lectura=new BufferedReader (entrada);
String cadena=lectura.readLine();
return(Integer.parseInt(cadena));
}

}



 

PROGRAMA FIBONACCI CON DOS CLASES

package Logica;


public class Fibonacci
{
private int dato;

public Fibonacci (int dato)
{
this.dato=dato;
}

public int getDato ()
{
return dato;
}

public void setDato (int val)
{
this.dato = val;
}

public String generarSerie ()
{
int p=0, u=1, r=0;
String cadena="";
while(r<=dato)
{
cadena+=" "+r;
p=u;
u=r;
r=u+p;
}
return(cadena);
}

}


package Logica;


public class Servicio
{

public Servicio ()
{
}

public boolean validar_Positivo (int dato)
{
if (dato>0)
return true;
else
return false;
}

}

 
package Presentacion;


import Logica.Fibonacci;
import Logica.Servicio;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Formulario
{

public static void main (String arg[])
{
System.out.print("Digite un dato: ");
Fibonacci obj1;
Servicio obj2= new Servicio ();
InputStreamReader entrada=new InputStreamReader (System.in);
BufferedReader lectura=new BufferedReader (entrada);

try
{
String cadena=lectura.readLine();
if(obj2.validar_Positivo(Integer.parseInt(cadena))==true)
{
obj1=new Fibonacci(Integer.parseInt(cadena));
System.out.println("La serie es: "+obj1.generarSerie());
}
else
System.out.println("el dato no es positivo");
}

catch (IOException e)
{
System.out.println("Error al convertir tipo de dato");
}
}

}

 
 

CLASE LABEL

La Label tiene tres constructores:

Label() , que construye una etiqueta vacía. Label(String text), que construye una etiqueta con texto Text, justificada a la izquierda. Label(String text, int alignment) , que construye una etiqueta con texto Texto, justificada con alignment. Los valores de alignment son: Label.LEFT, Label.RIGHT, y Label.CENTER.

Algunos métodos del objeto son:

int getAlignment(), da la justificación actual del objeto.

String getText() , da el texto incluido en el label.

void setAlignment(int alignment), cambia la justificación de la Label con alignment.

void setText(String text), ajusta el texto de la Label.

Además existe el método AccessibleContext getAccessibleContext(), que veremos cuando analicemos los contenedores. Realmente la Label es un contenedor de texto.

CLASE TEXTFIELD

En la API podemos ver algunos métodos que se pueden aplicar a los campos de texto, como por ejemplo el método "setColumns( )" con el que se puede cambiar el número de columnas de un campo de texto.

También en la API observamos que la clase "TextField" hereda otros métodos de las superclases "TexTComponent", "Component" y "Object", como "setEditable( )", "getText( )", "setForeground( )", "setBackground( )", etc. En la API se especifica si estos métodos reciben parámetros y que tipo de parámetros, así como el efecto de aplicar cada método.

Por ejemplo:

tf1.setEditable(false); no permite edición en el campo de texto tf1

tf1.getText( ); obtiene el texto presente en el campo de texto tf1

tf1.setText( txt ); pone el texto "txt" en tf1

tf1.setForeground(Color.blue); el texto en tf1 será azul

tf1.setBackground(Color.green); el color de fondo de tf1 será verde

tf1.setFont( ft10 ); establece o cambia el tipo de fuente a la fuente definida por 'ft10'

CLASE BUTTON

Los botones son de tres tipos: los normales, les Checkbox y los radiobutton. Empezamos con los primeros.

La clase que define los botones es Button java.awt y pone a disposición todos los métodos para gestionar el aspecto del botón.

Los constructores de la clase son dos:

Button(), costruye un botón sin etiqueta;

Button(String txt), costruye un botón con etiqueta txt.

Algunos métodos de la clase son:

void addActionListener(ActionListenerl), añade el botón a un objeto invocado.

ActionListener, que escucha los sucesos. Cuando se clique el botón, el suceso será gestionado por ActionListener.

AccessibleContext getAccessibleContext(), como para las Label, los botones son también unos contenedores.

String getActionCommand(), a cada botón se asocia una órden que devuelve el actual.

String getLabel(), devuelve la etiqueta asociada al botón.

EventListener[] getListeners(Class listenerType), da un array que incluye a todos los que escuchan sucesos establecidos por este botón.

addXXXListener(), añade un oyente de sucesos de tipo tipo XXX. En Java hay varios tipos de sucesos, los analizaremos dentro de poco. Uno de éstos es el suceso de tipo action y, en este caso, el método es addActionListener( )

void removeActionListener(ActionListener l), elimina el oyente de sucesos 1 precedentemente asociado al botón.

void setActionCommand(String command), ajusta la órden asociada al botón. Al principio la órden es la etiqueta.

void setLabel(String label), ajusta la etiqueta del botón.

PAQUETE AWT SWING


El paquete Swing es parte de la JFC (Java Foundation Classes) en la plataforma Java. La JFC provee facilidades para ayudar a la gente a construir GUIs. Swing abarca componentes como botones, tablas, marcos, etc...

Las componentes Swing se identifican porque pertenecen al paquete javax.swing. Swing existe desde la JDK (como un agregado). Antes de la existencia de Swing, las interfaces gráficas con el usuario se realizaban a través de AWT (Abstract Window Toolkit), de quien Swing hereda todo el manejo de eventos. Usualmente, para toda componente AWT existe una componente Swing que la reemplaza.

Una aplicación Swing se construye mezclando componentes con las siguientes reglas:

1. Debe existir, al menos, un contenedor de alto nivel (Top-Level Container), que provee el soporte que las componentes Swing necesitan para el pintado y el manejo de eventos.

2. Otras componentes colgando del contenedor de alto nivel (éstas pueden ser contenedores o componentes simples).



APPLET

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 in situ como parte de un documento web (definición de Patrick Naughton). Dado que Java es multiplataforma y los applets son soportados por ambos navegadores, su uso se ha popularizado bastante.

Los applets tienen, sin embargo, un problema que impide que se utilicen más habitualmente. Este problema consiste en que, al igual que sucede con las imágenes, cuando colocamos un applet en una página web debemos definir un rectángulo de un tamaño determinado donde permanecerá el mismo, no pudiendo actuar fuera de sus márgenes.

APLICACIONES AUTONOMAS


Todo en Java está dentro de una clase, incluyendo programas autónomos.
 
Las aplicaciones autónomas se ejecutan dando al entorno de ejecución de Java el nombre de la clase cuyo método main debe invocarse. Por ejemplo, una línea de comando (en Windows) de la forma java –cp . Hola ejecutará un programa (previamente compilado y generado como “Hola.class”) . El nombre de la clase cuyo método main se llama puede especificarse también en el fichero “MANIFEST” del archivo de empaquetamiento de Java (.jar).

PROGRAMA DE PRIMO RELATIVO

package Presentacion;




import java.io.BufferedReader;


import java.io.IOException;


import java.io.InputStreamReader;


import java.util.logging.Level;


import java.util.logging.Logger;




import Logica.*;


public class Formulario
{
PrimoRelativo obj2=new PrimoRelativo();


public Formulario ()
{
}


public PrimoRelativo getObj2 ()
{
return obj2;
}


public void setObj2 (PrimoRelativo val)
{
this.obj2 = val;
}


public static void main (String args[])throws IOException
{
PrimoRelativo obj1,obj2;
System.out.println("Digite dos numeros : ");
int x=leer();
int y=leer();
obj1 =new PrimoRelativo (x);
obj2 =new PrimoRelativo (y);
obj1.setDato(x);
obj2.setDato(y);
System.out.println("Los numeros son primos Relativos?: RTA: "+obj1.VerificarPrimoRelativo(obj2.getDato()));
}


public static int leer () throws IOException
{
InputStreamReader entrada =new InputStreamReader(System.in);
BufferedReader lectura= new BufferedReader(entrada);
String cadena=lectura.readLine();
return (Integer.parseInt(cadena));
}


}



package Logica;



public class PrimoRelativo
{
private int dato;

public int getDato ()
{
return dato;
}


public void setDato (int val)
{
this.dato = val;
}


public PrimoRelativo()
{
dato=0;
}


public PrimoRelativo (int dato)
{
this.dato=dato;
}


public boolean VerificarPrimoRelativo (int dato2)
{
int divisor=2;
boolean rta=true;
while ((divisor<=dato/2) || (divisor<=dato2/2))
{
if(((dato % divisor)==0)&&((dato2 % divisor)==0))
  return (rta=false);
  divisor++;
}
return rta;
}


}

MAQUINA VIRTUAL

Una maquina virtual es un software que emula a una computadora y puede ejecutar programas como si fuera una computadora real. Este software un principio fue definido como un duplicado eficiente y aislado de una maquina física.

Una característica esencial de las maquinas virtuales es que los procesos  que ejecutan están limitados por los recursos y abstracciones proporcionados por ellas.

Uno de los usos domésticos mas extendidos de las maquinas virtuales es ejecutar sistemas operativos para "probarlos".

Las maquinas virtuales se pueden clasificar en dos grandes categorías según su funcionalidad y su grado de equivalencia a una verdadera maquina:

Maquinas Virtuales De Sistema y Maquinas Virtuales De Proceso.

CARACTERES

En java, los caracteres no son cantidades de 8 bits como en casi todos los demás lenguajes de computo. En cambio, Java usa Unicode. Unicode define un conjunto de caracteres que puede representar todos los caracteres encontrados en el lenguaje humano. Por lo tanto, en Java, char es un tipo de 16 bytes sin signo que tiene un rango de 0 a 65,536.

Debido a que char es un tipo de 16 bits sin signo, es posible realizar varias manipulaciones aritméticas en una variable char.


Libro Fundamentos de Java
Herbert Schildt.

TIPOS DE PUNTO FLOTANTE

Los tipos de punto flotante pueden representar números que tienen componentes fraccionarios. Hay dos tipos de punto flotante, float y double, que representan números de precisión sencilla y doble, respectivamente. El tipo float es de 32 bits y el tipo double es de 64 bits de ancho.

De los dos, double es el mas usado porque todas las funciones matemáticas de la biblioteca de clases de java usan valores double.


Fundamentos de Java
Herbert Schildt.

TIPOS PRIMITIVOS DE JAVA

Java contiene dos categorías generales de tipos de datos integrados: orientados a objetos y no orientados a objetos. Los tipos orientados a java están definidos por clases (el análisis de las clases se postergara para después). Sin embargo, en el corazón de java hay ocho tipos de datos primitivos. El termino primitivo se usa aquí para indicar que estos tipos no son objetos en el sentido de que están orientados a objetos, sino mas bien valores binarios normales.


Tipo               Significado

boolean          Representa valores verdaderos/falsos
byte             Entero de 8 bytes
char             Carácter
double           Punto flotante de doble precisión
float            Punto flotante de precisión sencilla
int              Entero
long             Entero largo
short            Entero corto


Fundamentos de Java
Herbert Schildt

JAVA

Java cuenta con un atributo en común con C++: fue diseñado, probado y afiado por programadores reales y en activo. Es un lenguaje surgido de las necesidades y la experiencia de la gente que lo concibió.

Internet ayudo a catapultar a Java al primer plano de la programacion, y java, a su vez, ha tenido un profundo efecto en Internet. La razón es muy simple: Java expande el universo de los objetos que pueden desplazarse libremente por el ciberespacio. En una red hay dos categorías muy amplias de objetos que se transmiten entre el servidor y su computadora personal: información pasiva y programas dinamicos y activos.


Fundamentos de Java
Herbert Schildt.

LENGUAJES DE ALTO NIVEL

Son los lenguajes de programacion mas cercanos al lenguaje humano y, por tanto, están pensados para que sean fáciles de utilizar y de entender. Las instrucciones que forman parte de un lenguaje de programacion de alto nivel son palabras y signos reconocibles por nosotros.

Ejemplos de lenguajes de alto nivel: C, C++, Cobol, Pascal, Java, Visual Basic...


Fundamentos de Programacion
Manuel Santos Gonzalez.

LENGUAJES DE BAJO NIVEL

Estos lenguajes son mas fáciles de utilizar que los lenguajes maquina pero, al igual que estos dependen del hardware. Su principal característica es que las instrucciones ya no son secuencias binarias, sino códigos de operación que describen una operación elemental del procesador.

El lenguaje de bajo nivel por excelencia es el lenguaje ensamblador. En este lenguaje, cada instrucción (también llamada nemotécnico) se corresponde a na instrucción del procesador. 


Fundamentos de Programacion
Manuel Santos Gonzalez.

LENGUAJE MAQUINA

Es aquel que entienden las computadoras, es decir, son secuencias de unos y ceros que forman las instrucciones que entienden directamente el procesador.

Lógicamente, los lenguajes maquina son dependientes del hardware ya que cada procesador posee un conjunto de instrucciones diferentes.

La principal ventaja de utilizar un lenguaje maquina es que se puede ejecutar directamente en la computadora. No necesita una herramienta de traducción del lenguaje.


Fundamentos de Programacion
Manuel Santos Gonzalez.

LENGUAJES DE PROGRAMACION

El lenguaje de programacion es la herramienta que se va a utilizar para escribir de forma exacta lo que se desea que realice el programa que se esta desarrollando cuando sea ejecutado en un ordenador.

Tipos de Lenguajes de Programacion:

En el diseño de los lenguajes de programacion hay que tener en cuenta dos elementos importantes. Por una parte, el hombre que es el que diseña los algoritmos y los programas que luego hay que escribir utilizando un lenguaje de programacion y que tiene ya lenguaje propio.

Por otra parte, esta la computadora, que es la que va a ejecutar los programas escritos con ese lenguaje de programacion. La computadora también tiene su propio lenguaje que, básicamente, es el lenguaje de su procesador. 


Libro Fundamentos de Programacion
Manuel Santos Gonzalez.

REPRESENTACION GRAFICA DE UNA CLASE EN UML

En UML las clases se definen como un conjunto de objetos con un nombre, atributos y operaciones. Una clase se dibuja en UML con un rectangulo que se divide horizontalmente en tres bandas. La banda superior contiene el nombre de la clase; la banda central los atributos de la clase; y la banda inferior contiene las operaciones de la clase.

Los atributos con un signo (+) delante de ellos son publicos, que significa que otras clases pueden acceder a ellos. Los atributos precedidos con un signo (-) son privados, lo que indica que solo la clase y sus objetos pueden acceder a ellos.


 
Libro Fundamentos De Programacion
Luis Joyanes Aguilar

POLIMORFISMO

El polimorfismo es la propiedad que permite a una operacion (funcion) tener el mismo nombre en clases diferentes y que actue de modo diferente en cada una de ellas.

En la practica, el polimorfismo significa la capacidad de una operacion de ser interpretada solo por el propio objeto que lo invoca.  Desde un punto de vista practico de ejecucion del programa, el polimorfismo se realiza en tiempo de ejecucion ya que durante la compilacion no se conoce que tipo de objeto y por consiguiente  que operacion ha sido invocada.

La propiedad del polimorfismo, en esencia, es aquella en que una operacion tiene el mismo nombre en diferentes clases, pero se ejecuta de diferente formas en cada clase.



 
Libro Fundamentos De Programacion
Luis Joyanes Aguilar

PASO DE MENSAJES

Una accion se inicia por una peticion de un servicio (mensaje) que se envia a un objeto especifico, no como en programacion en la que una llamada de funcion utiliza un dato especifco. El estilo de programacion orientado a objetos proporciona especial importancia al objeto (valor).

Se puede solicitar cierta informacion de un objeto. Esta informacion puede ser relativa al estado de la instancia del objeto pero tambien puede implicar un calculo de algun tipo.


 
Libro Fundamentos De Programacion

Luis Joyanes Aguilar

PARTES DE LA CLASE


OPERACIONES:
Un objeto contiene datos (atributos) y algoritmos (operaciones) que actúan sobre esos datos. Una operación se declara en una clase.

El procedimiento o función que implementa la operación se denomina MÉTODO.



ATRIBUTOS:


Los atributos son las propiedades de los objetos (a veces denominados características).

Los atributos representan la identificacion y propiedades descriptivas.Un atributo es una información que cualifica al objeto que la contiene y cada atributo puede tomar un valor en un ámbito de definición dado.




Libro Fundamentos De Programacion
Luis Joyanes Aguilar

CLASE

El termino tipo abstracto de dato se consigue en programacion orientada a objetos con el termino CLASE.

Una clase es la implementación de un tipo abstracto de dato y describe no solo los atributos (datos) de un objeto sino también sus operaciones (comportamiento).

 

Libro Fundamentos De Programacion

Luis Joyanes Aguilar

OBJETO

Es el centro de la programacion orientada a objetos. Un objeto es algo que se visualiza, se utiliza y que juega un rol. Cuando se programa de modo orientado a objetos se trata de descubrir e implementar los objetos que juegan un rol en el dominio del problema del programa.

Un objeto no tiene que ser necesariamente algo concreto o tangible. Puede ser totalmente abstracto y puede tambien describir un proceso.

Libro Fundamentos De Programacion

Luis Joyanes Aguilar
                       

PROGRAMACION ORIENTADA A OBJETOS


La Programacion Orientada a Objetos se basa en el hecho de que se debe dividir el programa, no en tarea, sino en modelos de objetos fisicos.



La idea fundamental de la orientacion a objetos es combinar (encapsular) en una unica unidad tanto los datos como las funciones que operan (manipulan) sobre los datos. Esta caracteristica permite modelar los objetos del mundo real de un modo mucho mas eficiente que con funciones y datos.


Libro Fundamentos De Programacion
Luis Joyanes Aguilar