sesion 2 _lp3_lp5
TRANSCRIPT
Ing . Ivan Petrlik
UNIVERSIDAD PERUANA DE LAS AMERICAS
FACULTAD DE INGENERIA DE COMPUTACION Y SISTEMAS
MANUAL MIXTO DEL LENGUAJE DE PROGRAMACION JAVA
ELABORADO POR :
ING.CIP.IVAN PETRLIK AZABACHE
LIMA , MAYO DEL 2009
Ing . Ivan Petrlik
PROGRAMACIÓN ORIENTADO A OBJETOS
1. DEFINICIÓN: Es un nuevo Estilo de programación con base en aspectos del mundo real llevando el modelo de DIA a DIA al área de programación.
La p.o.o reúne una serie de conceptos fundamentales que a continuación vamos a especificarlos.
2. OBJETO: Los objetos se refieren a entes del mundo real que poseen datos y funciones (métodos).
3. CLASE: Es un conjunto de objetos y una plantilla genérica de objetos, nosotros lo identificamos como la estructura de una clase en java.
4. HERENCIA : Es un concepto de la p.o.o quemme permite la reutilización de codigo y la transferencia de datos y metodos de clases Superiores a clases Inferiores .
5. POLIMORFISMO : Es cuando un metodo posee distintos comportamientos.
6. ENCAPSULAMIENTO : Es el control de acceso de los datos hacia los metodos.
7. CREACIÓN DE UN OBJETO Sintaxis : operador que me permite la creación del objeto
Clase objeto=new Clase( ) ; Invocación al constructor Ejemplo : Profesor obj_Ivan= new Profesor() ; Alumno obj_Alberto= new Alumno ();
Ing . Ivan Petrlik
8. DEFINICIÓN DE UNA FUNCION DE OBJETO
UNA FUNCION QUE NO RETORNA VALOR( VOID ) :
Modificador de tipo lista de parametros de ingreso Acceso de funcion
public void nombreFuncion( < parámetros>){
}
Ejemplo: Crear una funcion que no retorne valor (void) que me permita
calcular el promedio total de 5 notas de un alumno y mostrar el resultado por pantalla.Solucion :
public void calcularProm( int n1 , int n2 , int n3 , int n4 , int n5 ){ double prom; prom= (double) (n1+n2+n3+n4+n5)/5;
System.out.println(“ El Promedio es = “ + prom ) ;
} Crear una function que no retorne valor ( void ) que me permita
calcular el mayor de 2 numeros Enteros . Solucion :
public void calcularMayor( ){ int a= 90 , b= 45 , mayor ;
if( a > b ) { mayor=a; } else { mayor=b; } System.out.println(“ El Mayor es = “ + mayor ) ; }
Ing . Ivan Petrlik
Crear 2 Funciones que no retornen valor en la cual la primera funcion me permita Generar Aleatoriamente 10 Numeros Enteros y guardarlos en un Arreglo Unidimensional de tamaño 10 , la Segunda Funcion permite recorrer nuevamente los elementos almacenados en memoria e ir mostrandolo por pantalla .Sabiendo que el arreglo unidimensional esta declarado globalmente(de clase)
int x [ ] = new int [ 10 ] ;
Solucion :
public void generarGuardarAlArregloUni( ){
for(int i=0; i< x.length ; i++ ) {
x[ i ] = (int )( Math.random()*99 )+1 ;
} }
public void mostrarDatosArreglo( ){ for(int i=0; i< x.length ; i++ ) { System.out.println(“ “ + x [ i ] ) ;
} }
UNA FUNCION QUE SI RETORNA VALOR( RETURN ) :
Modificador de tipo lista de parametros de ingreso Acceso de funcion
public Tipo nombreFuncion( < parámetros>){ return var; }
Ing . Ivan Petrlik
9. INVOCACIÓN DE UNA FUNCION DE OBJETO
Objeto creado la funcion creada parámetros que se van a enviar a la funcion
objeto . funcion (<parámetros >) ;
Ejemplo : Supongamos :
Profesor obj_ivan = new Profesor() ; obj_ivan. Enseñar(); obj_ivan . Calificar(15,18);
Alumno obj_larissa ; obj_larissa = new Alumno ( ) ; obj_larissa . Estudiar(); obj_larissa . Dormir() ;
10. Constructor
Un Constructor es una Función Especial que posee el mismo nombre de una clase , además me permite inicializar variables y crear objetos automáticamente .Por defecto una clase tiene un constructor sin parámetros y siempre es visible (public)Sintaxis : public nombre_clase ( ) {
}Ejemplo :
public Persona ( ) {
nombre= “ ivan “; conta = 0; }
public Alumno ( ) {
obj_ivan=new Profesor();
}
Ing . Ivan Petrlik
11. Estructura básica de un programa java O.O
package nombre_paquete ;
import java.io.*;
public class nombre_clase {
int contador , acumulador ; // variable global
public static void main(String args [ ] ) {
nombre_clase objeto ; objeto = new nombre_clase ( ) ;
objeto . funcion1 ( 3, 6 ) ;
int suma = objeto . funcion2 ( ) ; System.out.println(“La suma es = “ +suma) ; }// - - - implementacion de funciones propias - - - - - -
public void funcion1(int a , int b){ int suma ; suma = a + b ;
System.out. println(“la suma = “ +suma) ; }
public int funcion2 ( ) { int sum , a =90 , b= 5 ; sum= a + b ; return sum ; }// - - - - - - - - - - - - - - - - - - - - - - - - - - - - -public nombre_clase ( ) { acumulador = 0 ; contador = 0 ; } }
Ing . Ivan Petrlik
12. SOBRECARGA DE FUNCIONES (METODOS) Una sobrecarga de Funciones es aquella en la cual una funcion se repite mas de una sola vez pero con distintos tipos de para metros de ingreso : Ejemplo : dentro de una clase podemos implementar mas de una funcion suma logrando el objetivo de sobrecargar dicha funcion
public void suma ( int a ,int b ) {
}public void suma ( ) {
}public int suma ( int a ) {
}public void suma ( int a ,int b, String cad ) {
}
13. SOBRECARGA DE CONSTRUCTORESLos Constructores tambien se pueden sobrecargar , en una clase puede haber mas de un constructor .
Ejemplo : Un constructor se le conoce por que tiene el mismo nombre de su clase
public persona( ){
}public persona(String nombre ){
}public persona( String nombre , int edad ){
}public persona( String nombre , int edad , String sexo ){
}
Ing . Ivan Petrlik
14.EJERCICIOS DESARROLLADOS
El movimiento de un proyectil viene dado por la siguiente Ecuación: H = 24 + 34*T + 2*T^2 Siendo H la altura que alcanza el proyectil en metros para un tiempo de T en segundos.Diseñe un programa que imprima una tabla de valores de T vs H para valores del tiempo en el intervalo de 0 a 50 segundos cada 4 segundos.Solucion :
package dominio_aplicacion;public class Programa01 { String titulo ; // esta variable se le asigan una cadena en el //constructor public static void main (String args[]){ Programa01 obj_Programa01; obj_Programa01 = new Programa01( ) ; obj_Programa01.Ecuacion(); } Public void Ecuacion(){ int h; System.out.print(titulo); for (int t=0;t<=50;t=t+4){ h=24+34*t+2*(int)(Math.pow(t,2)); Imprimir(t,h); } } public void Imprimir(int tiempo, int altura){ System.out.print(" "+tiempo+" ===> "+altura+"\n"); } public Programa01() {
titulo="Tiempo vs Altura\n=================" ; }}
Juan quiere saber qué valores divisibles en 11 y en 15 existen en el rango de 0 a 1000 con el fin de ayudarle a hacer la tarea a su hermanita que está en primaria.Juan desea adquirir un programa que calcule dichos números y los imprima en pantalla
package dominio_aplicacion;public class Programa02 { String titulo ; public static void main (String args[]){
Programa01 obj_Programa02 = new Programa01( ) ;
obj_Programa02.NumerosDivisibles(); }
Ing . Ivan Petrlik
public void NumerosDivisibles(){ System.out.print(titulo); for (int i=1;i<=1000;i++){ if (i%11==0 & i%15==0) System.out.print(i+"\n"); } } public Programa02() { titulo ="Números divisibles entre 11 y 15:\n"; }}
En un instituto los alumnos se categorizar de acuerdo con su promedio ponderado del ciclo anterior de la siguiente forma:Promedio | Categoria-------------------------17 a 20 | A14 a 16.99 | B11 a 13.99 | C00 a 10.99 | DDiseñe un programa que permita ingresar el promedio ponderado de unalumno por vez y obtener luego de cada ingreso la siguienteinformación:Numero de alumnos ingresadosNumero de alumnos por categoríaPromedio ponderado maximo y minimo
Solucion :package Dominio_Aplicacion;import java.io.*;public class Programa03 {
public int cont_A=0,cont_B=0,cont_C=0,cont_D=0;public double max=0,min=20;public void main (String args[]) throws IOException{double prom; BufferedReader teclado=new BufferedReader(new InputStreamReader(System.in)); Programa03 obj_ Programa03=new Programa03 ( ); int i=0,op; do{ i+=1; System.out.print("Ingrese su promedio");objeto prom = Double.parseDouble (teclado.readLine());
obj_ Programa03. Categorizar(prom);
System.out.println("¿Desea ingresar promedio de otro alumno?\n"+ "SI : [1]\n"+
Ing . Ivan Petrlik
"NO : [2] "); op=Integer.parseInt(teclado.readLine()); }while (op==1);
objeto
obj_ Programa03. Mostrar(i); }
public void Categorizar(double prom){ if (prom>=0 & prom<=10.99){ cont_D+=1; }else{ if (prom>=11 & prom<=13.99){ cont_C+=1; }else{ if (prom>=14 & prom<=16.99){ cont_B+=1; }else{ if (prom>=17 & prom<=20){ cont_A+=1; } } } } if( prom>max) max=prom; if( prom< min) min=prom ; }public void Mostrar( int i){ System.out.println("Número de alumnos ingresados: "+i+"\n"+ "Número de alumnos Categoria A: "+cont_A+"\n"+ "Número de alumnos Categoria B: "+cont_B+"\n"+ "Número de alumnos Categoria C: "+cont_C+"\n"+ "Número de alumnos Categoria D: "+cont_D+"\n"+ "Promedio máximo: "+max+"\n"+ "Promedio mínimo: "+min); } public Programa03() { cont_A=0; cont_B=0; cont_C=0; cont_D=0; } }
Un almacén ofrece descuentos según la hora de compra:
Ing . Ivan Petrlik
| 7:30 a 8:30 a.m | 8:30 a 9:30 a.m| Otra hora------------------------------------------------------------------------------------Frutas y verduras | 10% 5% 0%Productos de aseo | 05% 2% 0%Carnes | 05% 2% 0%Ropa | 10% 8% 0%Licores | 08% 6% 0% Realizar un programa en JAVA que calcule el descuento de acuerdo a la hora de compra.(Usar-switch-case)
Solucion :package Dominio_Aplicacion;
import java.io.*;public class Programa04 { String entrada;
public static void main (String args[])throws IOException{ int producto,horario; double precio ; Programa04 obj_Programa04=new Programa04 ( ) ;
producto= obj_Programa04.TipodeProducto(); horario= obj_Programa04.TipodeHorario(); System.out.print("\t\t\t\tIngrese el precio del producto\n\n"); precio=Double.parseDouble(obj_Programa04.IngresoTeclado());
obj_Programa04.MostrarDescuento(producto,horario,precio); } public String IngresoTeclado()throws IOException{ BufferedReader teclado=new BufferedReader(new InputStreamReader(System.in)); return teclado.readLine(); } public int TipodeProducto()throws IOException{ int tipoProd; System.out.print("\t\t\t\tEscoga el tipo de producto\n"+ "Frutas y verduras : [1]\n"+ "Productos de aseo : [2]\n"+ "Carnes : [3]\n"+ "Licores : [4]\n\n "); tipoProd=Integer.parseInt(IngresoTeclado());
return tipoProd; }
public int TipodeHorario( )throws IOException{
Ing . Ivan Petrlik
int tipoHorario; System.out.print("\t\t\t\tEscoga el tipo de horario\n"+ "7:30 a 8:30 a.m. [1]\n"+ "8:30 a 9:30 a.m. [2]\n"+ "Otra hora [3]\n\n");
tipoHorario=Integer.parseInt(IngresoTeclado());
return tipoHorario ; } public void MostrarDescuento(int prod,int hor,double precio){ double desc=0; switch (prod){ case 1 : { switch (hor){ case 1 : desc=precio*0.1;break; case 2 : desc=precio*0.05;break; case 3 : desc=0;break; } };break; case 2 : { switch (hor){ case 1 : desc=precio*0.05;break; case 2 : desc=precio*0.02;break; case 3 : desc=0;break; } };break; case 3 : { switch (hor){ case 1 : desc=precio*0.05;break; case 2 : desc=precio*0.02;break; case 3 : desc=0;break; } };break; case 4 : { switch (hor){ case 1 : desc=precio*0.1;break; case 2 : desc=precio*0.08;break; case 3 : desc=0;break; } };break; case 5 : { switch (hor){ case 1 : desc=precio*0.08;break; case 2 : desc=precio*0.06;break; case 3 : desc=0;break; } };break; }
Ing . Ivan Petrlik
System.out.print("\t\t\t\tDescuento : "+desc+"\n"+ "Precio Final : "+(precio-desc) ); } public Programa04() { precio =0.0; }}
Una empresa comercializadora contrata vendedores a los cuales les paga un salario que va de acuerdo al total de las ventas realizadas en el mes. La siguiente tabla es tomada como referencia para calcular el sueldo de cada vendedor
Venta ($) | Sueldo ($)------------------------------------------------------------0 – 500000 | 80.000500001-1000000 | 160.0001000001-1500000 | 320.0001500001-2500000 | 450.0002500001-4000000 | 550.000Más de 4000000 | 20 % de las ventas
Realizar un programa en JAVA que sistematice este procedimiento y al ingresar las ventas de un empleado inmediatamente muestre el sueldo que le correspondeSolucion :
package Dominio_Aplicacion;
import java.io.*;public class Programa05 {Programa05 obj_ Programa05; //se crea una referenciaString msg1,msg2,msg3;public static void main (String args[])throws IOException{obj_ Programa05= new Programa05 ( ) ; int op;do{System.out.print(msg1);double valor=Double.parseDouble(IngresoTeclado());
obj_ Programa05 .CalcularSueldo(valor); //invocando
System.out.println(msg2);op=Integer.parseInt(IngresoTeclado());
}while (op==1);}
Ing . Ivan Petrlik
}
public void CalcularSueldo(double venta){double sueldo=0;if (venta>=0 & venta<=500000){sueldo=80;}else{if (venta>=500001 & venta<=1000000){sueldo=160;}else{if (venta>=1000001 & venta<=1500000){sueldo=320;}else{if (venta>=1500001 & venta<=2500000){sueldo=450;}else{if (venta>=2500001 & venta<=4000000){sueldo=550;}else{if (venta>4000000){sueldo=venta*0.2;}}}}}}String mensajeTotal="Su sueldo es: $" + sueldo ;
ImprimirResultado (mensajeTotal);
}public String IngresoTeclado()throws IOException{BufferedReader teclado=new BufferedReader(new InputStreamReader(System.in));return teclado.readLine();}public void ImprimirResultado ( String mensaje){
System.out.println( mensaje ) ; }public Programa05() {msg1="\t\t\t\tIngrese el valor de su venta en dolares de la COMERCIALIZADORA\n\n" ;
msg2="Ingresar datos de otro vendedor?\n"+ "SI : [1]\n"+ "NO : [2]\n" ;}}
Ing . Ivan Petrlik
15.Ejercicios para la casa
Calcular la comisión sobre las ventas totales de un empleado, sabiendo que el empleado no recibe comisión si la venta es hasta S/.150.00, si la venta es superior a S/.150.00 y menor e igual a S/.400.00 el empleado recibe una comisión del 10% de las ventas y si las ventas son mayores a S/.400.00, entonces la comisión es del 10% para las ventas entre S/.150.00 y S/.400.00 y del 15% para las ventas superiores a S/.400.00.
El gobierno del estado Peruano desea reforestar un bosque que mide un determinado número de hectáreas. Si la superficie del terreno excede a 1 millón de metros cuadrados, entonces decidirá sembrar de la siguiente manera:
Superficie del bosque (%)
Tipo de árbol
70%20%10%
pinooyamelcedro
Si la superficie del terreno es menor o igual a un millón de metros cuadrados, entonces decidirá sembrar de la siguiente manera:
Superficie del bosque (%)
Tipo de árbol
50%30%20%
pinooyamelcedro
El gobierno desea saber el numero de pinos, oyameles y cedros que tendrá que sembrar en el bosque, si se sabe que en 10 metros cuadrados caben 8 pinos, en 15 metros cuadrados caben 15 oyameles y en 18 metros cuadrados caben 10 cedros. También se sabe que una hectárea equivale a 10 mil metros cuadrados.
Calcular el pago de un obrero que trabaja al destajo. El pago que recibe el obrero por cada unidad producida depende de su categoría y del tipo de producto que produce, como se muestra en el siguiente cuadro:
Tarifa (S/. x unidad)Categoría Tejas Losetas
ABC
2.502.001.50
2.001.501.00
Así mismo, el obrero recibe una bonificación especial de acuerdo a la cantidad que produce:
Unidades Producidas Bonificación (%)1 – 250
251 – 500501 – 10001001 – mas
0.0050.00
100.00150.00
Además del total de ingresos se descuenta 75 por seguro.
Diseñar programa que me permita mostrar por pantalla los siguientes elementos Enteros de Este Arreglo Unidimensional :
Ing . Ivan Petrlik
A través de un arreglo Unidimensional inicializado con dichos elementos.
En base a la Primera Pregunta Mostrar por pantalla solamente aquellos elementos numéricos Enteros que sean Pares.
Diseñar un programa que me permita Generar Aleatoriamente
Números Enteros entre un rango de 1 a 100 , almacenar dichos números a un arreglo Unidimensional de tamaño 40 , sabiendo que se tendrá que mostrar por pantalla aquellos que solamente sean pares y múltiplos de 5 .
Diseñar un programa que me `permita Ingresar por teclado 10 números Enteros a un arreglo Unidimensional y mostrar dichos elementos por pantalla.
Programa que me permita asignar Estos Elementos que estan en el siguiente Grafico a un Arreglo Unidimensional de tamaño 11, calcular y mostrar por pantalla el mayor y el menor.
Diseñar un programa que me permita asignar números Enteros a un Arreglo Bidimensional de orden 2 x 2, mostrar todos sus elementos.
Se tiene un Arreglo Bidimensional de orden 4 x 4 , cuyos números generados Aleatoria mente se asignan a dicho arreglo , calcular el mayor y el menor de dicho arreglo asignado .
Programa que me permita definir 2 arreglos Unidimensionales de tamaño 4 cada uno deben de tener elementos almacenados inicialmente , se deben de trasladar ordenadamente sus elementos a un arreglo Bidimensional de orden 2 x 4 , mostrar por pantalla los elementos de dicho arreglo Bidimensional.
Realizar un programa que permita crear una matriz de 5x5 a la cual se le ingresaran los datos por el teclado y que a su vez permita calcular la suma total de sus elementos.
Ing . Ivan Petrlik
MODELAMIENTO DE UNA CLASE ATRAVES DEL (UML)
El Lenguaje de Modelamiento Unificado (UML) nos permite plasmar nuestro código java en un modelo que me permita ser entendible para aquellas personas que no dominan programación y me permite ver en forma holistica la estructura de nuestro programa.
Una clase se modela de la Siguiente Manera : Uml
Constructor
Asociación Unidireccional Generalización (herencia) Dependencia
public class nombre_clase {
}
public class nombre_clase {
public nombre_clase ( ) { } }
public class nombre_clase { int dato1 ; String cadena ; }
public class nombre_clase { int dato1 ;public static void main(String args [ ]){ }public void sumar(int a , int b){ }public int restar( ){ return r; }public nombre_clase ( ) { } }
nombre_clase
nombre_clase
nombre_clase()
nombre_claseinr dato1String cadena
nombre_claseinr dato1
main(String args[ ]) : static voidsumar(int a, int b) : voidrestar() : intnombre_clase()
paquete1
A B+objB
A
B
Ing . Ivan Petrlik
A continuación vamos a modelar un paquete :
Este modelo significa que la clase A depende de la clase B ya que en la clase A se tiene que crear una objeto ( objB ) de la clase B.
Ente modelo que estamos observando significa que la clase B se esta generalizando a una clase A o tambien podemos decir que la clase B hereda de la clase A , viendo de arriba hacia abajo la clase A se esta extendiendo en una clase B .
Aquí estamos viendo que el paquete1 depende del paquete2
Esto que estamos viendo es una Interface que es lo mismo que una clase pero que define un protocolo de programación.
public Interface modulo {
}
paquete1 paquete2
modulo
Ing . Ivan Petrlik
ARREGLOS
DEFINICION : Conjunto de espacios de memoria uno a continuacion del otro.Pertenece a un solo tipo de dato donde cada Espacio de memoria es identificado por un indice.
TIPOS DE ARREGLOS
ARREGLOS UNIDIMENSIONALES(VECTORES)
ARREGLOS BIDIMENSIONALES(MATRICES)
ARREGLO UNIDIMENSIONAL
DECLARACION DE UN ARREGLO UNIDIMENSIONAL EN UNA MISMA LINEA:
int x[ ] = new int [ 3 ] ; String nomb [ ] = new String [ 4 ] ;
DECLARACION DE UN ARREGLO UNIDIMENSIONAL EN DOS LINEAS:
int x [ ] ; x = new int [ 3 ] ; String nomb[]; nomb=new String [ 4 ] ;
DECLARACION E ASIGNACION DE UN ARREGLO UNIDIMENSIONAL
int x[ ]= { 3,5,4,6 };
String nomb[]={ “ivan”,”carlo”,”beto”,”wily”};
Ing . Ivan Petrlik
DECLARACION E ASIGNACION DE UN ARREGLO UNIDIMENSIONAL
int x [ ]= new int [ 3 ]; x [ 0 ] = 3 ; x [ 1 ] = 5 ; x [ 2 ] = 4 ; x [ 3 ] = 6 ;
DECLARACION E INGRESO POR TECLADO A UN ARREGLO UNIDIMENSIONAL
int x [ ] = new int [ 15 ] ; BufferedReader tecla=new BufferedReader (new InputStreamReader(System.in));
for( int i=0 ; i<= x.length ; i++) { x [ i ] =Integer.parseInt(tecla.readLine()); }
MOSTRAR ELEMENTOS DEL ARREGLO UNIDIMENSIONAL
for( int i=0 ; i<= nomb.length ; i++) { System.out.println(“ “+nomb[i]); }
ARREGLO BIDIMENSIONAL
DECLARACION DE UN ARREGLO BIDIMENSIONAL EN UNA MISMA LINEA:
int x [ ] [ ] = new int [ 3 ] [ 3] ; String nomb [ ] [ ] = new String [ 4 ] [ 2] ;
DECLARACION DE UN ARREGLO UNIDIMENSIONAL EN DOS LINEAS:
int x [ ] [ ] ; x = new int [ 3 ] [ 3 ] ; String nomb[ ] [ ] ; nomb=new String [ 4 ] [ 2 ] ;
DECLARACION E ASIGNACION DE UN ARREGLO UNIDIMENSIONAL
int x[ ] [ ] = { {3,5} , { 4 , 6 } };
Ing . Ivan Petrlik
String nomb[ ] [ ] = { { “ivan”,”carlo”} , {”beto”,”wily”} };DECLARACION E ASIGNACION DE UN ARREGLO UNIDIMENSIONAL
int x [ ] [ ] =new int [ 2 ] [ 2 ] ; x [ 0 ] [ 0 ] = 3 ; x [ 0] [ 1 ] = 5 ; x [ 1 ] [ 0 ] = 4 ; x [ 1 ] [ 1 ] = 6 ;
DECLARACION E INGRESO POR TECLADO A UN ARREGLO BIDIMENSIONAL
int x [ ] [ ] = new int [ 2 ] [ 2 ] ;
BufferedReader tecla=new BufferedReader (new InputStreamReader(System.in));
for( int i=0 ; i<=1 ; i++) { for( int j=0 ; j<= 1 ; j++) { x [ i ] [ j ] =Integer.parseInt(tecla.readLine()); } }
ALGORITMO DE ORDENAMIENTO(BURBUJA)
int x []={ 3 , 6 , 1 } ;
int aux ;
for( int i=0; i< x.length; i++) {
for( int j=0; j <x.length; j++) {
if( x [ i ] > x [ j ] ) { aux = x [ i ]; x [ i ] = x [ j ]; x [ j ] = aux ; } }
Ing . Ivan Petrlik
}ALGORITMO DE BUSQUEDA
int x []={ 3 , 6 , 1 } ; int numBuscar;boolean flag=false;System.out.print(“\nIngrese Numero a Buscar”);numBuscar=Integer.parseInt(tecla.readLine());for( int i=0; i< x.length; i++) { if( x [ i ] ==numBuscar) { flag =true; break; } }if( flag ==true ){System.out.print(“\nNumero Encontrado=”+ x [ i ]);}else {System.out.print(“\nNumero no Encontrado=”+ x [ i ]);}
ALGORITMO DE MODIFICACION
int x []={ 3 , 6 , 1 } ; int numBuscar;int numModificar;boolean flag=false;System.out.print(“\nIngrese Numero a Buscar”); numBuscar=Integer.parseInt(tecla.readLine());for( int i=0; i< x.length; i++) { if( x [ i ] ==numBuscar) { System.out.print(“\nIngrese Numero a Modificar”); numModificar=Integer.parseInt(tecla.readLine()); x [ i ]= numModificar; flag =true; break; } }if( flag ==true ){System.out.print(“\nNumero Modificado=”);}else {System.out.print(“\nNumero no Encontrado=”);
Ing . Ivan Petrlik
}
Ing . Ivan Petrlik
THREADS (HILOS)
Conocidos también como procesos ligeros, un thread es un flujo de ejecución secuencial dentro de un proceso., un mismo proceso java puede tener :
a). Un único thread (el thread principal) y por tanto se le llama monotarea. b). Varios threads (por ejemplo el thread principal y el de gestión de eventos). Y por tanto se le llama multitarea.
Monotarea Multitarea
Casi todas las clases referentes al manejo de threads se encuentran en el paquete java.lang.*
MULTIPROCESO VS MULTITAREA
No hay que confundir los dos conceptos, multiproceso significa que el equipo hardware cuenta más de un procesador (CPU) y por tanto ejecuta varias tareas a la vez ,multitarea significa que varias tareas comparten el único procesador (CPU) dándonos la sensación de multiproceso, la multitarea se consigue mediante un planificador de tareas que van dando slots de CPU a cada tarea
Multiproceso Multitarea
Ing . Ivan Petrlik
PROGRAMACIÓN CONCURRENTE EN JAVA
Dentro de un proceso, el control suele seguir un hilo de ejecución, que comienza con main, continúa con el resto de las instrucciones, y termina con el proceso.
Java soporta varios hilos de ejecución y por tanto, los programas de Java pueden crear dentro de sí mismos varias secuencias de ejecución concurrentes.
A diferencia de los procesos concurrentes, que son independientes, los hilos de un mismo proceso comparten el espacio de direcciones virtuales, y los recursos del s.o.
Por tanto, cada hilo tiene acceso a los datos y procedimientos del proceso, pero poseen su propio contador de programa y pila de llamadas a procedimientos.
Los problemas que aparecen con una concurrencia multihilo son los habituales
exclusión mutua y sincronización, y con menor importancia, esquema de prioridades e ínter bloqueos.
Se pueden tener hilos de dos formas: herencia de la clase Thread o implementación de la interfaz Runnable.
ESTADOS DE UN HILO DE EJECUCIÓN
Durante el ciclo de vida de un hilo, éste se puede encontrar en diferentes estados. La figura siguiente muestra estos estados y los métodos que provocan el paso de un estado a otro. Este diagrama no es una máquina de estados finita, pero es lo que más se aproxima al funcionamiento real de un hilo.
Ing . Ivan Petrlik
CREACION DE UN THREAD
Existen dos formas de crear un thread:
1. UTILIZANDO LA HERENCIA A LA CLASE THREADLa clase en la cual se tiene que crear tiene que heredar de la clase Thread y además dentro de su estructura se tiene que implementar el método run ( ).Sintaxis:
public class ClaseHilo extends Thread {
public void run () {
}
public static void main (String x[ ] ) {
ClaseHilo objHilo1= new ClaseHilo( ); objHilo1 . start ( ) ;
}
}
Lla clase hereda de la clase Thread
Este método me permite la ejecución secuencial del hilo
Este es la forma de crear un hilo utilizando el principio de herencia
Método principal de ejecución del programa
Método que me permite la invocación del método run ( )
Ing . Ivan Petrlik
Ejemplo: Paso 01:
A continuación en esta figura estamos viendo en la parte derecha un proceso en la cual se esta ejecutando un hilo a través del método start() donde se traduce en mensaje impreso en la consola que se encuentra a la izquierda .
Consola Proceso
Hilo
Paso 02:
En esta figura observamos que el hilo al cabo de un tiempo determinado ha realizado una primera actividad (hebra) y como vemos esto se traduce en mensaje ( Tortuga ) en la parte de la consola que se encuentra a la izquierda
Paso 03:
consola proceso
Hilo
Ing . Ivan Petrlik
En esta figura observamos que el hilo al cabo de un tiempo determinado ha realizado una segunda actividad (hebra) y como vemos esto se traduce en u segundo mensaje ( Tortuga ) en la parte de la consola que se encuentra a la izquierda
Paso 04:
En esta figura observamos que el hilo al cabo de un tiempo determinado ha realizado una Tercera actividad (hebra) y como vemos esto se traduce en un tercer mensaje ( Tortuga ) en la parte de la consola que se encuentra a la izquierda
consola proceso
Hilo
Paso 05:
consola proceso
Hilo
Ing . Ivan Petrlik
En esta figura observamos al hilo que esta a punto de terminar su ejecución ,hasta el momento ha realizado seis actividades en las cuales se traduce en seis hebras y como vemos en la consola nos muestra seis mensajes ( Tortuga ) que representan a la misma seis actividades o hebras generadas por el hilo .
consola proceso
Hilo
Paso 06:
En esta figura observamos al hilo que ha terminado su ejecución dentro de dicho proceso, donde en la consola ha mostrado su último mensaje (Tortuga).
consola proceso
Hilo
Ing . Ivan Petrlik
A continuación vamos a mostrar la solución a través de una aplicación en java.Creamos la clase TortugaThread
public class TortugaThread extends Thread {
public void run() {int i=0;
System.out.println("Comienza la tortuga..");
while(i<5) {
try {Thread.sleep(5000);
System.out.println("Tortuga..");
}catch(Exception ex ) { }
i++;}
System.out.println("Termina la tortuga");
} }
public class AplicHilo1 {
public static void main(String args[]) {
TortugaThread Hilotortuga = new TortugaThread(); Hilotortuga . start();
}
}
Ing . Ivan Petrlik
2. UTILIZADO LA IMPLEMENTACION DE LA INTERFAZ RUNNABLE
La clase en la cual se tiene implementar una iterfaz de nombre Runnable y además dentro de su estructura se tiene que implementar obligatoriamente el método run ( ).
Sintaxis:
public class ClaseHilo implements Runnable {
public void run () {
}
public static void main (String x[ ] ) {
Thread objHilo1= new Thread( new ClaseHilo( ) ); objHilo1 . start ( ) ;
}
}
Metodo principal
Metodo de ejecución del hilo
Implementacion a la Interfaz Runnable
Forma de crear un hilo a traves de la implementacion de la interfaz Runnable
Metodo que me permite la invocación del metodo run()
Aquí se esta enviando el objeto de la clase ClaseHilo al constructor
Ing . Ivan Petrlik
Ejemplo:
Igual que se mostró en el ejemplo anterior , en cuanto a la ejecución de un hilo ,mostrando una serie de mensajes (Tortuga), ahora bajo el mismo principio del ejercicio anterior , pues ahora se debe de implementar a la clase la interfaz Runnable en la cual la consola del programa debe de mostrar lo siguiente:
Solucion :
public class TortugaThread extends Thread {
public void run() {int i=0;
System.out.println("Comienza la tortuga..");
while(i<5) {try {
Thread.sleep(5000);System.out.println("Tortuga..");
}catch(Exception ex ) { }
i++; } System.out.println("Termina la tortuga");
} }
Ing . Ivan Petrlik
A continuación vamos a ver un ejercicio que nos muestra gráficamente la ejecución de dos hilos paralelamente ( multitarea), aquí nos va a simular la carrera de dos animales en este caso estamos hablando de una Tortuga y una Liebre .
Podemos asumir que en el proceso de ejecución inicialmente se esta iniciando el primer hilo representado por la tortuga, en la parte izquierda observamos una consola de un programa donde nos muestra un mensaje reportándonos que el hilo (Tortuga) ha comenzado su ejecución.
Paso 01 :
public class AplicHilo1 {
public static void main(String args[]) {
Thread Hiloliebre=new Thread( new LiebreThread ( ) );
Hiloliebre.start(); }
}
Ing . Ivan Petrlik
En esta figura observamos que ambos hilos representados por la tortuga y la Liebre ha comenzado su ejecución dentro del proceso , en la consola simultáneamente registra este comportamiento del comienzo de ambos hilos .
Paso 02 :
En esta figura observamos que ambos hilos representados por la tortuga y la Liebre ha comenzado su ejecución dentro del proceso , en la consola simultáneamente registra este comportamiento del comienzo de ambos hilos .
Paso 03 :
Ing . Ivan Petrlik
En esta figura observamos que ambos hilos representados por la tortuga y la Liebre ha comenzado su ejecución dentro del proceso , en la consola simultáneamente registra este comportamiento del comienzo de ambos hilos .
Paso 04 :
En esta figura observamos que ambos hilos representados por la tortuga y la Liebre ha comenzado su ejecución dentro del proceso , en la consola simultáneamente registra este comportamiento del comienzo de ambos hilos .
Paso 05 :
Ing . Ivan Petrlik
En esta figura observamos que ambos hilos representados por la tortuga y la Liebre ha comenzado su ejecución dentro del proceso , en la consola simultáneamente registra este comportamiento del comienzo de ambos hilos .
Paso 06 :
En esta figura observamos que ambos hilos representados por la tortuga y la Liebre ha comenzado su ejecución dentro del proceso , en la consola simultáneamente registra este comportamiento del comienzo de ambos hilos .
Paso 07 :
Ing . Ivan Petrlik
En esta figura observamos que ambos hilos representados por la tortuga y la Liebre ha comenzado su ejecución dentro del proceso , en la consola simultáneamente registra este comportamiento del comienzo de ambos hilos .
Paso 08 :
En esta figura observamos que ambos hilos representados por la tortuga y la Liebre ha comenzado su ejecución dentro del proceso , en la consola simultáneamente registra este comportamiento del comienzo de ambos hilos .
Paso 09 :
Ing . Ivan Petrlik
En esta figura observamos que ambos hilos representados por la tortuga y la Liebre ha comenzado su ejecución dentro del proceso , en la consola simultáneamente registra este comportamiento del comienzo de ambos hilos .
Paso 10 :
En esta figura observamos que ambos hilos representados por la tortuga y la Liebre ha comenzado su ejecución dentro del proceso , en la consola simultáneamente registra este comportamiento del comienzo de ambos hilos .
Paso 11:
Ing . Ivan Petrlik
En esta figura observamos que ambos hilos representados por la tortuga y la Liebre ha comenzado su ejecución dentro del proceso , en la consola simultáneamente registra este comportamiento del comienzo de ambos hilos .
Paso 12:
Terminado el proceso, a continuación vamos a mostrar el código en java que me permite el desarrollo de dicho programa:Solución:
Dentro de nuestro proyecto se debera de crear estas clases , donde cada uno de ellos representa un hilo distinto bajo un mismo proceso .
public class TortugaThread extends Thread { public void run() {
int i=0;System.out.println("Comienza la tortuga.."); while(i<5) { try {
Thread.sleep(5000);System.out.println("Tortuga..");
}catch(Exception ex ) { }
i++; }System.out.println("Termina la tortuga");
} }
public class LiebreThread implements Runnable { public void run() {
int i=0;System.out.println("Comienza la liebre.."); while(i<5) { try {
Thread.sleep(2000);
System.out.println("Liebre..");}
catch(Exception ex) { }i++;
}System.out.println("Termina la liebre");
} }
Ing . Ivan Petrlik
Para que ambos hilo se puedan ejecutar se deberá de crear una clase de nombre Ejecutar, dentro de su método main (), se tendrá que crear dos objetos que seria en este caso los hilos representados por la Tortuga y la Liebre.
public class Ejecutar {
public static void main(String args[]) {
TortugaThread tortuga=new TortugaThread(); Thread liebre=new Thread( new LiebreThread() );
tortuga.start();
liebre.start(); }
}
Ing . Ivan Petrlik
EJERCICIOS DE APLICACIÓN
1. Se pide un programa en Java que me permita a través de un Thread desarrollar un contador que muestre por pantalla números correlativos empezando del 1 hasta el 20
La consola creación del proyecto
Solución:
Ing . Ivan Petrlik
2. Se pide un programa en Java que me permita a través de un Thread implementando la Interfaz Runnable desarrollar un Timer de Tiempo que muestre por pantalla los segundos Transcurridos, cada 60 seg muestre los minutos transcurridos.
La consola creación del proyecto
Solución:
Ing . Ivan Petrlik
3. Se pide un programa en Java que me permita a través de un Thread implementando la Interfaz Runnable , simular el Ingreso de la edad de una persona en un tiempo aleatorio, sabiendo que se registraran 15 personas y se debe de almacenar en la base de datos(ArrayList) de la empresa rimac , el sistema te debe de mostrar un reporte de todas las edades guardada en la base de datos.
La consola creación del proyecto
Ing . Ivan Petrlik
Solución:
Ing . Ivan Petrlik