Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Capitulo I
Capitulo I
CAPITULO I
Java
Pagina N 1
CAPITULO I
CAPITULO I
Multitarea Clase Thread Metodos principales Caso Desarrollado Caso Propuesto
Pagina N 2
CAPITULO I
MULTITAREA-MULTIPROCESO
INTRODUCCIN: normalmente las aplicaciones son ejecutadas de forma secuencial, en conclusion un programa con un unico flujo de control, ejecuta solo una tarea(hilo). Historicamente los sistemas de computo personales solo han tenido un unico CPU, al volverse mas poderosos se desarrollo Sistemas Operativos Multitarea (MultiHilo), Multiproceso. HILOS: Un Hilo o thread es un flujo de control secuencial de un programa. Una aplicacin puede generar dos o mas hilos de ejecucion, los cuales siempre dependeran de la aplicacin principal. Ejm: Imprimir diferentes mensajes desde una aplicacin principal. CARACTERISTICAS DE LOS HILOS: - Tipicamente las tareas controlan un unico aspecto dentro de un programa. - Todas las tareas comparten los mismo recursos.
Thread 2
Thread 1
Thread 3
Aplicacin Java
DIFERENCIA ENTRE MULTITAREA Y MULTIPROCESO MultiTarea MultiProceso Dos o mas tareas se ejecutan a la vez Dos o mas programas se ejecutan dentro de un mismo programa. aparentemente a la vez, sin necesidad de tener una relacion entre ellos.
LA CLASE THREAD
La forma ms directa para hacer un programa multi-thread es extender la clase Thread, y redefinir el mtodo run(). Este mtodo es invocado cuando se inicia el Thread (mediante una llamada al mtodo start() de la clase thread). El thread se inicia con la llamada al mtodo run y termina cuando termina ste.
Pagina N 3
CAPITULO I
Metodos Principales de la Clase Thread: Metodo activeCount() currentThread() getName() run() Descripcion Retornar el numero de hilos activos en el hilo actual Vuelve una referencia al objeto del hilo actualmente en ejecucion. Obtiene el nombre del Hilo Constituye el cuerpo de un hilo en ejecucion. Este es el unico metodo de la interfaz Runnable. Es llamado por el metodo Start() despues de que el hilo apropiado del sistema se haya inicializado. Siempre que el metodo run devuelva el control, el hilo se detendra. Suspende la ejecucion del hilo. Inicia la ejecucion del hilo, se ejecuta el metodo Run Retorna una cadena con informacion del hilo, incluye su nombre y su prioridad.
Pagina N 4
CAPITULO I
Caso Desarrollado:
Se desea controlar la marcacion de los empleados de una Empresa. Crear los siguientes Paquetes: Empresa Aqui se almacenaran todos las clases tipo Formulario. Empresa.Clases Aqu se almacenaran las clases y sus Arreglos. Empresa.Imagenes Aqu se almacenaran las imgenes utilizadas en el Menu. Crear las siguientes clases: Marcacion Arreglo de Marcacion Atributos privados para Dni, Fecha y Hora tipo String. Mtodo constructor que inicialice los atributos Metodos get de todos los atributos Declarar como privado el ArrayList Mat de tipo Marcacion. Mtodo constructor que cree el objeto Mat ArrayList de tipo Marcacion e invoque al mtodo cargar. Mtodo adiciona, que se encargara de agregar una marcacion en el ArrayList. Mtodo obtener, que devuelve la matriz de elementos de acuerdo a la posicion en el arreglo. Mtodo buscar, es el encargado de comparar si el dni ingresado existe en el ArrayList o no, dependiendo de eso deber devolver el objeto encontrado, caso contrario devolver null. Mtodo getTamao, que devuelva el tamao del Arraylist. Mtodo cargar que permita ingresar al archivo Marcacion.txt y devuelva los valores registrados. Mtodo grabar que permita almacenar los nuevos valores ingresados al archivo Marcacion.txt.
En la clase frmMenu disear un Menu de opciones como se muestra en las siguientes imgenes.
Pagina N 5
CAPITULO I
Clase Marcacion: package Empresa.Clases; public class Marcacion { private String dni; private String fecha; private String hora; public Marcacion(String dni,String fecha,String hora){ this.dni=dni; this.fecha=fecha; this.hora=hora; } public String getDni(){ return dni; }
Autor: Lic. Manuel TORRES Pagina N 6
CAPITULO I
public String getFecha(){ return fecha; } public String getHora(){ return hora; } } Clase ArregloMarcacion: package Empresa.Clases; import import import import import import import import java.io.BufferedReader; java.io.File; java.io.FileReader; java.io.FileWriter; java.io.PrintWriter; java.util.ArrayList; java.util.StringTokenizer; javax.swing.JOptionPane;
public class ArregloMarcacion { private ArrayList <Marcacion> Mar; public ArregloMarcacion(){ Mar=new ArrayList<Marcacion>(); cargar(); } public void adiciona(Marcacion m){ Mar.add(m); } public Marcacion obtener(int pos){ return Mar.get(pos); } public Marcacion buscar(String dni){ for(Marcacion m:Mar){ if (m.getDni().equals(dni)) return m; } return null; } public int getTamao(){ return Mar.size(); }
Pagina N 7
CAPITULO I
public void cargar(){ try{ File archivo = new File("Marcacion.txt"); if (archivo.exists()){ BufferedReader br=new BufferedReader(new FileReader("Marcacion.txt")); String linea; while((linea=br.readLine())!=null){ StringTokenizer st=new StringTokenizer(linea,","); String dni=st.nextToken().trim(); String fecha=st.nextToken().trim(); String hora=st.nextToken().trim(); Marcacion x=new Marcacion(dni,fecha,hora); adiciona(x); } br.close(); } else JOptionPane.showMessageDialog(null, "El archivo de texto no existe"); } catch(Exception x){ JOptionPane.showMessageDialog(null, "Se produjo un Error "+x); } } public void grabar(){ try{ PrintWriter pw=new PrintWriter(new FileWriter("Marcacion.txt")); for(int i=0;i<getTamao();i++){ pw.println(obtener(i).getDni()+","+ obtener(i).getFecha()+","+ obtener(i).getHora()); } pw.close(); JOptionPane.showMessageDialog(null, "Registro su Entrada Correctamente"); }catch(Exception ex){ JOptionPane.showMessageDialog(null,"Error de Datos","Aviso", JOptionPane.ERROR_MESSAGE); } } } Clase frmMarcacion: package Empresa; import Empresa.Clases.ArregloMarcacion; import Empresa.Clases.Marcacion; import Empresa.Clases.reloj; import java.util.Calendar; import java.util.GregorianCalendar;
Autor: Lic. Manuel TORRES Pagina N 8
CAPITULO I
import javax.swing.JOptionPane; public class frmMarcacion extends javax.swing.JInternalFrame { GregorianCalendar fecha=new GregorianCalendar(); ArregloMarcacion aM=new ArregloMarcacion(); public frmMarcacion() { initComponents(); reloj objR=new reloj(lblReloj); objR.start(); int dia=fecha.get(Calendar.DAY_OF_MONTH); int mes=fecha.get(Calendar.MONTH); int ao=fecha.get(Calendar.YEAR); lblFecha.setText(""+dia+"/"+(mes+1)+"/"+ao); } private void btnRegistrarActionPerformed() { try{ Marcacion m=aM.buscar(getDni()); if (m==null){ m=new Marcacion(getDni(),getFecha(),getHora()); aM.adiciona(m); aM.grabar(); limpiaCajas(); } } catch(Exception ex){ JOptionPane.showMessageDialog(this, "Error al Registrar datos"); } } //Metodos Propios public String getDni(){ return txtDni.getText(); } public String getFecha(){ return lblFecha.getText(); } public String getHora(){ return lblReloj.getText(); } void limpiaCajas(){ txtDni.setText(""); txtDni.requestFocus(); }
Pagina N 9
CAPITULO I
Clase frmReporte: package Empresa; import Empresa.Clases.ArregloMarcacion; import Empresa.Clases.Marcacion; public class frmReporte extends javax.swing.JInternalFrame { ArregloMarcacion aM=new ArregloMarcacion(); public frmReporte() { initComponents(); listar(); } void listar(){ for(int i=0;i<aM.getTamao();i++){ Marcacion m=aM.obtener(i); tMarcacion.setValueAt(m.getDni(), i, 0); tMarcacion.setValueAt(m.getFecha(), i, 1); tMarcacion.setValueAt(m.getHora(), i, 2); } } private void btnSalirActionPerformed(java.awt.event.ActionEvent evt) { this.dispose(); } Clase frmMenu: private void miMarcacionActionPerformed(java.awt.event.ActionEvent evt) { frmMarcacion objM=new frmMarcacion(); Fondo.add(objM); objM.show(); } private void miReporteActionPerformed(java.awt.event.ActionEvent evt) { frmReporte objR=new frmReporte(); Fondo.add(objR); objR.show(); }
Pagina N 10
CAPITULO I
import java.text.SimpleDateFormat; import java.util.Date; import javax.swing.JLabel; //Creando la Clase Reloj heredada de la Clase Thread (Hilo) public class Reloj extends Thread { JLabel lblReloj;
//Creando el Constructor
public Reloj(JLabel lblReloj) { this.lblReloj=lblReloj; } //Codigo de Funcionamiento del Reloj public void run(){ while(true){ Date Hoy=new Date(); SimpleDateFormat sdf=new SimpleDateFormat("hh:mm:ss aa"); lblReloj.setText(sdf.format(Hoy)); try{ sleep(1000); } catch(Exception ex) { ; } } } }
Caso Propuesto:
Se desea controlar la Venta de los productos de una Tienda. Crear los siguientes Paquetes: Tienda Tienda.Clases Tienda.Imagenes Aqui se almacenaran todos las clases tipo Formulario. Aqu se almacenaran las clases y sus Arreglos. Aqu se almacenaran las imgenes utilizadas en el Menu.
Crear las siguientes clases: Venta Atributos privados para Numero de Venta, Fecha, Hora y Monto Total de la Venta. Mtodo constructor que inicialice los atributos. Metodos get de todos los atributos. Declarar como privado el ArrayList Ven de tipo Venta. Mtodo constructor que cree el objeto Ven ArrayList de tipo Venta e invoque al mtodo cargar. Mtodo adiciona, que se encargara de agregar una venta en el ArrayList. Mtodo obtener, que devuelve la matriz de elementos de acuerdo a la posicion en el arreglo. Mtodo buscar, es el encargado de comparar si el Numero de Venta ingresado existe en el ArrayList o no, dependiendo de eso deber devolver el objeto encontrado, caso contrario devolver null. Mtodo getTamao, que devuelva el tamao del Arraylist. Mtodo cargar que permita ingresar al archivo Ventas.txt y devuelva los
Arreglo de Venta
Clase Reloj
Pagina N 11
CAPITULO I
valores registrados. Mtodo grabar que permita almacenar los nuevos valores ingresados al archivo Ventas.txt.
Pagina N 12