sesion 2 _lp3_lp5

62
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

Upload: ivanpetrlik

Post on 12-Jun-2015

1.133 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Sesion 2 _LP3_LP5

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

Page 2: Sesion 2 _LP3_LP5

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 ();

Page 3: Sesion 2 _LP3_LP5

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 ) ; }

Page 4: Sesion 2 _LP3_LP5

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; }

Page 5: Sesion 2 _LP3_LP5

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();

}

Page 6: Sesion 2 _LP3_LP5

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 ; } }

Page 7: Sesion 2 _LP3_LP5

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 ){

}

Page 8: Sesion 2 _LP3_LP5

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(); }

Page 9: Sesion 2 _LP3_LP5

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"+

Page 10: Sesion 2 _LP3_LP5

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:

Page 11: Sesion 2 _LP3_LP5

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{

Page 12: Sesion 2 _LP3_LP5

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; }

Page 13: Sesion 2 _LP3_LP5

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);}

Page 14: Sesion 2 _LP3_LP5

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" ;}}

Page 15: Sesion 2 _LP3_LP5

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 :

Page 16: Sesion 2 _LP3_LP5

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.

Page 17: Sesion 2 _LP3_LP5

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()

Page 18: Sesion 2 _LP3_LP5

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

Page 19: Sesion 2 _LP3_LP5

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”};

Page 20: Sesion 2 _LP3_LP5

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 } };

Page 21: Sesion 2 _LP3_LP5

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 ; } }

Page 22: Sesion 2 _LP3_LP5

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=”);

Page 23: Sesion 2 _LP3_LP5

Ing . Ivan Petrlik

}

Page 24: Sesion 2 _LP3_LP5

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

Page 25: Sesion 2 _LP3_LP5

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.

Page 26: Sesion 2 _LP3_LP5

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 ( )

Page 27: Sesion 2 _LP3_LP5

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

Page 28: Sesion 2 _LP3_LP5

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

Page 29: Sesion 2 _LP3_LP5

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

Page 30: Sesion 2 _LP3_LP5

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();

}

}

Page 31: Sesion 2 _LP3_LP5

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

Page 32: Sesion 2 _LP3_LP5

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");

} }

Page 33: Sesion 2 _LP3_LP5

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(); }

}

Page 34: Sesion 2 _LP3_LP5

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 :

Page 35: Sesion 2 _LP3_LP5

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 :

Page 36: Sesion 2 _LP3_LP5

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 :

Page 37: Sesion 2 _LP3_LP5

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 :

Page 38: Sesion 2 _LP3_LP5

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:

Page 39: Sesion 2 _LP3_LP5

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");

} }

Page 40: Sesion 2 _LP3_LP5

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(); }

}

Page 41: Sesion 2 _LP3_LP5

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:

Page 42: Sesion 2 _LP3_LP5

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:

Page 43: Sesion 2 _LP3_LP5

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

Page 44: Sesion 2 _LP3_LP5

Ing . Ivan Petrlik

Solución:

Page 45: Sesion 2 _LP3_LP5

Ing . Ivan Petrlik