Curso Java Inacap
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Curso Java Inacap

el

  • 7,184 reproducciones

 

Estadísticas

reproducciones

reproducciones totales
7,184
reproducciones en SlideShare
7,179
reproducciones incrustadas
5

Actions

Me gusta
3
Descargas
594
Comentarios
0

2 insertados 5

http://www.identi.li 3
http://www.slideshare.net 2

Accesibilidad

Detalles de carga

Uploaded via as Adobe PDF

Derechos de uso

© Todos los derechos reservados

Report content

Marcada como inapropiada Marcar como inapropiada
Marcar como inapropiada

Seleccione la razón para marcar esta presentación como inapropiada.

Cancelar
  • Full Name Full Name Comment goes here.
    ¿Está seguro?
    Tu mensaje aparecerá aquí
    Processing...
Publicar comentario
Edite su comentario

Curso Java Inacap Presentation Transcript

  • 1. Taller Programación III Java Introducción al Lenguaje de Programación Java Profesor: Marcelo Montecinos C. 1
  • 2. Taller Programación III Java ¿ Por qué JAVA (por qué tan famoso ) ? Orientado al objeto (tendencia en boga) Simple (similar a c, sin complejidades) Multiplataforma (Windows, PowerMac, Unix) Robusto (hace chequeos, elimina punteros) Recolección de basura automática Bibliotecas estándar Realmente portable en un 100% Facilidades para programación en redes Profesor: Marcelo Montecinos C. 2
  • 3. Taller Programación III Java Java - Características Plataforma independiente (portable) Dinámico (constantemente evolucionando) Fortalece la seguridad y la portabilidad Profesor: Marcelo Montecinos C. 3
  • 4. Taller Programación III Java JAVA es un lenguaje interpretado Salida P1.class del P1.java Prog. Compilador de java (específico x plataforma) javac P1.java Intérprete de java (específico x plataforma) java P1 (class) Profesor: Marcelo Montecinos C. 4
  • 5. Taller Programación III Java Java - Características Java -Máquina Virtual (JVM) JVM Interpretador Java Ambiente Runtime Sistema Operativo Hardware Profesor: Marcelo Montecinos C. 5
  • 6. Taller Programación III Java Java - Características ¿Cómo trabaja la tecnología Java? (Editor de texto) (Programa traducido a bytes-code) ¿qué sucede en este paso? Profesor: Marcelo Montecinos C. 6
  • 7. Taller Programación III Java Java - Características ¿Cómo trabaja la tecnología Java? Profesor: Marcelo Montecinos C. 7
  • 8. Taller Programación III Java Estructura de un Programa en Java // Este es el esqueleto de un programa en Java class <nombre del Programa> { Se utiliza para abrir un bloque de instrucciones. /* Definiciones globales*/ /* Metodo Principal*/ /* Otros Métodos*/ Se utiliza para } cerrar un bloque de instrucciones Profesor: Marcelo Montecinos C. 8
  • 9. Taller Programación III Java Estructura de un Programa en Java Los comentarios en Java pueden hacerse de dos maneras: Si sólo quiero comentario de una línea coloco // al inicio de es esta // Este es el esqueleto de un programa en Java class <nombre del Programa> { /* Definiciones globales*/ Si quiero comentario de mas de una línea coloco /* al inicio del comentario y */ al final /* Este es el Método Principal*/ /* Otros Métodos*/ } Profesor: Marcelo Montecinos C. 9
  • 10. Taller Programación III Java Estructura de un Programa en Java // Este es el esqueleto de un programa en Java Deben seguir las class <nombre del Programa> convenciones utilizadas en { algoritmo. /* Definiciones globales*/ Aquí se definen las variables que yo deseo que se puedan utilizar en todo mi programa. /* Método Principal*/ Cada aplicación de Java debe tener un método principal llamado main, que define donde comienza el /* Otros Métodos*/ flujo del programa. } Profesor: Marcelo Montecinos C. 10
  • 11. Taller Programación III Java // Este es el esqueleto de un programa en Java class <nombre del Programa> { /* Definiciones globales*/ public static void main (String args[]) { Todo el código de un método estará entre la llave /* Definiciones locales*/ de apertura ... ( { ) y la correspondiente ... llave de cierre ( } ). /* cuerpo de instrucciones */ ... ... } Sintaxis del método Main } Profesor: Marcelo Montecinos C. 11
  • 12. Taller Programación III Java La palabra public es un especificador de acceso. En este caso el main debe ser // Este es el esqueleto de un programa en Java declarado public ya que es llamado por class <nombre del Programa> { código que está fuera de su clase, cuando el /* Definiciones globales*/ programa comienza. public static void main (String args[]) { La palabra static permite que main sea llamado por el intérprete de Java antes de /* Definiciones locales*/ que se cree cualquier objeto . ... ... /* cuerpo de instrucciones */ La palabra void indica al compilador que ... main no devuelve ningún valor. ... } } String args[], declara una variable args que es una especie de vector que puede contener cadenas de caracteres. Sintaxis del método Main Profesor: Marcelo Montecinos C. 12
  • 13. Taller Programación III Java // Este es el esqueleto de un programa en Java class <nombre del Programa> { /* Definiciones globales*/ public static void main (String args[]) { /* Definiciones locales*/ Aquí se definen las variables que ... solo voy a utilizar en el método ... principal. /* cuerpo de instrucciones */ ... ... Después de cada instrucción se coloca ; } } Sintaxis del método Main Profesor: Marcelo Montecinos C. 13
  • 14. Taller Programación III Java 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”); } } Profesor: Marcelo Montecinos C. 14
  • 15. Taller Programación III Java Salida de datos Para mostrar un texto por pantalla puedo hacerlo de dos maneras: System.out.println (texto); System.out.print (texto); Profesor: Marcelo Montecinos C. 15
  • 16. Taller Programación III Java Salida por pantalla import java.io.*; System.out.println(elementos); System.out.println(); System.out.print(elementos); System.out.println(quot;holaquot;); // escribe quot;holaquot; 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(quot;d=quot;+d); // escribe d=6.4; Profesor: Marcelo Montecinos C. 16
  • 17. Taller Programación III Java Un primer programa en JAVA public class Hello { public static void main(String args[ ]) { System.out.println(“Hola Mundo“); } } Todo programa es escrito como el método estático llamado main en una clase cualquiera Este método se empieza a ejecutar cuando se invoca el intérprete de java para una clase dada args es un arreglo de Strings que contiene los parámetros con los que fué invocado el programa. Profesor: Marcelo Montecinos C. 17
  • 18. Taller Programación III Java Declaración de Variables tipo nombre; tipo nombre1, nombre2, nombre3; tipo nombre = valor; Declaración de Constantes: static final tipo nombre = valor; Profesor: Marcelo Montecinos C. 18
  • 19. Taller Programación III Java Definición 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 Profesor: Marcelo Montecinos C. 19
  • 20. Taller Programación III Java Tipos de datos 4 Integer (enteros) 5 237 Numérico Floating Point 13.45 (punto flotante) Profesor: Marcelo Montecinos C. 20
  • 21. Taller Programación III Java Tipos de datos Byte : 8 bits -27 ..... 27 –1 Integer (enteros) Short : 16 bits Int : 32 bits Long : 64 bits Profesor: Marcelo Montecinos C. 21
  • 22. Taller Programación III Java Tipos de datos Float : 32 bits Floating Point (punto flotante) Double : 64 bits Profesor: Marcelo Montecinos C. 22
  • 23. Taller Programación III Java Tipos de datos Caracteres char : ‘a’, ‘z’, ‘D’, ‘%’, ‘s’,’#’…. Cadenas de String: “Pedro Garcia” caracteres “Juan Lopez” ”Rojo” Lógicos boolean: true false Profesor: Marcelo Montecinos C. 23
  • 24. Taller Programación III Java Tipos primitivos de datos en JAVA 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’, ‘@’ lógico: boolean Const. true, false Constantes de String: “Hola“,“12 de Abril“ Profesor: Marcelo Montecinos C. 24
  • 25. Taller Programación III Java Declaración 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 =“María”; str = “blanco”; } } Profesor: Marcelo Montecinos C. 25
  • 26. Taller Programación III Java Asignación de valores a variables Se puede dar valores a las variables en el momento de su declaración o en una instrucción de asignación independiente una vez que ha sido declarada. Se utiliza el signo = en ambos casos. Ejemplo: int x =5; boolean t; t = true; Profesor: Marcelo Montecinos C. 26
  • 27. Taller Programación III Java Asignación de valores a variables Las asignaciones también pueden ser expresiones en notación INFIJA. Ejemplo: monto = pvp * cantidad ; Donde pvp y cantidad deberán ser variables anteriormente declaradas y con valor previo asignado. Profesor: Marcelo Montecinos C. 27
  • 28. Taller Programación III Java Asignación de valores a variables /* Este programa declara Algunas variables */ class declaraVar { public static void main (String args[]) { int x, y, z; x = 2; y = 4; z = x * y; System.out.println(“El valor de z es “ + z); } } Profesor: Marcelo Montecinos C. 28
  • 29. Taller Programación III Java Asignación de valores a variables Algunas de las operaciones a utilizar en la asignación: () indica prioridad de ejecución * multiplicación / división decimal +,- suma, resta Ejemplo: islv = ( (pvp * cantidad) * porcIslv) ) / 100; Profesor: Marcelo Montecinos C. 29
  • 30. Taller Programación III Java Operadores Igualdad y desigualdad: == , != Comparación: <, <=, >, >= Suma y resta unarios: +, - Suma, multiplicación, división y módulo: +, -, *, /, % Incremento y decremento prefijos y posfijos: ++, -- Desplazamiento con signo y sin signo: <<, >>, >>> Negación lógica unaria de bits: ~ Lógica de bits: &, |, ^ Lógica booleana: &&, || Profesor: Marcelo Montecinos C. 30
  • 31. Taller Programación III Java Asignación Utilización de operadores: var1 = var2 + var3; // asignar a var1 el valor de var2 + var3 var1 = var2 - ver3; // asignar a var1 el valor de var2 - var3 var1 = var2 * ver3; // asignar a var1 el valor de var2 * var3 var1 = var2 / ver3; // asignar a var1 el valor de var2 / var3 var1 = var2 % ver3; // asignar a var1 el valor de var2 % var3 Asignaciones de incremento decremento: variable++; // añadir uno a variable variable--; // restar uno a varibale variable += exp; // añadir exp a variable variable -= exp; // restar exp a variable Profesor: Marcelo Montecinos C. 31
  • 32. Taller Programación III Java Asignación de valores a variables /* Este programa declara Algunas variables */ class declaraVar { public static void main (String args[]) { int x, y, z; x = 2; y = 4; z = (x + y)/ 2; System.out.println(“El valor de z es “ + z); } } Profesor: Marcelo Montecinos C. 32
  • 33. Taller Programación III Java Expresiones Grupos de Precedencia Grupo 0: ( ) Grupo 1: ++, --, + (unario), - (unario) Grupo 2: *, /, % Grupo 3: +, -, + (concatenación) Funciones especiales: Seno x => Math.sin(x) x2 => Math.pow(x,2) Math.round(6.6) => 7 Profesor: Marcelo Montecinos C. 33
  • 34. Taller Programación III Java Expresiones y asignación 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; Asignación como operador: a = b = c = d = 0; boolean cero = ( b = c - 10) == 0; Profesor: Marcelo Montecinos C. 34
  • 35. Taller Programación III Java Conversiones entre tipos Asignar una variable a otra cuyo tipo es mayor de tamaño: byte => short => int => long => float => double Para pasar de un tipo a otro menor en tamaño, tenemos que hacer una conversión explícita de tipos:º (tipo)expresion Profesor: Marcelo Montecinos C. 35
  • 36. Taller Programación III Java 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 Tipo Bits Rango int 32 -2**31 .. 2**31-1 short 16 -2**15 .. 2**15-1 byte 8 -2**7 .. 2**7-1 long 64 -2**63 .. 2**63-1 float 32 -10**32 .. 10**32 double 64 -10**300 .. 10**300 Profesor: Marcelo Montecinos C. 36
  • 37. Taller Programación III Java 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
  • 38. Taller Programación III Java Excepciones definidas por el usuario public class nombre extends Exception { public nombre() {} public nombre(String s) { } } throw new nombre(“mensaje”); Profesor: Marcelo Montecinos C. 38
  • 39. Taller Programación III Java 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(quot;Fin del archivoquot;); } } Profesor: Marcelo Montecinos C. 39
  • 40. Taller Programación III Java Entrada desde teclado import java.io.*; BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in)); String cadena = entrada.readLine(); Profesor: Marcelo Montecinos C. 40
  • 41. Taller Programación III Java Lectura de números int i=Integer.valueOf(in.readLine()).intValue(); double d=Double.valueOf(in.readLine()).doubleValue(); int i=Integer.valueOf(in.readLine().trim()).intValue(); double d=Double.valueOf(in.readLine().trim()).doubleValue(); Profesor: Marcelo Montecinos C. 41
  • 42. Taller Programación III Java Lectura de datos Este programa se encarga de pedir el ingreso de un número, para luego mostrarlo en pantalla. /* 1) */ import java.io.*; /* 2) */ public class LectTecladoApp /* 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(quot;Ingrese numero : quot;); /* 9) */ num = Integer.parseInt(entrada.readLine( )); /* 10) */ System.out.println(quot;Ud ingreso el numero : quot; + num ); /* 11) */ } /* 12) */ } Profesor: Marcelo Montecinos C. 42
  • 43. Taller Programación III Java 1) Se invoca a la librería de entrada y salida io (Input,Output), para usar en nuestro programa todas sus clases disponibles. import : Indica que se tienen importar (incluir) cierta librería. java.io : Acceso a la librería io. java.io.* : Selecciona todas las clases disponibles. 4) Declaración del programa principal con opción de control de errores. throws IOException : Indica que cualquier error de entrada o salida de datos, será manejado en forma interna (automática) 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
  • 44. Taller Programación III Java BufferedReader : Clase perteneciente a la librería io que crea un buffer de entrada donde se almacenarán los carácteres ingresados por teclado. in : Variable de tipo BufferedReader. 7) Se declara la variable num de tipo entero (int). 8) Se llama al método print para escribir un mensaje en pantalla dejando el cursor inmediatamente a continuación del mensaje. Profesor: Marcelo Montecinos C. 44
  • 45. Taller Programación III Java 9) Se lee el número, asignando el valor a la variable num. in.readline : Método que retorna el quot;stringquot; leído por teclado. Integer.parseInt : Método que convierte un string (cadena de caracteres) en un dato numérico de tipo int. Integer : Clase estándar que no necesita ser instanciada (está disponible por defecto). 10) Se llama al método println para escribir un mensaje en pantalla que consta de una parte estática y otra variable. El método println y print soportan varios objetos concatenados mediante el operador + , logrando imprimir cadenas de carácteres y variables numéricas. Profesor: Marcelo Montecinos C. 45
  • 46. Taller Programación III Java Estructuras de un Programa Profesor: Marcelo Montecinos C. 46
  • 47. Taller Programación III Java Debemos recordar: class CSumar Todas las instrucciones terminan { con punto y coma “ ; ” Static int v1, v2, suma; Todo el código de un método public static void main (String args[]) o bloque de instrucciones estará entre la llave de apertura { ( { ) y la correspondiente llave System.out.println(quot;Introduzca v1quot;); de cierre ( } ). v1 = CTeclado.ReadInt(); System.out.println(quot;Introduzca v2quot;); Los espacios en blanco se permiten entre los elementos v2 = CTeclado.ReadInt(); del código fuente. Los espacios, suma = v1 + v2; los tabuladores y nuevas líneas deben usarse para dar } legibilidad al código. } Profesor: Marcelo Montecinos C. 47
  • 48. Taller Programación III Java class CSumar Palabras Reservadas Son palabras que tienen un { significado especial dentro static int v1, v2, suma; del lenguaje , en nuestro caso JAVA. public static void main (String args[]) { System.out.println(quot;Introduzca v1quot;); v1 = CTeclado.ReadInt(); System.out.println(quot;Introduzca v2quot;); v2 = CTeclado.ReadInt(); suma = v1 + v2; } } Profesor: Marcelo Montecinos C. 48
  • 49. Taller Programación III Java Identificadores Son identificadores, los nombres que reciben las variables, constantes, clases, métodos o instancias de un programa. Comienzan con una letra y pueden contener letras y números. Son sensitivos a las mayúsculas y minúsculas. Pueden contener palabras claves del lenguaje siempre y cuando no sean completamente iguales. Pueden tener cualquier longitud Profesor: Marcelo Montecinos C. 49
  • 50. Taller Programación III Java Algunas convenciones en cuanto a identificadores. Programas: deben ser nombres, escritos en modo mixto y con la primera letra de cada palabra en mayúsculas. Métodos: deben ser verbos, en modo mixto, con la primera letra en minúscula. Las palabras se separarán usando letras mayúsculas. Variables: deben ser nombres que permitan deducir lo que contienen, siguen las mismas reglas que los subprogramas. Los identificadores de una sola letra deben evitarse. (con sus excepciones) Profesor: Marcelo Montecinos C. 50
  • 51. Taller Programación III Java Inicialización de Variables. En Java, cuando una variable es creada, Java le da un valor inicial según la siguiente tabla. byte,short, int 0 long 0L float 0.0f double 0.0d char ‘u0000’ (null) boolean false variables referencia null Profesor: Marcelo Montecinos C. 51
  • 52. Taller Programación III Java Java Arreglos Profesor: Marcelo Montecinos C. 52
  • 53. Taller Programación III Java Arreglos Es un tipo especial de dato al que se hace referencia por un nombre. Está compuesto por una colección de elementos del mismo tipo de datos que se almacenan consecutivamente en memoria. Pueden ser creados de cualquier tipo. Profesor: Marcelo Montecinos C. 53
  • 54. Taller Programación III Java Arreglos Se pueden declarar como: int[] A; int A[]; Esto es la declaración del puntero al arreglo, no se especifica tamaño en la declaración; Inicialización: A = new int[10]; int[] A = new int[10]; Empiezan desde 0: for(int i=0; i < 10; ++i) A[i] = 0; Se puede averiguar el largo: int largo = A.length; length es un campo del objeto arreglo y no un método. No es necesario el método ya que el Profesor: Marcelo Montecinos C. 54 tamaño, como el contenido de un
  • 55. Taller Programación III Java Arreglos Se utilizan para agrupar información relacionada Pueden tener ser de una o más dimensiones. Los de una dimensión los denominaremos vectores y de los de dos dimensiones matrices o tablas Para accesar un elemento particular del arreglo, se utilizan los índices Profesor: Marcelo Montecinos C. 55
  • 56. Taller Programación III Java Vectores Ejemplo de un vector que contiene 7 números enteros 0 1 2 3 4 5 6 índices 3 6 8 1 0 4 2 Elementos del vector Elemento que ocupa la posición 3 en el vector Profesor: Marcelo Montecinos C. 56
  • 57. Taller Programación III Java Vectores Declaración en Java tipoDato[ ] nombreVariable; tipoDato nombreVariable[ ]; Para declarar un vector de número enteros, al cual se le dá el nombre de miVector se puede hacer de la siguiente manera: int[ ] miVector; // o también int miVector[ ]; Profesor: Marcelo Montecinos C. 57
  • 58. Taller Programación III Java Declaración Vectores int[] miVector; // o también Creación int miVector[]; nombreVector = new tipoDato[tamaño]; Cuando se declara una variable vector, esta no tiene ningún valor. Antes de asignar cualquier valor, se debe reservar un espacio en memoria, utilizando el operador new y asignarlo a la variable. Continuando con el ejemplo anterior miVector = new int[7]; Profesor: Marcelo Montecinos C. 58
  • 59. Taller Programación III Java Vectores Creación: Creación: miVector = new int[7]; Al reservar espacio para los elementos de un vector, mediante new, se inicializa automáticamente en cero su contenido. Cuando se ejecuta esta sentencia de creación , la varianble miVector, hará referencia a un vector de 7 elementos enteros. New: operador especial que reserva espacio en memoria Profesor: Marcelo Montecinos C. 59
  • 60. Taller Programación III Java Vectores Inicialización: Dependiendo del tipo de datos que contenga un vector, estos son inicializados por defecto con los siguientes valores: Si son vectores numéricos, se inicializan en cero. Si son vectores de caracteres, se inicializan en ‘/u000’. Si son vectores booleanos, se inicializan en false. Profesor: Marcelo Montecinos C. 60
  • 61. Taller Programación III Java Vectores Creación: miVector = new int[7]; Inicialización Un vector completo se puede inicializar de la siguiente manera miVector = {3, 6, 8, 1, 0, 4, 2}; Profesor: Marcelo Montecinos C. 61
  • 62. Taller Programación III Java Creación: Vectores miVector = new int[7]; Utilización 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 número 8 del siguiente vector: 0 1 2 3 4 5 6 3 6 8 1 0 4 2 miVector [2] Profesor: Marcelo Montecinos C. 62
  • 63. Taller Programación III Java Vectores Creación: miVector = new int[7]; Utilización Los índices en un vector, van desde 0 hasta el tamaño – 1. El tamaño de un vector se obtiene con el método length, con la siguiente sintaxis: nombreVector.length En nuestro ejemplo: miVector.length Profesor: Marcelo Montecinos C. 63
  • 64. Taller Programación III Java Vectores Ejemplo: crear un vector de 5 posiciones, rellenarlo y luego mostrar su contenido. class EjemploVec { static int miVector[ ]; public static void main (String arg[]) { miVector = new int[5]; llenarVector(); mostrarVector(); System.out.print(quot;El tamano de mi vector es quot;); System.out.println(miVector.length); } Profesor: Marcelo Montecinos C. 64
  • 65. Taller Programación III Java Vectores static void llenarVector() { for (int i=0; i <= 4; i++) { System.out.println(quot;Intro. numero de posicion quot; + i + quot; quot;); miVector[i] = CTeclado.ReadInt(); } } static void mostrarVector() { for (int i=0; i <= 4; i++) System.out.print(miVector[i] + quot; quot;); } }// fin de clase Profesor: Marcelo Montecinos C. 65
  • 66. Taller Programación III Java Matrices 0 1 2 3 4 5 0 (matriz 2 3) 1 2 3 (matriz 4 0) 4 5 Profesor: Marcelo Montecinos C. 66
  • 67. Taller Programación III Java Matrices Son arreglos de dos dimensiones La información es dispuesta en filas y columnas Para accesar un elemento se deben especificar dos subíndices: fila y columna. Pueden ser creadas de cualquier tipo Pueden ser vistos como vectores de vectores Profesor: Marcelo Montecinos C. 67
  • 68. Taller Programación III Java Matrices Declaración: tipoDato nombreVariable[ ][ ]; Para declarar una matriz de números enteros, llamada miMatriz, se debe hacer de la siguiente manera: int miMatriz[ ][ ]; Profesor: Marcelo Montecinos C. 68
  • 69. Taller Programación III Java Matrices Creación: nombreMatriz = new tipoDato[filas][columnas]; Para crear una matriz de 2 filas y 3 columnas de números enteros, llamada miMatriz, se escribe miMatriz = new int [2][3]; Profesor: Marcelo Montecinos C. 69
  • 70. Taller Programación III Java Matrices Creación: miMatriz = new int [2][3]; genera miMatriz[0][0] miMatriz[0][1] miMatriz[0][2] miMatriz[1][0] miMatriz[1][1] miMatriz[1][2] Profesor: Marcelo Montecinos C. 70
  • 71. Taller Programación III Java Matrices Creación: miMatriz = new int [2][3]; Primero crea un vector de 2 elementos Elemento 0 Elemento 1 Profesor: Marcelo Montecinos C. 71
  • 72. Taller Programación III Java Matrices Creación: miMatriz = new int [2][3]; Luego cada elemento lo transforma en un vector de 3 elementos miMatriz[0][0] miMatriz[0][1] miMatriz[0][2] Fila 0 miMatriz[1][0] miMatriz[1][1] miMatriz[1][2] Fila 1 Columna 0 Columna 2 Profesor: Marcelo Montecinos C. 72
  • 73. Taller Programación III Java 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); } Profesor: Marcelo Montecinos C. 73
  • 74. Taller Programación III Java static void llenarMatriz(int m[][]) { for (int i=0; i < 2; ++i) { for (int j=0; j< 3; ++j) { System.out.println(quot;Intro. Elem. quot; + i + quot; quot; + 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] + quot; quot;); } System.out.println(); } } } Profesor: Marcelo Montecinos C. 74
  • 75. Taller Programación III Java 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 colocarán los carnet de los estudiantes que aprobaron Cálculo 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
  • 76. Taller Programación III Java Ejercicios 3. Se deben crear dos vectores uno de ellos de n elementos, el otro de m elementos . Llenarlos con números ,colocándo en cada uno los elementos ordenados de menor a mayor. Crear un tercer vector de tamaño n+m el cual contendrá los elementos de los vectores ordenados de menor a mayor. Profesor: Marcelo Montecinos C. 76
  • 77. Taller Programación III Java Operadores Los operadores de un lenguaje se utilizan para combinar o modificar los valores de de un programa. Vamos a estudiar los siguientes operadores: Aritméticos : binarios y unitarios. Operadores de Asignación. Relacionales. Lógicos. Profesor: Marcelo Montecinos C. 77
  • 78. Taller Programación III Java Operadores Aritméticos Binarios. Binarios Operador Significado + Suma - Resta * Multiplicación / División entera (si los operandos son de tipo entero) / División real (si los operandos son reales) % Módulo, resto de división entera (no es necesario que los operandos sean reales) Profesor: Marcelo Montecinos C. 78
  • 79. Taller Programación III Java Operadores Aritméticos Binarios. Veamos un ejemplo: class CPrueba { public static void main(String arg[]) { int i , j; i=5; j = i % 2; System.out.println(quot;el valor de j es quot;+j); 1 j = i / 2; System.out.println(quot;el valor de j es quot;+j); 2 j = i * 2; System.out.println(quot;el valor de j es quot;+j); 10 } } Profesor: Marcelo Montecinos C. 79
  • 80. Taller Programación III Java Operadores Aritméticos Unitarios. Operador Significado ++ Incremento -- Decremento Estos operadores se pueden aplicar en dos formas, prefija y postfija, que adquieren importancia cuando los mismos se usan dentro de una expresión mayor. Profesor: Marcelo Montecinos C. 80
  • 81. Taller Programación III Java Operadores Aritméticos Unitarios. Unitarios Veamos un ejemplo: class CPrueba { public static void main(String arg[]) { int i; i=5; //incrementando antes o después de a System.out.println(quot;el valor de i++ es quot;+ i++); 5 System.out.println(quot;el valor de i++ es quot;+ ++i); 7 } } Profesor: Marcelo Montecinos C. 81
  • 82. Taller Programación III Java Operadores Aritméticos Unitarios. Unitarios Veamos un ejemplo: class CPrueba { public static void main(String arg[]) { int i; i=5; //decrementando antes o después de a System.out.println(quot;el valor de i-- es quot;+ i--); 5 System.out.println(quot;el valor de i-- es quot;+ --i); 3 } } Profesor: Marcelo Montecinos C. 82
  • 83. Taller Programación III Java Operadores de Asignación. Operador Significado = asignación += asignación y suma -= asignación y resta *= asignación y mult. /= asignación y div. %= asignación y mod. Profesor: Marcelo Montecinos C. 83
  • 84. Taller Programación III Java Operadores de Asignación. Veamos un ejemplo: class CPrueba { public static void main(String arg[]) { int i , j; i=5; i += 2; // equivale a i = i + 2; System.out.println(quot;el valor de i es quot;+i); 7 i = 5; i %= 2; // equivale a i = i % 2; System.out.println(quot;el valor de i es quot;+i); 1 } } Profesor: Marcelo Montecinos C. 84
  • 85. Taller Programación III Java Operadores Relacionales. Operador Nombre Ejemplo Respuesta == igual 1 == 2 false != distinto 1 != 2 true > mayor que 1 >2 false < menor que 1 <2 true >= mayor o igual 1 >= 2 false <= menor o igual 1 <= 2 true Profesor: Marcelo Montecinos C. 85
  • 86. Taller Programación III Java Operadores Lógicos. Operador Significado && and || or Tablas de valores lógicos: AND T F OR T F T T F T T T F F F F T F Profesor: Marcelo Montecinos C. 86
  • 87. Taller Programación III Java Operadores Orden de precedencia en los operadores: 1. ++ -- 2. * / % 3. + - 4. < > <= >= 5. == != 6. & 7. | 8. = *= /= %= += -= Profesor: Marcelo Montecinos C. 87
  • 88. Taller Programación III Java Expresiones Lógicas Las expresiones lógicas 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 lógicos. Ejemplo: (X >= Y) (X >= Y) && (X>= Z) (A != 0) || (AMarcelo Montecinos C. Profesor: != 5) 88
  • 89. Taller Programación III Los argumentos Java un programa de 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 parámetro 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
  • 90. Taller Programación III Java Exceptions Una Exeption es un evento que rompe la ejecución 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 intérprete de JAVA busca un exception handler adecuado para esta exception, que ejecuta un pedazo de código (programado por el usuario) que debería reaccionar en forma adecuada a esta falla del programa. Esto se llama “atrapar una exception” (catch). Cuando no se ha escrito ningún ningún handler que atrape esta exception, el programa se detiene (se cae). La razón para introducir exceptions es que la programación para reaccionar ante fallas se hace más fácil (no hay que preverlas todas). Profesor: Marcelo Montecinos C. 90
  • 91. Taller Programación III Java Cómo programar Exception Handlers ? Forma general: en un bloque try-catch try { lista de instrucciones que pueden generar un error } catch (ExceptionTipo1 e) { lista de instrucciones para enmendar el error de Tipo1 { catch (ExceptionTipo2 e) { lista de instrucciones para enmendar el error de Tipo1 } catch (ExceptionTipo3 e) { lista de instrucciones para enmendar el error de Tipo1 } Si no se conoce o no importa el tipo de exception específico se puede poner Exception y se atrapan todos (basta un solo bloque cach). Si hay más de un bloque se ejecuta sólo un bloque catch según el tipo de error. Profesor: Marcelo Montecinos C. 91
  • 92. Taller Programación III Java Ejemplo de Exception I/O Muchas veces el compilador OBLIGA a programar el código de modo de atrapar exceptions cuando estas pueden suceder con cierta probabilidad. Las más frecuentes son las de IO. import java.io.*; //importa clases de la biblioteca IO public class ProgrmaÍO{ 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. Taller Programación III Java Ejemplo de Exception I/O (2) Se puede omitir poner tantos try-catch si no importa donde sucedió import java.io.*; //importa clases de la biblioteca IO public class ProgrmaÍO2{ public static void main(String args[]) { BufferedReader in; PrintWriter out; String line; try { in = new BufferedReader( new InputStreamReader(System.in)); out = new PrintWriter( new FileWriter(“Destino.txt”)); System.out.println(“ingrese linea”); while( (line = in.readLine()) != “”){ out.println(line); System.out.println(“ingrese linea”); } catch (Exception e) { System.out.println(“problemas”); } } Profesor: Marcelo Montecinos C. } 93
  • 94. Taller Programación III Java Ejemplo de Exception I/O (3) También se puede evitar tener que preocuparse de las exceptions siempre y cuando el método que la pordría generar se declare como que “lanza” una excepción: import java.io.*; //importa clases de la biblioteca IO public class ProgrmaÍO3{ 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 excepción durante la generación del programa. En otros casos se puede declarar que uno o más métodos lanzan una IOException y el programa o método principal se preocupa de escribir el Exception handler. Profesor: Marcelo Montecinos C. 94
  • 95. Taller Programación III Java Estructuras de Decisión Profesor: Marcelo Montecinos C. 95
  • 96. Taller Programación III Java Estructuras de Decisión if (expresión lógica) { <bloque de instrucciones > } else { <bloque de instrucciones> } Profesor: Marcelo Montecinos C. 96
  • 97. Taller Programación III Java Estructuras de Decisión Veamos un ejemplo: class CPrueba { public static void main(String arg[]) { int a , b; a = 1; b = 3; if (a < b) { System.out.println(a); } else { System.out.println(b); } } } Profesor: Marcelo Montecinos C. 97
  • 98. Taller Programación III Java Estructuras de Decisión Decisión Anidada if (expresión lógica) { if (expresión lógica) { <bloque de instrucciones > } else { <bloque de instrucciones > } } else { <bloque de instrucciones > } Profesor: Marcelo Montecinos C. 98
  • 99. Taller Programación III Java Veamos un ejemplo de Decisión Anidada class CPrueba { public static void main(String arg[]) { int a , b, c; a = 1; b = 3; if (a < b) { if (b > c) { a++; } else { b++; } } else { a = a + b; } } } Profesor: Marcelo Montecinos C. 99
  • 100. Taller Programación III Java Estructuras de Decisión Veamos otro ejemplo de Decisión 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
  • 101. Taller Programación III Java Estructuras de Decisión Ejercicio 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 más. if (sueldo < 18000) { sueldo *= 1.5; } else { sueldo *= 1.2; } Profesor: Marcelo Montecinos C. 101
  • 102. Taller Programación III Java Estructuras de Decisión if – else - if Llamada también : alternativas múltiples. Realiza una verificación de las expresiones lógicas, y cuando consigue una que se cumple, ejecuta su bloque de instrucciones y no toma en cuenta el resto de las expresiones. Si no se cumple ninguna expresión, ejecuta el else. No necesariamente debe tener else. Profesor: Marcelo Montecinos C. 102
  • 103. Taller Programación III Java Estructuras de Decisión if – else - if Haremos un programa que me permita evaluar una función, en base a un número d. Si d > 0 (-4 + Math.sqrt (d))/2 Si d = 0 -4/2 Si d < 0 (-4 + Math.sqrt (Math.abs (d)) )/2 Profesor: Marcelo Montecinos C. 103
  • 104. Taller Programación III Java Estructuras de Decisión class CEvaluar { public static void main (String args[]) { int d; double x; System.out.println (quot;Introduzca el valor de d quot;); 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 (quot;El valor de x es quot; + x); } } Profesor: Marcelo Montecinos C. 104
  • 105. Taller Programación III Java Estructuras de Decisión swicht switch (expr1) { case valor1: instrucciones; break; case valor2: instrucciones; break; default: instrucciones; break; } Profesor: Marcelo Montecinos C. 105
  • 106. Taller Programación III Java Estructuras de Decisión switch expr1 debe ser compatible con valores switch (expr1) enteros o carácter. { Cuando la expresión coincide con algún case valor1: literal de la sentencia case, se ejecutan las instrucciones; instrucciones correspondientes a ese case Si ninguna de las constantes coincide con break; la expresión, se ejecutal el default si existe. case valor2: Si no existe el default, no se ejecuta nada. instrucciones; La sentencia break se utiliza para break; terminar una secuencia de instrucciones, haciedo que la ejecución salte a la primera default: línea de código que sigue a la sentencia instrucciones; swicht completa. break; La sentencia break es opcional, de } omitirse la ejecución continuará en el siguiente case. Profesor: Marcelo Montecinos C. 106
  • 107. Taller Programación III Java Estructuras de Decisión 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
  • 108. Taller Programación III Java Estructuras de Decisión Veamos un ejemplo con switch Haremos un programa que reciba un mes (número) y nos indique la estación que hay en ese mes. Profesor: Marcelo Montecinos C. 108
  • 109. Taller Programación III switch (mes) Java { case 12: case 1: case 2: System.out.println (quot;Inviernoquot;); break; case 3: case 4: case 5: System.out.println (quot;Primaveraquot;); break; case 6: case 7: case 8: System.out.println (quot;Veranoquot;); break; case 9: case 10: case 11: System.out.println (quot;Otonoquot;); break; default: System.out.println (quot;Mes desconocidoquot;); Profesor: Marcelo Montecinos C. 109 }
  • 110. Taller Programación III Java switch (mes) { case 12: case 1: System.out.println (“Estamos en quot;); case 2: Si mes = 2 System.out.println (quot;Inviernoquot;); break; La salida es: case 3: Invierno case 4: case 5: System.out.println (quot;Primaveraquot;); break; case 6: case 7: case 8: System.out.println (quot;Veranoquot;); break; Si mes = 12 case 9: case 10: La salida es: case 11: Estamos en System.out.println (quot;Otonoquot;); break; Invierno default: System.out.println (quot;Mes desconocidoquot;); } Profesor: Marcelo Montecinos C. 110
  • 111. Taller Programación III 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 años o una mujer soltera menor de 50 años. 2. Desarrolle un programa en Java para leer el nombre de un empleado, el salario básico por hora y el número de horas trabajadas durante una semana. Calcule el salario neto , teniendo en cuenta que si el número de horas trabajadas durante la semana es mayor de 48 horas, esas horas demás se consideran horas extras y tienen un recargo del 35%. Imprima el nombre del empleado y su salario neto. Profesor: Marcelo Montecinos C. 111
  • 112. Taller Programación III Java Ejercicios En la tienda “Sigo de pie” los empleados reciben una cierta comisión dependiendo del código del artículo que vendan. Código del artículo Cálculo de la comisión 1 15% del precio de venta 2 40% de la diferencia del precio de venta y el precio mínimo de venta 3 10% del precio mínimo de venta más el 50% de la diferencia del precio de venta y el precio mínimo de venta 4 Bs. 100 por unidad más el 5% del precio mínimo de venta 5 Bs. 500 por unidad Hacer un programa que imprima el Nombre del vendedor, el código Profesor: Marcelo Montecinos C. 112 del artículo que vendió y la comisión que se ganó.
  • 113. Taller Programación III Java Resumen En resumen, los conceptos vistos fueron : if (expresión lógica) { bloque de instrucciones } else { bloque de instrucciones } if – else - if switch (expr1) { Instrucciones case valor1: instrucciones; break; case valor2: instrucciones; break; default: instrucciones; break; } Profesor: Marcelo Montecinos C. 113
  • 114. Taller Programación III Java Sentencias de Iteración Profesor: Marcelo Montecinos C. 114
  • 115. Taller Programación III Java Sentencias de Iteración Las sentencias de iteración en Java son: while, do-while y for. Se utilizan para ejecutar varias veces un conjunto de instrucciones. Cada sentencia de repetición tiene una utilidad adecuada dependiendo de la situación. Profesor: Marcelo Montecinos C. 115
  • 116. Taller Programación III while Java Sentencias de Iteración while (expresión lógica) { bloque de instrucciones; } Ejemplo: Mostrar los números 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
  • 117. Taller Programación III while Java Sentencias de Iteración Evalúa su expresión condicional al inicio del bucle. Repite un bloque de instrucciones, mientras su expresión sea verdadera. Cuando la expresión es falsa, el control pasa a la siguiente línea de código que hay inmediatamente después del bucle. Puede suceder que el bloque de intrucciones nunca se ejecute. Profesor: Marcelo Montecinos C. 117
  • 118. Taller Programación III Java class CalFactura { public static void main(String args[ ]) { char resp; double monto,isv; System.out.println(quot;Indique si desea calcular factura s/nquot;); resp=CTeclado.ReadChar( ); while ((resp =='s') || (resp =='S')) { System.out.println(quot;Indique el monto de la facturaquot;); monto=CTeclado.ReadDouble(); isv=(monto*14.5/100); System.out.println(quot;El monto a pagar de ISV es :quot;+isv); System.out.println(quot;Desea calcular para otra facturaquot;); resp=CTeclado.ReadChar(); } } } Profesor: Marcelo Montecinos C. 118
  • 119. Taller Programación III do-while Java Sentencias de Iteración do { bloque de instrucciones; } while (expresion lógica); Ejemplo: x=0; Mostrar los números do divisibles por 3 { menores a 20 x = x + 3; System.out.println(“x = “ + x); } Profesor: Marcelo Montecinos C. while (x < 20); 119
  • 120. Taller Programación III Java do-while Sentencias de Iteración Evalúa su expresión condicional al final del bucle. Repite un bloque de instrucciones, mientras su expresión sea verdadera. Cuando la expresión es falsa, el control pasa a la siguiente línea de código que hay inmediatamente después del bucle. El bloque de instrucciones de este ciclo se ejecuta al Profesor: Marcelouna vez. menos Montecinos C. 120
  • 121. Taller Programación III Java class NotasEstudiantes { public static void main(String args[ ]) { char resp; int notaTeo,acumTeo; do { System.out.println(quot;Indique la Nota de Teoria quot;); notaTeo=CTeclado.ReadInt(); acumTeo=(NotaTeo*50/100); System.out.println(quot;El acumulado teoria es :quot;+acumTeo); System.out.println(quot;Desea calcular acumulado para otro estudiante quot;); resp=CTeclado.ReadChar(); } while ((resp == 's') || (resp =='S')); } } Profesor: Marcelo Montecinos C. 121
  • 122. Taller Programación III for Java Sentencias de Iteración for (expr. inicial; expr. Lógica;modificacion) { bloque de instrucciones; } Ejemplo: Mostrar los números del 1 al 10 for (int i = 1; i < 10; i++) { System.out.println(“i = “ + i); } Profesor: Marcelo Montecinos C. 122
  • 123. Taller Programación III Java for Sentencias de Iteración Se utiliza para ejecutar un bloque de instrucciones un número determinado (fijo) de veces. Repite un bloque de instrucciones, mientras su expresión sea verdadera. La primera vez que se va a ejecutar el ciclo, se realiza la inicialización, 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 expresión es verdadera, se ejecuta la modificación de la variable que controla el ciclo. Esto es automático. Profesor: Marcelo Montecinos C. 123
  • 124. Taller Programación III Java class Serie { public static void main(String args[ ]) { int valoralor,termino,sumSerie; System.out.println(quot;Indique el valor a calcular la serie :quot;); valor=CTeclado.ReadInt( ); System.out.println(quot;Indique la cantidad de términos :quot;); termino=CTeclado.ReadInt( ); sumSerie=0; for (int contador = 1 ; contador <= termino; contador++) { sumSerie = sumSerie + contador*valor; } System.out.println(quot;El resultado de la serie es :quot;); System.out.println(sumSerie); } } } Profesor: Marcelo Montecinos C. 124
  • 125. Taller Programación III Java Sentencias de Iteración En resumen, los conceptos vistos fueron : while (expresión lógica) { bloque de instrucciones; } do { Instrucciones bloque de instrucciones; } while (expresion lógica); for (expr. inicial; expr. Lógica; paso) { bloque de instrucciones; Profesor: Marcelo Montecinos C. } 125
  • 126. Taller Programación III Java Ejercicios 1. Se desea saber el promedio de notas que tiene un estudiante. Hasta la fecha ha cursado 6 materias; además se quiere el número de materias reprobadas y el número de materias aprobadas. Escribir el programa en Java dado el Algoritmo Entrada. Salida: nota: numérico promn, numa, numr: numérico Profesor: Marcelo Montecinos C. 126
  • 127. Taller Programación III Java 1. Inicio Promedio. 2. numa, numr, prom, acumNotas,nota: numérico 3. numa 0 4. numr 0 5. acumNotas 0 6. Para cont=1 hasta 6 hacer (+1) Comenzar 6.1 Leer nota 6.2 acumNotas acumNotas+nota 6.3 Si (nota < 10) entonces 6.3.1 numr numr + 1 Sino 6.3.2 numa numa + 1 Fin Para 7. prom acumNotas/6 8. Mostrar (“ El promedio del estudiantes es : “prom) 9. Mostrar (“El estudiante tiene “, numa , “materias aprobadas”) 10. Mostrar (“El estudiante tiene “ ,numr, “materias reprobadas”) 11. Terminar Promedio Profesor: Marcelo Montecinos C. 127
  • 128. Taller Programación III Java 2. Se requiere que se obtenga la misma información pero, para todos los estudiantes de una escuela. Entrada. Salida: nota: numérico promn, numa, numr: numérico Profesor: Marcelo Montecinos C. 128
  • 129. 1. Inicio Escuela. Programación III Taller 2. promedioMax, numa, numr, prom,acumNotas,nota,carnet: numérico 3. Leer carnet Java 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 Profesor: Marcelo Montecinos C. 129
  • 130. Strings en Java Cadena de caracteres Profesor: Marcelo Montecinos C. 130
  • 131. Taller Programación III Java Strings En Java un String no es un tipo de dato primitivo como char o int. Es una clase que maneja cadena de caracteres. Profesor: Marcelo Montecinos C. 131
  • 132. Taller Programación III Java Se declara la variable de tipo de dato cadena. Strings String nombre,cadena; Se crea una instancia de cadena, con el constructor por defecto. nombre = new String(); nombre = new String(quot;carameloquot;); Para asignarle una secuencia de caracteres. nombre= quot; Maria Perezquot;; Para hacer referencia a la misma instancia del String cadena = nombre; A partir de este momento cadena y nombre hacen referencia a la misma instancia. (No se copia el valor , solo la referencia) Profesor: Marcelo Montecinos C. 132
  • 133. Taller Programación III Java Strings Para obtener la longitud de la candena nombre.length() Si deseamos concatenar cadenas nombre = quot;Juanquot;+quot; Garcia”; Se puede utilizar el metodo concat para concatenar dos cadenas, nombre = quot; Carlos“; cadena=nombre.concat(quot; Juan quot;); el contenido de cadena, al final sería: quot;CarlosJuan quot; Profesor: Marcelo Montecinos C. 133
  • 134. Taller Programación III Java String Para obtener el caracter que se encuentra en una posición charAt(posición); ejemplo, cadena.charAt(0) devolveria el caracter “C” donde posición se inicia en cero. Para extraer una subcadena, hay dos formas substring(int posiciónInicial); copia desde la posición inicial hasta el final de la cadena substring(int posiciónInicial, int posicionFinal); copia desde la posición inicial hasta la posición final-1 Profesor: Marcelo Montecinos C. 134
  • 135. Taller Programación III Java String Un ejemplo de substring, nombre=“Maria Rosa”; System.out.println(nombre.substring(2)); System.out.println(nombre.substring(2,4)); la salida sería, ria Rosa ri Profesor: Marcelo Montecinos C. 135
  • 136. Taller Programación III Java 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 sería, cese mie Profesor: Marcelo Montecinos C. 136
  • 137. Taller Programación III Java String Para convertir los caracteres de una cadena de mayúsculas a minúsculas toLowerCase() ejemplo, cadena=“CASA MIA”; System.out.println(cadena.toLowerCase()); la salida sería, casa mia Profesor: Marcelo Montecinos C. 137
  • 138. Taller Programación III Java String Para convertir los caracteres de una cadena de minúsculas a mayúsculas toUpperCase() ejemplo, cadena=“casa mia”; System.out.println(cadena.toUpperCase()); la salida sería, CASA MIA Profesor: Marcelo Montecinos C. 138
  • 139. Taller Programación III Java String Para comparar los caracteres dentro de dos cadenas equals() ejemplo, if (s1.equals(s2)) { System.out.println(quot;Son iguales los caracteresquot;); } else { System.out.println(quot;no son iguales los caracteresquot;); } Profesor: Marcelo Montecinos C. 139
  • 140. Taller Programación III Java String Para comparar los caracteres dentro de dos instancias, sin diferenciar entre mayúsculas y minúsculas equalsIgnoreCase() ejemplo, if (s1.equalsIgnoreCase(s2)) { System.out.println(quot;Son iguales los caracteresquot;); } else { System.out.println(quot;no son iguales los caracteresquot;); } Profesor: Marcelo Montecinos C. 140
  • 141. Taller Programación III Java 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
  • 142. Taller Programación III Java String Para saber si una cadena es menor, igual o mayor lexicográficamente que otra. compareTo() ejemplo, if (s1.compareTo(s2) < 0) {System.out.println(“s1 es menor a s2quot;);} else { if (s1.compareTo(s2) == 0) { System.out.println(“s1 es igual a s2quot;); } else {System.out.println(“s1 es mayor s2quot;);} } Profesor: Marcelo Montecinos C. 142
  • 143. Taller Programación III Java String Para determinar si la cadena comienza con una cadena especificada. startsWith() ejemplo, if (s1.startsWith(quot;carquot;)) { System.out.println(quot;SIquot;); } else { System.out.println(quot;NOquot;); } Profesor: Marcelo Montecinos C. 143
  • 144. Taller Programación III Java String Para determinar si una cadena se encuentra, a partir de una posición, dentro de una cadena especificada, startsWith(String cadena,int posición) ejemplo, if (s1.startsWith(quot;carquot;,3)) { System.out.println(quot;SIquot;); } else { System.out.println(quot;NOquot;); Profesor: Marcelo Montecinos C. } 144
  • 145. Taller Programación III Java String Para determinar si la cadena termina con una cadena dada. endsWith() ejemplo, if (s2.endsWith(quot;SAquot;)) { System.out.println(quot;SIquot;); } else { System.out.println(quot;NOquot;); } Profesor: Marcelo Montecinos C. 145
  • 146. Taller Programación III Java Paquetes Paquetes Java más importantes: - lang – para funciones del lenguaje; - util – para utilidades adicionales; - io – para entrada y salida; - text – para formateo especializado; - awt – para gráficos e interfaz gráfica 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
  • 147. JDBC Java Database Connectivity Profesor: Marcelo Montecinos C. 147
  • 148. Taller Programación III Java Introducción JDBC es una API, formada por conjunto de clases e interfaces en el lenguaje de programación Java, para ejecutar sentencias SQL. Ofrece un estándar de conexión a cualquier base de datos disponible en el mercado. Permite obtener los datos en forma fácil y cómoda en ambientes cliente-servidor a través de Internet/Intranet. Profesor: Marcelo Montecinos C. 148
  • 149. Taller Programación III Java ¿Qué hace JDBC? Establece una conexión a una base de datos. Envía sentencias SQL. Procesa los resultados de estas sentencias. Profesor: Marcelo Montecinos C. 149
  • 150. Taller Programación III Java Arquitectura JDBC Arquitectura normal Puente JDBC-ODBC Aplicaciones Java Aplicaciones Java JDBC API JDBC API Adm. de controladores JDBC Adm. de controladores JDBC Puente JDBC/ODBC Controlador Controlador JDBC JDBC Adm. de controladoresODBC C. ODBC C. ODBC DB DB Profesor: Marcelo Montecinos C. DB DB 150
  • 151. Taller Programación III Java Primer ejemplo básico Connection con = DriverManager.getConnection ( quot;jdbc:odbc:nombrequot;, quot;loginquot;, quot;passwordquot;); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(quot;SELECT a, b, c FROM Table1quot;); while (rs.next()) { int x = rs.getInt(quot;aquot;); String s = rs.getString(quot;bquot;); float f = rs.getFloat(quot;cquot;); } JDBC usa una URL para especificar la base de datos. Profesor: Marcelo Montecinos C. 151
  • 152. Taller Programación III Java ...Primer ejemplo básico Ejemplos de URL: jdbc:mysql://myserver:4444/db1 jdbc:oracle://oraserver jdbc:odbc:mydatabase Profesor: Marcelo Montecinos C. 152
  • 153. Taller Programación III Java JDBC vs. ODBC 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 implementación de Java. ODBC mezcla funciones simple y complejas. Los controladores de ODBC deben ser instalados en cada cliente. Profesor: Marcelo Montecinos C. 153
  • 154. Taller Programación III Java ...JDBC vs. ODBC JDBC es una interfaz natural en Java. Profesor: Marcelo Montecinos C. 154
  • 155. Taller Programación III Java Modelos de acceso a BD Aplicación De 2 capas Java Cliente La aplicación “habla” directamente con la base de datos. JDBC Controlador JDBC se comunica con Protocolo el sistema específico que maneja la base de datos. BD Servidor La base de datos puede estar en DBMS BD otra máquina, con lo que el cliente se comunica por red. Esta es la configuración llamada cliente/servidor. Profesor: Marcelo Montecinos C. 155
  • 156. Taller Programación III Java Modelos de acceso a BD Cliente (GUI) Applet en Java o De 3 capas Navegador Los comandos son enviados a la HTML RMI,CORBA Llamadas HTTP, capa intermedia de servicios, la cual envía sentencias SQL a la Aplicación Servidor base de datos. Ésta las procesa y Java envía los resultados de vuelta a la JDBC capa intermedia, para luego ser Protocolo enviados al cliente. BD Permite un control de acceso y de actualización. Servidor DBMS Provee ventajas de performance. BD Profesor: Marcelo Montecinos C. 156
  • 157. Taller Programación III Java Categorías de los controladores JDBC Puente JDBC-ODBC. Parte API Nativa-Parte Java. Se convierte las llamadas JDBC al sistema de la Base de datos. JDBC-Red. Es sólo 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 sólo Java. Se usa un protocolo de red con la BD. Profesor: Marcelo Montecinos C. 157
  • 158. Taller Programación III Java Conexión Un objeto “Connection” representa una conexión a una base de datos. Una sesión incluye las sentencias SQL que son ejecutadas y los resultados de éstas. Establecer la conexión: “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
  • 159. Taller Programación III Java ...Conexión Sintáxis de una URL JDBC: jdbc:<subprotocolo>:<subnombre> <subprotocolo> es el nombre del controlador o del mecanismo de conexión. Ejemplo: odbc. <subnombre> es la identificación de la base de datos. El formato varia según el controlador especificado. Ejemplo: //servidor:puerto/etc Profesor: Marcelo Montecinos C. 159
  • 160. Taller Programación III Java Enviando sentencias SQL JDBC permite que se escriba cualquier tipo de sentencia SQL. Aunque ésta fuera dependiente de la base de datos sólo se correría el riesgo de incompatibilidad al cambiar de base de datos. Llamadas a procedimientos almacenados Formatos de fecha Profesor: Marcelo Montecinos C. 160
  • 161. Taller Programación III Java ...Enviando sentencias SQL JDBC provee 3 clases: “Statement”: Este objeto es usado para enviar sentecias SQL simples. Es creado por el método “createStatement”. “PreparedStatement”: Este objeto es usado para sentencias que requieren uno o más parámetros. La sentencia es precompilada y guardada para uso futuro. “CallableStatement”: Es usado para ejecutar procedimientos almacenados. Profesor: Marcelo Montecinos C. 161
  • 162. Taller Programación III Java Transacciones Una transacción consiste en una o más 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 métodos “commit” o “rollback” explícitamente. Profesor: Marcelo Montecinos C. 162
  • 163. Taller Programación III Java 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 través de un conjunto de métodos “get”, los cuales, a su vez, permiten el acceso a cada columna de estas filas. Profesor: Marcelo Montecinos C. 163
  • 164. Taller Programación III Java Cargando la clase del controlador JDBC Ejemplo: Class.forName(”empresa.db.Driverquot;); Esto crea una instancia del controlador y llama al método “DriverManager.registerDriver” registrando este controlador en la lista de controladores disponibles para conexiones. Profesor: Marcelo Montecinos C. 164
  • 165. Taller Programación III Java Ejemplo de sentencia Connection con = DriverManager.getConnection ( quot;jdbc:odbc:nombrequot;, quot;loginquot;, quot;passwordquot;); PreparedStatement pstmt = con.prepareStatement( “UPDATE tabla1 SET m=? WHERE x=?”); pstmt.setString(1, quot;Holaquot;); for (int i = 0; i < 10; i++) { pstmt.setInt(2, i); int rowCount = pstmt.executeUpdate(); } Profesor: Marcelo Montecinos C. 165
  • 166. Taller Programación III Java Primer ejemplo básico Connection con = DriverManager.getConnection ( quot;jdbc:odbc:nombrequot;, quot;loginquot;, quot;passwordquot;); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(quot;SELECT a, b, c FROM Table1quot;); while (rs.next()) { int x = rs.getInt(quot;aquot;); String s = rs.getString(quot;bquot;); float f = rs.getFloat(quot;cquot;); } Profesor: Marcelo Montecinos C. 166
  • 167. Clases en Java Profesor: Marcelo Montecinos C. 167
  • 168. Taller Programación III Java Declaración de Clases modificador class nombreClase { < declaración de campos > < declaración de métodos > } 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, sólo podrá utilizarse dentro del paquete Profesor: Marcelo Montecinos C. 168
  • 169. Taller Programación III Java Declaración de Objetos nombreClase nombreObjeto; nombreClase nombreObjeto1, nombreObjeto2, nombreObjeto3; nombreClase nombreObjeto = nombreOtroObjeto; nombreClase nombreObjeto = new nombreClase(); Ejemplo: clasePublica elObjeto; clasePublica elObjeto1, elObjeto2, elObjeto3; clasePublica elObjeto4 = elObjeto; clasePublica elObjeto5 = new clasePublica(); Profesor: Marcelo Montecinos C. 169
  • 170. Taller Programación III Java Declaraciones de Campos modificadores tipo nombreCampo; modificador puede ser: - 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. Otros modificadores que se pueden añadir son: - 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
  • 171. Taller Programación III Java Acceso a Campos objeto.campo; // si campo no es static nombreClase.campo; // si campo es static elObjeto.doblePublico = 5.0; double doble = elObjeto.doblePublico; Clase.doblePublicoEstatico = 7.0; Double doble = Clase.doblePublicoEstatico; Profesor: Marcelo Montecinos C. 171
  • 172. Taller Programación III Java Métodos de una Clase 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 métodos pueden ser públicos, privados o protegidos (public, private, protected), al igual que las compoenetes - pirvate: implica que pueden ser vistas sólo 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 (agrupación de clases en un archivo). Este es eldefault. - public:son vistas desde cualquier lado. Profesor: Marcelo Montecinos C. 172
  • 173. Taller Programación III Java Declaración de Métodos modificador tipo nombreMetodo(<lista de parametros formales>) { < cuerpo del método; campos e instrucciones > return expresion; // solo métodos 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 método, puede ser: - void si el método no devuelve nada - un tipo primitivo - una clase nombreMetodo es el nombre del método Profesor: Marcelo Montecinos C. 173
  • 174. Taller Programación III 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; } } Profesor: Marcelo Montecinos C. 174
  • 175. Taller Programación III Java Llamadas a Métodos 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(); Profesor: Marcelo Montecinos C. 175
  • 176. Taller Programación III Java Declaración de Métodos Constructores modificadores nombreClase(<lista argumentos formales>) { < cuerpo del método constructor > } Ejemplo: public class Clase { private int enteroPrivado; public Clase() { enteroPrivado = 0; } public Clase(int entero) { enteroPrivado = entero; } } Profesor: Marcelo Montecinos C. 176
  • 177. Taller Programación III Java Llamadas a Métodos Constructores nombreClase objeto = new nombreClase(<lista parametros reales>); Ejemplo: Clase elObjeto; elObjeto = new Clase(); O en una sola línea: Clase elObjeto = new Clase(); Clase elObjeto = new Clase(5); Profesor: Marcelo Montecinos C. 177
  • 178. Taller Programación III Java Modelo de un Programa public class nombrePrograma { public static void main(String[] args) { < cuerpo del programa > } } Profesor: Marcelo Montecinos C. 178
  • 179. Taller Programación III Java 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 métodos) de la superclase. Profesor: Marcelo Montecinos C. 179
  • 180. Taller Programación III Java 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 conversión explícita (cambio de tipo). ClaseExtendida elObjetoExtendido = new ClaseExtendida(); Clase elObjeto = laClaseExtendida; ClaseExtendida elObjetoExtendido = (ClaseExtendida)elObjeto; Profesor: Marcelo Montecinos C. 180
  • 181. Taller Programación III Java Superconstrucción modificadores class nombreclase extends nombreClaseQueEstiende { public nombreClase(<lista de parametros formales>) { super(<lista de parametros reales>); <instrucciones de inicializacion> } } Importante: La llamada al superconstructor debe ser la primera instrucción de un constructor. Profesor: Marcelo Montecinos C. 181
  • 182. Taller Programación III Java Ejemplo de Superconstrucción 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; } } Profesor: Marcelo Montecinos C. 182
  • 183. Taller Programación III Java 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); Profesor: Marcelo Montecinos C. 183
  • 184. Taller Programación III Java Sobreescritura de Métodos 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; } Profesor: Marcelo Montecinos C. 184
  • 185. Taller Programación III Java Métodos en Java Profesor: Marcelo Montecinos C. 185
  • 186. Taller Programación III Java Métodos La mejor forma de crear y mantener un programa grande, es construirlo a partir de piezas más pequeñas o módulos. Cada uno de los cuales es más manejable que el programa en su totalidad Profesor: Marcelo Montecinos C. 186
  • 187. Taller Programación III Java Métodos Los métodos también son utilizados para evitar la repetición de código en un programa al poder ejecutarlo desde varios puntos de un programa con sólo invocarlo. Profesor: Marcelo Montecinos C. 187
  • 188. Taller Programación III Java Métodos Esta técnica de descomposición se denomina Divide y vencerás. Los módulos (subprogramas) en Java se denominan métodos. Un método se invoca ,es decir, se le pide realizar su tarea designada con una llamada de método. Profesor: Marcelo Montecinos C. 188
  • 189. Taller Programación III Java Métodos La llamada a métodos especifica el nombre del método y proporciona la información (en forma de argumentos) cuando el método lo necesite para hacer su trabajo El formato de una definición de método es: static tipo-de-valor-devuelto nombredelmétodo(lista-param) { declaraciones y sentencias } Profesor: Marcelo Montecinos C. 189
  • 190. Taller Programación III Java Métodos Casi todos los métodos tienen una lista de parámetros; los parámetros de un método también son variables locales. Es recomendable limitar los métodos a realizar una sola tarea bien definida y el nombre del método debe expresar efectivamente dicha tarea. Profesor: Marcelo Montecinos C. 190
  • 191. Taller Programación III Java Métodos El nombre es cualquier identificador válido. El tipo-de-valor-devuelto es el tipo de dato del resultado, que el método resultado devuelve al invocador. El tipo-de-valor-devuelto void indica que el método no devuelve ningún valor, es un procedimiento. Profesor: Marcelo Montecinos C. 191
  • 192. Taller Programación III Java Métodos Omitir el tipo-de-valor-devuelto en una definición de método causa un error de sintaxis. Olvidar devolver un valor desde un método que se supone debe devolver un valor es un error de sintaxis. Profesor: Marcelo Montecinos C. 192
  • 193. Taller Programación III Java Métodos Si se especifica un tipo-de-valor- devuelto distinto de void el método debe contener una sentencia return. Devolver un valor de un método cuyo tipo devuelto se ha declarado void causa un error de sintaxis. Profesor: Marcelo Montecinos C. 193
  • 194. Taller Programación III Java Métodos Todas las variables declaradas en las definiciones de los métodos son variables locales; solo se conocen en el método en el que se definen. static int SumarNum(int e) { e+=e; System.out.println(++e); return e; //Este método retorna un valor } Profesor: Marcelo Montecinos C. 194
  • 195. Taller Programación III Java Métodos La lista-de-parámetros es una lista separada por comas que contiene las declaraciones de los parámetros que el método recibe cuando es invocado. Si un método no recibe valores, se coloca un juego de paréntesis vacío ( ) después del nombre del método. Profesor: Marcelo Montecinos C. 195
  • 196. Taller Programación III Java Métodos Declarar parámetros para un método que poseen el mismo tipo float x,y en lugar de float x, float y producirá un error de compilación porque se requiere un tipo para cada parámetro. Colocar punto y coma después del paréntesis que encierra la lista de parámetros es un error de sintaxis. Esta es una declaración de un método que contiene 2 errores. static void Calcular (float x,y); Profesor: Marcelo Montecinos C. 196
  • 197. Taller Programación III Java Definir una variable local de un método igual que un parámetro es un error de sintaxis. Ejemplo: class CCmporvalor Métodos { 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; //Este método retorna un valor } } Profesor: Marcelo Montecinos C. 197
  • 198. Taller Programación III Java Definir un método dentro de otro es un error Métodos de sintaxis. Existen tres formas de devolver el control al punto en el que se invocó un método: a) Si el método no devuelve un resultado el control se devuelve cuando se llega a la llave derecha que termina el método. b) Al ejecutarse la sentencia return también, si el método NO devuelve ningún resultado. c) return expresión; Profesor: Marcelo Montecinos C. 198
  • 199. Taller Programación III Java Ejemplo Profesor: Marcelo Montecinos C. 199
  • 200. Taller Programación III Java Entrada: v1,v2,v3 :numéricos Inicio Programa Principal V1,v2,v3,promn,mayor:numéricos Procesar IntroDatos //Llamada a un subprograma tipo procedimiento promn Procesar Calprom //Llamada a un subprograma tipo función Procesar Imprime(promn) Mostrar (“El mayor es “ mayor Procesar Max) Max Terminar Programa Principal Profesor: Marcelo Montecinos C. 200
  • 201. Taller Programación III Java class CPrueba //Clase (Programa) { static int v1,v2,v3;//Números enteros declarados en forma Global public static void main (String args[ ]) //Método principal { float prom; IntroDatos(); //Llamada a un método que no devuelve nada prom=CalcProm(); //Llamada a un método tipo función Imprime(prom); //Llamada a un método con pase de parámetros System.out.println(quot;El mayor: quot;+ Max( )); } Profesor: Marcelo Montecinos C. 201
  • 202. Taller Programación III Java 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 Profesor: Marcelo Montecinos C. 202
  • 203. Taller Programación III Java static void IntroDatos() //Método que no devuelve ni recibe nada { System.out.println(quot;introduce el valor V1: quot;); v1=CTeclado.ReadInt( ); System.out.println(quot;introduce el valor V2: quot;); v2=CTeclado.ReadInt( ); System.out.println(quot;introduce el valor V3: quot;); v3=CTeclado.ReadInt( ); } Profesor: Marcelo Montecinos C. 203
  • 204. Taller Programación III Java Inicio Calcprom aux: numérico aux (v1+v2+v3)/3 Retornar aux Inicio Imprime(valor) valor:numérico Mostrar (“Promedio”) Mostrar (valor) Regresar Profesor: Marcelo Montecinos C. 204
  • 205. Taller Programación III Java static float CalcProm( ) //Método que devuelve un valor { float aux; aux=(v1+v2+v3)/3; //V1,V2,V3 variables globales return aux; // Valor que retorna el método } static void Imprime(float valor)//Observe el cambio de nombre { System.out.print(quot;Promedio: quot;); System.out.println(valor); } Profesor: Marcelo Montecinos C. 205
  • 206. Taller Programación III Java Inicio Max aux:numérico aux 0 Si ((v1>=v2)and (v1>=v3)) entonces Aux v1 Si ((v2>=v1)and(v2>=v3))entonces Aux v2 Si ((v3>=v1)and(v3>=v2))entonces Aux v3 Retornar aux. Profesor: Marcelo Montecinos C. 206
  • 207. Taller Programación III Java static int Max() // Método que retorna un valor { //V1,V2,V3 variables globales 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. 207
  • 208. Taller Programación III Java Propiedades de los Objetos Objetos nulos: null El identificador this public class Clase { private int entero; public Clase(int entero) { this.entero = entero; } } Profesor: Marcelo Montecinos C. 208
  • 209. Taller Programación III Java Objetos vs Variables - Una variable tiene memoria para un solo valor y dispone de un conjunto predefinido de operaciones según sea su tipo. - Un objeto tiene memoria para un grupo de varios valores, junto con un conjunto coherente de métodos que operan sobre esos valores. Tanto métodos como valores están encapsulados en la clase de la que se ha obtenido el objeto. Profesor: Marcelo Montecinos C. 209
  • 210. Taller Programación III 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
  • 211. Taller Programación III Java 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); } } Profesor: Marcelo Montecinos C. 211
  • 212. Taller Programación III Java Asignación 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
  • 213. Taller Programación III Java Arrays Declaración e instanciación de un array de n enteros: int miArray[]; miArray = new int[n]; Lo mismo en una sola línea: int miArray[] = new int[n]; Declaración e instanciación de un array de n objetos: MiClase miArray[] = new MiClase[n]; for(int i=0;i<n;i++) miArray[i] = new MiClase(); Profesor: Marcelo Montecinos C. 213
  • 214. Taller Programación III Java Conversiones de Clase El método 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 conversión explícita de tipo. Clase objeto1 = (Clase)objeto2.clone(); Profesor: Marcelo Montecinos C. 214
  • 215. Taller Programación III Java Paquetes Paquetes Java más importantes: - lang – para funciones del lenguaje; - util – para utilidades adicionales; - io – para entrada y salida; - text – para formateo especializado; - awt – para gráficos e interfaz gráfica 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. 215
  • 216. Taller Programación III Java Paquetes package nombrePaquete; modificador class nombreClase { < declaracion de la clase > } Importante: Si deseamos que una clase sea utilizada fuera de su paquete, deberemos declararla como public. Profesor: Marcelo Montecinos C. 216
  • 217. Taller Programación III Java Interfaces Una interfaz es una forma especial de una clase que consiste exclusivamente de declaraciones de métodos abstractos y constantes. En vez de la palabra clave “class” las interfaces tienen la palabra “interface”. Todos los métodos 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
  • 218. Taller Programación III Java Interfaces (2) La interfaz funciona como un protocolo: cualquier clase que ocupoe la interfaz debe implementar todos los métodos 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
  • 219. Taller Programación III Java Interfaces(3) A estas alturas nos deberíamos 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 gráficos están obligados a ser derivados de esta única clase abstracta (Java no permite múltiple herencia). En muchos casos querríamos que los objetos gráficos fueran heredados de otras clases (incluso distintas clases para distintos objetos gráficos) pero que todos tuvieran la misma interfaz. Profesor: Marcelo Montecinos C. 219
  • 220. Taller Programación III Interfaces(4) Java O sea que las interfaces definitivamente no sirven para implementar herencia múltiple ? 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 extensión de una clase abstracta, con lo cual se heredan características de otra clase más: Ej: public interface ObjetoGrafico extends ObjetoGeometrico public class ComponenteGrafica extends JPanel implements ObjetoGráfico: Profesor: Marcelo Montecinos C. 220
  • 221. Haciendo más Programación IIIcosa a la vez: Taller de una Threads Java 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 sólo 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 parámetros distintos a cada thread. Los thread se pueden programar con la canatidad de variables necesarias para su ejecución (no lo heredan TODO) Profesor: Marcelo Montecinos C. 221
  • 222. Taller Programación III El método run deJava clase Thread la Los threads son una clase existente. Lo que un thread en particular hace cuando se echa a correr se debe escribir en el método run de la clase thread, que es un método que se debe escribir siempre. Hay dos formas de implementar Threads en Java (que coincide con las dos formas vistas de implementar métodos definidos): Crear una nueva clase que extienda la clase abstracta Thread e implementar el método abstracto run. Implementar la interfaz runnable, lo cual implica que se va a reescribir el método run. La razón para escoger una u otra forma es simplemente si queremos que la clase que implementa el thread sea además extendida de otra clase (aparte de la clase thread). Profesor: Marcelo Montecinos C. 222
  • 223. Taller Programación III Java 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 + quot; quot; + getName()); try { this.sleep((int)(Math.random() * 1000)); } catch (InterruptedException e) {} } System.out.println(quot;DONE! quot; + getName()); } } El método this.sleep(milisegundos) C. debe ir en un bloque try and catch Profesor: Marcelo Montecinos 223
  • 224. Taller Programación III La forma extendida de Thread(2) Java public class TwoThreadsTest { public static void main (String[] args) { new SimpleThread(quot;Jamaicaquot;).start(); new SimpleThread(quot;Fijiquot;).start(); } } El método start() inicia la ejecucón de un thread. Esto implica que se empieza a ejecutar el código escrito en el método run del thread. También existen otros métodos que se le pueden aplicar a un thread: suspend(), resume(), stop(). Profesor: Marcelo Montecinos C. 224
  • 225. Implentación haciendo interface Taller Programación III Java 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
  • 226. Taller Programación III Usando threads para atender clientes de Java un Servidor de Sockets 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 conexión, abre un socket normal e inicia un thread que atiende a este cliente. El socket abierto se pasa como parámetro. De esa manera puede seguir oyendo por el ServerSocket sin estar bloqueado. El thread tiene un método run que atiende los pedidos del cliente El cliente se conecta al servidor sin saber que finalmente será un socket el que está atendiéndolo. Si el protocolo de atención especifica la manipulación de datos comunes (por ejemplo a un archivo con información sobre cuentas corrientes), hay que tener cuidado con los accesos concurrentes a estos datos (métodos synchronized). Profesor: Marcelo Montecinos C. 226
  • 227. Taller Programación III Ejemplos de programas interesantes 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 sólo manda dos strings, uno avisándole que número 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 método al cual acceden varios threads de modo que no se produzca problema de acceso indebido (más de un thread puede obtener el mismo número!!) 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
  • 228. Taller Programación III Objetos RemotosJava JAVA en La tecnología RMI (Remote Method Invocation) permite a un programa corriendo en una máquina virtual de java (un intérprete) invocar el método de un objeto localizado en otra máquina 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 típica aplicación de servidor crea un objeto, lo “publica” para que pueda ser accesible de cualquier otro lado y espera a que llamen clientes pidiendo la invocación de sus métodos. Una típica aplicación cliente obtiene una referencia al objeto remoto en el servidor y luego invoca sus métodos como si fuera un objeto local. RMI provee mecanismos con los cuales el cliente y el servidor se pueden intercambiar información, convirtiendolas en aplicaciones de objetos distribuidos. Estos mecanismos deben hacer posible: 1) localizar objetos remotos, 2) comunicarse con los objetos remotos 3) traspasar el código de los objetos remotos (deben ser serializables) Profesor: Marcelo Montecinos C. 228
  • 229. Taller Programación III Interfaces, objetos y métodos Java remotos Como en otras aplicaciones, una aplicación distribuida que usa RMI está constituida por interfaces y clases. Las interfaces definen los métodos que serán conocidos por los clientes de los objetos remotos. Las clases remotas implementan estos y quizas otros métodos también. Un objeto remoto se implementa siguiendo los siguientes pasos: 1) Diseño e implementación de las componentes de la aplicación distribuida 2) Compilar los códigos fuentes y generar los llamados “stubs” y skeletons 3) echar a andar la aplicación Profesor: Marcelo Montecinos C. 229
  • 230. Taller Programación III Java Diseñar e implementar las componentes de la aplicación Definir las interfaces remotas: Una interfaz remota especifica los métodos que pueden ser invocados en forma remota por un cliente. Los clientes conocerán los objetos remotos sólo a través de las interfaces. Implementación de los objetos remotos: los objetos remotos deben implementar una o más interfaces remotas. Además pueden implementar otros métodos 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 las interfaces remotasMontecinos C. definidas. Profesor: Marcelo están 230
  • 231. Taller Programación III Java Un ej: Un objeto remoto que contiene un número //el archivo de definición de la interfaz import java.rmi.*; public interface Numero extends Remote { public int getNumero() throws RemoteException; } Este es la definición de la interfaz: implica que los clientes sólo conocerán el método getNumero() de el objeto remoto. Para los clientes la clase de este objeto es Numero, no importa cómo lo haya llamado en el archivo de implementación del tipo de objeto. Profesor: Marcelo Montecinos C. 231
  • 232. Taller Programación III Java Un ej: Un objeto remoto(2) //el archivo de definición de la implementación import java.rmi.*; import java.rmi.server.UnicastRemoteObject; public class NumeroImpl extends UnicastRemoteObject implements Numero { int cont = 0; public int getNumero() throws RemoteException { int ret = cont++; return ret; } public static void main(String args[]) { System.setSecurityManager(new RMISecurityManager()); try { NumeroImpl n = new NumeroImpl(); Naming.rebind(quot;//quot;+args[0]+quot;/elNumeroquot;,n); System.out.println(quot;Numero creadoquot;); } catch (Exception e) {} } Profesor: Marcelo Montecinos C. } 232
  • 233. Taller Programación III Java Aclaración: Existe un servidor de comunicaciones !!!! Es un programa que provee java llamado rmiregistry Se echa a correr en la máquina 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é máquina esta corriendo. rmiregistry Naming.lookup(2) Internet Naming.rebind(1) Cliente servidor Objeto.metodo() (3) Profesor: Marcelo Montecinos C. 233
  • 234. Taller Programación III Java Un ej: Un objeto remoto que contiene un número(3) //el archivo del cliente import java.rmi*; import java.rmi.server.*; class ClienteNumero { public static void main(String args[]) { try { Numero N = (Numero) Naming.lookup(quot;//quot;+args[0]+quot;/elNumeroquot;); System.out.println(quot;El numero vale ahora quot;+N.getNumero(); } catch( Exception e) {} } } Profesor: Marcelo Montecinos C. 234
  • 235. Taller Programación III Java Compilar los códigos fuentes y generar las clases y los llamados “stubs” y skeletons 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. Además de implementar el constructor y el método 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. 235
  • 236. Taller Programación III Java Compilar los códigos 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 sólo la estructura de la clase pero es suficiente información 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 Profesor: Marcelo Montecinos C. 236
  • 237. Taller Programación III Java Echar a andar la aplicación 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 aplicación más 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
  • 238. Taller Programación III Java Networking con Java (introducción) Java es un lenguaje que nace cuando la internet está en pleno desasarrollo. Los diseñadores de java ya saben que se necesita un lenguaje que apoye la programación 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 también 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
  • 239. Taller Programación III Java Los URL Un URL es un UNIFORM RESOURCE LOCATOR. Consiste en una dirección de un recurso que un servidor en la internet pone a disposición 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 dirección del recurso que queremos recuperar. Profesor: Marcelo Montecinos C. 239
  • 240. Taller Programación III Java Los URL (2) Existen varios constructores de URL: URL unRUL = new URL(“http://www.arminco.com/index.html”); unURL = new URL(“http”;”www.arminco.com”,”index.html”); inURL = new URL(“http”,”www.arminco.com”,80,”index.html”); Al crear una variable URL se puede producir una excepcion del tipo MalformedURLException por eso se deben tomar las medidas necesarias (como por ej: usar un bloque try-catch) try { URL miURL = new URL(....); } catch(MalFormedURLException e) { // codigo para atrapar la exception } Métodos que se pueden aplicar a un objeto de la clase URL: getProtocol(), getHost(), getPort(), getFile(), openConnection() Profesor: Marcelo Montecinos C. 240
  • 241. Taller Programación III Java Leyendo el contenido de un URL 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
  • 242. Taller Programación III 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 comunicación segura (hay recuperación de errores de transmisión). 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 comunicación entre dos programas con sockets siempre hay un servidor y un cliente. El servidor es el que primero establece la posibilidad de comunicación 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
  • 243. Taller Programación III Servlets Java Servidor Cliente Base de datos Profesor: Marcelo Montecinos C. 243
  • 244. Taller Programación III Servlets Java Programas que se ejecutan en los servidores. Añaden funcionalidad a un servidor web, del mismo modo que los applets añaden 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 módulos de Apache), son independientes del servidor y de la plataforma. Profesor: Marcelo Montecinos C. 244
  • 245. Taller Programación III Cuándo se suelen utilizar Java La página web se basa en datos que proporciona el usuario. Ejemplo: e-commerce sites. Los datos cambian frecuentemente. Ejemplo: Partes meteorológicos. La página web utiliza información de BDs u otras fuentes. Ejemplo: Aplicaciones comerciales. Profesor: Marcelo Montecinos C. 245
  • 246. Taller Programación III Applets Java servidor cliente El usuario pide un applet en java NAVEGADOR WEB Llega un applet en java Arranca la máquina Virtual de java y Se ejecuta el applet MÁQUINA VIRTUAL JAVA Profesor: Marcelo Montecinos C. 246
  • 247. Taller Programación III Servlets Java Servidor Cliente Base de datos Profesor: Marcelo Montecinos C. 247
  • 248. Servlets. Programación III Taller Requisitos Java El servidor debe tener una máquina virtual Java. El servidor debe soportar la API de los servlets Java. JavaServer Web Development Kit (JSWDK). http://java.sun.com/products/servlet/ Servidores capaces de ejecutar servlets: Java Web Server Netscape Fast Track y Enterprise O’Reilly WebSite Professional Lotus Domino Go WebServer Novel IntraNetWare IBM Internet Connection Server Otros Profesor: Marcelo Montecinos C. 248
  • 249. Taller Programación III Ejecución de un servlet Java Formas de iniciar la ejecución: Introducir la dirección URL del servlet en un navegador web. Llamar al servlet desde una página web. Ejecutar un servlet llamándolo desde otro servlet. Profesor: Marcelo Montecinos C. 249
  • 250. Taller Programación III Desde un navegador web Java http://nombre_maquina:puerto/ruta_se rvlet/nombre_servlet Las llamadas a servlets pueden contener parámetros: http://www.datsi.fi.upm.es/~mperez/servle ts/serv1?num1=3&num2=4 Profesor: Marcelo Montecinos C. 250
  • 251. Taller Programación III Desde una página web Java Un servlet también puede ser llamado desde el código de una página web, al igual que se llamaría a cualquier CGI. Ejemplo: <form action = “http://www.datsi.fi.upm.es/~mperez/servl ets/serv2” method=“post”> Profesor: Marcelo Montecinos C. 251
  • 252. Taller Programación III Desde otro servlet Java Se puede lanzar la ejecución de un servlet desde otro. Pasos: Conocer el nombre del servlet que queremos llamar. Proporcionar acceso al objeto “Servlet” del servlet llamado. Llamar al método público del servlet. Profesor: Marcelo Montecinos C. 252
  • 253. Taller Programación III Desde otro servlet 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); ... } } Profesor: Marcelo Montecinos C. 253
  • 254. Taller Programación III Arquitectura de los servlets Java Biblioteca ‘javax.servlet’ Servlets HttpServlet MiServlet Profesor: Marcelo Montecinos C. 254
  • 255. Taller Programación III Interacción con los clientes Java Objeto ‘ServletRequest’: Comunicación que fluye del cliente al servidor. Objeto ‘ServletResponse’: Encapsula la información enviada desde el servidor al cliente. Profesor: Marcelo Montecinos C. 255
  • 256. Taller Programación III Estructura de un Servlet Java import java.io.*; import javax.servlet.*; // Utiliza response para import javax.servlet.http.*; // especificar la respuesta public class SomeServlet extends // (tipo de contenido, establecer HttpServlet { // cookies, ...) // El servidor envía una página // web al cliente PrintWriter out = public void doGet response.getWriter(); (HttpServletRequest request, HttpServletResponse response) // Utilizar out para enviar el throws ServletException, // contenido al navegador IOException { } // Utilizar request para leer // Análogamente, sobreescribir // datos procedentes del // doPost(). // cliente (ej: cookies, // otros datos) } Profesor: Marcelo Montecinos C. 256
  • 257. Ejemplo Servlets: Hola Mundo Java Taller Programación III import java.io.*; // Utiliza response para import javax.servlet.*; // especificar la respuesta import javax.servlet.http.*; public class HolaMundoSrvlt extends response.setContentType HttpServlet { (“text/html”); // El servidor envía una página out = response.getWriter(); web al cliente out.println(“<HTML><HEAD><TITLE>”); public void doGet out.println(titulo); (HttpServletRequest request, out.println(“</TITLE></HEAD><BODY>”); HttpServletResponse response) out.println(“<H1>”+titulo+</H1>”); throws ServletException, out.println(“</BODY></HTML>”); IOException out.close(); { } PrintWriter out; String titulo=“Hola Mundo”; } Profesor: Marcelo Montecinos C. 257
  • 258. Taller Programación III Ejemplo Servlets: Hola Mundo Java Profesor: Marcelo Montecinos C. 258
  • 259. Taller Programación III Obtención y Java envío de información Obtención de datos Envío de datos al del cliente: cliente: getParameter() getWriter getParameterValues() getOutputStream getParameterNames() getReader getInputStream() Profesor: Marcelo Montecinos C. 259
  • 260. Taller Programación III Ejemplo: Lectura de parámetros Java import java.io.*; out.println(quot;</TITLE></HEAD><BODY>quot;); import javax.servlet.*; out.println(quot;<H1 ALIGN=CENTER>quot;+ title import javax.servlet.http.*; +quot;</H1>quot;); out.println(quot;<UL>quot;); public class ThreeParam extends HttpServlet { out.println(quot;<LI>param1: quot;+ public void doGet( HttpServletRequest request.getParameter(quot;param1quot;)); request, out.println(quot;<LI>param2: quot;+ HttpServletResponse response) request.getParameter(quot;param2quot;)); throws ServletException, out.println(quot;<LI>param3: quot;+ request.getParameter(quot;param3quot;)); IOException { out.println(quot;</UL>quot;); out.println(quot;</BODY></HTML>quot;); PrintWriter out; out.close(); String title=quot;Leyendo 3 parámetrosquot;; } public void doPost(HttpServletRequest response.setContentType request,HttpServletResponse (quot;text/htmlquot;); response) out = response.getWriter(); throws ServletException,IOException { out.println(quot;<HTML><HEAD><TITLE>quot;); doGet(request,response); out.println(title); } } Profesor: Marcelo Montecinos C. 260
  • 261. Taller Programación III Ejemplo: Lectura de parámetros Java Profesor: Marcelo Montecinos C. 261
  • 262. Taller Programación III Ejemplo: Lectura de parámetros II Java import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*; public class ShowParameters extends HttpServlet { public void doGet( HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException { PrintWriter out; String title=quot;Leyendo todos los parámetrosquot;; response.setContentType (quot;text/htmlquot;); out = response.getWriter(); out.println(quot;<HTML><HEAD><TITLE>quot;); out.println(title); out.println(quot;</TITLE></HEAD><BODY>quot;); Profesor: Marcelo Montecinos C. 262
  • 263. Taller Programación III Ejemplo: Lectura de parámetros II Java out.println(quot;<H1 ALIGN=CENTER>quot;+ title else +quot;</H1>quot;); out.print(valorParam); out.println(quot;<TABLE BORDER=1 } else { ALIGN=CENTER>quot;); out.println(quot;<UL>quot;); out.println(quot;<TR><TH>Nombre de for (int i=0; parámetro<TH>Valores de parámetroquot;); i<valoresDeParam.length; i++) { Enumeration nombresDeParam = out.println(quot;<LI>quot; + request.getParameterNames(); valoresDeParam[i]); while (nombresDeParam.hasMoreElements()){ } String nombreParam = (String) out.println(quot;</UL>quot;); nombresDeParam.nextElement(); } out.println(quot;<TR><TD>quot; + nombreParam); } out.println(quot;<TD>quot;); out.println(quot;</TABLE>quot;); String[] valoresDeParam= out.println(quot;</BODY></HTML>quot;); request.getParameterValues(nombreParam); out.close(); if (valoresDeParam.length == 1) { } String valorParam = valoresDeParam[0]; public void doPost(HttpServletRequest request,HttpServletResponse if (valorParam.length()== 0) response) out.print(quot;<I>No existe valor</I>quot;); throws ServletException,IOException { doGet(request,response); } } Profesor: Marcelo Montecinos C. 263
  • 264. Taller Programación III Ejemplo: Lectura de parámetros Java II Profesor: Marcelo Montecinos C. 264
  • 265. Ejemplo: Programación III formulario Taller Uso de Java <HTML> <HEAD> <TITLE> Un ejemplo de formulario que utiliza POST </TITLE> </HEAD> <H1 ALIGN=CENTER> Un ejemplo de formulario que utiliza POST </H1> <FORM ACTION=quot;../servlet/ShowParametersquot; METHOD=quot;POSTquot;> Número Artículo: <INPUT TYPE=quot;TEXTquot; NAME=quot;numItemquot;> <BR> Cantidad: <INPUT TYPE=quot;TEXTquot; NAME=quot;cantidadquot;> <BR> Precio Unidad: <INPUT TYPE=quot;TEXTquot; NAME=quot;precioquot; VALUE=quot;$quot;> <BR> <HR> Nombre: <INPUT TYPE=quot;TEXTquot; NAME=quot;nombrequot;> <BR> Apellidos: <INPUT TYPE=quot;TEXTquot; NAME=quot;apellidosquot;> <BR> Profesor: Marcelo Montecinos C. 265
  • 266. Ejemplo: Programación III formulario Taller Uso de Java Dirección: <TEXTAREA NAME=quot;direccionquot; ROWS=3 COLS=40> </TEXTAREA><BR> Tarjeta de crédito: <BR> <INPUT TYPE=quot;RADIOquot; NAME=quot;tipoTarjetaquot; VALUE=quot;Visaquot;>Visa<BR> <INPUT TYPE=quot;RADIOquot; NAME=quot;tipoTarjetaquot; VALUE=quot;Master Cardquot;>Master Card<BR> <INPUT TYPE=quot;RADIOquot; NAME=quot;tipoTarjetaquot; VALUE=quot;Amexquot;>American Express<BR> <INPUT TYPE=quot;RADIOquot; NAME=quot;tipoTarjetaquot; VALUE=quot;Discoverquot;>Discover<BR> Número de tarjeta de crédito: <INPUT TYPE=quot;PASSWORDquot; NAME=quot;numTarjetaquot;> <BR> Repetición del número de tarjeta de crédito: <INPUT TYPE=quot;PASSWORDquot; NAME=quot;numTarjetaquot;> <BR><BR> <CENTER> <INPUT TYPE=quot;SUBMITquot; VALUE=quot;Enviar solicitudquot;> </CENTER> </FORM> </BODY> </HTML> Profesor: Marcelo Montecinos C. 266
  • 267. Ejemplo: Programación III formulario Taller Uso de Java Profesor: Marcelo Montecinos C. 267
  • 268. Ejemplo: Uso de formulario Taller Programación III Java Profesor: Marcelo Montecinos C. 268
  • 269. Taller Programación III Ciclo de vida de un servlet Java Carga init() Servidor Servlet Cliente doGet() Servlet Manejo de service() doPost() peticiones Servidor Cliente Descarga destroy() Servidor Servlet Profesor: Marcelo Montecinos C. 269
  • 270. Taller Programación III Almacenamiento del estado de un Java cliente Estado del cliente: Situación en la que se encuentra un cliente en sucesivas peticiones al servidor. Mecanismos: Almacenamiento de sesiones en el servidor “Cookies” Profesor: Marcelo Montecinos C. 270
  • 271. Servlets vsJava III CGI Taller Programación Eficiencia CGI inicia un nuevo proceso para cada petición HTTP. (Solución: FastCGI) El servlet se ejecuta solamente la primera vez que es llamado. Permanece en memoria una vez cargado y puede compartir información entre varias llamadas de clientes. Uso de threads para las distintas peticiones. Portabilidad Modularidad El uso de parámetros es más sencillo en el caso de los servlets Profesor: Marcelo Montecinos C. 271