Beruflich Dokumente
Kultur Dokumente
Orientado al objeto (tendencia en boga) Simple (similar a c, sin complejidades) Multiplataforma (Windows, PowerMac, Unix) Robusto (hace chequeos, elimina punteros) Recoleccin de basura automtica Bibliotecas estndar Realmente portable en un 100% Facilidades para programacin en redes
Java - Caractersticas
Plataforma independiente (portable)
P1.java
P1.class
Compilador de java (especfico x plataforma) javac P1.java Intrprete de java (especfico x plataforma) java P1 (class)
Profesor: Marcelo Montecinos C.
Java - Caractersticas
Java -Mquina Virtual (JVM) JVM Interpretador Java
Ambiente Runtime
Java - Caractersticas
Cmo trabaja la tecnologa Java? (Editor de texto)
Java - Caractersticas
Cmo trabaja la tecnologa Java?
}
Profesor: Marcelo Montecinos C.
// al inicio de es esta
// Este es el esqueleto de un programa en Java class <nombre del Programa> { /* Definiciones globales*/ /* Este es el Mtodo Principal*/ /* Otros Mtodos*/ }
Profesor: Marcelo Montecinos C.
Si quiero comentario de mas de una lnea coloco /* al inicio del comentario y */ al final
Aqu se definen las variables que yo deseo que se puedan utilizar en todo mi programa.
/* Mtodo Principal*/
Cada aplicacin de Java debe tener un mtodo principal llamado main, que define donde comienza el flujo del programa.
10
/* Otros Mtodos*/ }
Programacin I -Java Universidad Tecnolgica de Chile // Este es el esqueleto de un programa en Java class <nombre del Programa> { /* Definiciones globales*/ public static void main (String args[]) { /* Definiciones locales*/ ... ... /* cuerpo de instrucciones */ ... ... } }
Todo el cdigo de un mtodo estar entre la llave de apertura ( { ) y la correspondiente llave de cierre ( } ).
11
// Este es el esqueleto de un programa en Java class <nombre del Programa> { /* Definiciones globales*/
La palabra static permite que main sea llamado por el intrprete de Java antes de que se cree cualquier objeto . La palabra void indica al compilador que main no devuelve ningn valor. String args[], declara una variable args que es una especie de vector que puede contener cadenas de caracteres.
12
// Este es el esqueleto de un programa en Java class <nombre del Programa> { /* Definiciones globales*/ public static void main (String args[]) { /* Definiciones locales*/ ... ... /* cuerpo de instrucciones */ ... ...
Aqu se definen las variables que solo voy a utilizar en el mtodo principal. Despus de cada instruccin se coloca ;
13
Ejemplo
// Este programa escribe un texto class EjemploTexto { public static void main (String args[]) { System.out.println(El que pregunta algo que no entiende se siente ignorante solo una vez, el que no pregunta lo que no entiende se sentir ignorante toda su vida); }
14
Salida de datos Para mostrar un texto por pantalla puedo hacerlo de dos maneras:
System.out.println (texto); System.out.print (texto);
15
System.out.println("hola"); // escribe "hola" System.out.println(5); // escribe 5 int i = 5; System.out.println(i) ; // escribe 5; double d=6.4; System.out.println(d); // escribe 6.4; double d=6.4; System.out.println("d="+d); // escribe d=6.4;
16
17
Declaracin de Variables
18
Definicin de variables
Los datos son almacenados en variables, que se encuentran en la memoria, formados por dos componentes el nombre que las identifica y la celda con el valor almacenado.
Memoria monto 25600.00 carnet 9702634 sexo F nombre Pedro Perez contador 6
19
Tipos de datos
Integer (enteros) Numrico 4 5 237
13.45
20
Tipos de datos
Byte : 8 bits Integer (enteros) Short : 16 bits Int : 32 bits Long : 64 bits -27 ..... 27 1
21
Tipos de datos
Float : 32 bits Floating Point (punto flotante) Double : 64 bits
22
Tipos de datos
Caracteres char : a, z, D, %, s,#.
Cadenas de caracteres
Lgicos
23
enteros: int, long, short, byte Const. 1, -1, 1024, 1L reales: float, double Const. 1.0, -3.14159, 1.5e4, 1.0f caracter: char Const. a, X, @ lgico: boolean Const. true, false Constantes de String: Hola,12 de Abril
Profesor: Marcelo Montecinos C.
24
Declaracin de variables
/* Este programa declara Algunas variables */ class declaraVar { public static void main (String args[]) { int x, y; float z = 3.1416; double w =3.1415; boolean bandera = true; char c; String str; String st1 =Mara; str = blanco; } Profesor: Marcelo Montecinos C. }
25
26
Ejemplo: monto = pvp * cantidad ; Donde pvp y cantidad debern ser variables anteriormente declaradas y con valor previo asignado.
Profesor: Marcelo Montecinos C.
27
28
29
Operadores
Igualdad y desigualdad: == , != Comparacin: <, <=, >, >= Suma y resta unarios: +, Suma, multiplicacin, divisin y mdulo: +, -, *, /, % Incremento y decremento prefijos y posfijos: ++, -Desplazamiento con signo y sin signo: <<, >>, >>> Negacin lgica unaria de bits: ~ Lgica de bits: &, |, ^ Lgica booleana: &&, ||
Profesor: Marcelo Montecinos C.
30
Asignacin
Utilizacin de operadores:
= = = = =
+ * / %
// // // // //
a a a a a
el el el el el
de de de de de
+ * / %
a a a a
32
Expresiones
Grupos de Precedencia
0: 1: 2: 3:
Funciones especiales:
33
Expresiones y asignacin
Aritmeticas: suma + 20 * c / (mod % 3) Relacionales: a > b, b >= c, c != 4, a == 0 De String: hola + nombre + hoy es + dia + de+mes Casts: (int) pi (pi = 3.1) (int) (Math.random()*100)+1) Otros: a == 1 ? a+1 : a-1 Asignacion: a = 1; Asignacin como operador: a = b = c = d = 0; boolean cero = ( b = c - 10) == 0;
Profesor: Marcelo Montecinos C.
34
Conversiones entre tipos Asignar una variable a otra cuyo tipo es mayor de tamao:
byte => short => int => long => float => double
Para pasar de un tipo a otro menor en tamao, tenemos que hacer una conversin explcita de tipos:
(tipo)expresion
Profesor: Marcelo Montecinos C.
35
Conversiones de tipo
Java no reclama si un tipo de menor rango se convierte as uno de mayor rango. byte < short < int < long < float < double
Bits 32 16 8 64 32 64
Rango -2**31 .. 2**31-1 -2**15 .. 2**15-1 -2**7 .. 2**7-1 -2**63 .. 2**63-1 -10**32 .. 10**32
Profesor: Marcelo Montecinos C.
-10**300 .. 10**300
36
Ejemplos
int i = 1; long l = i; //ok l = 1000000000000; float f = l; //ok double d= 1.0e24; int i = d; // Error float f = 1.0f; int i = f; // Error short s = i; //Error double d = 1.0; int i = (int)d; //ok int i = 256; byte b = (byte)i; //ok pero b ==0;
Profesor: Marcelo Montecinos C.
37
Excepciones definidas por el usuario public class nombre extends Exception { public nombre() {} public nombre(String s) { } }
38
Ejemplo
public void leeArchivo(String nombre) throws IOException { BufferedReader fin = new BufferedReader(new FileReader(nombre)); try { while(true) { cadena = fin.readLine(); System.out.println(cadena); } } catch (EOFException e) { System.out.println("Fin del archivo"); } }
39
40
Lectura de nmeros
int i=Integer.valueOf(entrada.readLine()).intValue(); double d=Double.valueOf(entrada.readLine()).doubleValue();
41
Lectura de datos
Este programa se encarga de pedir el ingreso de un nmero, para luego mostrarlo en pantalla.
/* 1) */ import java.io.*; /* 2) */ public class LectTeclado /* 3) */ { /* 4) */ public static void main(String Arg[ ]) throws IOException /* 5) */ { /* 6) */ BufferedReader entrada = new BufferedReader(new inputStreamReader(System.in)); /* 7) */ int num; /* 8) */ System.out.print("Ingrese numero : "); /* 9) */ num = Integer.parseInt(entrada.readLine( )); /* 10) */ System.out.println("Ud ingreso el numero : " + num ); /* 11) */ } /* 12) */ }
Profesor: Marcelo Montecinos C.
42
Programacin I -Java Universidad Tecnolgica de Chile 1) Se invoca a la librera de entrada y salida io (Input,Output), para usar en nuestro programa todas sus clases disponibles. import : Indica que se tienen importar (incluir) cierta librera. java.io : Acceso a la librera io. java.io.* : Selecciona todas las clases disponibles. 4) Declaracin del programa principal con opcin de control de errores. throws IOException : Indica que cualquier error de entrada o salida de datos, ser manejado en forma interna (automtica) por el programa. 6) Se crean las instancias necesarias para crear un objeto que permita manejar la lectura de datos por teclado.
Profesor: Marcelo Montecinos C.
43
BufferedReader : Clase perteneciente a la librera io que crea un buffer de entrada donde se almacenarn los carcteres ingresados por teclado. in : Variable de tipo BufferedReader. 7) Se declara la variable num de tipo entero (int). 8) Se llama al mtodo print para escribir un mensaje en pantalla dejando el cursor inmediatamente a continuacin del mensaje.
44
Programacin I -Java Universidad Tecnolgica de Chile 9) Se lee el nmero, asignando el valor a la variable num. in.readline : Mtodo que retorna el "string" ledo por teclado. Integer.parseInt : Mtodo que convierte un string (cadena de caracteres) en un dato numrico de tipo int. Integer : Clase estndar que no necesita ser instanciada (est disponible por defecto). 10) Se llama al mtodo println para escribir un mensaje en pantalla que consta de una parte esttica y otra variable. El mtodo println y print soportan varios objetos concatenados mediante el operador + , logrando imprimir cadenas de carcteres y variables numricas.
45
Estructuras de un Programa
46
Debemos recordar:
Todas las instrucciones terminan con punto y coma ; Todo el cdigo de un mtodo o bloque de instrucciones estar entre la llave de apertura ( { ) y la correspondiente llave de cierre ( } ). Los espacios en blanco se permiten entre los elementos del cdigo fuente. Los espacios, los tabuladores y nuevas lneas deben usarse para dar legibilidad al cdigo.
47
Palabras Reservadas
Son palabras que tienen un significado especial dentro del lenguaje , en nuestro caso JAVA.
48
Identificadores
Son identificadores, los nombres que reciben las variables, constantes, clases, mtodos o instancias de un programa. Comienzan con una letra y pueden contener letras y nmeros. Son sensitivos a las maysculas y minsculas. Pueden contener palabras claves del lenguaje siempre y cuando no sean completamente iguales. Pueden tener cualquier longitud
Profesor: Marcelo Montecinos C.
49
50
Inicializacin de Variables.
En Java, cuando una variable es creada, Java le da un valor inicial segn la siguiente tabla.
byte,short, int long float double char (null) boolean variables referencia
Profesor: Marcelo Montecinos C.
Java Arreglos
52
Arreglos
Es un tipo especial de dato al que se hace referencia por un nombre. Est compuesto por una coleccin de elementos del mismo tipo de datos que se almacenan consecutivamente en memoria. Pueden ser creados de cualquier tipo.
53
Arreglos
int
A[]; Esto es la declaracin del puntero al arreglo, no se especifica tamao en la declaracin; Inicializacin: A = new int[10]; int[] A = new int[10];
length es un campo del objeto arreglo y no un mtodo. No es necesario el mtodo ya que el Profesor: Marcelo Montecinos C. tamao, como el contenido de un
54
Arreglos
Se utilizan para agrupar informacin relacionada Pueden tener ser de una o ms dimensiones. Los de una dimensin los denominaremos vectores y de los de dos dimensiones matrices o tablas Para accesar un elemento particular del arreglo, se utilizan los ndices
55
Vectores
Ejemplo de un vector que contiene 7 nmeros enteros
0 3
1 6
2 8
3 1
4 0
5 4
6 2
56
Declaracin en Java
tipoDato[ ] tipoDato
Vectores
nombreVariable; nombreVariable[ ];
Para declarar un vector de nmero enteros, al cual se le d el nombre de miVector se puede hacer de la siguiente manera:
57
Declaracin
Creacin
Vectores
58
Creacin:
Creacin: miVector = new int[7];
Vectores
Al reservar espacio para los elementos de un vector, mediante new, se inicializa automticamente en cero su contenido. Cuando se ejecuta esta sentencia de creacin , la varianble miVector, har referencia a un vector de 7 elementos enteros.
New: operador especial que reserva espacio en memoria
59
Vectores
Inicializacin:
Dependiendo del tipo de datos que contenga un vector, estos son inicializados por defecto con los siguientes valores: Si son vectores numricos, se inicializan en cero. Si son vectores de caracteres, se inicializan en /u000. Si son vectores booleanos, se inicializan en false.
60
Vectores
Inicializacin
Un vector completo se puede inicializar de la siguiente manera
61
Vectores
Utilizacin
nombreVector [ndice]
Para accesar un elemento de un vector, se coloca el nombre del vector y entre corchetes el ndice del elemento que se desea.
Por ejemplo, si se desea obtener el nmero 8 del siguiente vector:
0 3
1 6
2 8
3 1
4 0
5 4
6 2
miVector [2]
Profesor: Marcelo Montecinos C.
62
Vectores
Utilizacin
Los ndices en un vector, van desde 0 hasta el tamao 1. El tamao de un vector se obtiene con el mtodo length, con la siguiente sintaxis: nombreVector.length En nuestro ejemplo:
miVector.length
Profesor: Marcelo Montecinos C.
63
Vectores
miVector = new int[5]; llenarVector(); mostrarVector(); System.out.print("El tamano de mi vector es "); System.out.println(miVector.length); }
Profesor: Marcelo Montecinos C.
64
Vectores
static void llenarVector() { for (int i=0; i <= 4; i++) { System.out.println("Intro. numero de posicion " + i + " "); miVector[i] = CTeclado.ReadInt(); } } static void mostrarVector() { for (int i=0; i <= 4; i++) System.out.print(miVector[i] + " "); } }// fin de clase
Profesor: Marcelo Montecinos C.
65
Matrices
0 0 (matriz 2 3) 1 2 3 4 5
Profesor: Marcelo Montecinos C.
(matriz 4 0)
66
Matrices
Son arreglos de dos dimensiones La informacin es dispuesta en filas y columnas Para accesar un elemento se deben especificar dos subndices: fila y columna. Pueden ser creadas de cualquier tipo Pueden ser vistos como vectores de vectores
67
Matrices
Declaracin:
tipoDato nombreVariable[ ][ ];
Para declarar una matriz de nmeros enteros, llamada miMatriz, se debe hacer de la siguiente manera:
int miMatriz[ ][ ];
68
Matrices
Creacin:
nombreMatriz = new tipoDato[filas][columnas];
Para crear una matriz de 2 filas y 3 columnas de nmeros enteros, llamada miMatriz, se escribe
69
Matrices
Creacin:
miMatriz = new int [2][3];
genera
miMatriz[0][0]
miMatriz[0][1]
miMatriz[0][2]
miMatriz[1][0]
miMatriz[1][1]
miMatriz[1][2]
70
Matrices
Creacin:
miMatriz = new int [2][3];
71
Matrices
Creacin:
miMatriz = new int [2][3];
Fila 0
miMatriz[1][0] miMatriz[1][1]
miMatriz[1][2]
Fila 1
Columna 0
Columna 2
72
Matrices
Ejemplo: Crear una matriz de 2 filas y 3 columnas, llenarla y luego mostrar su contenido.
class EjemploMat { public static void main (String arg[]) { int miMatriz[][]; miMatriz = new int[2][3]; llenarMatriz(miMatriz); mostrarMatriz(miMatriz);
73
static void llenarMatriz(int m[][]) { for (int i=0; i < 2; ++i) { for (int j=0; j< 3; ++j) { System.out.println("Intro. Elem. " + i + " " + j); m[i][j] = CTeclado.ReadInt(); } } } static void mostrarMatriz(int m[][]) { for (int i=0; i < 2; i++) { for (int j=0; j< 3; j++) { System.out.print(m[i][j] + " "); } System.out.println(); } } } Profesor: Marcelo Montecinos C.
74
Ejercicios
1. Se deben crear tres vectores vecA, vecB y vecC de m elementos cada uno; se debe crear otro arreglo vecNuev donde cada elemento sea la suma de los elementos de cada arreglo. 2. Se deben crear dos vectores. En uno se colocarn los carnet de los estudiantes que aprobaron Clculo 1, en otro los que aprobaron Etica. Crear un tercer arreglo que contenga los carnet de los estudiantes que aprobaron ambas materias.
Profesor: Marcelo Montecinos C.
75
Ejercicios
3. Se deben crear dos vectores uno de ellos de n elementos, el otro de m elementos . Llenarlos con nmeros ,colocndo en cada uno los elementos ordenados de menor a mayor. Crear un tercer vector de tamao n+m el cual contendr los elementos de los vectores ordenados de menor a mayor.
76
Operadores
Los operadores de un lenguaje se utilizan para combinar o modificar los valores de de un programa.
77
+ * /
/ %
1 2 10
79
++ --
Estos operadores se pueden aplicar en dos formas, prefija y postfija, que adquieren importancia cuando los mismos se usan dentro de una expresin mayor.
80
5 7
81
5 3
82
Operadores de Asignacin.
Operador
= += -= *= /= %=
Significado
asignacin asignacin y suma asignacin y resta asignacin y mult. asignacin y div. asignacin y mod.
83
7 1
84
Operadores Relacionales.
Operador Nombre igual distinto mayor que menor que mayor o igual menor o igual Ejemplo 1 1 1 1 1 1 == 2 != 2 >2 <2 >= 2 <= 2 Respuesta false true false true false true
85
Operadores Lgicos.
Operador Significado and or
&& ||
Tablas de valores lgicos:
AND
T F
T F T F F F
OR
T F
T F T T T F
86
Operadores
+=
87
Expresiones Lgicas
Las expresiones lgicas se definen como un conjunto de operadores y operandos.
Son las que devuelven como resultado un valor booleano (true o false). Contienen operadores relacionales y/o operadores lgicos. Ejemplo: (X >= Y) (X >= Y) && (X>= Z) (A != 0) || (A != 5) Profesor: Marcelo Montecinos C.
88
Si se invoca al programa P1 de ka siguiente manera: java P1 estos son parametros entonces en el programa se tendr args[0] = estos, args[1] = son, args[2] = parametros. Se reciben como un arreglo de strings en la variable declarada como parmetro del programa String args[] public class Parametros { public static void main(String args[]) { for(int i=0; i < args.length; i++) System.out.pritnln(args[i]); } Profesor: Marcelo Montecinos C. }
89
Exceptions
Una Exeption es un evento que rompe la ejecucin normal de un programa (debido a un error). Cuando ocurre un evento como este un objeto de la clase Exception es generado o lanzado (throw). Existen varios tipos de clases derivadas Exception dependiendo de que fue lo que origin el evento: IOException, IndexOutOfBoundsException, UnknownHostException, etc. Cuando esto sucede, el intrprete de JAVA busca un exception handler adecuado para esta exception, que ejecuta un pedazo de cdigo (programado por el usuario) que debera reaccionar en forma adecuada a esta falla del programa. Esto se llama atrapar una exception (catch). Cuando no se ha escrito ningn ningn handler que atrape esta exception, el programa se detiene (se cae). La razn para introducir exceptions es que la programacin para reaccionar ante fallas se hace ms fcil (no hay que preverlas todas).
Profesor: Marcelo Montecinos C.
90
91
Muchas veces el compilador OBLIGA a programar el cdigo de modo de atrapar exceptions cuando estas pueden suceder con cierta probabilidad. Las ms frecuentes son las de IO. import java.io.*; //importa clases de la biblioteca IO public class ProgrmaO{ public static void main(String args[]) { BufferedReader in; PrintWriter out; String line; try { in = new BufferedReader(new FileReader(Origen.txt))}; catch (IOException e) { System.out.println(error en apertura); System.exit(1);} try { out = new PrintWriter( new FileWriter(Destino.txt))}; catch (IOException e) { System.out.println(error en creacion); System.exit(1);} try { while( (line = in.readLine()) != null) out.println(line); catch (IOException e) { System.out.println(problemas);} }
Profesor: Marcelo Montecinos C.
92
93
Tambin se puede evitar tener que preocuparse de las exceptions siempre y cuando el mtodo que la pordra generar se declare como que lanza una excepcin: import java.io.*; //importa clases de la biblioteca IO public class ProgrmaO3{ public static void main(String args[]) throws IOException{ BufferedReader in; PrintWriter out; String line; in = new BufferedReader(new FileReader(Origen.txt)); out = new PrintWriter( new FileWriter(Destino.txt)); while( (line = in.readLine()) != null) out.println(line); } }
Esto implica que el programa se caer si hay una excepcin durante la generacin del programa. En otros casos se puede declarar que uno o ms mtodos lanzan una IOException y el programa o mtodo principal se preocupa de escribir el Exception handler.
Profesor: Marcelo Montecinos C.
94
Estructuras de Decisin
95
<bloque de instrucciones>
}
96
97
98
99
Estructuras de Decisin
Veamos otro ejemplo de Decisin Anidada
if (X > 10) { if (X < 20) { System.out.println( X + esta entre 10 y 20); } else { System.out.println( X + es mayor a 20); } } else { if (X > 0) { System.out.println( X + entre 1 y 10); } else { System.out.println( X + igual o menor a cero); } } Profesor: Marcelo Montecinos C.
100
Ejercicio
Estructuras de Decisin
Deseamos hacer un programa que dado el sueldo de una persona, le aumente un 50% si la persona gana menos de 180000 Bs un 20% si gana ms.
if (sueldo < 18000) { sueldo *= 1.5; } else { sueldo *= 1.2; }
Profesor: Marcelo Montecinos C.
101
102
103
Estructuras de Decisin
class CEvaluar { public static void main (String args[]) { int d; double x; System.out.println ("Introduzca el valor de d "); d = CTeclado.ReadInt(); if (d > 0) { x = (-4 + Math.sqrt (d))/2; } else if (d == 0) { x = -4/2; } else { x = (-4 + Math.sqrt (Math.abs (d)) )/2; } System.out.println ("El valor de x es " + x); } }
Profesor: Marcelo Montecinos C.
104
swicht
Estructuras de Decisin
switch (expr1) { case valor1: instrucciones; break; case valor2: instrucciones; break; default: instrucciones; break; } Profesor: Marcelo Montecinos C.
105
switch
switch (expr1) { case valor1: instrucciones; break; case valor2: instrucciones; break; default: instrucciones; break; }
Estructuras de Decisin
expr1 debe ser compatible con valores enteros o carcter. Cuando la expresin coincide con algn literal de la sentencia case, se ejecutan las instrucciones correspondientes a ese case Si ninguna de las constantes coincide con la expresin, se ejecutal el default si existe. Si no existe el default, no se ejecuta nada. La sentencia break se utiliza para terminar una secuencia de instrucciones, haciedo que la ejecucin salte a la primera lnea de cdigo que sigue a la sentencia swicht completa. La sentencia break es opcional, de omitirse la ejecucin continuar en el siguiente case.
106
Estructuras de Decisin
Veamos un ejemplo con switch en Java switch (numEst) { case 20: numEst += 3; break; case 50: numEst++; break; default: numEst--; break; } Profesor: Marcelo Montecinos C.
107
Haremos un programa que reciba un mes (nmero) y nos indique la estacin que hay en ese mes.
108
Programacin I -Java
{ switch (mes) case 12: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: default: }
110
Programacin I -Java
Ejercicios
1. Desarrolle un programa en Java que le permita leer el nombre , la edad , el sexo y el estado civil de cualquier persona e imprima el nombre de la persona si es un hombre casado y mayor de 40 aos o una mujer soltera menor de 50 aos. 2. Desarrolle un programa en Java para leer el nombre de un empleado, el salario bsico por hora y el nmero de horas trabajadas durante una semana. Calcule el salario neto , teniendo en cuenta que si el nmero de horas trabajadas durante la semana es mayor de 48 horas, esas horas dems se consideran horas extras y tienen un recargo del 35%. Imprima el nombre del empleado y su salario neto.
111
Ejercicios
En la tienda Sigo de pie los empleados reciben una cierta comisin dependiendo del cdigo del artculo que vendan.
Cdigo del artculo
1 2 3
Clculo de la comisin 15% del precio de venta 40% de la diferencia del precio de venta y el precio mnimo de venta 10% del precio mnimo de venta ms el 50% de la diferencia del precio de venta y el precio mnimo de venta Bs. 100 por unidad ms el 5% del precio mnimo de venta Bs. 500 por unidad
4 5
Profesor: Marcelo Montecinos Hacer un programa que imprima el NombreC. del vendedor, el cdigo del artculo que vendi y la comisin que se gan.
112
Resumen
En resumen, los conceptos vistos fueron :
if
(expresin lgica) { bloque de instrucciones } else { bloque de instrucciones } if else - if switch (expr1) case valor1: case valor2: default: instrucciones; break; instrucciones; break; instrucciones; break;
113
Instrucciones
Sentencias de Iteracin
114
Sentencias de Iteracin
Las sentencias de iteracin en Java son: while, do-while y for. Se utilizan para ejecutar varias veces un conjunto de instrucciones. Cada sentencia de repeticin tiene una utilidad adecuada dependiendo de la situacin.
Profesor: Marcelo Montecinos C.
115
while
Sentencias de Iteracin
while (expresin lgica) { bloque de instrucciones; } Ejemplo: Mostrar los nmeros del 0 al 9
int i =0; while (i < 10) { System.out.println(el valor de i es : + i); i++; } Profesor: Marcelo Montecinos C.
116
while
Sentencias de Iteracin
Evala su expresin condicional al inicio del bucle. Repite un bloque de instrucciones, mientras su expresin sea verdadera. Cuando la expresin es falsa, el control pasa a la siguiente lnea de cdigo que hay inmediatamente despus del bucle. Puede suceder que el bloque de intrucciones nunca se ejecute.
Profesor: Marcelo Montecinos C.
117
118
Sentencias de Iteracin
119
do-while
Sentencias de Iteracin
Evala su expresin condicional al final del bucle. Repite un bloque de instrucciones, mientras su expresin sea verdadera. Cuando la expresin es falsa, el control pasa a la siguiente lnea de cdigo que hay inmediatamente despus del bucle. El bloque de instrucciones de este ciclo se Marcelo Montecinos C. ejecuta al Profesor: menos una vez.
120
121
for
Ejemplo: Mostrar los nmeros del 1 al 10 for (int i = 1; i < 10; i++) { System.out.println(i = + i); }
Profesor: Marcelo Montecinos C.
122
Sentencias de Iteracin Se utiliza para ejecutar un bloque de instrucciones un nmero determinado (fijo) de veces. Repite un bloque de instrucciones, mientras su expresin sea verdadera. La primera vez que se va a ejecutar el ciclo, se realiza la inicializacin, es decir, se declara y asigna un valor inicial a la variable que va a controlar el ciclo. Esto sucede una sola vez. Cuando la expresin es verdadera, se ejecuta la modificacin de la variable que controla el ciclo. Esto es automtico.
Profesor: Marcelo Montecinos C.
for
123
124
Sentencias de Iteracin
En resumen, los conceptos vistos fueron :
while (expresin lgica) { bloque de instrucciones; } do {
Instrucciones
bloque de instrucciones; } while (expresion lgica); for (expr. inicial; expr. Lgica; paso) { bloque de instrucciones;
Profesor: Marcelo Montecinos C.
125
Ejercicios
1. Se desea saber el promedio de notas que tiene un estudiante. Hasta la fecha ha cursado 6 materias; adems se quiere el nmero de materias reprobadas y el nmero de materias aprobadas.
126
127
128
Programacin I -Java Inicio Escuela. 2. promedioMax, numa, numr, prom,acumNotas,nota,carnet: numrico 3. Leer carnet Universidad Tecnolgica de Chile 4. promedioMax 0 5. Mientras ( carnet != 0 ) hacer Comenzar 3.1 numa 0 3.2 numr 0 3.3 acumNotas 0 3.4 Para cont=1 hasta 6 hacer +1 Comenzar 3.4.1 Leer nota 3.4.2 acumNotas acumNotas + nota 3.4.3 Si( nota < 10) entonces 3.4.3.1 numr numr + 1 sino 3.4.3.2 numa numa + 1 Fin para 3.5 prom acumNotas/6 3.6 Si (prom > promedioMax) entoces 3.6.1 promedioMax prom 3.7 Mostrar ( El promedio del estudiantes es : prom) 3.8 Mostrar (El estudiante tiene , numa ,materias aprobadas) 3.9 Mostrar (El estudiante tiene , numr, materias reprobadas) 3.10 Leer carnet Fin Mientras 6. Mostrar promedioMax 7. Terminar Escuela
1. Profesor: Marcelo Montecinos C.
129
Strings en Java
Cadena de caracteres
130
Strings
En Java un String no es un tipo de dato primitivo como char o int. Es una clase que maneja cadena de caracteres.
131
Strings
132
Strings
133
Para obtener el caracter que se encuentra en una posicin charAt(posicin); ejemplo, cadena.charAt(0) devolveria el caracter C donde posicin se inicia en cero. Para extraer una subcadena, hay dos formas substring(int posicinInicial); copia desde la posicin inicial substring(int posicinInicial, int posicionFinal);
copia desde la posicin inicial hasta la posicin final-1
Profesor: Marcelo Montecinos C.
String
134
String
Un ejemplo de substring, nombre=Maria Rosa; System.out.println(nombre.substring(2)); System.out.println(nombre.substring(2,4)); la salida sera, ria Rosa ri
135
String
Para sustituir una letra por otra dentro de la cadena replace(char original,char sustituto) ejemplo, cadena=casa mia; System.out.println(cadena.replace('a','e')); la salida sera, cese mie
Profesor: Marcelo Montecinos C.
136
String
Para convertir los caracteres de una cadena de maysculas a minsculas toLowerCase() ejemplo,
la salida sera,
casa mia
137
String
Para convertir los caracteres de una cadena de minsculas a maysculas toUpperCase() ejemplo, cadena=casa mia; System.out.println(cadena.toUpperCase()); la salida sera, CASA MIA
138
String
Para comparar los caracteres dentro de dos cadenas equals() ejemplo,
if (s1.equals(s2)) { System.out.println("Son iguales los caracteres"); } else { System.out.println("no son iguales los caracteres"); }
139
String
Para comparar los caracteres dentro de dos instancias, sin diferenciar entre maysculas y minsculas equalsIgnoreCase() ejemplo, if (s1.equalsIgnoreCase(s2)) { System.out.println("Son iguales los caracteres"); } else { System.out.println("no son iguales los caracteres"); }
Profesor: Marcelo Montecinos C.
140
String
Para comparar si dos objetos hacen referencia a la misma instancia == ejemplo, if (s1==s2) { System.out.println(Son el mismo objeto); } else { System.out.println(No son el mismo objeto); Profesor: Marcelo Montecinos C. }
141
String
Para saber si una cadena es menor, igual o mayor lexicogrficamente que otra. compareTo() ejemplo, if (s1.compareTo(s2) < 0) {System.out.println(s1 es menor a s2");} else { if (s1.compareTo(s2) == 0) { System.out.println(s1 es igual a s2"); } else {System.out.println(s1 es mayor s2");} } Profesor: Marcelo Montecinos C. 142
String
Para determinar si la cadena comienza con una cadena especificada. startsWith() ejemplo,
143
String
Para determinar si una cadena se encuentra, a partir de una posicin, dentro de una cadena especificada, startsWith(String cadena,int posicin) ejemplo, if (s1.startsWith("car",3)) { System.out.println("SI"); } else { System.out.println("NO"); Profesor: Marcelo Montecinos C. }
144
String
Para determinar si la cadena termina con una cadena dada. endsWith() ejemplo, if (s2.endsWith("SA")) { System.out.println("SI"); } else { System.out.println("NO"); }
Profesor: Marcelo Montecinos C.
145
Paquetes
Paquetes Java ms importantes:
-
lang para funciones del lenguaje; util para utilidades adicionales; io para entrada y salida; text para formateo especializado; awt para grficos e interfaz grfica de usuario
Para acceder a cualquiera de estos paquetes, excepto lang que est siempre disponible, usamos el siguiente modelo:
import java.nombrepaquete.*;
Profesor: Marcelo Montecinos C.
146
JDBC
Java Database Connectivity
147
Introduccin
JDBC es una API, formada por conjunto de clases e interfaces en el lenguaje de programacin Java, para ejecutar sentencias SQL. Ofrece un estndar de conexin a cualquier base de datos disponible en el mercado. Permite obtener los datos en forma fcil y cmoda en ambientes cliente-servidor a travs de Internet/Intranet.
Profesor: Marcelo Montecinos C.
148
Qu hace JDBC?
Establece una conexin a una base de datos. Enva sentencias SQL. Procesa los resultados de estas sentencias.
149
Arquitectura JDBC
Arquitectura normal Puente JDBC-ODBC Aplicaciones Java Aplicaciones Java JDBC API JDBC API Adm. de controladores JDBC
Puente JDBC/ODBC
Adm. de controladoresODBC
Controlador JDBC
Controlador JDBC
C. ODBC
DB DB
Profesor: Marcelo Montecinos C.
C. ODBC
DB
DB
150
Ejemplos de URL:
152
Se puede usar ODBC desde Java, pero el puente JDBC-ODBC ayuda bastante. ODBC tiene una interfaz tipo C rompiendo el esquema de seguridad, robustez e implementacin de Java. ODBC mezcla funciones simple y complejas. Los controladores de ODBC deben ser instalados en cada cliente.
Profesor: Marcelo Montecinos C.
153
154
Modelos de acceso a BD Aplicacin Java JDBC De 2 capas La aplicacin habla directamente con la base de datos. Controlador JDBC se comunica con el sistema especfico que maneja la base de datos. La base de datos puede estar en otra mquina, con lo que el cliente se comunica por red. Esta es la configuracin llamada cliente/servidor.
Profesor: Marcelo Montecinos C.
Cliente
Protocolo BD Servidor BD
DBMS
155
Modelos de acceso a BD
Cliente (GUI)
De 3 capas
Los comandos son enviados a la capa intermedia de servicios, la cual enva sentencias SQL a la base de datos. sta las procesa y enva los resultados de vuelta a la capa intermedia, para luego ser enviados al cliente. Permite un control de acceso y de actualizacin. Provee ventajas de performance.
156
Servidor
Protocolo BD
DBMS
Servidor BD
Puente JDBC-ODBC. Parte API Nativa-Parte Java. Se convierte las llamadas JDBC al sistema de la Base de datos. JDBC-Red. Es slo Java. Las llamadas JDBC son convertidas a un protocolo de red independiente del sistema de la base de datos. Este protocolo es convertido en un servidor Protocolo Nativo. Es slo Java. Se usa un protocolo de red con la BD. Profesor: Marcelo Montecinos C. 157
Conexin
Un objeto Connection representa una conexin a una base de datos. Una sesin incluye las sentencias SQL que son ejecutadas y los resultados de stas. Establecer la conexin: DriverManager.getConnection La clase DriverManager intenta ubicar el controlador que pueda conectarse a la base de datos representada en la URL.
Profesor: Marcelo Montecinos C.
158
...Conexin
jdbc:<subprotocolo>:<subnombre> <subprotocolo> es el nombre del controlador o del mecanismo de conexin. Ejemplo: odbc. <subnombre> es la identificacin de la base de datos. El formato varia segn el controlador especificado. Ejemplo: //servidor:puerto/etc
Profesor: Marcelo Montecinos C.
159
JDBC permite que se escriba cualquier tipo de sentencia SQL. Aunque sta fuera dependiente de la base de datos slo se correra el riesgo de incompatibilidad al cambiar de base de datos.
160
Statement: Este objeto es usado para enviar sentecias SQL simples. Es creado por el mtodo createStatement. PreparedStatement: Este objeto es usado para sentencias que requieren uno o ms parmetros. La sentencia es precompilada y guardada para uso futuro. CallableStatement: Es usado para ejecutar procedimientos almacenados.
Profesor: Marcelo Montecinos C.
161
Transacciones
Una transaccin consiste en una o ms sentencias que han sido ejecutadas y luego confirmadas (commit) o deshechas (rolled back) Auto-commit est predeterminado. Si Auto-commit est desactivado se debe usar los mtodos commit o rollback explcitamente.
Profesor: Marcelo Montecinos C.
162
Procesando respuestas
Las respuestas a las sentencias SQL se reciben en el objeto ResultSet que mantiene las filas. Este objeto provee el acceso a los datos de esas filas a travs de un conjunto de mtodos get, los cuales, a su vez, permiten el acceso a cada columna de estas filas.
Profesor: Marcelo Montecinos C.
163
Ejemplo: Esto crea una instancia del controlador y llama al mtodo DriverManager.registerDriver registrando este controlador en la lista de controladores disponibles para conexiones.
Profesor: Marcelo Montecinos C.
Class.forName(empresa.db.Driver");
164
Ejemplo de sentencia Connection con = DriverManager.getConnection ( "jdbc:odbc:nombre", "login", "password"); PreparedStatement pstmt = con.prepareStatement( UPDATE tabla1 SET m=? WHERE x=?); pstmt.setString(1, "Hola"); for (int i = 0; i < 10; i++) { pstmt.setInt(2, i); int rowCount = pstmt.executeUpdate(); }
Profesor: Marcelo Montecinos C.
165
Primer ejemplo bsico Connection con = DriverManager.getConnection ( "jdbc:odbc:nombre", "login", "password"); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1"); while (rs.next()) { int x = rs.getInt("a"); String s = rs.getString("b"); float f = rs.getFloat("c"); } Profesor: Marcelo Montecinos C. 166
Clases en Java
167
Declaracin de Clases
modificador class nombreClase { < declaracin de campos > < declaracin de mtodos > }
modificador puede ser public o nada; si la clase no pertenece a un paquete, ambas definiciones son equivalentes; si la clase pertenece a un paquete, entonces, si se declara public, la clase podr utilizarse fuera del paquete, pero si no se declara public, slo podr utilizarse dentro del paquete
Profesor: Marcelo Montecinos C.
168
Declaracin de Objetos
Ejemplo:
clasePublica elObjeto; clasePublica elObjeto1, elObjeto2, elObjeto3; clasePublica elObjeto4 = elObjeto; clasePublica elObjeto5 = new clasePublica();
169
Programacin I -Java
Declaraciones de Campos
modificadores tipo nombreCampo;
private, accesible solo desde dentro de la propia clase protected, accesible solo desde la propia clase, clases del mismo paquete o subclases public,accesible por todos package,si no se especifica nada, es el modo por defecto, accesible solo desde el propio paquete; si la clase no se encuentra dentro de un paquete, es equivalente a public. static, indica que el campo pertenece a la clase, no a un objeto concreto final, indica que dicho campo no puede ser sobreescrito en una subclase
tipo es el tipo del campo (tipo primitivo o clase del objeto) nombreCampo es el nombre del campo
Profesor: Marcelo Montecinos C.
170
Programacin I -Java
Acceso a Campos
elObjeto.doblePublico = 5.0; double doble = elObjeto.doblePublico; Clase.doblePublicoEstatico = 7.0; Double doble = Clase.doblePublicoEstatico;
171
Son los que tienen la responsabilidad de: - Entregar datos acerca del objeto - Modificar datos dentro del objeto (especialmente si las componenetes del objeto no fueron declarados como public) - Crear un nuevo objeto (constructores) Los mtodos pueden ser pblicos, privados o protegidos (public, private, protected), al igual que las compoenetes - pirvate: implica que pueden ser vistas slo en la clase actual. Son invisibles incluso para clases derivadas de esta. - protected: implica que pueden ser vistas por las derivadas. Tambien son vistas dentro del paquete (agrupacin de clases en un archivo). Este es eldefault. - public:son vistas desde cualquier lado.
Profesor: Marcelo Montecinos C.
172
Declaracin de Mtodos
modificador tipo nombreMetodo(<lista de parametros formales>) { < cuerpo del mtodo; campos e instrucciones > return expresion; // solo mtodos que devuelven resultado } <lista de parametros formales> = (tipo campo, tipo campo, ...)
modificador significa lo mismo que para los campos. tipo es el tipo devuelto por el mtodo, puede ser:
-
173
Programacin I -Java
Ejemplo de Clase
public class Clase { private int enteroPrivado; static private int enteroEstaticoPrivado; public void estableceEntero(int entero) { enteroPrivado = entero; } public int recuperaEntero() { return entero; } static public void estableceEnteroEstatico(int entero) { enteroEstaticoPrivado = entero; } static public int recuperaEnteroEstatico() { return enteroEstatico; } }
174
Llamadas a Mtodos
metodo(<lista parametros reales>); // metodos de la propia clase objeto.metodo(<lista dparametros reales>); // metodos no estaticos nombreclase.metodo(<lista parametros reales>); //metodos estaticos
Ejemplo:
elObjeto.estableceEntero(7); int entero = elObjeto.recuperaEntero(); Clase.estableceEnteroEstatico(8); int entero = Clase.recuperaEnteroEstatico();
175
Ejemplo:
public class Clase { private int enteroPrivado; public Clase() { enteroPrivado = 0; } public Clase(int entero) { enteroPrivado = entero; }
}
176
Ejemplo:
Clase elObjeto; elObjeto = new Clase();
177
Programacin I -Java
Modelo de un Programa
public class nombrePrograma { public static void main(String[] args) { < cuerpo del programa > } }
178
Herencia
modificadores class nombreClase extends nombreClaseQueExtiende { }
Ejemplo
public class ClaseExtendida extends Clase { }
Una clase que extiende otra, se llama subclase o clase hija, mientras que la clase a la que extiende (la original) se llama superclase o clase paterna. La subclase hereda los miembros (propiedades y mtodos) de la superclase.
Profesor: Marcelo Montecinos C.
179
Cambio de tipo
Cualquier objeto de una subclase puede ser asignado a un objeto de su superclase. Cualquier objeto de una superclase puede ser asignado a una subclase con una conversin explcita (cambio de tipo).
ClaseExtendida elObjetoExtendido = new ClaseExtendida(); Clase elObjeto = laClaseExtendida; ClaseExtendida elObjetoExtendido = (ClaseExtendida)elObjeto;
180
Superconstruccin
modificadores class nombreclase extends nombreClaseQueEstiende { public nombreClase(<lista de parametros formales>) { super(<lista de parametros reales>); <instrucciones de inicializacion> } }
181
Ejemplo de Superconstruccin
public class Clase { private int enteroPrivado; public Clase(int entero) { enteroPrivado = entero; } } public class ClaseExtendida extends Clase { private double doblePrivado; public ClaseExtendida(int entero, double doble) { super(entero); doblePrivado = doble; } }
182
Variables Enmascaradas
public class Clase { public int dato; } public class ClaseExtendida extends Clase { public double dato; public estableceDatos(int entero, double doble) { super.dato = entero; dato = doble; } Clase elObjeto = new Clase(); ClaseExtendida elObjetoExtendido = new ClaseExtendida(); elObjeto.dato = 5; // es un valor entero elObjetoExtendido.dato = 6.4; // es un valor doble elObjetoExtendido.estableceDatos(3,7.8);
183
Sobreescritura de Mtodos
public class Clase { public int dato; public estableceDato(int entero) { dato = entero; } } public class ClaseExtendida extends Clase { public int datoExtendido; public estableceDato(int entero) { super.estableceDato(entero); datoExtendido = entero*2; }
184
Mtodos en Java
185
Mtodos
La mejor forma de crear y mantener un programa grande, es construirlo a partir de piezas ms pequeas o mdulos. Cada uno de los cuales es ms manejable que el programa en su totalidad
Profesor: Marcelo Montecinos C.
186
Mtodos
Los mtodos tambin son utilizados para evitar la repeticin de cdigo en un programa al poder ejecutarlo desde varios puntos de un programa con slo invocarlo.
187
Mtodos
Esta tcnica de descomposicin se denomina Divide y vencers. Los mdulos (subprogramas) en Java se denominan mtodos. Un mtodo se invoca ,es decir, se le pide realizar su tarea designada con una llamada de mtodo.
Profesor: Marcelo Montecinos C.
188
Mtodos
La llamada a mtodos especifica el nombre del mtodo y proporciona la informacin (en forma de argumentos) cuando el mtodo lo necesite para hacer su trabajo El formato de una definicin de mtodo es:
static tipo-de-valor-devuelto nombredelmtodo(lista-param) { declaraciones y sentencias
}
Profesor: Marcelo Montecinos C.
189
Mtodos
Casi todos los mtodos tienen una lista de parmetros; los parmetros de un mtodo tambin son variables locales. Es recomendable limitar los mtodos a realizar una sola tarea bien definida y el nombre del mtodo debe expresar efectivamente dicha tarea.
Profesor: Marcelo Montecinos C.
190
Mtodos
El nombre es cualquier identificador vlido. El tipo-de-valor-devuelto es el tipo de dato del resultado, que el mtodo devuelve al invocador. El tipo-de-valor-devuelto void indica que el mtodo no devuelve ningn valor, es un procedimiento.
Profesor: Marcelo Montecinos C.
191
Mtodos
Omitir el tipo-de-valor-devuelto en una definicin de mtodo causa un error de sintaxis. Olvidar devolver un valor desde un mtodo que se supone debe devolver un valor es un error de sintaxis.
192
Mtodos
Si se especifica un tipo-de-valordevuelto distinto de void el mtodo debe contener una sentencia return. Devolver un valor de un mtodo cuyo tipo devuelto se ha declarado void causa un error de sintaxis.
Profesor: Marcelo Montecinos C.
193
Mtodos
Todas las variables declaradas en las definiciones de los mtodos son variables locales; solo se conocen en el mtodo en el que se definen.
static int SumarNum(int e) { e+=e; System.out.println(++e); return e; }
Profesor: Marcelo Montecinos C.
194
Mtodos
La lista-de-parmetros es una lista separada por comas que contiene las declaraciones de los parmetros que el mtodo recibe cuando es invocado. Si un mtodo no recibe valores, se coloca un juego de parntesis vaco ( ) despus del nombre del mtodo.
Profesor: Marcelo Montecinos C.
195
Mtodos
Declarar parmetros para un mtodo que poseen el mismo tipo float x,y en lugar de float x, float y producir un error de compilacin porque se requiere un tipo para cada parmetro. Colocar punto y coma despus del parntesis que encierra la lista de parmetros es un error de sintaxis.
Esta es una declaracin de un mtodo que contiene 2 errores.
196
Definir una variable local de un mtodo igual que un parmetro es un error de sintaxis. Ejemplo:
class CCmporvalor
Mtodos
{ public static void main(String args[]) { int a=10; System.out.println(a); SumarNum(a); System.out.println(a); } static int SumarNum(int e) { e+=e; System.out.println(e); return e; } }
Profesor: Marcelo Montecinos C.
197
Definir un mtodo dentro de otro es un error de sintaxis. Existen tres formas de devolver el control al punto en el que se invoc un mtodo:
Mtodos
a) Si el mtodo no devuelve un resultado el control se devuelve cuando se llega a la llave derecha que termina el mtodo. b) Al ejecutarse la sentencia return tambin, si el mtodo NO devuelve ningn resultado. c) return expresin;
Profesor: Marcelo Montecinos C.
198
Ejemplo
199
Entrada: v1,v2,v3 :numricos Inicio Programa Principal V1,v2,v3,promn,mayor:numricos Procesar IntroDatos //Llamada a un subprograma tipo procedimiento promn Procesar Calprom //Llamada a un subprograma tipo funcin Procesar Imprime(promn) Mostrar (El mayor es mayor Procesar Max) Terminar Programa Principal
Profesor: Marcelo Montecinos C.
200
class CPrueba {
//Clase (Programa)
static int v1,v2,v3;//Nmeros enteros declarados en forma Global public static void main (String args[ ]) //Mtodo principal { float prom; IntroDatos(); //Llamada a un mtodo que no devuelve nada prom=CalcProm(); //Llamada a un mtodo tipo funcin Imprime(prom); //Llamada a un mtodo con pase de parmetros System.out.println("El mayor: "+ Max( )); }
Profesor: Marcelo Montecinos C.
201
Inicio IntroDatos Mostrar (Introduce el primer valor v1) Leer v1 Mostrar (Introduce el segundo valor v2) Leer v2 Mostrar (Introduce el tercer valor v3) Leer v3 Regresar
202
static void IntroDatos() //Mtodo que no devuelve ni recibe nada { System.out.println("introduce el valor V1: "); v1=CTeclado.ReadInt( ); System.out.println("introduce el valor V2: "); v2=CTeclado.ReadInt( ); System.out.println("introduce el valor V3: "); v3=CTeclado.ReadInt( ); }
203
Inicio Calcprom aux: numrico aux (v1+v2+v3)/3 Retornar aux Inicio Imprime(valor) valor:numrico Mostrar (Promedio) Mostrar (valor) Regresar
Profesor: Marcelo Montecinos C.
204
205
Inicio Max aux:numrico aux 0 Si ((v1>=v2)and (v1>=v3)) entonces Auxv1 Si ((v2>=v1)and(v2>=v3))entonces Auxv2 Si ((v3>=v1)and(v3>=v2))entonces Auxv3 Retornar aux.
Profesor: Marcelo Montecinos C.
206
static int Max() // Mtodo que retorna un valor //V1,V2,V3 { int aux=0; if((v1>=v2)&&(v1>=v3)) { aux=v1; } if((v2>=v1)&&(v2>=v3)) { aux=v2; } if((v3>=v1)&&(v3>=v2)) { aux=v3; } return aux; }
Profesor: Marcelo Montecinos C.
variables globales
207
208
Programacin I -Java
Objetos vs Variables
-
Una variable tiene memoria para un solo valor y dispone de un conjunto predefinido de operaciones segn sea su tipo. Un objeto tiene memoria para un grupo de varios valores, junto con un conjunto coherente de mtodos que operan sobre esos valores. Tanto mtodos como valores estn encapsulados en la clase de la que se ha obtenido el objeto.
Profesor: Marcelo Montecinos C.
209
Programacin I -Java
La superclase Object
En Java, todas las clases son subclases de una clase especial llamada Object. Java alcanza la generalidad utilizando objetos de diferentes clases en las mismas partes del programa, pero todos ellos pertenecen a la clase Object.
Profesor: Marcelo Montecinos C.
210
Igualdad de Objetos
modificador class nombreClase { public boolean equals() { < instrucciones para comparar con los campos de obj > return resultado de la comparacion; } }
Ejemplo:
public class Clase { private int entero; public boolean equals(Clase c) { return (c.entero==entero); } }
211
Programacin I -Java
Asignacin de Objetos
modificador class nombreClase implements Cloneable { public Object clone() { nombreClase obj = new nombreClase(parametros); < instrucciones para copiar los campos a obj > return obj; } }
public class Clase implements Cloneable { private int entero; public Object clone() { Clase c = new Clase(); c.entero = entero; return c; } }
Profesor: Marcelo Montecinos C.
212
Programacin I -Java
Arrays
213
Conversiones de Clase
El mtodo clone invocado sobre clase2 devuelve un objeto de la clase Object. Esto debe ser as, porque lo exige la interfaz Cloneable. Para convertirlo de nuevo a Clase necesitamos la conversin explcita de tipo.
Clase objeto1 = (Clase)objeto2.clone();
Profesor: Marcelo Montecinos C.
214
Programacin I -Java
Paquetes
-
Para acceder a cualquiera de estos paquetes, excepto lang que est siempre disponible, usamos el siguiente modelo:
import java.nombrepaquete.*;
Profesor: Marcelo Montecinos C.
215
Programacin I -Java
Paquetes
fuera de public.
216
Interfaces
Una interfaz es una forma especial de una clase que consiste exclusivamente de declaraciones de mtodos abstractos y constantes. En vez de la palabra clave class las interfaces tienen la palabra interface. Todos los mtodos declarados son abstractos. Esto implica que tienen que ser implementadas por alguna clase que use esta interfaz. Ej. public interface ObjetoGrafico { public final int MaxAncho = 800; public final int MaxAalto = 600; public void trasladar(int x, int y); public void escalar(float p); public boolean visible(); etc...
Profesor: Marcelo Montecinos C.
217
Interfaces (2)
La interfaz funciona como un protocolo: cualquier clase que ocupoe la interfaz debe implementar todos los mtodos que la interfaz declara. public class MiOjetosGrafico1 implements ObjetoGrafico{ private int origenX, origenY, ancho, alto; private estaVisible; public void trasladar(int x, int y) { if (origenX+x <= MaxAncho) origenX += x; else .... if (origenY+y <= MaxAlto) origenY +=y; else ...... } public void escalar(float p){ ......} public boolean visible(){ .......} etc...
Profesor: Marcelo Montecinos C.
218
Interfaces(3)
A estas alturas nos deberamos estar preguntando por qu no lo hicimos con clases abstractas, acaso no es lo mismo ? NO!!!! Si quisieramos hacer una clase abstracta entonces los objetos grficos estn obligados a ser derivados de esta nica clase abstracta (Java no permite mltiple herencia). En muchos casos querramos que los objetos grficos fueran heredados de otras clases (incluso distintas clases para distintos objetos grficos) pero que todos tuvieran la misma interfaz.
219
Programacin I -Java
Interfaces(4)
O sea que las interfaces definitivamente no sirven para implementar herencia mltiple ? SI y No: Una clase solo puede heredar constantes de la interfaz Una clase no puede heredar implementaciones de una interfaz Una interfaz se puede usar como una clase Una interfaz puede ser una extensin de una clase abstracta, con lo cual se heredan caractersticas de otra clase ms:
Ej: public interface ObjetoGrafico extends ObjetoGeometrico public class ComponenteGrafica extends JPanel implements ObjetoGrfico:
220
Programacin I -Java a la vez: Haciendo ms de una cosa Universidad Tecnolgica de Chile Threads
Un thread es una secuencia o flujo de de instrucciones que se ejecutan dentro de un programa. Tiene un comienzo y un fin. Entonces qu diferencia tiene con un proceso ? El thread slo puede ser creado dentro de un proceso. Y un proceso (programa) puede crear varios threads dentro de l que se ejecutan en paralelo. Entonces, qu diferencia tiene con multiprocesos a la UNIX ? (para los que programaron en C, qu los difiere del fork ?) El programa principal est conciente de los threads que existen, hay variables que los identifican. Pueden ser creados, inicializados, sustendidos, reactivados o parados por el el programa que los cre. El programa principal puede darles parmetros distintos a cada thread. Los thread se pueden programar con la canatidad de variables necesarias para su ejecucin (no lo heredan TODO)
Profesor: Marcelo Montecinos C.
221
Programacin I -Java
Los threads son una clase existente. Lo que un thread en particular hace cuando se echa a correr se debe escribir en el mtodo run de la clase thread, que es un mtodo que se debe escribir siempre. Hay dos formas de implementar Threads en Java (que coincide con las dos formas vistas de implementar mtodos definidos): Crear una nueva clase que extienda la clase abstracta Thread e implementar el mtodo abstracto run. Implementar la interfaz runnable, lo cual implica que se va a reescribir el mtodo run. La razn para escoger una u otra forma es simplemente si queremos que la clase que implementa el thread sea adems extendida de otra clase (aparte de la clase thread).
Profesor: Marcelo Montecinos C.
222
public class SimpleThread extends Thread { public SimpleThread(String str) { super(str); } public void run() { for (int i = 0; i < 10; i++) { System.out.println(i + " " + getName()); try { this.sleep((int)(Math.random() * 1000)); } catch (InterruptedException e) {} } System.out.println("DONE! " + getName()); }
El mtodo this.sleep(milisegundos) debe ir en un bloque try Profesor: Marcelo Montecinos C. 223 and catch
Programacin I -Java
El mtodo start() inicia la ejecucn de un thread. Esto implica que se empieza a ejecutar el cdigo escrito en el mtodo run del thread. Tambin existen otros mtodos que se le pueden aplicar a un thread: suspend(), resume(), stop().
Profesor: Marcelo Montecinos C.
224
public class MiThread2 implements Runnable { public void run() { int i = 0; while(true) System.out.println(i++); } } public class TestThread { public static void main(String args[]) { b = new MiThread2(); Thread t = new Thread(b);t.start(); for (int i=0; i<1000; i++); t.stop(); } Profesor: Marcelo Montecinos C. } 225
Programacin I -Java
La forma de implementar servidores que atiendan a varios clientes paralelamente a la vez es combinando threads con sockets El servidor abre un ServerSocket desde donde oye ciualquier intento por conectarse con l de un cliente. Una vez establecida la conexin, abre un socket normal e inicia un thread que atiende a este cliente. El socket abierto se pasa como parmetro. De esa manera puede seguir oyendo por el ServerSocket sin estar bloqueado. El thread tiene un mtodo run que atiende los pedidos del cliente El cliente se conecta al servidor sin saber que finalmente ser un socket el que est atendindolo. Si el protocolo de atencin especifica la manipulacin de datos comunes (por ejemplo a un archivo con informacin sobre cuentas corrientes), hay que tener cuidado con los accesos concurrentes a estos datos (mtodos synchronized).
226
Programacin I -Java
El programa MultiServer.java es el del servidor que establece el ServerSocket y se queda oyendo para ver si viene un cliente. Si llega un cliente crea un socket y un nuevo thread, al cual le pasa el socket, para que sea atendido. El server siguie esperando clientes en el ciclo. El programa MultiServerThread es el thread que atiende al cliente. En este caso slo manda dos strings, uno avisndole que nmero de cliente es el otro para despedirse. El programa Client.java se comunica con el servidor y lee los dos strings desde el socket establecido, los cuales los imprime en pantalla. El programa Syncron.java muestra como debe declararse un mtodo al cual acceden varios threads de modo que no se produzca problema de acceso indebido (ms de un thread puede obtener el mismo nmero!!) Los programas DateServer y DateClient muestran como se pueden traspasar objetos facilmente por un socket (siempre que estos sean serializables)
Profesor: Marcelo Montecinos C.
227
Programacin I -Java
La tecnologa RMI (Remote Method Invocation) permite a un programa corriendo en una mquina virtual de java (un intrprete) invocar el mtodo de un objeto localizado en otra mquina virtual de java (ubicada en cualquier parte de la red TCP/IP que se pueda acceder desde el lugar) Normalmente se tiende a ver aplicaciones que usan RMI como aplicaciones de cliente servidor. Una tpica aplicacin de servidor crea un objeto, lo publica para que pueda ser accesible de cualquier otro lado y espera a que llamen clientes pidiendo la invocacin de sus mtodos. Una tpica aplicacin cliente obtiene una referencia al objeto remoto en el servidor y luego invoca sus mtodos como si fuera un objeto local. RMI provee mecanismos con los cuales el cliente y el servidor se pueden intercambiar informacin, convirtiendolas en aplicaciones de objetos distribuidos. Estos mecanismos deben hacer posible: 1) localizar objetos remotos, 2) comunicarse con los objetos remotos 3) traspasar el cdigo de los objetos remotos (deben ser serializables)
228
Programacin I -Java
229
Definir las interfaces remotas: Una interfaz remota especifica los mtodos que pueden ser invocados en forma remota por un cliente. Los clientes conocern los objetos remotos slo a travs de las interfaces. Implementacin de los objetos remotos: los objetos remotos deben implementar una o ms interfaces remotas. Adems pueden implementar otros mtodos que no corresponden a las interfaces remotas y que son de uso local. Implementar los clientes: Los clientes que usan los objetos remotos se pueden implementar una vez que Profesor: Marcelo Montecinos las interfaces remotas estn C. definidas. 230
Este es la definicin de la interfaz: implica que los clientes slo conocern el mtodo getNumero() de el objeto remoto. Para los clientes la clase de este objeto es Numero, no importa cmo lo haya llamado en el archivo de implementacin del tipo de objeto.
Profesor: Marcelo Montecinos C.
231
232
Es un programa que provee java llamado rmiregistry Se echa a correr en la mquina donde est el programa servidor del objeto remoto Cualquier cliente que quiera ocupar el objeto remoto debe pedirle a l una referencia al objeto remoto antes de ocuparlo => debe saber con qu nombre se registr y en qu mquina esta corriendo.
rmiregistry
Naming.rebind(1) servidor
233
234
Una vez implementados las 3 clases hay que compilarlas para generar Numero.class: la interfaz que define lo que se conocer del objeto en toda la red. NumeroImpl.class: que es el que implementa el objeto remoto. Adems de implementar el constructor y el mtodo de la interfaz contiene un main que lo nico que hace es crear el objeto y registrarlo o publicarlo con un nobre dado. Cliente.class Esto se hace con el compilador javac
Profesor: Marcelo Montecinos C.
Compilar los cdigos fuentes y generar las clases y los llamados stubs y skeletons
235
Compilar los cdigos fuentes y generar las clases y los llamados stubs y skeletons(2)
Una vez generadas las 3 clases hay que compilar la clase implementadora para generar el stub y skel. NumeroImpl_stub.class: Es el llamado stub del objeto remoto. Es el encargado de recibir y transmitir los datos necesarios para servir a los clientes que piden acceso al objeto remoto NumeroImpl. NumeroImpl_skel.class: es como un esqueleto de la clase. Tiene slo la estructura de la clase pero es suficiente informacin para que el cliente pueda reunir todo los antecedentes para llegar a hacer un pedido al stub Esto se hace con el compilador rmic NumeroImpl
236
Echar a correr rmiregistry: java rmiregistry Echar a correr el programa servidor de objeto remoto: java NumeroImpl Echar a correr cliente(s): java Cliente. Una vez obtenida la referencia por el cliente el flujo de datos corre: cliente -> skel->stub->Server->stub>skel->cliente Veamos una aplicacin ms interesante: Un Banco: los clientes son un ejecutivo de cuentas y un cliente cualquiera. El servidor tiene la info sobre las cuentas.
Profesor: Marcelo Montecinos C.
237
Java es un lenguaje que nace cuando la internet est en pleno desasarrollo. Los diseadores de java ya saben que se necesita un lenguaje que apoye la programacin distribuida en la internet con protocolos TCP/IP Es importante contar con un lenguaje que sea independiente de la plataforma para programar las comunicaciones entre dos procesos, ya que la internet tambin es independiente de la plataforma. Java implementa una serie de clases que apoyan esto independientemente de la plataforma (URL, sockets, RMI, IDL-CORBA, JDBL. Veamos un par de ellas:
Profesor: Marcelo Montecinos C.
238
Los URL
Un URL es un UNIFORM RESOURCE LOCATOR. Consiste en una direccin de un recurso que un servidor en la internet pone a disposicin de los usuarios, como por ej. http://www.arminco.com En un objeto URL existen dos componentes principales: El descriptor de protocolo (ej. http) y el nombre del recurso (ej. www.arminco.com). http significa Hyper Text Transfer protocol pero hay otros protocolos de transferencia de datos en la internet como: el File Transfer protocol (ftp), Gopher, File o News. En java es posible abrir una direccion de URL leer el contenido como si fuera un archivo cualquiera. Para ello debemos crear un objeto URL, con el nombre del protocolo y la direccin del recurso que queremos recuperar. Profesor: Marcelo Montecinos C.
239
240
Si sabemos a priori que el contenido de un URL es texto podemos leerlo de la siguiente manera: import java.net.*; import java,io.*; public class Leer URL { public static void main(String args[]) { try { URL miURL = new URL(http://www.dcc.uchile.cl); URLConnection c = miURL.openConnection(); BufferedReader in = new BufferedReader ( new InputStreamReader( c.getInputStream())); String line; while ((line = in.readLine() != null) System.out.prinln(line); c.close(); catch(MalFormedURLException e) { } }
Profesor: Marcelo Montecinos C.
241
Programacin I -Java
Los Sockets
Sockets se pueden describir como dos puntos que arman un puente de transporte de datos entre dos programas. Dos programas pueden establecer gracias a los sockets una comunicacin segura (hay recuperacin de errores de transmisin). Un proggrama puede leer datos de un socket (lo que otro pragrama escribi) o puede escribir datos en un socket ( para que lo lea otro programa) En una comunicacin entre dos programas con sockets siempre hay un servidor y un cliente. El servidor es el que primero establece la posibilidad de comunicacin y se queda escuchando a ver si hay alguien que quiere comuncarse con el por medio de este socket.El cliente es un programa que, sabiendo que hay un programa servidor escuchando, se conecta al socket del servidor y escribe y/o lee de el.
Profesor: Marcelo Montecinos C.
242
Programacin I -Java
Servlets
Servidor
Cliente
Base de datos
243
Programacin I -Java
Aaden funcionalidad a un servidor web, del mismo modo que los applets aaden funcionalidad a los navegadores.
Similares a los scripts CGI, salvo que ofrecen una independencia de la plataforma. A diferencia de mecanismos propietarios (tales como la
API de Netscape Server o mdulos de Apache), son independientes del servidor y de la plataforma.
244
Programacin I -Java
245
Programacin I -Java
Applets
cliente
servidor
El usuario pide un applet en java
NAVEGADOR WEB
246
Programacin I -Java
Servlets
Servidor
Cliente
Base de datos
247
El servidor debe tener una mquina virtual Java. El servidor debe soportar la API de los servlets Java.
JavaServer Web Development Kit (JSWDK). http://java.sun.com/products/servlet/ Java Web Server Netscape Fast Track y Enterprise OReilly WebSite Professional Lotus Domino Go WebServer Novel IntraNetWare IBM Internet Connection Server Otros
248
Programacin I -Java
Ejecucin de un servlet
Universidad Tecnolgica de Chile
Introducir la direccin URL del servlet en un navegador web. Llamar al servlet desde una pgina web. Ejecutar un servlet llamndolo desde otro servlet.
249
Programacin I -Java
http://www.datsi.fi.upm.es/~mperez/servle ts/serv1?num1=3&num2=4
250
Programacin I -Java
Un servlet tambin puede ser llamado desde el cdigo de una pgina web, al igual que se llamara a cualquier CGI. Ejemplo:
251
Programacin I -Java
Conocer el nombre del servlet que queremos llamar. Proporcionar acceso al objeto Servlet del servlet llamado. Llamar al mtodo pblico del servlet.
Profesor: Marcelo Montecinos C.
252
Programacin I -Java
public class servletCalling extends HttpServlet { public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ... Servlet servlet_get = (Servlet) getServletConfig().getServletContext().getServlet(ser vletCalled); String data_get = servlet_get.method1(data); ... } }
253
Programacin I -Java
Biblioteca javax.servlet
Servlets
HttpServlet
MiServlet
Profesor: Marcelo Montecinos C.
254
Programacin I -Java
Objeto ServletRequest:
Comunicacin que fluye del cliente al servidor. Encapsula la informacin enviada desde el servidor al cliente.
Objeto ServletResponse:
255
Programacin I -Java
Estructura de un Servlet
Universidad Tecnolgica de Chile
import java.io.*; // Utiliza response para import javax.servlet.*; // especificar la respuesta import javax.servlet.http.*; // (tipo de contenido, establecer public class SomeServlet extends // cookies, ...) HttpServlet { // El servidor enva una pgina PrintWriter out = // web al cliente response.getWriter(); public void doGet (HttpServletRequest request, // Utilizar out para enviar el HttpServletResponse response) // contenido al navegador throws ServletException, IOException } { // Utilizar request para leer // Anlogamente, sobreescribir // doPost(). // datos procedentes del // cliente (ej: cookies, } // otros datos)
Profesor: Marcelo Montecinos C.
256
Programacin I -Java
257
Programacin I -Java
258
Programacin I -Java
getParameter()
getParameterValues() getParameterNames()
getWriter getOutputStream
getReader getInputStream()
259
Programacin I -Java
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class ThreeParam extends HttpServlet { public void doGet( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out; String title="Leyendo 3 parmetros";
out.println("</TITLE></HEAD><BODY>"); out.println("<H1 ALIGN=CENTER>"+ title +"</H1>"); out.println("<UL>"); out.println("<LI>param1: "+ request.getParameter("param1")); out.println("<LI>param2: "+ request.getParameter("param2")); out.println("<LI>param3: "+ request.getParameter("param3")); out.println("</UL>"); out.println("</BODY></HTML>"); out.close();
} public void doPost(HttpServletRequest response.setContentType request,HttpServletResponse ("text/html"); response) out = response.getWriter(); throws ServletException,IOException { out.println("<HTML><HEAD><TITLE>"); doGet(request,response); out.println(title); } }
260
Programacin I -Java
261
Programacin I -Java
public class ShowParameters extends HttpServlet { public void doGet( HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException { PrintWriter out; String title="Leyendo todos los parmetros"; response.setContentType ("text/html"); out = response.getWriter(); out.println("<HTML><HEAD><TITLE>"); out.println(title); out.println("</TITLE></HEAD><BODY>");
262
Programacin I -Java
263
Programacin I -Java
264
265
266
267
Programacin I -Java
268
Programacin I -Java
Servidor
Servlet
Carga init()
Cliente
Descarga destroy()
Servidor
Servlet
Profesor: Marcelo Montecinos C.
269
Programacin I -Java
Situacin en la que se encuentra un cliente en sucesivas peticiones al servidor. Almacenamiento de sesiones en el servidor Cookies
Mecanismos:
270
Eficiencia
CGI inicia un nuevo proceso para cada peticin HTTP. (Solucin: FastCGI) El servlet se ejecuta solamente la primera vez que es llamado. Permanece en memoria una vez cargado y puede compartir informacin entre varias llamadas de clientes. Uso de threads para las distintas peticiones.
271