Vous êtes sur la page 1sur 271

Programacin I -Java Universidad Tecnolgica de Chile

Introduccin al Lenguaje de Programacin Java

Profesor: Marcelo Montecinos C.

Programacin I -Java Universidad Tecnolgica de Chile

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) Recoleccin de basura automtica Bibliotecas estndar Realmente portable en un 100% Facilidades para programacin en redes

Profesor: Marcelo Montecinos C.

Programacin I -Java Universidad Tecnolgica de Chile

Java - Caractersticas
Plataforma independiente (portable)

Dinmico (constantemente evolucionando)

Fortalece la seguridad y la portabilidad

Profesor: Marcelo Montecinos C.

Programacin I -Java Universidad Tecnolgica de Chile

JAVA es un lenguaje interpretado

P1.java

P1.class

Salida del Prog.

Compilador de java (especfico x plataforma) javac P1.java Intrprete de java (especfico x plataforma) java P1 (class)
Profesor: Marcelo Montecinos C.

Programacin I -Java Universidad Tecnolgica de Chile

Java - Caractersticas
Java -Mquina Virtual (JVM) JVM Interpretador Java
Ambiente Runtime

Sistema Operativo Hardware


Profesor: Marcelo Montecinos C.

Programacin I -Java Universidad Tecnolgica de Chile

Java - Caractersticas
Cmo trabaja la tecnologa Java? (Editor de texto)

(Programa traducido a bytes-code)

qu sucede en este paso?


Profesor: Marcelo Montecinos C.

Programacin I -Java Universidad Tecnolgica de Chile

Java - Caractersticas
Cmo trabaja la tecnologa Java?

Profesor: Marcelo Montecinos C.

Programacin I -Java Universidad Tecnolgica de Chile

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 Mtodos*/

}
Profesor: Marcelo Montecinos C.

Se utiliza para cerrar un bloque de instrucciones


8

Programacin I -Java Universidad Tecnolgica de Chile

Estructura de un Programa en Java


Los comentarios en Java pueden hacerse de dos maneras:
Si slo quiero comentario de una lnea coloco

// al inicio de es esta

// Este es el esqueleto de un programa en Java class <nombre del Programa> { /* Definiciones globales*/ /* Este es el Mtodo Principal*/ /* Otros Mtodos*/ }
Profesor: Marcelo Montecinos C.

Si quiero comentario de mas de una lnea coloco /* al inicio del comentario y */ al final

Programacin I -Java Universidad Tecnolgica de Chile

Estructura de un Programa en Java


// Este es el esqueleto de un programa en Java class <nombre del Programa> { /* Definiciones globales*/
Deben seguir las convenciones utilizadas en algoritmo.

Aqu se definen las variables que yo deseo que se puedan utilizar en todo mi programa.

/* Mtodo Principal*/
Cada aplicacin de Java debe tener un mtodo principal llamado main, que define donde comienza el flujo del programa.
10

/* Otros Mtodos*/ }

Profesor: Marcelo Montecinos C.

Programacin I -Java Universidad Tecnolgica de Chile // Este es el esqueleto de un programa en Java class <nombre del Programa> { /* Definiciones globales*/ public static void main (String args[]) { /* Definiciones locales*/ ... ... /* cuerpo de instrucciones */ ... ... } }
Todo el cdigo de un mtodo estar entre la llave de apertura ( { ) y la correspondiente llave de cierre ( } ).

Sintaxis del mtodo Main


Profesor: Marcelo Montecinos C.

11

Programacin I -Java Universidad Tecnolgica de Chile


La palabra public es un especificador de acceso. En este caso el main debe ser declarado public ya que es llamado por cdigo que est fuera de su clase, cuando el programa comienza.

// Este es el esqueleto de un programa en Java class <nombre del Programa> { /* Definiciones globales*/

public static void main (String args[])


{ /* Definiciones locales*/ ... ... /* cuerpo de instrucciones */ ... ...

La palabra static permite que main sea llamado por el intrprete de Java antes de que se cree cualquier objeto . La palabra void indica al compilador que main no devuelve ningn valor. String args[], declara una variable args que es una especie de vector que puede contener cadenas de caracteres.

Sintaxis del mtodo Main

Profesor: Marcelo Montecinos C.

12

Programacin I -Java Universidad Tecnolgica de Chile

// Este es el esqueleto de un programa en Java class <nombre del Programa> { /* Definiciones globales*/ public static void main (String args[]) { /* Definiciones locales*/ ... ... /* cuerpo de instrucciones */ ... ...
Aqu se definen las variables que solo voy a utilizar en el mtodo principal. Despus de cada instruccin se coloca ;

Sintaxis del mtodo Main


Profesor: Marcelo Montecinos C.

13

Programacin I -Java Universidad Tecnolgica de Chile

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

Programacin I -Java Universidad Tecnolgica de Chile

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

Programacin I -Java Universidad Tecnolgica de Chile

Salida por pantalla


import java.io.*; System.out.println(elementos); System.out.println(); System.out.print(elementos);

System.out.println("hola"); // escribe "hola" System.out.println(5); // escribe 5 int i = 5; System.out.println(i) ; // escribe 5; double d=6.4; System.out.println(d); // escribe 6.4; double d=6.4; System.out.println("d="+d); // escribe d=6.4;

Profesor: Marcelo Montecinos C.

16

Programacin I -Java Universidad Tecnolgica de Chile

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 mtodo esttico llamado main en una clase cualquiera Este mtodo se empieza a ejecutar cuando se invoca el intrprete de java para una clase dada args es un arreglo de Strings que contiene los parmetros con los que fu invocado el programa.
Profesor: Marcelo Montecinos C.

17

Programacin I -Java Universidad Tecnolgica de Chile

Declaracin de Variables

tipo nombre; tipo nombre1, nombre2, nombre3; tipo nombre = valor;

Declaracin de Constantes: static final tipo nombre = valor;

Profesor: Marcelo Montecinos C.

18

Programacin I -Java Universidad Tecnolgica de Chile

Definicin de variables
Los datos son almacenados en variables, que se encuentran en la memoria, formados por dos componentes el nombre que las identifica y la celda con el valor almacenado.

Memoria monto 25600.00 carnet 9702634 sexo F nombre Pedro Perez contador 6
19

Profesor: Marcelo Montecinos C.

Programacin I -Java Universidad Tecnolgica de Chile

Tipos de datos
Integer (enteros) Numrico 4 5 237

Floating Point (punto flotante)

13.45

Profesor: Marcelo Montecinos C.

20

Programacin I -Java Universidad Tecnolgica de Chile

Tipos de datos
Byte : 8 bits Integer (enteros) Short : 16 bits Int : 32 bits Long : 64 bits -27 ..... 27 1

Profesor: Marcelo Montecinos C.

21

Programacin I -Java Universidad Tecnolgica de Chile

Tipos de datos
Float : 32 bits Floating Point (punto flotante) Double : 64 bits

Profesor: Marcelo Montecinos C.

22

Programacin I -Java Universidad Tecnolgica de Chile

Tipos de datos
Caracteres char : a, z, D, %, s,#.

Cadenas de caracteres

String: Pedro Garcia Juan Lopez Rojo boolean: true false

Lgicos

Profesor: Marcelo Montecinos C.

23

Programacin I -Java Universidad Tecnolgica de Chile

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, @ lgico: boolean Const. true, false Constantes de String: Hola,12 de Abril
Profesor: Marcelo Montecinos C.

24

Programacin I -Java Universidad Tecnolgica de Chile

Declaracin de variables
/* Este programa declara Algunas variables */ class declaraVar { public static void main (String args[]) { int x, y; float z = 3.1416; double w =3.1415; boolean bandera = true; char c; String str; String st1 =Mara; str = blanco; } Profesor: Marcelo Montecinos C. }

25

Programacin I -Java Universidad Tecnolgica de Chile

Asignacin de valores a variables


Se puede dar valores a las variables en el momento de su declaracin o en una instruccin de asignacin 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

Programacin I -Java Universidad Tecnolgica de Chile

Asignacin de valores a variables


Las asignaciones tambin pueden ser expresiones en notacin INFIJA.

Ejemplo: monto = pvp * cantidad ; Donde pvp y cantidad debern ser variables anteriormente declaradas y con valor previo asignado.
Profesor: Marcelo Montecinos C.

27

Programacin I -Java Universidad Tecnolgica de Chile

Asignacin 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

Programacin I -Java Universidad Tecnolgica de Chile

Asignacin de valores a variables


Algunas de las operaciones a utilizar en la asignacin: () * / +,indica prioridad de ejecucin multiplicacin divisin decimal suma, resta

Ejemplo: islv = ( (pvp * cantidad) * porcIslv) ) / 100;


Profesor: Marcelo Montecinos C.

29

Programacin I -Java Universidad Tecnolgica de Chile

Operadores

Igualdad y desigualdad: == , != Comparacin: <, <=, >, >= Suma y resta unarios: +, Suma, multiplicacin, divisin y mdulo: +, -, *, /, % Incremento y decremento prefijos y posfijos: ++, -Desplazamiento con signo y sin signo: <<, >>, >>> Negacin lgica unaria de bits: ~ Lgica de bits: &, |, ^ Lgica booleana: &&, ||
Profesor: Marcelo Montecinos C.

30

Programacin I -Java Universidad Tecnolgica de Chile

Asignacin

Utilizacin de operadores:

var1 var1 var1 var1 var1

= = = = =

var2 var2 var2 var2 var2

+ * / %

var3; ver3; ver3; ver3; ver3;

// // // // //

asignar asignar asignar asignar asignar

a a a a a

var1 var1 var1 var1 var1

el el el el el

valor valor valor valor valor

de de de de de

var2 var2 var2 var2 var2

+ * / %

var3 var3 var3 var3 var3

Asignaciones de incremento decremento:


variable++; // variable--; // variable += exp; // variable -= exp; //

aadir restar aadir restar

uno uno exp exp

a a a a

variable varibale variable variable


31

Profesor: Marcelo Montecinos C.

Programacin I -Java Universidad Tecnolgica de Chile

Asignacin 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

Programacin I -Java Universidad Tecnolgica de Chile

Expresiones

Grupos de Precedencia

Grupo Grupo Grupo Grupo

0: 1: 2: 3:

( ) ++, --, + (unario), - (unario) *, /, % +, -, + (concatenacin)

Funciones especiales:

Seno x => Math.sin(x) x2 => Math.pow(x,2) Math.round(6.6) => 7


Profesor: Marcelo Montecinos C.

33

Programacin I -Java Universidad Tecnolgica de Chile

Expresiones y asignacin

Aritmeticas: suma + 20 * c / (mod % 3) Relacionales: a > b, b >= c, c != 4, a == 0 De String: hola + nombre + hoy es + dia + de+mes Casts: (int) pi (pi = 3.1) (int) (Math.random()*100)+1) Otros: a == 1 ? a+1 : a-1 Asignacion: a = 1; Asignacin como operador: a = b = c = d = 0; boolean cero = ( b = c - 10) == 0;
Profesor: Marcelo Montecinos C.

34

Programacin I -Java Universidad Tecnolgica de Chile

Conversiones entre tipos Asignar una variable a otra cuyo tipo es mayor de tamao:
byte => short => int => long => float => double

Para pasar de un tipo a otro menor en tamao, tenemos que hacer una conversin explcita de tipos:
(tipo)expresion
Profesor: Marcelo Montecinos C.

35

Programacin I -Java Universidad Tecnolgica de Chile

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 int short byte long float double

Bits 32 16 8 64 32 64

Rango -2**31 .. 2**31-1 -2**15 .. 2**15-1 -2**7 .. 2**7-1 -2**63 .. 2**63-1 -10**32 .. 10**32
Profesor: Marcelo Montecinos C.

-10**300 .. 10**300
36

Programacin I -Java Universidad Tecnolgica de Chile

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

Programacin I -Java Universidad Tecnolgica de Chile

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

Programacin I -Java Universidad Tecnolgica de Chile

Ejemplo

public void leeArchivo(String nombre) throws IOException { BufferedReader fin = new BufferedReader(new FileReader(nombre)); try { while(true) { cadena = fin.readLine(); System.out.println(cadena); } } catch (EOFException e) { System.out.println("Fin del archivo"); } }

Profesor: Marcelo Montecinos C.

39

Programacin I -Java Universidad Tecnolgica de Chile

Entrada desde teclado

import java.io.*; BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));

String cadena = entrada.readLine();


Profesor: Marcelo Montecinos C.

40

Programacin I -Java Universidad Tecnolgica de Chile

Lectura de nmeros
int i=Integer.valueOf(entrada.readLine()).intValue(); double d=Double.valueOf(entrada.readLine()).doubleValue();

int i=Integer.valueOf(entrada.readLine().trim()).intValue(); double d=Double.valueOf(entrada.readLine().trim()).doubleValue();

Profesor: Marcelo Montecinos C.

41

Programacin I -Java Universidad Tecnolgica de Chile

Lectura de datos
Este programa se encarga de pedir el ingreso de un nmero, para luego mostrarlo en pantalla.

/* 1) */ import java.io.*; /* 2) */ public class LectTeclado /* 3) */ { /* 4) */ public static void main(String Arg[ ]) throws IOException /* 5) */ { /* 6) */ BufferedReader entrada = new BufferedReader(new inputStreamReader(System.in)); /* 7) */ int num; /* 8) */ System.out.print("Ingrese numero : "); /* 9) */ num = Integer.parseInt(entrada.readLine( )); /* 10) */ System.out.println("Ud ingreso el numero : " + num ); /* 11) */ } /* 12) */ }
Profesor: Marcelo Montecinos C.

42

Programacin I -Java Universidad Tecnolgica de Chile 1) Se invoca a la librera de entrada y salida io (Input,Output), para usar en nuestro programa todas sus clases disponibles. import : Indica que se tienen importar (incluir) cierta librera. java.io : Acceso a la librera io. java.io.* : Selecciona todas las clases disponibles. 4) Declaracin del programa principal con opcin de control de errores. throws IOException : Indica que cualquier error de entrada o salida de datos, ser manejado en forma interna (automtica) por el programa. 6) Se crean las instancias necesarias para crear un objeto que permita manejar la lectura de datos por teclado.
Profesor: Marcelo Montecinos C.

43

Programacin I -Java Universidad Tecnolgica de Chile

BufferedReader : Clase perteneciente a la librera io que crea un buffer de entrada donde se almacenarn los carcteres ingresados por teclado. in : Variable de tipo BufferedReader. 7) Se declara la variable num de tipo entero (int). 8) Se llama al mtodo print para escribir un mensaje en pantalla dejando el cursor inmediatamente a continuacin del mensaje.

Profesor: Marcelo Montecinos C.

44

Programacin I -Java Universidad Tecnolgica de Chile 9) Se lee el nmero, asignando el valor a la variable num. in.readline : Mtodo que retorna el "string" ledo por teclado. Integer.parseInt : Mtodo que convierte un string (cadena de caracteres) en un dato numrico de tipo int. Integer : Clase estndar que no necesita ser instanciada (est disponible por defecto). 10) Se llama al mtodo println para escribir un mensaje en pantalla que consta de una parte esttica y otra variable. El mtodo println y print soportan varios objetos concatenados mediante el operador + , logrando imprimir cadenas de carcteres y variables numricas.

Profesor: Marcelo Montecinos C.

45

Programacin I -Java Universidad Tecnolgica de Chile

Estructuras de un Programa

Profesor: Marcelo Montecinos C.

46

Programacin I -Java Universidad Tecnolgica de Chile


class CSumar { Static int v1, v2, suma; public static void main (String args[]) { System.out.println("Introduzca v1"); v1 = CTeclado.ReadInt(); System.out.println("Introduzca v2"); v2 = CTeclado.ReadInt(); suma = v1 + v2; } }

Debemos recordar:
Todas las instrucciones terminan con punto y coma ; Todo el cdigo de un mtodo o bloque de instrucciones estar entre la llave de apertura ( { ) y la correspondiente llave de cierre ( } ). Los espacios en blanco se permiten entre los elementos del cdigo fuente. Los espacios, los tabuladores y nuevas lneas deben usarse para dar legibilidad al cdigo.

Profesor: Marcelo Montecinos C.

47

Programacin I -Java Universidad Tecnolgica de Chile


class CSumar { static int v1, v2, suma; public static void main (String args[]) { System.out.println("Introduzca v1"); v1 = CTeclado.ReadInt(); System.out.println("Introduzca v2"); v2 = CTeclado.ReadInt(); suma = v1 + v2; } }
Profesor: Marcelo Montecinos C.

Palabras Reservadas
Son palabras que tienen un significado especial dentro del lenguaje , en nuestro caso JAVA.

48

Programacin I -Java Universidad Tecnolgica de Chile

Identificadores
Son identificadores, los nombres que reciben las variables, constantes, clases, mtodos o instancias de un programa. Comienzan con una letra y pueden contener letras y nmeros. Son sensitivos a las maysculas y minsculas. Pueden contener palabras claves del lenguaje siempre y cuando no sean completamente iguales. Pueden tener cualquier longitud
Profesor: Marcelo Montecinos C.

49

Programacin I -Java Universidad Tecnolgica de Chile

Algunas convenciones en cuanto a identificadores.


Programas: deben ser nombres, escritos en modo mixto y con la primera letra de cada palabra en maysculas. Mtodos: deben ser verbos, en modo mixto, con la primera letra en minscula. Las palabras se separarn usando letras maysculas. 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

Programacin I -Java Universidad Tecnolgica de Chile

Inicializacin de Variables.
En Java, cuando una variable es creada, Java le da un valor inicial segn la siguiente tabla.

byte,short, int long float double char (null) boolean variables referencia
Profesor: Marcelo Montecinos C.

0 0L 0.0f 0.0d \u0000 false null


51

Programacin I -Java Universidad Tecnolgica de Chile

Java Arreglos

Profesor: Marcelo Montecinos C.

52

Programacin I -Java Universidad Tecnolgica de Chile

Arreglos
Es un tipo especial de dato al que se hace referencia por un nombre. Est compuesto por una coleccin de elementos del mismo tipo de datos que se almacenan consecutivamente en memoria. Pueden ser creados de cualquier tipo.

Profesor: Marcelo Montecinos C.

53

Programacin I -Java Universidad Tecnolgica de Chile

Arreglos

Se pueden declarar como: int[] A;

int

A[]; Esto es la declaracin del puntero al arreglo, no se especifica tamao en la declaracin; Inicializacin: A = new int[10]; int[] A = new int[10];

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 mtodo. No es necesario el mtodo ya que el Profesor: Marcelo Montecinos C. tamao, como el contenido de un

54

Programacin I -Java Universidad Tecnolgica de Chile

Arreglos
Se utilizan para agrupar informacin relacionada Pueden tener ser de una o ms dimensiones. Los de una dimensin los denominaremos vectores y de los de dos dimensiones matrices o tablas Para accesar un elemento particular del arreglo, se utilizan los ndices

Profesor: Marcelo Montecinos C.

55

Programacin I -Java Universidad Tecnolgica de Chile

Vectores
Ejemplo de un vector que contiene 7 nmeros enteros

0 3

1 6

2 8

3 1

4 0

5 4

6 2

ndices Elementos del vector

Elemento que ocupa la posicin 3 en el vector

Profesor: Marcelo Montecinos C.

56

Programacin I -Java Universidad Tecnolgica de Chile

Declaracin en Java
tipoDato[ ] tipoDato

Vectores

nombreVariable; nombreVariable[ ];

Para declarar un vector de nmero enteros, al cual se le d el nombre de miVector se puede hacer de la siguiente manera:

int[ ] miVector; // o tambin int miVector[ ];

Profesor: Marcelo Montecinos C.

57

Programacin I -Java Universidad Tecnolgica de Chile

Declaracin

Creacin

int[] miVector; // o tambin int miVector[];

Vectores

nombreVector = new tipoDato[tamao];


Cuando se declara una variable vector, esta no tiene ningn 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

Programacin I -Java Universidad Tecnolgica de Chile

Creacin:
Creacin: miVector = new int[7];

Vectores

Al reservar espacio para los elementos de un vector, mediante new, se inicializa automticamente en cero su contenido. Cuando se ejecuta esta sentencia de creacin , la varianble miVector, har referencia a un vector de 7 elementos enteros.
New: operador especial que reserva espacio en memoria

Profesor: Marcelo Montecinos C.

59

Programacin I -Java Universidad Tecnolgica de Chile

Vectores
Inicializacin:
Dependiendo del tipo de datos que contenga un vector, estos son inicializados por defecto con los siguientes valores: Si son vectores numricos, se inicializan en cero. Si son vectores de caracteres, se inicializan en /u000. Si son vectores booleanos, se inicializan en false.

Profesor: Marcelo Montecinos C.

60

Programacin I -Java Universidad Tecnolgica de Chile


Creacin: miVector = new int[7];

Vectores

Inicializacin
Un vector completo se puede inicializar de la siguiente manera

miVector = {3, 6, 8, 1, 0, 4, 2};

Profesor: Marcelo Montecinos C.

61

Programacin I -Java Universidad Tecnolgica de Chile


Creacin: miVector = new int[7];

Vectores

Utilizacin

nombreVector [ndice]

Para accesar un elemento de un vector, se coloca el nombre del vector y entre corchetes el ndice del elemento que se desea.
Por ejemplo, si se desea obtener el nmero 8 del siguiente vector:

0 3

1 6

2 8

3 1

4 0

5 4

6 2

miVector [2]
Profesor: Marcelo Montecinos C.

62

Programacin I -Java Universidad Tecnolgica de Chile


Creacin: miVector = new int[7];

Vectores

Utilizacin
Los ndices en un vector, van desde 0 hasta el tamao 1. El tamao de un vector se obtiene con el mtodo length, con la siguiente sintaxis: nombreVector.length En nuestro ejemplo:

miVector.length
Profesor: Marcelo Montecinos C.

63

Programacin I -Java Universidad Tecnolgica de Chile

Ejemplo: crear un vector de 5 posiciones, rellenarlo y luego mostrar su contenido.


class EjemploVec { static int miVector[ ]; public static void main (String arg[]) {

Vectores

miVector = new int[5]; llenarVector(); mostrarVector(); System.out.print("El tamano de mi vector es "); System.out.println(miVector.length); }
Profesor: Marcelo Montecinos C.

64

Programacin I -Java Universidad Tecnolgica de Chile

Vectores

static void llenarVector() { for (int i=0; i <= 4; i++) { System.out.println("Intro. numero de posicion " + i + " "); miVector[i] = CTeclado.ReadInt(); } } static void mostrarVector() { for (int i=0; i <= 4; i++) System.out.print(miVector[i] + " "); } }// fin de clase
Profesor: Marcelo Montecinos C.

65

Programacin I -Java Universidad Tecnolgica de Chile

Matrices
0 0 (matriz 2 3) 1 2 3 4 5
Profesor: Marcelo Montecinos C.

(matriz 4 0)

66

Programacin I -Java Universidad Tecnolgica de Chile

Matrices
Son arreglos de dos dimensiones La informacin es dispuesta en filas y columnas Para accesar un elemento se deben especificar dos subndices: fila y columna. Pueden ser creadas de cualquier tipo Pueden ser vistos como vectores de vectores

Profesor: Marcelo Montecinos C.

67

Programacin I -Java Universidad Tecnolgica de Chile

Matrices
Declaracin:
tipoDato nombreVariable[ ][ ];

Para declarar una matriz de nmeros enteros, llamada miMatriz, se debe hacer de la siguiente manera:

int miMatriz[ ][ ];

Profesor: Marcelo Montecinos C.

68

Programacin I -Java Universidad Tecnolgica de Chile

Matrices
Creacin:
nombreMatriz = new tipoDato[filas][columnas];
Para crear una matriz de 2 filas y 3 columnas de nmeros enteros, llamada miMatriz, se escribe

miMatriz = new int [2][3];

Profesor: Marcelo Montecinos C.

69

Programacin I -Java Universidad Tecnolgica de Chile

Matrices
Creacin:
miMatriz = new int [2][3];
genera

miMatriz[0][0]

miMatriz[0][1]

miMatriz[0][2]

miMatriz[1][0]

miMatriz[1][1]

miMatriz[1][2]

Profesor: Marcelo Montecinos C.

70

Programacin I -Java Universidad Tecnolgica de Chile

Matrices
Creacin:
miMatriz = new int [2][3];

Primero crea un vector de 2 elementos Elemento 0 Elemento 1

Profesor: Marcelo Montecinos C.

71

Programacin I -Java Universidad Tecnolgica de Chile

Matrices
Creacin:
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
72

Profesor: Marcelo Montecinos C.

Programacin I -Java Universidad Tecnolgica de Chile

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

Programacin I -Java Universidad Tecnolgica de Chile

static void llenarMatriz(int m[][]) { for (int i=0; i < 2; ++i) { for (int j=0; j< 3; ++j) { System.out.println("Intro. Elem. " + i + " " + j); m[i][j] = CTeclado.ReadInt(); } } } static void mostrarMatriz(int m[][]) { for (int i=0; i < 2; i++) { for (int j=0; j< 3; j++) { System.out.print(m[i][j] + " "); } System.out.println(); } } } Profesor: Marcelo Montecinos C.

74

Programacin I -Java Universidad Tecnolgica de Chile

Ejercicios
1. Se deben crear tres vectores vecA, vecB y vecC de m elementos cada uno; se debe crear otro arreglo vecNuev donde cada elemento sea la suma de los elementos de cada arreglo. 2. Se deben crear dos vectores. En uno se colocarn los carnet de los estudiantes que aprobaron Clculo 1, en otro los que aprobaron Etica. Crear un tercer arreglo que contenga los carnet de los estudiantes que aprobaron ambas materias.
Profesor: Marcelo Montecinos C.

75

Programacin I -Java Universidad Tecnolgica de Chile

Ejercicios
3. Se deben crear dos vectores uno de ellos de n elementos, el otro de m elementos . Llenarlos con nmeros ,colocndo en cada uno los elementos ordenados de menor a mayor. Crear un tercer vector de tamao n+m el cual contendr los elementos de los vectores ordenados de menor a mayor.

Profesor: Marcelo Montecinos C.

76

Programacin I -Java Universidad Tecnolgica de Chile

Operadores
Los operadores de un lenguaje se utilizan para combinar o modificar los valores de de un programa.

Vamos a estudiar los siguientes operadores:


Aritmticos : binarios y unitarios. Operadores de Asignacin. Relacionales. Lgicos.
Profesor: Marcelo Montecinos C.

77

Programacin I -Java Universidad Tecnolgica de Chile

Operadores Aritmticos Binarios.


Operador Significado Suma Resta Multiplicacin Divisin entera (si los operandos son de tipo entero) Divisin real (si los operandos son reales) Mdulo, resto de divisin entera (no es necesario que los operandos sean reales) Profesor: Marcelo Montecinos C.
78

+ * /
/ %

Programacin I -Java Universidad Tecnolgica de Chile

Operadores Aritmticos Binarios.


Veamos un ejemplo:
class CPrueba { public static void main(String arg[]) { int i , j; i=5; j = i % 2; System.out.println("el valor de j es "+j); j = i / 2; System.out.println("el valor de j es "+j); j = i * 2; System.out.println("el valor de j es "+j); } }
Profesor: Marcelo Montecinos C.

1 2 10

79

Programacin I -Java Universidad Tecnolgica de Chile

Operadores Aritmticos 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 expresin mayor.

Profesor: Marcelo Montecinos C.

80

Programacin I -Java Universidad Tecnolgica de Chile

Operadores Aritmticos Unitarios.


Veamos un ejemplo:
class CPrueba { public static void main(String arg[]) { int i; i=5; //incrementando antes o despus de a System.out.println("el valor de i++ es "+ i++); } System.out.println("el valor de i++ es "+ ++i);

5 7

Profesor: Marcelo Montecinos C.

81

Programacin I -Java Universidad Tecnolgica de Chile

Operadores Aritmticos Unitarios.


Veamos un ejemplo:
class CPrueba { public static void main(String arg[]) { int i; i=5; //decrementando antes o despus de a System.out.println("el valor de i-- es "+ i--); } System.out.println("el valor de i-- es "+ --i);

5 3

Profesor: Marcelo Montecinos C.

82

Programacin I -Java Universidad Tecnolgica de Chile

Operadores de Asignacin.
Operador
= += -= *= /= %=

Significado
asignacin asignacin y suma asignacin y resta asignacin y mult. asignacin y div. asignacin y mod.

Profesor: Marcelo Montecinos C.

83

Programacin I -Java Universidad Tecnolgica de Chile

Operadores de Asignacin. 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("el valor de i es "+i); i = 5; i %= 2; // equivale a i = i % 2; } System.out.println("el valor de i es "+i);
Profesor: Marcelo Montecinos C.

7 1
84

Programacin I -Java Universidad Tecnolgica de Chile

Operadores Relacionales.
Operador Nombre igual distinto mayor que menor que mayor o igual menor o igual Ejemplo 1 1 1 1 1 1 == 2 != 2 >2 <2 >= 2 <= 2 Respuesta false true false true false true

== != > < >= <=

Profesor: Marcelo Montecinos C.

85

Programacin I -Java Universidad Tecnolgica de Chile

Operadores Lgicos.
Operador Significado and or

&& ||
Tablas de valores lgicos:
AND

T F

T F T F F F

OR

T F

T F T T T F
86

Profesor: Marcelo Montecinos C.

Programacin I -Java Universidad Tecnolgica de Chile

Orden de precedencia en los operadores:


1. 2. 3. 4. 5. 6. 7. 8.

Operadores

++ -* / % + < > <= >= == != & | = *= /= %= -=

+=

Profesor: Marcelo Montecinos C.

87

Programacin I -Java Universidad Tecnolgica de Chile

Expresiones Lgicas
Las expresiones lgicas se definen como un conjunto de operadores y operandos.

Son las que devuelven como resultado un valor booleano (true o false). Contienen operadores relacionales y/o operadores lgicos. Ejemplo: (X >= Y) (X >= Y) && (X>= Z) (A != 0) || (A != 5) Profesor: Marcelo Montecinos C.

88

Programacin I -Java Universidad Tecnolgica de Chile Los argumentos de un programa

Si se invoca al programa P1 de ka siguiente manera: java P1 estos son parametros entonces en el programa se tendr args[0] = estos, args[1] = son, args[2] = parametros. Se reciben como un arreglo de strings en la variable declarada como parmetro del programa String args[] public class Parametros { public static void main(String args[]) { for(int i=0; i < args.length; i++) System.out.pritnln(args[i]); } Profesor: Marcelo Montecinos C. }

89

Programacin I -Java Universidad Tecnolgica de Chile

Exceptions

Una Exeption es un evento que rompe la ejecucin normal de un programa (debido a un error). Cuando ocurre un evento como este un objeto de la clase Exception es generado o lanzado (throw). Existen varios tipos de clases derivadas Exception dependiendo de que fue lo que origin el evento: IOException, IndexOutOfBoundsException, UnknownHostException, etc. Cuando esto sucede, el intrprete de JAVA busca un exception handler adecuado para esta exception, que ejecuta un pedazo de cdigo (programado por el usuario) que debera reaccionar en forma adecuada a esta falla del programa. Esto se llama atrapar una exception (catch). Cuando no se ha escrito ningn ningn handler que atrape esta exception, el programa se detiene (se cae). La razn para introducir exceptions es que la programacin para reaccionar ante fallas se hace ms fcil (no hay que preverlas todas).
Profesor: Marcelo Montecinos C.

90

Programacin I -Java Universidad Tecnolgica de Chile

Cmo 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 especfico se puede poner Exception y se atrapan todos (basta un solo bloque cach). Si hay ms de un bloque se ejecuta slo un bloque catch segn el tipo de error.
Profesor: Marcelo Montecinos C.

91

Programacin I -Java Universidad Tecnolgica de Chile

Ejemplo de Exception I/O

Muchas veces el compilador OBLIGA a programar el cdigo de modo de atrapar exceptions cuando estas pueden suceder con cierta probabilidad. Las ms frecuentes son las de IO. import java.io.*; //importa clases de la biblioteca IO public class ProgrmaO{ public static void main(String args[]) { BufferedReader in; PrintWriter out; String line; try { in = new BufferedReader(new FileReader(Origen.txt))}; catch (IOException e) { System.out.println(error en apertura); System.exit(1);} try { out = new PrintWriter( new FileWriter(Destino.txt))}; catch (IOException e) { System.out.println(error en creacion); System.exit(1);} try { while( (line = in.readLine()) != null) out.println(line); catch (IOException e) { System.out.println(problemas);} }
Profesor: Marcelo Montecinos C.

92

Programacin I -Java Universidad Tecnolgica de Chile

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

Programacin I -Java Universidad Tecnolgica de Chile

Ejemplo de Exception I/O (3)

Tambin se puede evitar tener que preocuparse de las exceptions siempre y cuando el mtodo que la pordra generar se declare como que lanza una excepcin: import java.io.*; //importa clases de la biblioteca IO public class ProgrmaO3{ public static void main(String args[]) throws IOException{ BufferedReader in; PrintWriter out; String line; in = new BufferedReader(new FileReader(Origen.txt)); out = new PrintWriter( new FileWriter(Destino.txt)); while( (line = in.readLine()) != null) out.println(line); } }

Esto implica que el programa se caer si hay una excepcin durante la generacin del programa. En otros casos se puede declarar que uno o ms mtodos lanzan una IOException y el programa o mtodo principal se preocupa de escribir el Exception handler.
Profesor: Marcelo Montecinos C.

94

Programacin I -Java Universidad Tecnolgica de Chile

Estructuras de Decisin

Profesor: Marcelo Montecinos C.

95

Programacin I -Java Universidad Tecnolgica de Chile

Estructuras de Decisin if (expresin lgica) {

<bloque de instrucciones >


} else {

<bloque de instrucciones>
}

Profesor: Marcelo Montecinos C.

96

Programacin I -Java Universidad Tecnolgica de Chile

Estructuras de Decisin 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

Programacin I -Java Universidad Tecnolgica de Chile

Estructuras de Decisin Decisin Anidada


if (expresin lgica) { if (expresin lgica) { } else { } else { } }

<bloque de instrucciones >

<bloque de instrucciones >

<bloque de instrucciones >


Profesor: Marcelo Montecinos C.

98

Programacin I -Java Universidad Tecnolgica de Chile

Veamos un ejemplo de Decisin 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

Programacin I -Java Universidad Tecnolgica de Chile

Estructuras de Decisin
Veamos otro ejemplo de Decisin Anidada
if (X > 10) { if (X < 20) { System.out.println( X + esta entre 10 y 20); } else { System.out.println( X + es mayor a 20); } } else { if (X > 0) { System.out.println( X + entre 1 y 10); } else { System.out.println( X + igual o menor a cero); } } Profesor: Marcelo Montecinos C.

100

Programacin I -Java Universidad Tecnolgica de Chile

Ejercicio

Estructuras de Decisin

Deseamos hacer un programa que dado el sueldo de una persona, le aumente un 50% si la persona gana menos de 180000 Bs un 20% si gana ms.
if (sueldo < 18000) { sueldo *= 1.5; } else { sueldo *= 1.2; }
Profesor: Marcelo Montecinos C.

101

Programacin I -Java Universidad Tecnolgica de Chile

Estructuras de Decisin if else - if


Llamada tambin : alternativas mltiples. Realiza una verificacin de las expresiones lgicas, 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 expresin, ejecuta el else. No necesariamente debe tener else.
Profesor: Marcelo Montecinos C.

102

Programacin I -Java Universidad Tecnolgica de Chile

Estructuras de Decisin if else - if


Haremos un programa que me permita evaluar una funcin, en base a un nmero 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

Programacin I -Java Universidad Tecnolgica de Chile

Estructuras de Decisin
class CEvaluar { public static void main (String args[]) { int d; double x; System.out.println ("Introduzca el valor de d "); d = CTeclado.ReadInt(); if (d > 0) { x = (-4 + Math.sqrt (d))/2; } else if (d == 0) { x = -4/2; } else { x = (-4 + Math.sqrt (Math.abs (d)) )/2; } System.out.println ("El valor de x es " + x); } }
Profesor: Marcelo Montecinos C.

104

Programacin I -Java Universidad Tecnolgica de Chile

swicht

Estructuras de Decisin

switch (expr1) { case valor1: instrucciones; break; case valor2: instrucciones; break; default: instrucciones; break; } Profesor: Marcelo Montecinos C.

105

Programacin I -Java Universidad Tecnolgica de Chile

switch
switch (expr1) { case valor1: instrucciones; break; case valor2: instrucciones; break; default: instrucciones; break; }

Estructuras de Decisin
expr1 debe ser compatible con valores enteros o carcter. Cuando la expresin coincide con algn literal de la sentencia case, se ejecutan las instrucciones correspondientes a ese case Si ninguna de las constantes coincide con la expresin, se ejecutal el default si existe. Si no existe el default, no se ejecuta nada. La sentencia break se utiliza para terminar una secuencia de instrucciones, haciedo que la ejecucin salte a la primera lnea de cdigo que sigue a la sentencia swicht completa. La sentencia break es opcional, de omitirse la ejecucin continuar en el siguiente case.

Profesor: Marcelo Montecinos C.

106

Programacin I -Java Universidad Tecnolgica de Chile

Estructuras de Decisin
Veamos un ejemplo con switch en Java switch (numEst) { case 20: numEst += 3; break; case 50: numEst++; break; default: numEst--; break; } Profesor: Marcelo Montecinos C.

107

Programacin I -Java Universidad Tecnolgica de Chile

Estructuras de Decisin Veamos un ejemplo con switch

Haremos un programa que reciba un mes (nmero) y nos indique la estacin que hay en ese mes.

Profesor: Marcelo Montecinos C.

108

Programacin I -Java
{ switch (mes) case 12: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: default: }

Universidad Tecnolgica de Chile

System.out.println ("Invierno"); break;

System.out.println ("Primavera"); break;

System.out.println ("Verano"); break;

System.out.println ("Otono"); break; System.out.println ("Mes desconocido"); Profesor: Marcelo Montecinos C.


109

Programacin I -Java Universidad Tecnolgica de Chile


switch (mes) { case 12: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: default: }

System.out.println (Estamos en "); System.out.println ("Invierno"); break;

Si mes = 2 La salida es: Invierno

System.out.println ("Primavera"); break;

System.out.println ("Verano"); break;

System.out.println ("Otono"); break; System.out.println ("Mes desconocido");


Profesor: Marcelo Montecinos C.

Si mes = 12 La salida es: Estamos en Invierno

110

Programacin I -Java

Ejercicios

Universidad Tecnolgica de Chile

1. Desarrolle un programa en Java que le permita leer el nombre , la edad , el sexo y el estado civil de cualquier persona e imprima el nombre de la persona si es un hombre casado y mayor de 40 aos o una mujer soltera menor de 50 aos. 2. Desarrolle un programa en Java para leer el nombre de un empleado, el salario bsico por hora y el nmero de horas trabajadas durante una semana. Calcule el salario neto , teniendo en cuenta que si el nmero de horas trabajadas durante la semana es mayor de 48 horas, esas horas dems se consideran horas extras y tienen un recargo del 35%. Imprima el nombre del empleado y su salario neto.

Profesor: Marcelo Montecinos C.

111

Programacin I -Java Universidad Tecnolgica de Chile

Ejercicios
En la tienda Sigo de pie los empleados reciben una cierta comisin dependiendo del cdigo del artculo que vendan.
Cdigo del artculo
1 2 3

Clculo de la comisin 15% del precio de venta 40% de la diferencia del precio de venta y el precio mnimo de venta 10% del precio mnimo de venta ms el 50% de la diferencia del precio de venta y el precio mnimo de venta Bs. 100 por unidad ms el 5% del precio mnimo de venta Bs. 500 por unidad

4 5

Profesor: Marcelo Montecinos Hacer un programa que imprima el NombreC. del vendedor, el cdigo del artculo que vendi y la comisin que se gan.

112

Programacin I -Java Universidad Tecnolgica de Chile

Resumen
En resumen, los conceptos vistos fueron :

if

(expresin lgica) { bloque de instrucciones } else { bloque de instrucciones } if else - if switch (expr1) case valor1: case valor2: default: instrucciones; break; instrucciones; break; instrucciones; break;
113

Instrucciones

Profesor: Marcelo Montecinos C.

Programacin I -Java Universidad Tecnolgica de Chile

Sentencias de Iteracin

Profesor: Marcelo Montecinos C.

114

Programacin I -Java Universidad Tecnolgica de Chile

Sentencias de Iteracin
Las sentencias de iteracin en Java son: while, do-while y for. Se utilizan para ejecutar varias veces un conjunto de instrucciones. Cada sentencia de repeticin tiene una utilidad adecuada dependiendo de la situacin.
Profesor: Marcelo Montecinos C.

115

while

Programacin I -Java Universidad Tecnolgica de Chile

Sentencias de Iteracin

while (expresin lgica) { bloque de instrucciones; } Ejemplo: Mostrar los nmeros del 0 al 9
int i =0; while (i < 10) { System.out.println(el valor de i es : + i); i++; } Profesor: Marcelo Montecinos C.

116

while

Programacin I -Java Universidad Tecnolgica de Chile

Sentencias de Iteracin

Evala su expresin condicional al inicio del bucle. Repite un bloque de instrucciones, mientras su expresin sea verdadera. Cuando la expresin es falsa, el control pasa a la siguiente lnea de cdigo que hay inmediatamente despus del bucle. Puede suceder que el bloque de intrucciones nunca se ejecute.
Profesor: Marcelo Montecinos C.

117

Programacin I -Java Universidad Tecnolgica de Chile


class CalFactura { public static void main(String args[ ]) { char resp; double monto,isv; System.out.println("Indique si desea calcular factura s/n"); resp=CTeclado.ReadChar( ); while ((resp =='s') || (resp =='S')) { System.out.println("Indique el monto de la factura"); monto=CTeclado.ReadDouble(); isv=(monto*14.5/100); System.out.println("El monto a pagar de ISV es :"+isv); System.out.println("Desea calcular para otra factura"); resp=CTeclado.ReadChar(); } } }
Profesor: Marcelo Montecinos C.

118

Programacin I -Java Universidad Tecnolgica de Chile do-while

Sentencias de Iteracin

do { bloque de instrucciones; } while (expresion lgica); Ejemplo:


Mostrar los nmeros divisibles por 3 menores a 20
x=0; do { x = x + 3; System.out.println(x = + x); } Profesor: Marcelo Montecinos C. while (x < 20);

119

Programacin I -Java Universidad Tecnolgica de Chile

do-while

Sentencias de Iteracin

Evala su expresin condicional al final del bucle. Repite un bloque de instrucciones, mientras su expresin sea verdadera. Cuando la expresin es falsa, el control pasa a la siguiente lnea de cdigo que hay inmediatamente despus del bucle. El bloque de instrucciones de este ciclo se Marcelo Montecinos C. ejecuta al Profesor: menos una vez.

120

Programacin I -Java Universidad Tecnolgica de Chile


class NotasEstudiantes { public static void main(String args[ ]) { char resp; int notaTeo,acumTeo; do { System.out.println("Indique la Nota de Teoria "); notaTeo=CTeclado.ReadInt(); acumTeo=(NotaTeo*50/100); System.out.println("El acumulado teoria es :"+acumTeo); System.out.println("Desea calcular acumulado para otro estudiante "); resp=CTeclado.ReadChar(); } while ((resp == 's') || (resp =='S')); } }
Profesor: Marcelo Montecinos C.

121

Sentencias de Iteracin for (expr. inicial; expr. Lgica;modificacion) { bloque de instrucciones; }

for

Programacin I -Java Universidad Tecnolgica de Chile

Ejemplo: Mostrar los nmeros del 1 al 10 for (int i = 1; i < 10; i++) { System.out.println(i = + i); }
Profesor: Marcelo Montecinos C.

122

Programacin I -Java Universidad Tecnolgica de Chile

Sentencias de Iteracin Se utiliza para ejecutar un bloque de instrucciones un nmero determinado (fijo) de veces. Repite un bloque de instrucciones, mientras su expresin sea verdadera. La primera vez que se va a ejecutar el ciclo, se realiza la inicializacin, es decir, se declara y asigna un valor inicial a la variable que va a controlar el ciclo. Esto sucede una sola vez. Cuando la expresin es verdadera, se ejecuta la modificacin de la variable que controla el ciclo. Esto es automtico.
Profesor: Marcelo Montecinos C.

for

123

Programacin I -Java Universidad Tecnolgica de Chile


class Serie { public static void main(String args[ ]) { int valoralor,termino,sumSerie; System.out.println("Indique el valor a calcular la serie :"); valor=CTeclado.ReadInt( ); System.out.println("Indique la cantidad de trminos :"); termino=CTeclado.ReadInt( ); sumSerie=0; for (int contador = 1 ; contador <= termino; contador++) { sumSerie = sumSerie + contador*valor; } System.out.println("El resultado de la serie es :"); System.out.println(sumSerie); } } }
Profesor: Marcelo Montecinos C.

124

Programacin I -Java Universidad Tecnolgica de Chile

Sentencias de Iteracin
En resumen, los conceptos vistos fueron :
while (expresin lgica) { bloque de instrucciones; } do {

Instrucciones

bloque de instrucciones; } while (expresion lgica); for (expr. inicial; expr. Lgica; paso) { bloque de instrucciones;
Profesor: Marcelo Montecinos C.

125

Programacin I -Java Universidad Tecnolgica de Chile

Ejercicios
1. Se desea saber el promedio de notas que tiene un estudiante. Hasta la fecha ha cursado 6 materias; adems se quiere el nmero de materias reprobadas y el nmero de materias aprobadas.

Escribir el programa en Java dado el Algoritmo


Entrada. nota: numrico Salida: promn, numa, numr: numrico

Profesor: Marcelo Montecinos C.

126

Programacin I -Java Universidad Tecnolgica de Chile


1. Inicio Promedio. 2. numa, numr, prom, acumNotas,nota: numrico 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

Programacin I -Java Universidad Tecnolgica de Chile

informacin pero, para todos los estudiantes de una escuela.


Entrada. nota: numrico Salida: promn, numa, numr: numrico

2. Se requiere que se obtenga la misma

Profesor: Marcelo Montecinos C.

128

Programacin I -Java Inicio Escuela. 2. promedioMax, numa, numr, prom,acumNotas,nota,carnet: numrico 3. Leer carnet Universidad Tecnolgica de Chile 4. promedioMax 0 5. Mientras ( carnet != 0 ) hacer Comenzar 3.1 numa 0 3.2 numr 0 3.3 acumNotas 0 3.4 Para cont=1 hasta 6 hacer +1 Comenzar 3.4.1 Leer nota 3.4.2 acumNotas acumNotas + nota 3.4.3 Si( nota < 10) entonces 3.4.3.1 numr numr + 1 sino 3.4.3.2 numa numa + 1 Fin para 3.5 prom acumNotas/6 3.6 Si (prom > promedioMax) entoces 3.6.1 promedioMax prom 3.7 Mostrar ( El promedio del estudiantes es : prom) 3.8 Mostrar (El estudiante tiene , numa ,materias aprobadas) 3.9 Mostrar (El estudiante tiene , numr, materias reprobadas) 3.10 Leer carnet Fin Mientras 6. Mostrar promedioMax 7. Terminar Escuela
1. Profesor: Marcelo Montecinos C.

129

Strings en Java
Cadena de caracteres

Profesor: Marcelo Montecinos C.

130

Programacin I -Java Universidad Tecnolgica de Chile

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

Programacin I -Java Universidad Tecnolgica de Chile


Se declara la variable de tipo de dato cadena. String nombre,cadena; Se crea una instancia de cadena, con el constructor por defecto. nombre = new String(); nombre = new String("caramelo"); Para asignarle una secuencia de caracteres. nombre= " Maria Perez"; 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)

Strings

Profesor: Marcelo Montecinos C.

132

Programacin I -Java Universidad Tecnolgica de Chile

Strings

Para obtener la longitud de la candena nombre.length() Si deseamos concatenar cadenas


nombre = "Juan"+" Garcia; Se puede utilizar el metodo concat para concatenar dos cadenas, nombre = " Carlos; cadena=nombre.concat(" Juan "); el contenido de cadena, al final sera: "CarlosJuan "

Profesor: Marcelo Montecinos C.

133

Programacin I -Java Universidad Tecnolgica de Chile

Para obtener el caracter que se encuentra en una posicin charAt(posicin); ejemplo, cadena.charAt(0) devolveria el caracter C donde posicin se inicia en cero. Para extraer una subcadena, hay dos formas substring(int posicinInicial); copia desde la posicin inicial substring(int posicinInicial, int posicionFinal);
copia desde la posicin inicial hasta la posicin final-1
Profesor: Marcelo Montecinos C.

String

hasta el final de la cadena

134

Programacin I -Java Universidad Tecnolgica de Chile

String

Un ejemplo de substring, nombre=Maria Rosa; System.out.println(nombre.substring(2)); System.out.println(nombre.substring(2,4)); la salida sera, ria Rosa ri

Profesor: Marcelo Montecinos C.

135

Programacin I -Java Universidad Tecnolgica de Chile

String

Para sustituir una letra por otra dentro de la cadena replace(char original,char sustituto) ejemplo, cadena=casa mia; System.out.println(cadena.replace('a','e')); la salida sera, cese mie
Profesor: Marcelo Montecinos C.

136

Programacin I -Java Universidad Tecnolgica de Chile

String

Para convertir los caracteres de una cadena de maysculas a minsculas toLowerCase() ejemplo,

la salida sera,
casa mia

cadena=CASA MIA; System.out.println(cadena.toLowerCase());

Profesor: Marcelo Montecinos C.

137

Programacin I -Java Universidad Tecnolgica de Chile

String
Para convertir los caracteres de una cadena de minsculas a maysculas toUpperCase() ejemplo, cadena=casa mia; System.out.println(cadena.toUpperCase()); la salida sera, CASA MIA

Profesor: Marcelo Montecinos C.

138

Programacin I -Java Universidad Tecnolgica de Chile

String
Para comparar los caracteres dentro de dos cadenas equals() ejemplo,

if (s1.equals(s2)) { System.out.println("Son iguales los caracteres"); } else { System.out.println("no son iguales los caracteres"); }

Profesor: Marcelo Montecinos C.

139

Programacin I -Java Universidad Tecnolgica de Chile

String
Para comparar los caracteres dentro de dos instancias, sin diferenciar entre maysculas y minsculas equalsIgnoreCase() ejemplo, if (s1.equalsIgnoreCase(s2)) { System.out.println("Son iguales los caracteres"); } else { System.out.println("no son iguales los caracteres"); }
Profesor: Marcelo Montecinos C.

140

Programacin I -Java Universidad Tecnolgica de Chile

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

Programacin I -Java Universidad Tecnolgica de Chile

String

Para saber si una cadena es menor, igual o mayor lexicogrficamente que otra. compareTo() ejemplo, if (s1.compareTo(s2) < 0) {System.out.println(s1 es menor a s2");} else { if (s1.compareTo(s2) == 0) { System.out.println(s1 es igual a s2"); } else {System.out.println(s1 es mayor s2");} } Profesor: Marcelo Montecinos C. 142

Programacin I -Java Universidad Tecnolgica de Chile

String
Para determinar si la cadena comienza con una cadena especificada. startsWith() ejemplo,

if (s1.startsWith("car")) { System.out.println("SI"); } else { System.out.println("NO");


}
Profesor: Marcelo Montecinos C.

143

Programacin I -Java Universidad Tecnolgica de Chile

String

Para determinar si una cadena se encuentra, a partir de una posicin, dentro de una cadena especificada, startsWith(String cadena,int posicin) ejemplo, if (s1.startsWith("car",3)) { System.out.println("SI"); } else { System.out.println("NO"); Profesor: Marcelo Montecinos C. }

144

Programacin I -Java Universidad Tecnolgica de Chile

String
Para determinar si la cadena termina con una cadena dada. endsWith() ejemplo, if (s2.endsWith("SA")) { System.out.println("SI"); } else { System.out.println("NO"); }
Profesor: Marcelo Montecinos C.

145

Programacin I -Java Universidad Tecnolgica de Chile

Paquetes
Paquetes Java ms importantes:
-

lang para funciones del lenguaje; util para utilidades adicionales; io para entrada y salida; text para formateo especializado; awt para grficos e interfaz grfica de usuario

Para acceder a cualquiera de estos paquetes, excepto lang que est siempre disponible, usamos el siguiente modelo:
import java.nombrepaquete.*;
Profesor: Marcelo Montecinos C.

146

JDBC
Java Database Connectivity

Profesor: Marcelo Montecinos C.

147

Programacin I -Java Universidad Tecnolgica de Chile

Introduccin

JDBC es una API, formada por conjunto de clases e interfaces en el lenguaje de programacin Java, para ejecutar sentencias SQL. Ofrece un estndar de conexin a cualquier base de datos disponible en el mercado. Permite obtener los datos en forma fcil y cmoda en ambientes cliente-servidor a travs de Internet/Intranet.
Profesor: Marcelo Montecinos C.

148

Programacin I -Java Universidad Tecnolgica de Chile

Qu hace JDBC?

Establece una conexin a una base de datos. Enva sentencias SQL. Procesa los resultados de estas sentencias.

Profesor: Marcelo Montecinos C.

149

Programacin I -Java Universidad Tecnolgica de Chile

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
Adm. de controladoresODBC

Controlador JDBC

Controlador JDBC

C. ODBC
DB DB
Profesor: Marcelo Montecinos C.

C. ODBC
DB

DB

150

Programacin I -Java Universidad Tecnolgica de Chile

Primer ejemplo bsico


Connection con = DriverManager.getConnection ( "jdbc:odbc:nombre", "login", "password"); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1"); while (rs.next()) { int x = rs.getInt("a"); String s = rs.getString("b"); float f = rs.getFloat("c"); }

JDBC usa una URL para especificar la base de datos.


151

Profesor: Marcelo Montecinos C.

Programacin I -Java Universidad Tecnolgica de Chile

...Primer ejemplo bsico

Ejemplos de URL:

jdbc:mysql://myserver:4444/db1 jdbc:oracle://oraserver jdbc:odbc:mydatabase

Profesor: Marcelo Montecinos C.

152

Programacin I -Java Universidad Tecnolgica de Chile

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 implementacin de Java. ODBC mezcla funciones simple y complejas. Los controladores de ODBC deben ser instalados en cada cliente.
Profesor: Marcelo Montecinos C.

153

Programacin I -Java Universidad Tecnolgica de Chile

...JDBC vs. ODBC

JDBC es una interfaz natural en Java.

Profesor: Marcelo Montecinos C.

154

Programacin I -Java Universidad Tecnolgica de Chile

Modelos de acceso a BD Aplicacin Java JDBC De 2 capas La aplicacin habla directamente con la base de datos. Controlador JDBC se comunica con el sistema especfico que maneja la base de datos. La base de datos puede estar en otra mquina, con lo que el cliente se comunica por red. Esta es la configuracin llamada cliente/servidor.
Profesor: Marcelo Montecinos C.

Cliente

Protocolo BD Servidor BD

DBMS

155

Programacin I -Java Universidad Tecnolgica de Chile

Modelos de acceso a BD
Cliente (GUI)

Applet en Java o Navegador HTML Aplicacin Java JDBC

De 3 capas
Los comandos son enviados a la capa intermedia de servicios, la cual enva sentencias SQL a la base de datos. sta las procesa y enva los resultados de vuelta a la capa intermedia, para luego ser enviados al cliente. Permite un control de acceso y de actualizacin. Provee ventajas de performance.
156

Llamadas HTTP, RMI,CORBA

Servidor

Protocolo BD

DBMS

Servidor BD

Profesor: Marcelo Montecinos C.

Programacin I -Java Universidad Tecnolgica de Chile

Categoras 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 slo Java. Las llamadas JDBC son convertidas a un protocolo de red independiente del sistema de la base de datos. Este protocolo es convertido en un servidor Protocolo Nativo. Es slo Java. Se usa un protocolo de red con la BD. Profesor: Marcelo Montecinos C. 157

Programacin I -Java Universidad Tecnolgica de Chile

Conexin

Un objeto Connection representa una conexin a una base de datos. Una sesin incluye las sentencias SQL que son ejecutadas y los resultados de stas. Establecer la conexin: DriverManager.getConnection La clase DriverManager intenta ubicar el controlador que pueda conectarse a la base de datos representada en la URL.
Profesor: Marcelo Montecinos C.

158

Programacin I -Java Universidad Tecnolgica de Chile

...Conexin

Sintxis de una URL JDBC:


jdbc:<subprotocolo>:<subnombre> <subprotocolo> es el nombre del controlador o del mecanismo de conexin. Ejemplo: odbc. <subnombre> es la identificacin de la base de datos. El formato varia segn el controlador especificado. Ejemplo: //servidor:puerto/etc
Profesor: Marcelo Montecinos C.

159

Programacin I -Java Universidad Tecnolgica de Chile

Enviando sentencias SQL

JDBC permite que se escriba cualquier tipo de sentencia SQL. Aunque sta fuera dependiente de la base de datos slo se correra el riesgo de incompatibilidad al cambiar de base de datos.

Llamadas a procedimientos almacenados Formatos de fecha


Profesor: Marcelo Montecinos C.

160

Programacin I -Java Universidad Tecnolgica de Chile

...Enviando sentencias SQL

JDBC provee 3 clases:

Statement: Este objeto es usado para enviar sentecias SQL simples. Es creado por el mtodo createStatement. PreparedStatement: Este objeto es usado para sentencias que requieren uno o ms parmetros. La sentencia es precompilada y guardada para uso futuro. CallableStatement: Es usado para ejecutar procedimientos almacenados.
Profesor: Marcelo Montecinos C.

161

Programacin I -Java Universidad Tecnolgica de Chile

Transacciones

Una transaccin consiste en una o ms sentencias que han sido ejecutadas y luego confirmadas (commit) o deshechas (rolled back) Auto-commit est predeterminado. Si Auto-commit est desactivado se debe usar los mtodos commit o rollback explcitamente.
Profesor: Marcelo Montecinos C.

162

Programacin I -Java Universidad Tecnolgica de Chile

Procesando respuestas

Las respuestas a las sentencias SQL se reciben en el objeto ResultSet que mantiene las filas. Este objeto provee el acceso a los datos de esas filas a travs de un conjunto de mtodos get, los cuales, a su vez, permiten el acceso a cada columna de estas filas.
Profesor: Marcelo Montecinos C.

163

Programacin I -Java Universidad Tecnolgica de Chile

Cargando la clase del controlador JDBC

Ejemplo: Esto crea una instancia del controlador y llama al mtodo DriverManager.registerDriver registrando este controlador en la lista de controladores disponibles para conexiones.
Profesor: Marcelo Montecinos C.

Class.forName(empresa.db.Driver");

164

Programacin I -Java Universidad Tecnolgica de Chile

Ejemplo de sentencia Connection con = DriverManager.getConnection ( "jdbc:odbc:nombre", "login", "password"); PreparedStatement pstmt = con.prepareStatement( UPDATE tabla1 SET m=? WHERE x=?); pstmt.setString(1, "Hola"); for (int i = 0; i < 10; i++) { pstmt.setInt(2, i); int rowCount = pstmt.executeUpdate(); }
Profesor: Marcelo Montecinos C.

165

Programacin I -Java Universidad Tecnolgica de Chile

Primer ejemplo bsico Connection con = DriverManager.getConnection ( "jdbc:odbc:nombre", "login", "password"); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1"); while (rs.next()) { int x = rs.getInt("a"); String s = rs.getString("b"); float f = rs.getFloat("c"); } Profesor: Marcelo Montecinos C. 166

Clases en Java

Profesor: Marcelo Montecinos C.

167

Programacin I -Java Universidad Tecnolgica de Chile

Declaracin de Clases
modificador class nombreClase { < declaracin de campos > < declaracin de mtodos > }

modificador puede ser public o nada; si la clase no pertenece a un paquete, ambas definiciones son equivalentes; si la clase pertenece a un paquete, entonces, si se declara public, la clase podr utilizarse fuera del paquete, pero si no se declara public, slo podr utilizarse dentro del paquete
Profesor: Marcelo Montecinos C.

168

Programacin I -Java Universidad Tecnolgica de Chile

Declaracin de Objetos

nombreClase nombreClase nombreClase nombreClase

nombreObjeto; nombreObjeto1, nombreObjeto2, nombreObjeto3; nombreObjeto = nombreOtroObjeto; nombreObjeto = new nombreClase();

Ejemplo:
clasePublica elObjeto; clasePublica elObjeto1, elObjeto2, elObjeto3; clasePublica elObjeto4 = elObjeto; clasePublica elObjeto5 = new clasePublica();

Profesor: Marcelo Montecinos C.

169

Programacin I -Java

Declaraciones de Campos
modificadores tipo nombreCampo;

Universidad Tecnolgica de Chile

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. 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

Otros modificadores que se pueden aadir son:


-

tipo es el tipo del campo (tipo primitivo o clase del objeto) nombreCampo es el nombre del campo
Profesor: Marcelo Montecinos C.

170

Programacin I -Java

Acceso a Campos

Universidad Tecnolgica de Chile

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

Programacin I -Java Universidad Tecnolgica de Chile

Mtodos 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 mtodos pueden ser pblicos, privados o protegidos (public, private, protected), al igual que las compoenetes - pirvate: implica que pueden ser vistas slo en la clase actual. Son invisibles incluso para clases derivadas de esta. - protected: implica que pueden ser vistas por las derivadas. Tambien son vistas dentro del paquete (agrupacin de clases en un archivo). Este es eldefault. - public:son vistas desde cualquier lado.
Profesor: Marcelo Montecinos C.

172

Programacin I -Java Universidad Tecnolgica de Chile

Declaracin de Mtodos
modificador tipo nombreMetodo(<lista de parametros formales>) { < cuerpo del mtodo; campos e instrucciones > return expresion; // solo mtodos que devuelven resultado } <lista de parametros formales> = (tipo campo, tipo campo, ...)

modificador significa lo mismo que para los campos. tipo es el tipo devuelto por el mtodo, puede ser:
-

void si el mtodo no devuelve nada un tipo primitivo una clase

nombreMetodo es el nombre del mtodo

Profesor: Marcelo Montecinos C.

173

Programacin I -Java

Ejemplo de Clase

Universidad Tecnolgica de Chile

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

Programacin I -Java Universidad Tecnolgica de Chile

Llamadas a Mtodos
metodo(<lista parametros reales>); // metodos de la propia clase objeto.metodo(<lista dparametros reales>); // metodos no estaticos nombreclase.metodo(<lista parametros reales>); //metodos estaticos

Ejemplo:
elObjeto.estableceEntero(7); int entero = elObjeto.recuperaEntero(); Clase.estableceEnteroEstatico(8); int entero = Clase.recuperaEnteroEstatico();

Profesor: Marcelo Montecinos C.

175

Programacin I -Java Universidad Tecnolgica de Chile

Declaracin de Mtodos Constructores


modificadores nombreClase(<lista argumentos formales>) { < cuerpo del mtodo constructor > }

Ejemplo:
public class Clase { private int enteroPrivado; public Clase() { enteroPrivado = 0; } public Clase(int entero) { enteroPrivado = entero; }
}

Profesor: Marcelo Montecinos C.

176

Programacin I -Java Universidad Tecnolgica de Chile

Llamadas a Mtodos Constructores


nombreClase objeto = new nombreClase(<lista parametros reales>);

Ejemplo:
Clase elObjeto; elObjeto = new Clase();

O en una sola lnea:


Clase elObjeto = new Clase(); Clase elObjeto = new Clase(5);

Profesor: Marcelo Montecinos C.

177

Programacin I -Java

Modelo de un Programa
public class nombrePrograma { public static void main(String[] args) { < cuerpo del programa > } }

Universidad Tecnolgica de Chile

Profesor: Marcelo Montecinos C.

178

Programacin I -Java Universidad Tecnolgica de Chile

Herencia
modificadores class nombreClase extends nombreClaseQueExtiende { }

Ejemplo
public class ClaseExtendida extends Clase { }

Una clase que extiende otra, se llama subclase o clase hija, mientras que la clase a la que extiende (la original) se llama superclase o clase paterna. La subclase hereda los miembros (propiedades y mtodos) de la superclase.
Profesor: Marcelo Montecinos C.

179

Programacin I -Java Universidad Tecnolgica de Chile

Cambio de tipo

Cualquier objeto de una subclase puede ser asignado a un objeto de su superclase. Cualquier objeto de una superclase puede ser asignado a una subclase con una conversin explcita (cambio de tipo).

ClaseExtendida elObjetoExtendido = new ClaseExtendida(); Clase elObjeto = laClaseExtendida; ClaseExtendida elObjetoExtendido = (ClaseExtendida)elObjeto;

Profesor: Marcelo Montecinos C.

180

Programacin I -Java Universidad Tecnolgica de Chile

Superconstruccin
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 instruccin de un constructor.

Profesor: Marcelo Montecinos C.

181

Programacin I -Java Universidad Tecnolgica de Chile

Ejemplo de Superconstruccin
public class Clase { private int enteroPrivado; public Clase(int entero) { enteroPrivado = entero; } } public class ClaseExtendida extends Clase { private double doblePrivado; public ClaseExtendida(int entero, double doble) { super(entero); doblePrivado = doble; } }

Profesor: Marcelo Montecinos C.

182

Programacin I -Java Universidad Tecnolgica de Chile

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

Programacin I -Java Universidad Tecnolgica de Chile

Sobreescritura de Mtodos
public class Clase { public int dato; public estableceDato(int entero) { dato = entero; } } public class ClaseExtendida extends Clase { public int datoExtendido; public estableceDato(int entero) { super.estableceDato(entero); datoExtendido = entero*2; }

Profesor: Marcelo Montecinos C.

184

Programacin I -Java Universidad Tecnolgica de Chile

Mtodos en Java

Profesor: Marcelo Montecinos C.

185

Programacin I -Java Universidad Tecnolgica de Chile

Mtodos

La mejor forma de crear y mantener un programa grande, es construirlo a partir de piezas ms pequeas o mdulos. Cada uno de los cuales es ms manejable que el programa en su totalidad
Profesor: Marcelo Montecinos C.

186

Programacin I -Java Universidad Tecnolgica de Chile

Mtodos
Los mtodos tambin son utilizados para evitar la repeticin de cdigo en un programa al poder ejecutarlo desde varios puntos de un programa con slo invocarlo.

Profesor: Marcelo Montecinos C.

187

Programacin I -Java Universidad Tecnolgica de Chile

Mtodos
Esta tcnica de descomposicin se denomina Divide y vencers. Los mdulos (subprogramas) en Java se denominan mtodos. Un mtodo se invoca ,es decir, se le pide realizar su tarea designada con una llamada de mtodo.
Profesor: Marcelo Montecinos C.

188

Programacin I -Java Universidad Tecnolgica de Chile

Mtodos

La llamada a mtodos especifica el nombre del mtodo y proporciona la informacin (en forma de argumentos) cuando el mtodo lo necesite para hacer su trabajo El formato de una definicin de mtodo es:
static tipo-de-valor-devuelto nombredelmtodo(lista-param) { declaraciones y sentencias

}
Profesor: Marcelo Montecinos C.

189

Programacin I -Java Universidad Tecnolgica de Chile

Mtodos
Casi todos los mtodos tienen una lista de parmetros; los parmetros de un mtodo tambin son variables locales. Es recomendable limitar los mtodos a realizar una sola tarea bien definida y el nombre del mtodo debe expresar efectivamente dicha tarea.
Profesor: Marcelo Montecinos C.

190

Programacin I -Java Universidad Tecnolgica de Chile

Mtodos

El nombre es cualquier identificador vlido. El tipo-de-valor-devuelto es el tipo de dato del resultado, que el mtodo devuelve al invocador. El tipo-de-valor-devuelto void indica que el mtodo no devuelve ningn valor, es un procedimiento.
Profesor: Marcelo Montecinos C.

191

Programacin I -Java Universidad Tecnolgica de Chile

Mtodos
Omitir el tipo-de-valor-devuelto en una definicin de mtodo causa un error de sintaxis. Olvidar devolver un valor desde un mtodo que se supone debe devolver un valor es un error de sintaxis.

Profesor: Marcelo Montecinos C.

192

Programacin I -Java Universidad Tecnolgica de Chile

Mtodos

Si se especifica un tipo-de-valordevuelto distinto de void el mtodo debe contener una sentencia return. Devolver un valor de un mtodo cuyo tipo devuelto se ha declarado void causa un error de sintaxis.
Profesor: Marcelo Montecinos C.

193

Programacin I -Java Universidad Tecnolgica de Chile

Mtodos
Todas las variables declaradas en las definiciones de los mtodos son variables locales; solo se conocen en el mtodo en el que se definen.
static int SumarNum(int e) { e+=e; System.out.println(++e); return e; }
Profesor: Marcelo Montecinos C.

//Este mtodo retorna un valor

194

Programacin I -Java Universidad Tecnolgica de Chile

Mtodos

La lista-de-parmetros es una lista separada por comas que contiene las declaraciones de los parmetros que el mtodo recibe cuando es invocado. Si un mtodo no recibe valores, se coloca un juego de parntesis vaco ( ) despus del nombre del mtodo.
Profesor: Marcelo Montecinos C.

195

Programacin I -Java Universidad Tecnolgica de Chile

Mtodos

Declarar parmetros para un mtodo que poseen el mismo tipo float x,y en lugar de float x, float y producir un error de compilacin porque se requiere un tipo para cada parmetro. Colocar punto y coma despus del parntesis que encierra la lista de parmetros es un error de sintaxis.
Esta es una declaracin de un mtodo que contiene 2 errores.

static void Calcular (float x,y);


Profesor: Marcelo Montecinos C.

196

Programacin I -Java Universidad Tecnolgica de Chile

Definir una variable local de un mtodo igual que un parmetro es un error de sintaxis. Ejemplo:
class CCmporvalor

Mtodos

{ public static void main(String args[]) { int a=10; System.out.println(a); SumarNum(a); System.out.println(a); } static int SumarNum(int e) { e+=e; System.out.println(e); return e; } }
Profesor: Marcelo Montecinos C.

//Este mtodo retorna un valor

197

Programacin I -Java Universidad Tecnolgica de Chile

Definir un mtodo dentro de otro es un error de sintaxis. Existen tres formas de devolver el control al punto en el que se invoc un mtodo:

Mtodos

a) Si el mtodo no devuelve un resultado el control se devuelve cuando se llega a la llave derecha que termina el mtodo. b) Al ejecutarse la sentencia return tambin, si el mtodo NO devuelve ningn resultado. c) return expresin;
Profesor: Marcelo Montecinos C.

198

Programacin I -Java Universidad Tecnolgica de Chile

Ejemplo

Profesor: Marcelo Montecinos C.

199

Programacin I -Java Universidad Tecnolgica de Chile

Entrada: v1,v2,v3 :numricos Inicio Programa Principal V1,v2,v3,promn,mayor:numricos Procesar IntroDatos //Llamada a un subprograma tipo procedimiento promn Procesar Calprom //Llamada a un subprograma tipo funcin Procesar Imprime(promn) Mostrar (El mayor es mayor Procesar Max) Terminar Programa Principal
Profesor: Marcelo Montecinos C.

200

Programacin I -Java Universidad Tecnolgica de Chile

class CPrueba {

//Clase (Programa)

static int v1,v2,v3;//Nmeros enteros declarados en forma Global public static void main (String args[ ]) //Mtodo principal { float prom; IntroDatos(); //Llamada a un mtodo que no devuelve nada prom=CalcProm(); //Llamada a un mtodo tipo funcin Imprime(prom); //Llamada a un mtodo con pase de parmetros System.out.println("El mayor: "+ Max( )); }
Profesor: Marcelo Montecinos C.

201

Programacin I -Java Universidad Tecnolgica de Chile

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

Programacin I -Java Universidad Tecnolgica de Chile

static void IntroDatos() //Mtodo que no devuelve ni recibe nada { System.out.println("introduce el valor V1: "); v1=CTeclado.ReadInt( ); System.out.println("introduce el valor V2: "); v2=CTeclado.ReadInt( ); System.out.println("introduce el valor V3: "); v3=CTeclado.ReadInt( ); }

Profesor: Marcelo Montecinos C.

203

Programacin I -Java Universidad Tecnolgica de Chile

Inicio Calcprom aux: numrico aux (v1+v2+v3)/3 Retornar aux Inicio Imprime(valor) valor:numrico Mostrar (Promedio) Mostrar (valor) Regresar
Profesor: Marcelo Montecinos C.

204

Programacin I -Java Universidad Tecnolgica de Chile

static float CalcProm( ) //Mtodo que devuelve un valor {


float aux; aux=(v1+v2+v3)/3; //V1,V2,V3 variables globales return aux; // Valor que retorna el mtodo

static void Imprime(float valor)//Observe el cambio de nombre { System.out.print("Promedio: "); System.out.println(valor); }


Profesor: Marcelo Montecinos C.

205

Programacin I -Java Universidad Tecnolgica de Chile

Inicio Max aux:numrico aux 0 Si ((v1>=v2)and (v1>=v3)) entonces Auxv1 Si ((v2>=v1)and(v2>=v3))entonces Auxv2 Si ((v3>=v1)and(v3>=v2))entonces Auxv3 Retornar aux.
Profesor: Marcelo Montecinos C.

206

Programacin I -Java Universidad Tecnolgica de Chile

static int Max() // Mtodo que retorna un valor //V1,V2,V3 { int aux=0; if((v1>=v2)&&(v1>=v3)) { aux=v1; } if((v2>=v1)&&(v2>=v3)) { aux=v2; } if((v3>=v1)&&(v3>=v2)) { aux=v3; } return aux; }
Profesor: Marcelo Montecinos C.

variables globales

207

Programacin I -Java Universidad Tecnolgica de Chile

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

Programacin I -Java

Objetos vs Variables
-

Universidad Tecnolgica de Chile

Una variable tiene memoria para un solo valor y dispone de un conjunto predefinido de operaciones segn sea su tipo. Un objeto tiene memoria para un grupo de varios valores, junto con un conjunto coherente de mtodos que operan sobre esos valores. Tanto mtodos como valores estn encapsulados en la clase de la que se ha obtenido el objeto.
Profesor: Marcelo Montecinos C.

209

Programacin I -Java

La superclase Object

Universidad Tecnolgica de Chile

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

Programacin I -Java Universidad Tecnolgica de Chile

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

Programacin I -Java

Asignacin de Objetos
modificador class nombreClase implements Cloneable { public Object clone() { nombreClase obj = new nombreClase(parametros); < instrucciones para copiar los campos a obj > return obj; } }
public class Clase implements Cloneable { private int entero; public Object clone() { Clase c = new Clase(); c.entero = entero; return c; } }
Profesor: Marcelo Montecinos C.

Universidad Tecnolgica de Chile

212

Programacin I -Java

Arrays

Universidad Tecnolgica de Chile

Declaracin e instanciacin de un array de n enteros:


int miArray[]; miArray = new int[n];

Lo mismo en una sola lnea:


int miArray[] = new int[n];

Declaracin e instanciacin 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

Programacin I -Java Universidad Tecnolgica de Chile

Conversiones de Clase

El mtodo clone invocado sobre clase2 devuelve un objeto de la clase Object. Esto debe ser as, porque lo exige la interfaz Cloneable. Para convertirlo de nuevo a Clase necesitamos la conversin explcita de tipo.
Clase objeto1 = (Clase)objeto2.clone();
Profesor: Marcelo Montecinos C.

214

Programacin I -Java

Paquetes
-

Universidad Tecnolgica de Chile

Paquetes Java ms importantes:


lang para funciones del lenguaje; util para utilidades adicionales; io para entrada y salida; text para formateo especializado; awt para grficos e interfaz grfica de usuario

Para acceder a cualquiera de estos paquetes, excepto lang que est siempre disponible, usamos el siguiente modelo:
import java.nombrepaquete.*;
Profesor: Marcelo Montecinos C.

215

Programacin I -Java

Paquetes

Universidad Tecnolgica de Chile

package nombrePaquete; modificador class nombreClase { < declaracion de la clase > }

fuera de public.

Importante: Si deseamos que una clase sea utilizada


su paquete, deberemos declararla como

Profesor: Marcelo Montecinos C.

216

Programacin I -Java Universidad Tecnolgica de Chile

Interfaces

Una interfaz es una forma especial de una clase que consiste exclusivamente de declaraciones de mtodos abstractos y constantes. En vez de la palabra clave class las interfaces tienen la palabra interface. Todos los mtodos declarados son abstractos. Esto implica que tienen que ser implementadas por alguna clase que use esta interfaz. Ej. public interface ObjetoGrafico { public final int MaxAncho = 800; public final int MaxAalto = 600; public void trasladar(int x, int y); public void escalar(float p); public boolean visible(); etc...
Profesor: Marcelo Montecinos C.

217

Programacin I -Java Universidad Tecnolgica de Chile

Interfaces (2)

La interfaz funciona como un protocolo: cualquier clase que ocupoe la interfaz debe implementar todos los mtodos que la interfaz declara. public class MiOjetosGrafico1 implements ObjetoGrafico{ private int origenX, origenY, ancho, alto; private estaVisible; public void trasladar(int x, int y) { if (origenX+x <= MaxAncho) origenX += x; else .... if (origenY+y <= MaxAlto) origenY +=y; else ...... } public void escalar(float p){ ......} public boolean visible(){ .......} etc...
Profesor: Marcelo Montecinos C.

218

Programacin I -Java Universidad Tecnolgica de Chile

Interfaces(3)
A estas alturas nos deberamos estar preguntando por qu no lo hicimos con clases abstractas, acaso no es lo mismo ? NO!!!! Si quisieramos hacer una clase abstracta entonces los objetos grficos estn obligados a ser derivados de esta nica clase abstracta (Java no permite mltiple herencia). En muchos casos querramos que los objetos grficos fueran heredados de otras clases (incluso distintas clases para distintos objetos grficos) pero que todos tuvieran la misma interfaz.

Profesor: Marcelo Montecinos C.

219

Programacin I -Java

Interfaces(4)

Universidad Tecnolgica de Chile

O sea que las interfaces definitivamente no sirven para implementar herencia mltiple ? SI y No: Una clase solo puede heredar constantes de la interfaz Una clase no puede heredar implementaciones de una interfaz Una interfaz se puede usar como una clase Una interfaz puede ser una extensin de una clase abstracta, con lo cual se heredan caractersticas de otra clase ms:

Ej: public interface ObjetoGrafico extends ObjetoGeometrico public class ComponenteGrafica extends JPanel implements ObjetoGrfico:

Profesor: Marcelo Montecinos C.

220

Programacin I -Java a la vez: Haciendo ms de una cosa Universidad Tecnolgica de Chile Threads

Un thread es una secuencia o flujo de de instrucciones que se ejecutan dentro de un programa. Tiene un comienzo y un fin. Entonces qu diferencia tiene con un proceso ? El thread slo puede ser creado dentro de un proceso. Y un proceso (programa) puede crear varios threads dentro de l que se ejecutan en paralelo. Entonces, qu diferencia tiene con multiprocesos a la UNIX ? (para los que programaron en C, qu los difiere del fork ?) El programa principal est conciente de los threads que existen, hay variables que los identifican. Pueden ser creados, inicializados, sustendidos, reactivados o parados por el el programa que los cre. El programa principal puede darles parmetros distintos a cada thread. Los thread se pueden programar con la canatidad de variables necesarias para su ejecucin (no lo heredan TODO)
Profesor: Marcelo Montecinos C.

221

El mtodo runUniversidad de la Tecnolgica clase de Thread Chile

Programacin I -Java

Los threads son una clase existente. Lo que un thread en particular hace cuando se echa a correr se debe escribir en el mtodo run de la clase thread, que es un mtodo que se debe escribir siempre. Hay dos formas de implementar Threads en Java (que coincide con las dos formas vistas de implementar mtodos definidos): Crear una nueva clase que extienda la clase abstracta Thread e implementar el mtodo abstracto run. Implementar la interfaz runnable, lo cual implica que se va a reescribir el mtodo run. La razn para escoger una u otra forma es simplemente si queremos que la clase que implementa el thread sea adems extendida de otra clase (aparte de la clase thread).
Profesor: Marcelo Montecinos C.

222

Programacin I -Java Universidad Tecnolgica de Chile

public class SimpleThread extends Thread { public SimpleThread(String str) { super(str); } public void run() { for (int i = 0; i < 10; i++) { System.out.println(i + " " + getName()); try { this.sleep((int)(Math.random() * 1000)); } catch (InterruptedException e) {} } System.out.println("DONE! " + getName()); }

El mtodo this.sleep(milisegundos) debe ir en un bloque try Profesor: Marcelo Montecinos C. 223 and catch

La forma extendida de Thread(2) Universidad Tecnolgica de Chile


public class TwoThreadsTest { public static void main (String[] args) { new SimpleThread("Jamaica").start(); new SimpleThread("Fiji").start(); } }

Programacin I -Java

El mtodo start() inicia la ejecucn de un thread. Esto implica que se empieza a ejecutar el cdigo escrito en el mtodo run del thread. Tambin existen otros mtodos que se le pueden aplicar a un thread: suspend(), resume(), stop().
Profesor: Marcelo Montecinos C.

224

Implentacin haciendo interface Programacin I -Java


Universidad Tecnolgica de Chile

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

Usando threads para atender Universidad Tecnolgica de Chileclientes de un Servidor de Sockets

Programacin I -Java

La forma de implementar servidores que atiendan a varios clientes paralelamente a la vez es combinando threads con sockets El servidor abre un ServerSocket desde donde oye ciualquier intento por conectarse con l de un cliente. Una vez establecida la conexin, abre un socket normal e inicia un thread que atiende a este cliente. El socket abierto se pasa como parmetro. De esa manera puede seguir oyendo por el ServerSocket sin estar bloqueado. El thread tiene un mtodo run que atiende los pedidos del cliente El cliente se conecta al servidor sin saber que finalmente ser un socket el que est atendindolo. Si el protocolo de atencin especifica la manipulacin de datos comunes (por ejemplo a un archivo con informacin sobre cuentas corrientes), hay que tener cuidado con los accesos concurrentes a estos datos (mtodos synchronized).

Profesor: Marcelo Montecinos C.

226

Ejemplos de programas interesantes Universidad Tecnolgica de Chile

Programacin I -Java

El programa MultiServer.java es el del servidor que establece el ServerSocket y se queda oyendo para ver si viene un cliente. Si llega un cliente crea un socket y un nuevo thread, al cual le pasa el socket, para que sea atendido. El server siguie esperando clientes en el ciclo. El programa MultiServerThread es el thread que atiende al cliente. En este caso slo manda dos strings, uno avisndole que nmero de cliente es el otro para despedirse. El programa Client.java se comunica con el servidor y lee los dos strings desde el socket establecido, los cuales los imprime en pantalla. El programa Syncron.java muestra como debe declararse un mtodo al cual acceden varios threads de modo que no se produzca problema de acceso indebido (ms de un thread puede obtener el mismo nmero!!) Los programas DateServer y DateClient muestran como se pueden traspasar objetos facilmente por un socket (siempre que estos sean serializables)
Profesor: Marcelo Montecinos C.

227

Objetos Remotos en JAVAde Chile Universidad Tecnolgica

Programacin I -Java

La tecnologa RMI (Remote Method Invocation) permite a un programa corriendo en una mquina virtual de java (un intrprete) invocar el mtodo de un objeto localizado en otra mquina virtual de java (ubicada en cualquier parte de la red TCP/IP que se pueda acceder desde el lugar) Normalmente se tiende a ver aplicaciones que usan RMI como aplicaciones de cliente servidor. Una tpica aplicacin de servidor crea un objeto, lo publica para que pueda ser accesible de cualquier otro lado y espera a que llamen clientes pidiendo la invocacin de sus mtodos. Una tpica aplicacin cliente obtiene una referencia al objeto remoto en el servidor y luego invoca sus mtodos como si fuera un objeto local. RMI provee mecanismos con los cuales el cliente y el servidor se pueden intercambiar informacin, convirtiendolas en aplicaciones de objetos distribuidos. Estos mecanismos deben hacer posible: 1) localizar objetos remotos, 2) comunicarse con los objetos remotos 3) traspasar el cdigo de los objetos remotos (deben ser serializables)

Profesor: Marcelo Montecinos C.

228

Programacin I -Java

Interfaces, objetos y mtodos remotos


Universidad Tecnolgica de Chile Como en otras aplicaciones, una aplicacin distribuida que usa RMI est constituida por interfaces y clases. Las interfaces definen los mtodos que sern conocidos por los clientes de los objetos remotos. Las clases remotas implementan estos y quizas otros mtodos tambin. Un objeto remoto se implementa siguiendo los siguientes pasos: 1) Diseo e implementacin de las componentes de la aplicacin distribuida 2) Compilar los cdigos fuentes y generar los llamados stubs y skeletons 3) echar a andar la aplicacin

Profesor: Marcelo Montecinos C.

229

Programacin I -Java Universidad Tecnolgica de Chile

Disear e implementar las componentes de la aplicacin

Definir las interfaces remotas: Una interfaz remota especifica los mtodos que pueden ser invocados en forma remota por un cliente. Los clientes conocern los objetos remotos slo a travs de las interfaces. Implementacin de los objetos remotos: los objetos remotos deben implementar una o ms interfaces remotas. Adems pueden implementar otros mtodos que no corresponden a las interfaces remotas y que son de uso local. Implementar los clientes: Los clientes que usan los objetos remotos se pueden implementar una vez que Profesor: Marcelo Montecinos las interfaces remotas estn C. definidas. 230

Programacin I -Java Universidad Tecnolgica de Chile

Un ej: Un objeto remoto que contiene un nmero


//el archivo de definicin de la interfaz import java.rmi.*; public interface Numero extends Remote { public int getNumero() throws RemoteException; }

Este es la definicin de la interfaz: implica que los clientes slo conocern el mtodo getNumero() de el objeto remoto. Para los clientes la clase de este objeto es Numero, no importa cmo lo haya llamado en el archivo de implementacin del tipo de objeto.
Profesor: Marcelo Montecinos C.

231

Programacin I -Java Universidad Tecnolgica de Chile

Un ej: Un objeto remoto(2)


//el archivo de definicin de la implementacin 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("//"+args[0]+"/elNumero",n); System.out.println("Numero creado"); } catch (Exception e) {} } Profesor: Marcelo Montecinos C.

232

Programacin I -Java Universidad Tecnolgica de Chile

Aclaracin: Existe un servidor de comunicaciones !!!!


Es un programa que provee java llamado rmiregistry Se echa a correr en la mquina donde est el programa servidor del objeto remoto Cualquier cliente que quiera ocupar el objeto remoto debe pedirle a l una referencia al objeto remoto antes de ocuparlo => debe saber con qu nombre se registr y en qu mquina esta corriendo.

Naming.lookup(2) Internet Cliente Objeto.metodo() (3)


Profesor: Marcelo Montecinos C.

rmiregistry

Naming.rebind(1) servidor
233

Programacin I -Java Universidad Tecnolgica de Chile

Un ej: Un objeto remoto que contiene un nmero(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("//"+args[0]+"/elNumero"); System.out.println("El numero vale ahora "+N.getNumero(); } catch( Exception e) {} } }

Profesor: Marcelo Montecinos C.

234

Programacin I -Java Universidad Tecnolgica de Chile

Una vez implementados las 3 clases hay que compilarlas para generar Numero.class: la interfaz que define lo que se conocer del objeto en toda la red. NumeroImpl.class: que es el que implementa el objeto remoto. Adems de implementar el constructor y el mtodo de la interfaz contiene un main que lo nico que hace es crear el objeto y registrarlo o publicarlo con un nobre dado. Cliente.class Esto se hace con el compilador javac
Profesor: Marcelo Montecinos C.

Compilar los cdigos fuentes y generar las clases y los llamados stubs y skeletons

235

Programacin I -Java Universidad Tecnolgica de Chile

Compilar los cdigos fuentes y generar las clases y los llamados stubs y skeletons(2)

Una vez generadas las 3 clases hay que compilar la clase implementadora para generar el stub y skel. NumeroImpl_stub.class: Es el llamado stub del objeto remoto. Es el encargado de recibir y transmitir los datos necesarios para servir a los clientes que piden acceso al objeto remoto NumeroImpl. NumeroImpl_skel.class: es como un esqueleto de la clase. Tiene slo la estructura de la clase pero es suficiente informacin para que el cliente pueda reunir todo los antecedentes para llegar a hacer un pedido al stub Esto se hace con el compilador rmic NumeroImpl

Profesor: Marcelo Montecinos C.

236

Programacin I -Java Universidad Tecnolgica de Chile

Echar a andar la aplicacin


Echar a correr rmiregistry: java rmiregistry Echar a correr el programa servidor de objeto remoto: java NumeroImpl Echar a correr cliente(s): java Cliente. Una vez obtenida la referencia por el cliente el flujo de datos corre: cliente -> skel->stub->Server->stub>skel->cliente Veamos una aplicacin ms interesante: Un Banco: los clientes son un ejecutivo de cuentas y un cliente cualquiera. El servidor tiene la info sobre las cuentas.
Profesor: Marcelo Montecinos C.

237

Programacin I -Java Universidad Tecnolgica de Chile

Networking con Java (introduccin)

Java es un lenguaje que nace cuando la internet est en pleno desasarrollo. Los diseadores de java ya saben que se necesita un lenguaje que apoye la programacin distribuida en la internet con protocolos TCP/IP Es importante contar con un lenguaje que sea independiente de la plataforma para programar las comunicaciones entre dos procesos, ya que la internet tambin es independiente de la plataforma. Java implementa una serie de clases que apoyan esto independientemente de la plataforma (URL, sockets, RMI, IDL-CORBA, JDBL. Veamos un par de ellas:
Profesor: Marcelo Montecinos C.

238

Programacin I -Java Universidad Tecnolgica de Chile

Los URL

Un URL es un UNIFORM RESOURCE LOCATOR. Consiste en una direccin de un recurso que un servidor en la internet pone a disposicin de los usuarios, como por ej. http://www.arminco.com En un objeto URL existen dos componentes principales: El descriptor de protocolo (ej. http) y el nombre del recurso (ej. www.arminco.com). http significa Hyper Text Transfer protocol pero hay otros protocolos de transferencia de datos en la internet como: el File Transfer protocol (ftp), Gopher, File o News. En java es posible abrir una direccion de URL leer el contenido como si fuera un archivo cualquiera. Para ello debemos crear un objeto URL, con el nombre del protocolo y la direccin del recurso que queremos recuperar. Profesor: Marcelo Montecinos C.
239

Programacin I -Java Universidad Tecnolgica de Chile

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 } Mtodos que se pueden aplicar a un objeto de la clase URL: getProtocol(), getHost(), getPort(), getFile(), openConnection()
Profesor: Marcelo Montecinos C.

240

Programacin I -Java Universidad Tecnolgica de Chile

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

Programacin I -Java

Los Sockets

Universidad Tecnolgica de Chile

Sockets se pueden describir como dos puntos que arman un puente de transporte de datos entre dos programas. Dos programas pueden establecer gracias a los sockets una comunicacin segura (hay recuperacin de errores de transmisin). Un proggrama puede leer datos de un socket (lo que otro pragrama escribi) o puede escribir datos en un socket ( para que lo lea otro programa) En una comunicacin entre dos programas con sockets siempre hay un servidor y un cliente. El servidor es el que primero establece la posibilidad de comunicacin y se queda escuchando a ver si hay alguien que quiere comuncarse con el por medio de este socket.El cliente es un programa que, sabiendo que hay un programa servidor escuchando, se conecta al socket del servidor y escribe y/o lee de el.
Profesor: Marcelo Montecinos C.

242

Programacin I -Java

Servlets

Universidad Tecnolgica de Chile

Servidor

Cliente

Base de datos

Profesor: Marcelo Montecinos C.

243

ServletsUniversidad Tecnolgica de Chile

Programacin I -Java

Programas que se ejecutan en los servidores.

Aaden funcionalidad a un servidor web, del mismo modo que los applets aaden funcionalidad a los navegadores.

Similares a los scripts CGI, salvo que ofrecen una independencia de la plataforma. A diferencia de mecanismos propietarios (tales como la

API de Netscape Server o mdulos de Apache), son independientes del servidor y de la plataforma.

Profesor: Marcelo Montecinos C.

244

Programacin I -Java

Cundo se suelen utilizar


Universidad Tecnolgica de Chile

La pgina web se basa en datos que proporciona el usuario.

Ejemplo: e-commerce sites. Ejemplo: Partes meteorolgicos.

Los datos cambian frecuentemente.

La pgina web utiliza informacin de BDs u otras fuentes.

Ejemplo: Aplicaciones comerciales.


Profesor: Marcelo Montecinos C.

245

Programacin I -Java

Applets
cliente

Universidad Tecnolgica de Chile

servidor
El usuario pide un applet en java

NAVEGADOR WEB

Llega un applet en java

Arranca la mquina Virtual de java y Se ejecuta el applet

MQUINA VIRTUAL JAVA


Profesor: Marcelo Montecinos C.

246

Programacin I -Java

Servlets

Universidad Tecnolgica de Chile

Servidor

Cliente

Base de datos

Profesor: Marcelo Montecinos C.

247

Servlets. Requisitos Universidad Tecnolgica de Chile


Programacin I -Java

El servidor debe tener una mquina virtual Java. El servidor debe soportar la API de los servlets Java.

JavaServer Web Development Kit (JSWDK). http://java.sun.com/products/servlet/ Java Web Server Netscape Fast Track y Enterprise OReilly WebSite Professional Lotus Domino Go WebServer Novel IntraNetWare IBM Internet Connection Server Otros

Servidores capaces de ejecutar servlets:


Profesor: Marcelo Montecinos C.

248

Programacin I -Java

Ejecucin de un servlet
Universidad Tecnolgica de Chile

Formas de iniciar la ejecucin:

Introducir la direccin URL del servlet en un navegador web. Llamar al servlet desde una pgina web. Ejecutar un servlet llamndolo desde otro servlet.

Profesor: Marcelo Montecinos C.

249

Programacin I -Java

Desde un navegador web


Universidad Tecnolgica de Chile

http://nombre_maquina:puerto/ruta_se rvlet/nombre_servlet Las llamadas a servlets pueden contener parmetros:

http://www.datsi.fi.upm.es/~mperez/servle ts/serv1?num1=3&num2=4

Profesor: Marcelo Montecinos C.

250

Programacin I -Java

Desde una pgina web

Universidad Tecnolgica de Chile

Un servlet tambin puede ser llamado desde el cdigo de una pgina web, al igual que se llamara a cualquier CGI. Ejemplo:

<form action = http://www.datsi.fi.upm.es/~mperez/servl ets/serv2 method=post>

Profesor: Marcelo Montecinos C.

251

Programacin I -Java

Desde otro servlet

Universidad Tecnolgica de Chile

Se puede lanzar la ejecucin de un servlet desde otro. Pasos:

Conocer el nombre del servlet que queremos llamar. Proporcionar acceso al objeto Servlet del servlet llamado. Llamar al mtodo pblico del servlet.
Profesor: Marcelo Montecinos C.

252

Programacin I -Java

Desde otro servlet

Universidad Tecnolgica de Chile

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

Programacin I -Java

Arquitectura de los servlets


Universidad Tecnolgica de Chile

Biblioteca javax.servlet
Servlets

HttpServlet

MiServlet
Profesor: Marcelo Montecinos C.

254

Programacin I -Java

Interaccin con los clientes


Universidad Tecnolgica de Chile

Objeto ServletRequest:

Comunicacin que fluye del cliente al servidor. Encapsula la informacin enviada desde el servidor al cliente.

Objeto ServletResponse:

Profesor: Marcelo Montecinos C.

255

Programacin I -Java

Estructura de un Servlet
Universidad Tecnolgica de Chile
import java.io.*; // Utiliza response para import javax.servlet.*; // especificar la respuesta import javax.servlet.http.*; // (tipo de contenido, establecer public class SomeServlet extends // cookies, ...) HttpServlet { // El servidor enva una pgina PrintWriter out = // web al cliente response.getWriter(); public void doGet (HttpServletRequest request, // Utilizar out para enviar el HttpServletResponse response) // contenido al navegador throws ServletException, IOException } { // Utilizar request para leer // Anlogamente, sobreescribir // doPost(). // datos procedentes del // cliente (ej: cookies, } // otros datos)
Profesor: Marcelo Montecinos C.

256

EjemploUniversidad Servlets: Hola Mundo Tecnolgica de Chile


import java.io.*; // import javax.servlet.*; import javax.servlet.http.*; public class HolaMundoSrvlt extends HttpServlet { // El servidor enva una pgina web al cliente public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } PrintWriter out; String titulo=Hola Mundo; } Utiliza response para // especificar la respuesta response.setContentType (text/html); out = response.getWriter(); out.println(<HTML><HEAD><TITLE>); out.println(titulo); out.println(</TITLE></HEAD><BODY>); out.println(<H1>+titulo+</H1>); out.println(</BODY></HTML>); out.close();

Programacin I -Java

Profesor: Marcelo Montecinos C.

257

Tecnolgica de Chile Ejemplo Universidad Servlets: Hola Mundo

Programacin I -Java

Profesor: Marcelo Montecinos C.

258

Programacin I -Java

Obtencin y envo de informacin


Universidad Tecnolgica de Chile

Obtencin de datos del cliente:

Envo de datos al cliente:


getParameter()

getParameterValues() getParameterNames()

getWriter getOutputStream

getReader getInputStream()

Profesor: Marcelo Montecinos C.

259

Universidad Tecnolgica de Chile Ejemplo: Lectura de parmetros

Programacin I -Java

import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class ThreeParam extends HttpServlet { public void doGet( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out; String title="Leyendo 3 parmetros";

out.println("</TITLE></HEAD><BODY>"); out.println("<H1 ALIGN=CENTER>"+ title +"</H1>"); out.println("<UL>"); out.println("<LI>param1: "+ request.getParameter("param1")); out.println("<LI>param2: "+ request.getParameter("param2")); out.println("<LI>param3: "+ request.getParameter("param3")); out.println("</UL>"); out.println("</BODY></HTML>"); out.close();

} public void doPost(HttpServletRequest response.setContentType request,HttpServletResponse ("text/html"); response) out = response.getWriter(); throws ServletException,IOException { out.println("<HTML><HEAD><TITLE>"); doGet(request,response); out.println(title); } }

Profesor: Marcelo Montecinos C.

260

Universidad Tecnolgica Chile Ejemplo: Lectura dedeparmetros

Programacin I -Java

Profesor: Marcelo Montecinos C.

261

Universidad Tecnolgica de Chile Ejemplo: Lectura de parmetros II

Programacin I -Java

import import import import

java.io.*; javax.servlet.*; javax.servlet.http.*; java.util.*;

public class ShowParameters extends HttpServlet { public void doGet( HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException { PrintWriter out; String title="Leyendo todos los parmetros"; response.setContentType ("text/html"); out = response.getWriter(); out.println("<HTML><HEAD><TITLE>"); out.println(title); out.println("</TITLE></HEAD><BODY>");

Profesor: Marcelo Montecinos C.

262

Universidad Tecnolgica de Chile Ejemplo: Lectura de parmetros II


out.println("<H1 ALIGN=CENTER>"+ title else +"</H1>"); out.print(valorParam); out.println("<TABLE BORDER=1 } else { ALIGN=CENTER>"); out.println("<UL>"); out.println("<TR><TH>Nombre de for (int i=0; parmetro<TH>Valores de parmetro"); i<valoresDeParam.length; i++) { Enumeration nombresDeParam = out.println("<LI>" + request.getParameterNames(); valoresDeParam[i]); while (nombresDeParam.hasMoreElements()){ } String nombreParam = (String) out.println("</UL>"); nombresDeParam.nextElement(); } out.println("<TR><TD>" + nombreParam); } out.println("<TD>"); out.println("</TABLE>"); String[] valoresDeParam= out.println("</BODY></HTML>"); request.getParameterValues(nombreParam); out.close(); if (valoresDeParam.length == 1) { } String valorParam = public void doPost(HttpServletRequest valoresDeParam[0]; request,HttpServletResponse if (valorParam.length()== 0) response) out.print("<I>No existe valor</I>"); throws ServletException,IOException { doGet(request,response); } }

Programacin I -Java

Profesor: Marcelo Montecinos C.

263

Programacin I -Java

Ejemplo: Lectura de parmetros II


Universidad Tecnolgica de Chile

Profesor: Marcelo Montecinos C.

264

Ejemplo: Uso de formulario Universidad Tecnolgica de Chile


Programacin I -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="../servlet/ShowParameters" METHOD="POST"> Nmero Artculo: <INPUT TYPE="TEXT" NAME="numItem"> <BR> Cantidad: <INPUT TYPE="TEXT" NAME="cantidad"> <BR> Precio Unidad: <INPUT TYPE="TEXT" NAME="precio" VALUE="$"> <BR> <HR> Nombre: <INPUT TYPE="TEXT" NAME="nombre"> <BR> Apellidos: <INPUT TYPE="TEXT" NAME="apellidos"> <BR>

Profesor: Marcelo Montecinos C.

265

Ejemplo: Uso de formulario Universidad Tecnolgica de Chile


Programacin I -Java
Direccin: <TEXTAREA NAME="direccion" ROWS=3 COLS=40> </TEXTAREA><BR> Tarjeta de crdito: <BR> <INPUT TYPE="RADIO" NAME="tipoTarjeta" VALUE="Visa">Visa<BR> <INPUT TYPE="RADIO" NAME="tipoTarjeta" VALUE="Master Card">Master Card<BR> <INPUT TYPE="RADIO" NAME="tipoTarjeta" VALUE="Amex">American Express<BR> <INPUT TYPE="RADIO" NAME="tipoTarjeta" VALUE="Discover">Discover<BR> Nmero de tarjeta de crdito: <INPUT TYPE="PASSWORD" NAME="numTarjeta"> <BR> Repeticin del nmero de tarjeta de crdito: <INPUT TYPE="PASSWORD" NAME="numTarjeta"> <BR><BR> <CENTER> <INPUT TYPE="SUBMIT" VALUE="Enviar solicitud"> </CENTER> </FORM> </BODY> </HTML>

Profesor: Marcelo Montecinos C.

266

Ejemplo: Uso de formulario Universidad Tecnolgica de Chile


Programacin I -Java

Profesor: Marcelo Montecinos C.

267

Ejemplo: Uso de formulario Universidad Tecnolgica de Chile

Programacin I -Java

Profesor: Marcelo Montecinos C.

268

Programacin I -Java

Ciclo de vida de un servlet


Universidad Tecnolgica de Chile

Servidor

Servlet

Carga init()

Cliente Servlet Servidor


Manejo de peticiones service()
doGet() doPost()

Cliente
Descarga destroy()

Servidor

Servlet
Profesor: Marcelo Montecinos C.

269

Programacin I -Java

Almacenamiento del estado de un cliente


Universidad Tecnolgica de Chile

Estado del cliente:

Situacin en la que se encuentra un cliente en sucesivas peticiones al servidor. Almacenamiento de sesiones en el servidor Cookies

Mecanismos:

Profesor: Marcelo Montecinos C.

270

ServletsUniversidad vs CGI Tecnolgica de Chile


Programacin I -Java

Eficiencia

CGI inicia un nuevo proceso para cada peticin HTTP. (Solucin: FastCGI) El servlet se ejecuta solamente la primera vez que es llamado. Permanece en memoria una vez cargado y puede compartir informacin entre varias llamadas de clientes. Uso de threads para las distintas peticiones.

Portabilidad Modularidad El uso de parmetros es ms sencillo en el caso de los servlets

Profesor: Marcelo Montecinos C.

271

Vous aimerez peut-être aussi