Objetivos El alumno aplicará el concepto de programación

Transcripción

Objetivos El alumno aplicará el concepto de programación
PRÁCTICA
PROGRAMACIÓN ORIENTADA A OBJETOS (ARCHIVOS E HILOS)
Objetivos
El alumno aplicará el concepto de programación orientada a objetos para la realización
de programas que involucren el manejo de archivos y creación de hilos.
Al final de esta práctica el alumno podrá:
Implementar programas orientados a objetos, que manipulen archivos; así como, la
creación de hilos dentro de una aplicación.
Antecedentes
1. Manejar sentencias de control de flujo en lenguaje de Java.
2. Identificar y relacionar varias clases en la programación orientada a objetos
empleando la teoría de diseño de jerarquía de clases
3. Haber utilizado archivos en el almacenamiento de datos
4. Manejar los conceptos de proceso y multitareas
Introducción
En Java, para lograr la comunicación entre el programa y la información, ya sea de entrada
o salida, se hace mediante un flujo, que funge como el intermediario entre el programa y los
datos.
En la práctica de programación orientada a objetos con manejo de excepciones, se observó
que para hacer la lectura de datos desde el teclado, se tiene que generar un flujo de entrada,
es decir, una operación InputStreamReader; y el parámetro que recibe es el origen de los
datos, en ese caso System.in, pero para realizar la lectura de información contenida en
archivos o ficheros, se necesita generar un objeto de tipo File, igual que como se crea un
apuntador FILE en C.
File f = new File(nombreArchivo);
Una vez creado el apuntador, se necesita generar el flujo de datos desde un archivo, es decir,
crear un objeto de tipo FileInputStream, que recibe como parámetro el objeto de tipo File.
FileInputStream fis = new FileInputStream(f);
Con esto, ya se puede crear el InputStreamReader, que permitirá leer los datos que se
tengan en un archivo; y el BufferedReader que hará la lectura de los mismos.
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(isr);
Ya con estas cuatro líneas se puede hacer la lectura de un archivo.
Elaborada por:
Ing. Laura Sandoval Montaño
Viridiana del Carmen De Luna Bonilla
Virgilio Green Pérez
Programación Avanzada y Métodos Numéricos
PRÁCTICA
PROGRAMACIÓN ORIENTADA A OBJETOS (ARCHIVOS E HILOS)
Ejemplo 1
Elaborar un programa que lea la información contenida en un archivo de texto plano.
import java.io.*;
public class LeeArchivo{
File f;
FileInputStream fis;
InputStreamReader isr;
BufferedReader br;
String linea;
public static void main(String args[]){
try{
LeeArchivo la = new LeeArchivo();
//Se crea un objeto de tipo File
la.f = new File(args[0]);
//Se genera el flujo de entrada desde archivo
la.fis = new FileInputStream(la.f);
//Se crea el flujo de lectura
la.isr = new InputStreamReader(la.fis);
//Se crea el objeto que permitirá la lectura
la.br = new BufferedReader(la.isr);
//Se hará la lectura hasta que encuentre una línea nula
while((la.linea=la.br.readLine())!=null){
System.out.println(la.linea);
}
//Se cierran todos los flujos
la.br.close();
la.isr.close();
la.fis.close();
}
catch(IOException ioe){
System.out.println(ioe.getMessage());
}
}
}
Debido a que todos los flujos de entrada y salida generan una excepción de entrada/salida,
es necesario agregar una secuencia de try-catch.
Escritura en archivos
Ahora, para hacer la escritura en archivos se debe generar, de igual forma que para la
lectura, flujos de entrada o salida. En este caso, en lugar de utilizar FileInputStream,
debemos generar un flujo de salida, es decir FileOutputStream.
FileOutputStream fos = FileOutputStream(f);
Elaborada por:
Ing. Laura Sandoval Montaño
Viridiana del Carmen De Luna Bonilla
Virgilio Green Pérez
Programación Avanzada y Métodos Numéricos
PRÁCTICA
PROGRAMACIÓN ORIENTADA A OBJETOS (ARCHIVOS E HILOS)
Debido a que ahora la impresión es en un archivo, se deberá utilizar el comando:
PrintStream ps = PrintStream(fos);
Ejemplo 2
Elaborar un programa que escriba en archivo una línea que se escriba desde línea de
comando.
import java.io.*;
public class EscribeArchivo{
String cadena;
File f;
FileOutputStream fos;
PrintStream ps;
public static void main(String args[]){
try{
EscribeArchivo ea = new EscribeArchivo();
//Se obtiene la cadena que se escribirá en el archivo
ea.cadena = args[0];
//Se crea un objeto de tipo File
ea.f = new File(args[1]);
//Se genera el flujo de salida hacia el archivo
ea.fos = new FileOutputStream(ea.f);
//Se genera el escritor del flujo
ea.ps = new PrintStream(ea.fos);
//Se escribe la línea dentro del archivo
ea.ps.println(ea.cadena);
//Se cierran flujos
ea.ps.close();
ea.fos.close();
}
catch(IOException ioe){
}
catch(ArrayIndexOutOfBoundsException aioobe){
System.out.println("ERROR!!!");
System.out.println("Sintaxis: java EscribeArchivo
\"cadena\" archivo");
}
}
}
Hilos
Cuando se genera un proceso, se crea un hilo primario, que está asociado a un bloque de
instrucciones, un conjunto de registros y una pila. Este hilo, puede crear más hilos si es
necesario; a estos hilos se les denomina “procesos ligeros” ya que comparten ciertos
recursos con el proceso primario que los creó.
Elaborada por:
Ing. Laura Sandoval Montaño
Viridiana del Carmen De Luna Bonilla
Virgilio Green Pérez
Programación Avanzada y Métodos Numéricos
PRÁCTICA
PROGRAMACIÓN ORIENTADA A OBJETOS (ARCHIVOS E HILOS)
Pero, ¿para qué se necesitan varios hilos? Cuando se hace una aplicación robusta en el que
tenga que hacer varias acciones al mismo tiempo, en lugar de crear un proceso completo, es
más conveniente crear un hilo que pueda llevar a cabo las acciones correspondientes de una
forma rápida y eficaz. Por ejemplo, si se tiene un sistema que está en red, para que
múltiples usuarios tengan acceso, si se generara un proceso por cada usuario, saldría
bastante caro, hablando de recursos máquina, pero si se genera un hilo, para que haga una
consulta, o una actualización de un dato, las acciones se realizan rápidamente.
Hay varios estados por los que pasa un hilo, y son:
•
•
•
•
Preparado.- Cuando se genera un hilo nuevo y está listo para ejecutarse, o cuando
ha sido desbloqueado.
En ejecución.- Cuando está haciendo uso de los recurso de la CPU.
Bloqueado.- Cuando está en espera de que se elimine el bloqueo.
o Dormido.- Cuando se bloquea por un cierto tiempo, después del cual
despierta, y pasa a preparado.
o En espera.- Cuando está esperando a que ocurra algo, recibe un mensaje y
pasa a preparado.
Muerto.- Cuando ha terminado de ejecutarse.
En Java, cuando se trabaja con hilos, se debe indicar que la clase con la que se está
trabajando es una subclase de la clase Thread, es decir, que se heredarán todas las
propiedades que contiene la clase Thread.
Ejemplo 3
Elabore un programa que genere 6 hilos.
public class GeneraHilo extends Thread{
//Rutina que se ejecuta cuando se le da start() a un hilo
public void run(){
System.out.println("Esta es una instancia de nuestra clase: "
+this.getName());
}
public static void main(String args[]){
//Se generan 6 hilos
GeneraHilo gh1 = new GeneraHilo();
GeneraHilo gh2 = new GeneraHilo();
GeneraHilo gh3 = new GeneraHilo();
GeneraHilo gh4 = new GeneraHilo();
GeneraHilo gh5 = new GeneraHilo();
GeneraHilo gh6 = new GeneraHilo();
//Se les asigna nombre
gh1.setName("Hilo1");
gh2.setName("Hilo2");
gh3.setName("Hilo3");
gh4.setName("Hilo4");
gh5.setName("Hilo5");
gh6.setName("Hilo6");
Elaborada por:
Ing. Laura Sandoval Montaño
Viridiana del Carmen De Luna Bonilla
Virgilio Green Pérez
Programación Avanzada y Métodos Numéricos
PRÁCTICA
PROGRAMACIÓN ORIENTADA A OBJETOS (ARCHIVOS E HILOS)
//Se "ejecutan" los hilos
gh1.start();
gh2.start();
gh3.start();
gh4.start();
gh5.start();
gh6.start();
System.out.println("Hilo Principal:"
+Thread.currentThread().getName());
}
}
Elaborada por:
Ing. Laura Sandoval Montaño
Viridiana del Carmen De Luna Bonilla
Virgilio Green Pérez
Programación Avanzada y Métodos Numéricos
PRÁCTICA
PROGRAMACIÓN ORIENTADA A OBJETOS (ARCHIVOS E HILOS)
EJERCICIOS PROPUESTOS
1. El programa del Ejemplo 1, tiene una falla cuando no se le pasan parámetros,
arréglelo utilizando un catch. Además, cuando se le da el nombre de un archivo no
existente aparece la leyenda
(El sistema no puede hallar el archivo especificado)
Modifique el programa de tal forma que se indique:
ERROR!!!
Archivo no válido, favor de verificar el nombre del archivo.
TIP: Utilice una excepción para la modificación de archivo no válido.
2. Modifique el programa del Ejemplo 2 de tal forma que ahora se escriba en archivo
todo lo que se escriba mientras está en ejecución el programa.
3. Modifique el programa anterior, para que también se pueda agregar información al
final del archivo que se indique.
4. Elabore un programa que lea información de un archivo, y lo escriba en otro.
5. Cuando se ejecuta varias veces seguidas el programa del Ejemplo 3, ¿qué pasa?
Ahora en el método run(), agregue la instrucción
sleep((long)Math.random()*2500), antes de la impresión del nombre del
hilo que se está ejecutando. Haga las modificaciones necesarias para que compile y
ejecute correctamente el programa. Si se ejecuta varias veces seguidas el programa,
¿Ahora, qué sucede?
(OSURIHVRUSRGUiGLVHxDUVXVSURSLRVHMHUFLFLRVVLHPSUH\FXDQGRFXEUDSRUFRPSOHWRHOREMHWLYRGH
ODSUiFWLFD
Elaborada por:
Ing. Laura Sandoval Montaño
Viridiana del Carmen De Luna Bonilla
Virgilio Green Pérez
Programación Avanzada y Métodos Numéricos

Documentos relacionados