Vous êtes sur la page 1sur 43

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 CONSTRUCTORES


Los 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 | A
14 a 16.99 | B
11 a 13.99 | C
00 a 10.99 | D
Diseñe un programa que permita ingresar el promedio ponderado de
unalumno por vez y obtener luego de cada ingreso la siguiente
información:
Numero de alumnos ingresados
Numero de alumnos por categoría
Promedio 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);


Ing . Ivan Petrlik

System.out.println("¿Desea ingresar promedio de otro alumno?\n"+


"SI : [1]\n"+
"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; }
}
Ing . Ivan Petrlik

Un almacén ofrece descuentos según la hora de compra:

| 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;
}
Ing . Ivan Petrlik

public int TipodeHorario( )throws IOException{

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;
}
Ing . Ivan Petrlik

};break;
}

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.000
500001-1000000 | 160.000
1000001-1500000 | 320.000
1500001-2500000 | 450.000
2500001-4000000 | 550.000
Má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 corresponde
Solucion :
package Dominio_Aplicacion;

import java.io.*;
public class Programa05 {
Programa05 obj_ Programa05; //se crea una referencia
String 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());
Ing . Ivan Petrlik

}while (op==1);
}
}

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% pino
20% oyamel
10% cedro
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% pino
30% oyamel
20% cedro
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
A 2.50 2.00
B 2.00 1.50
C 1.50 1.00
Así mismo, el obrero recibe una bonificación especial de acuerdo a la
cantidad que produce:
Unidades Producidas Bonificación (%)
1 – 250 0.00
251 – 500 50.00
501 – 1000 100.00
Ing . Ivan Petrlik

1001 – mas 150.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 :

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
nombre_clase public class nombre_clase {

public class nombre_clase {


nombre_clase
public nombre_clase ( ) {
nombre_clase() }
Constructor }

nombre_clase public class nombre_clase {


inr dato1 int dato1 ;
String cadena String cadena ;
}

public class nombre_clase {


int dato1 ;
nombre_clase public static void main(String args [ ]){
inr dato1 }
public void sumar(int a , int b){
main(String args[ ]) : static void }
sumar(int a, int b) : void public int restar( ){
restar() : int return r;
nombre_clase() }
public nombre_clase ( ) {
}
}
Asociación
Unidireccional
Generalización (herencia)
Dependencia
Ing . Ivan Petrlik

A continuación vamos a modelar un paquete :

paquete1

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.
A +objB 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

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

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 } };
String nomb[ ] [ ] = { { “ivan”,”carlo”} , {”beto”,”wily”} };
Ing . Ivan Petrlik

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

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 THREAD


La 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:

Lla clase
hereda de la
clase Thread

public class ClaseHilo extends Thread {

public void run () { Este método me


permite la
ejecución
}

public static void main (String x[ ] ) {


Método
ClaseHilo objHilo1= new ClaseHilo( ); principal de
ejecución del
objHilo1 . start ( ) ; programa

Este es la forma de
}
Método que me
crear un hilo permite la invocación
utilizando el principio del método run ( )
de herencia
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

consola proceso

Hilo
Ing . Ivan Petrlik

Paso 03:

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

consola proceso

Hilo
Ing . Ivan Petrlik

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:

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
Ing . Ivan Petrlik

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 Thread
public class TortugaThread extends {

public void run() {


int i=0;

System.out.println("Comienza
A continuación vamos la tortuga..");
a mostrar la solución a través de una aplicación en java.
Creamos la clase TortugaThread
while(i<5) {

try {
Thread.sleep(5000);

System.out.println("Tortuga..");

}catch(Exception ex ) { }

i++;
}

System.out.println("Termina la tortuga");

} }
Ing . Ivan Petrlik

public class AplicHilo1 {

public static void main(String args[]) {

TortugaThread Hilotortuga = new TortugaThread();


Hilotortuga . start();

}
public class ClaseHilo implements Runnable {

public void run () {

}
2. UTILIZADO LA IMPLEMENTACION DE LA
INTERFAZ RUNNABLE
public
La clase en lastatic void
cual se tienemain (String una
implementar x[ ]iterfaz
) { Runnable y además
de nombre
dentro de su estructura se tiene que implementar obligatoriamente el método run ( ).
Thread objHilo1= new Thread( new ClaseHilo( ) );
Sintaxis: objHilo1 . start ( ) ;
Implementacion a la
Interfaz Runnable
}

}
Metodo de Metodo
ejecución del principal
hilo

Forma de crear un
hilo a traves de Aquí se esta
la implementacion Metodo que me enviando el objeto
de la interfaz permite la de la clase
Runnable invocación del ClaseHilo al
metodo run()
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

public class AplicHilo1 {

public static void main(String args[]) {

Thread Hiloliebre=new Thread( new LiebreThread ( ) );

Hiloliebre.start();
}

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 :
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 public class LiebreThread implements


Thread { Runnable {
public void run() { public void run() {
int i=0; int i=0;
System.out.println("Comienza la System.out.println("Comienza la liebre..");
tortuga.."); while(i<5) {
while(i<5) { try {
try { Thread.sleep(2000);

Thread.sleep(5000); System.out.println("Liebre..");
System.out.println("Tortuga.."); }
} catch(Exception ex) { }
catch(Exception ex ) { } i++;
i++; } }
System.out.println("Termina la tortuga"); 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:

Vous aimerez peut-être aussi