Programación en Java- clases
Cuadro 1
public class Persona {
private int edad;
Java es un lenguaje orientado a objetos, private float altura;
por lo que construiremos nuestros private Persona pareja;
programas a base de clases Java (que public String nombre;
contienen constructores, métodos y
atributos) que podrán referenciarse public Persona( int paramEdad, String
entre ellas. paramNombre ) { edad =
paramEdad;
Un ejemplo básico de una clase java nombre = paramNombre;
puede ser el siguiente:à }
public int verEdad( ) {
return edad;
}
}
Public class Principal {
Para poder ejecutar un programa en java,
public static void main( String[] args ) {
debe existir una clase principal que
System.out.println( "¡Saludo a todos !"
implemente el método main y sea la que
);
se encargue de hacer que el resto
}
cumplan su misión.
}
Programación de Sockets en Java
Crear un Socket en java es realmente muy sencillo. Basta con crearse un objeto de la
clase Socket y listo.
Para poder enviar información a través del Socket, basta con invocar al
método getOutputStream() del Socket, que nos devolverá un OutputStream a través
del cual escribiremos los datos como si fueran a ir a parar a cualquier otro dispositivo
(fichero, pantalla, etc.).
Si lo que queremos es recibir datos a partir del Socket, basta con invocar al
método getInputStream() que nos dará un InputStream con el que operaremos como
si fuera cualquier otro dispositivo de entrada.
Ahora bien, cuándo creamos un Socket, estamos siendo nosotros los que tomamos la
iniciativa para conectarnos a algún sitio, pero ese sitio tiene que estar preparado para
aceptar conexiones.
En java esto lo podemos hacer fácilmente a partir de un ServerSocket. Para crearnos
uno, invocamos a alguno de sus constructores, y luego usamos el método accept() del
objeto creado que se quedará parado hasta que llegue alguna conexión, momento en el
que nos devolverá un Socket a través del cual realizar la comunicación con la otra
máquina.
Tomando como referencia la arquitectura Cliente/Servidor, para montar
un servidor necesitaremos un ServerSocket, mientras que para el cliente simplemente
necesitaremos un Socket.
Veamos un ejemplo, un servidor que ofrece la hora actual (la hora para el servidor) a
cada cliente que se la pida, y un cliente que pide la hora al servidor y la imprime por
pantalla.
Cuadro 2
CLIENTE SERVIDOR
import java.io.BufferedReader; import java.io.IOException;
import java.io.IOException; import java.io.PrintWriter;
import java.io.InputStream; import java.net.ServerSocket;
import java.io.InputStreamReader; import java.net.Socket;
import java.net.Socket; import java.text.DateFormat;
import java.net.UnknownHostException; import java.util.Date;
import java.util.GregorianCalendar;
public class ClienteHora {
public class ServidorHora {
public static void main(String[] args) throws public static final int puerto = 9797;
UnknownHostException, IOException {
private static String darHora() {
Socket s = new Socket( "127.0.0.1", GregorianCalendar calendario = new
ServidorHora.puerto ); GregorianCalendar();
InputStream entrada = s.getInputStream(); Date date = calendario.getTime();
BufferedReader lector = new DateFormat hora = DateFormat.getTimeInstance(
BufferedReader( new DateFormat.SHORT );
InputStreamReader( entrada ) ); return hora.format( date );
}
System.out.println( lector.readLine() );
lector.close(); public static void main(String[] args) throws
s.close(); IOException {
}
} ServerSocket servidor = new ServerSocket( puerto );
while( true ) {
Socket aux = servidor.accept();
PrintWriter escritor = new PrintWriter(
aux.getOutputStream() );
escritor.println( darHora() );
escritor.close();
aux.close();
}
}
}
PROGRAMACIÓN DE HILOS EN JAVA
Los hilos permiten aumentar la eficiencia de los programas al dejarnos realizar varias
tareas de forma simultánea. Existen dos formas de crear hilos en Java, la primera es
heredando de la clase Thread e implementando a nuestro gusto el método run. La
segunda es mediante la implementación de la interfaz Runnable e implementando,
también, el método run. Para que el hilo se ejecute como hilo, hay
que invocarlo mediante el método start, si se invoca mediante el método run se hará
que se ejecute ese método mediante una invocación normal y el resto del programa no
seguirá ejecutándose hasta que el método run haya acabado su ejecución.
Sirva como ejemplo para esta parte, un programa que genera dos listas aleatorias de
números enteros y lanza dos hilos que van sumando dichas listas en paralelo.
public class EjemploHilos extends Thread{
private int[] lista; //se declaran arreglos
private int numHilo;
public EjemploHilos( int[] listaNumeros, int numH ) { //
Constructor. Recibe una lista de enteros y la almacena y una identificacion de numero
de hilo.
lista = listaNumeros;
numHilo = numH;
}
public void run() {
int aux = 0;
for( int i = 0; i < lista.length; i++ ) {
aux += lista[ i ];
if( ( i % 100000 ) == 0 ) {
System.out.println( "Resultado Parcial de Hilo " +
numHilo + ":" + aux );
}
}
System.out.println( "Hilo " + numHilo + ":" + aux );
}
private static int[] generaLista( int numeroElementos ) {
//método para generar la lista de enteros
int[] lista = new int[ numeroElementos ];
for( int i = 0; i < numeroElementos; i++ ) {
lista[ i ] = ( int ) ( Math.random() * 100 );
}
return lista;
}
public static void main(String[] args) { //
método principal
int[] listaUno = generaLista( 5000000 );
int[] listaDos = generaLista( 5000000 );
EjemploHilos hilo1 = new EjemploHilos( listaUno, 1 );
EjemploHilos hilo2 = new EjemploHilos( listaDos, 2 );
hilo1.start(); hilo2.start();
}
}
Mini Taller -Resolver y entregar en la tarea correspondiente-
**use sus palabras , lo que entiende no recibirá la evaluación completa si no redacta
sus respuestas
1. Analice la programación por clases POO del primer cuadro y responda: cuales
son los tres elementos principales de esa clase y cómo son usados en el ejemplo
estos elementos.
2. Que entiende por socket según lo que lee en esta pagina , y cuál es la diferencia
que puede observar con los llamados ServerSockets?
3. Cuáles son los dos principales métodos que se deben programar en los sockets,
... cuál para enviar y cual para recibir_?.
4. ¿Qué cree que ocurrirá cuándo varios clientes, al mismo tiempo intenten contactar
con el Servidor de Tiempo?, ¿Qué método en el servidor realmente imprime la
hora y quien solo lo activa o invoca?
5. Ahora una pregunta doble , Que entiende por programación de hilos y cómo
podemos crear esos llamados hilos , según lo leído aquí ?
6. Describa el método principal(main) del ejemplo hilos , línea por línea (5) , luego
describa que sucede con los otros métodos de ese ejemplo .
7. En su percepción, que diferencias y/o igualdades percibe en
estas tres orientaciones o formas de programar (clases, sockets, hilos).