Está en la página 1de 271

Taller Programacin III

J ava
1
Profesor: Marcelo Montecinos C.
Introducci
Introducci

n al
n al
Lenguaje de Programaci
Lenguaje de Programaci

n
n
Java
Java
Taller Programacin III
J ava
2
Profesor: Marcelo Montecinos C.

Por
Por
qu
qu

J AVA (
J AVA (
por
por
qu
qu

tan
tan
famoso
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
Taller Programacin III
J ava
3
Profesor: Marcelo Montecinos C.
Java
Java
-
-
Caracter
Caracter

sticas
sticas
Plataforma independiente (portable)
Dinmico (constantemente evolucionando)
Fortalece la seguridad y la portabilidad
Taller Programacin III
J ava
4
Profesor: Marcelo Montecinos C.
J AVA
J AVA
es
es
un
un
lenguaje
lenguaje
interpretado
interpretado
P1.java
P1.class
Salida
del
Prog.
Compilador de java (especfico x plataforma) javac P1.java
Intrpretede java (especficox plataforma) java P1 (class)
Taller Programacin III
J ava
5
Profesor: Marcelo Montecinos C.
J ava -Mquina Virtual (J VM)
Hardware
Sistema Operativo
Ambiente Runtime
Interpretador
Java
J VM
Java
Java
-
-
Caracter
Caracter

sticas
sticas
Taller Programacin III
J ava
6
Profesor: Marcelo Montecinos C.
(Editor de texto)
(Programa traducido
a bytes-code)
Cmo trabaja la tecnologa J ava?
qu sucede en este paso?
Java
Java
-
-
Caracter
Caracter

sticas
sticas
Taller Programacin III
J ava
7
Profesor: Marcelo Montecinos C.
Java
Java
-
-
Caracter
Caracter

sticas
sticas
Cmo trabaja la tecnologa J ava?
Taller Programacin III
J ava
8
Profesor: Marcelo Montecinos C.
Estructura de un Programa en Java
Estructura de un Programa en Java
// Este es el esqueleto de un programa en J ava
class <nombre del Programa>
{
/* Definiciones globales*/
/* Metodo Principal*/
/ * Otros Mtodos*/
}
Se utiliza para
abrir un bloque de
instrucciones.
Se utiliza para
cerrar un bloque
de instrucciones
Taller Programacin III
J ava
9
Profesor: Marcelo Montecinos C.
Los comentarios en Java pueden hacerse de dos maneras:
Estructura de un Programa en Java
Estructura de un Programa en Java
/ / Este es el esqueleto de un programa en J ava
class <nombre del Programa>
{
/ * Definiciones globales*/
/ * Este es el
Mtodo Principal*/
/ * Otros Mtodos*/
}
Si slo quiero comentario de una lnea coloco // al inicio de es esta
Si quiero comentario de mas de una lnea
coloco /* al inicio del comentario y */ al final
Taller Programacin III
J ava
10
Profesor: Marcelo Montecinos C.
Estructura de un Programa en Java
Estructura de un Programa en Java
/ / Este es el esqueleto de un programa en J ava
class <nombre del Programa>
{
/ * Definiciones globales*/
/ * Mtodo Principal*/
/ * Otros Mtodos*/
}
Aqu se definen las variables que yo
deseo que se puedan utilizar en todo
mi programa.
Cada aplicacin de J ava debe tener
un mtodo principal llamado
main, que define donde comienza el
flujo del programa.
Deben seguir las
convenciones utilizadas en
algoritmo.
Taller Programacin III
J ava
11
Profesor: Marcelo Montecinos C.
/ / Este es el esqueleto de un programa en J ava
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 m
Sintaxis del m

todo
todo
Main
Main
Taller Programacin III
J ava
12
Profesor: Marcelo Montecinos C.
/ / Este es el esqueleto de un programa en J ava
class <nombre del Programa>
{
/ * Definiciones globales*/
public static voidmain (Stringargs[])
{
/ * Definiciones locales*/
...
...
/ * cuerpo de instrucciones */
...
...
}
}
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.
La palabra static permite que main sea
llamado por el intrprete de J ava antes de
que se cree cualquier objeto .
La palabra void indica al compilador que
main no devuelve ningn valor.
Stringargs[], declara una variable args
que es una especie de vector que puede
contener cadenas de caracteres.
Sintaxis del m
Sintaxis del m

todo
todo
Main
Main
Taller Programacin III
J ava
13
Profesor: Marcelo Montecinos C.
/ / Este es el esqueleto de un programa en J ava
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.
Sintaxis del m
Sintaxis del m

todo
todo
Main
Main
Despus de cada instruccin se coloca ;
Taller Programacin III
J ava
14
Profesor: Marcelo Montecinos C.
Ejemplo
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);
}
}
Taller Programacin III
J ava
15
Profesor: Marcelo Montecinos C.
Salida de datos
Salida de datos
Para mostrar un texto por pantalla puedo
hacerlo de dos maneras:
System.out.println (texto);
System.out.print (texto);
Taller Programacin III
J ava
16
Profesor: Marcelo Montecinos C.
Salida por pantalla
Salida por pantalla
import j ava. i o. *;
Syst em. out . pr i nt l n( el ement os) ;
Syst em. out . pr i nt l n( ) ;
Syst em. out . pr i nt ( el ement os) ;
Syst em. out . pr i nt l n( " hol a" ) ; / / escr i be " hol a"
Syst em. out . pr i nt l n( 5) ; / / escr i be 5
i nt i = 5; Syst em. out . pr i nt l n( i ) ; / / escr i be 5;
doubl e d=6. 4; Syst em. out . pr i nt l n( d) ; / / escr i be 6. 4;
doubl e d=6. 4; Syst em. out . pr i nt l n( " d=" +d) ; / / escr i be d=6. 4;
Taller Programacin III
J ava
17
Profesor: Marcelo Montecinos C.
Un primer
Un primer
programa
programa
en J AVA
en J AVA
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.
Taller Programacin III
J ava
18
Profesor: Marcelo Montecinos C.
Declaraci
Declaraci

n de Variables
n de Variables
t i po nombr e;
t i po nombr e1, nombr e2, nombr e3;
t i po nombr e = val or ;

Declaraci
Declaraci

n de Constantes:
n de Constantes:
static final t i po nombr e = val or ;
Taller Programacin III
J ava
19
Profesor: Marcelo Montecinos C.
Definici
Definici

n de variables
n de variables
Los datos son almacenados en variables, que se encuentran en la
memoria, formados por dos componentes el nombre que las
identifica y la celda con el valor almacenado.
25600.00
9702634
Pedro Perez
6
Memoria
F
monto
carnet
sexo
nombre
contador
Taller Programacin III
J ava
20
Profesor: Marcelo Montecinos C.
Tipos de datos
Tipos de datos
4
5
237
Integer (enteros)
13.45
Floating Point
(punto flotante)
Numrico
Taller Programacin III
J ava
21
Profesor: Marcelo Montecinos C.
Tipos de datos
Tipos de datos
Integer (enteros)
Byte : 8 bits -2
7
..... 2
7
1
Short : 16 bits
Int : 32 bits
Long : 64 bits
Taller Programacin III
J ava
22
Profesor: Marcelo Montecinos C.
Tipos de datos
Tipos de datos
Float : 32 bits
Double : 64 bits
Floating Point
(punto flotante)
Taller Programacin III
J ava
23
Profesor: Marcelo Montecinos C.
Tipos de datos
Tipos de datos
Caracteres char : a, z, D, %, s,#.
Cadenas de
caracteres
String: Pedro Garcia
J uan Lopez
Rojo
boolean: true
false
Lgicos
Taller Programacin III
J ava
24
Profesor: Marcelo Montecinos C.
Tipos
Tipos
primitivos
primitivos
de
de
datos
datos
en J AVA
en J AVA
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
Taller Programacin III
J ava
25
Profesor: Marcelo Montecinos C.
/* 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;
}
}
Declaraci
Declaraci

n de variables
n de variables
Taller Programacin III
J ava
26
Profesor: Marcelo Montecinos C.
Asignaci
Asignaci

n de valores a variables
n 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;
Taller Programacin III
J ava
27
Profesor: Marcelo Montecinos C.
Asignaci
Asignaci

n de valores a variables
n 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.
Taller Programacin III
J ava
28
Profesor: Marcelo Montecinos C.
Asignaci
Asignaci

n de valores a variables
n de valores a variables
/* Este programa declara Algunas variables */
class declaraVar {
public static void main (String args[])
{
int x, y, z;
x = 2;
y = 4;
z = x * y;
System.out.println(El valor de z es + z);
}
}
Taller Programacin III
J ava
29
Profesor: Marcelo Montecinos C.
Asignaci
Asignaci

n de valores a variables
n 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;
Taller Programacin III
J ava
30
Profesor: Marcelo Montecinos C.
Operadores
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: &&, ||
Taller Programacin III
J ava
31
Profesor: Marcelo Montecinos C.
Asignaci
Asignaci

n
n
Utilizacin de operadores:
var 1 = var 2 + var 3; / / asi gnar a var 1 el val or de var 2 + var 3
var 1 = var 2 - ver 3; / / asi gnar a var 1 el val or de var 2 - var 3
var 1 = var 2 * ver 3; / / asi gnar a var 1 el val or de var 2 * var 3
var 1 = var 2 / ver 3; / / asi gnar a var 1 el val or de var 2 / var 3
var 1 = var 2 %ver 3; / / asi gnar a var 1 el val or de var 2 %var 3
Asignaciones de incremento
decremento:
var i abl e++; / / aadi r uno a var i abl e
var i abl e- - ; / / r est ar uno a var i bal e
var i abl e += exp; / / aadi r exp a var i abl e
var i abl e - = exp; / / r est ar exp a var i abl e
Taller Programacin III
J ava
32
Profesor: Marcelo Montecinos C.
Asignaci
Asignaci

n de valores a variables
n de valores a variables
/* Este programa declara Algunas variables */
class declaraVar {
public static void main (String args[])
{
int x, y, z;
x = 2;
y = 4;
z = (x + y)/ 2;
System.out.println(El valor de z es + z);
}
}
Taller Programacin III
J ava
33
Profesor: Marcelo Montecinos C.
Expresiones
Expresiones
Grupos de Precedencia
Grupo 0: ( )
Grupo 1: ++, - - , +(unario), - (unario)
Grupo 2: *, / , %
Grupo 3: +, - , +(concatenacin)
Funciones especiales:
Seno x => Mat h. si n( x)
x
2
=> Mat h. pow( x, 2)
Mat h. r ound( 6. 6) =>7
Taller Programacin III
J ava
34
Profesor: Marcelo Montecinos C.
Expresiones
Expresiones
y
y
asignaci
asignaci

n
n
Aritmeticas: suma + 20 * c / (mod % 3)
Relacionales: a > b, b >= c, c != 4, a == 0
De String: hola + nombre + hoy es +
dia + de+mes
Casts: (int) pi (pi = 3.1) (int) (Math.random()*100)+1)
Otros: a == 1 ? a+1 : a-1
Asignacion: a = 1;
Asignacin como operador: a = b = c = d = 0;
boolean cero = ( b = c - 10) == 0;
Taller Programacin III
J ava
35
Profesor: Marcelo Montecinos C.
Conversiones entre tipos
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
Taller Programacin III
J ava
36
Profesor: Marcelo Montecinos C.
Conversiones
Conversiones
de
de
tipo
tipo
J ava no reclama si un tipo de menor rango se convierte as uno
de mayor rango.
byte < short < int < long < float < double
Tipo Bits Rango
int 32 -2**31 .. 2**31-1
short 16 -2**15 .. 2**15-1
byte 8 -2**7 .. 2**7-1
long 64 -2**63 .. 2**63-1
float 32

-10**32 ..

10**32
double 64

-10**300 ..

10**300
Taller Programacin III
J ava
37
Profesor: Marcelo Montecinos C.
Ejemplos
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;
Taller Programacin III
J ava
38
Profesor: Marcelo Montecinos C.
Excepciones definidas por el usuario
Excepciones definidas por el usuario
public class nombr e extends Except i on {
public nombr e( ) {}
public nombr e( St r i ng s) { }
}
throw new nombr e( mensaj e) ;
Taller Programacin III
J ava
39
Profesor: Marcelo Montecinos C.
Ejemplo
Ejemplo
publ i c voi d l eeAr chi vo( St r i ng nombr e) t hr ows I OExcept i on {
Buf f er edReader f i n = new Buf f er edReader ( new Fi l eReader ( nombr e) ) ;
t r y {
whi l e( t r ue) {
cadena = f i n. r eadLi ne( ) ;
Syst em. out . pr i nt l n( cadena) ;
}
} cat ch ( EOFExcept i on e) {
Syst em. out . pr i nt l n( " Fi n del ar chi vo") ;
}
}
Taller Programacin III
J ava
40
Profesor: Marcelo Montecinos C.
Entrada desde teclado
Entrada desde teclado
import j ava. i o. *;
Buf f er edReader ent r ada = new
Buf f er edReader ( new I nput St r eamReader ( Syst em. i n) ) ;
St r i ng cadena = ent r ada. r eadLi ne( ) ;
Taller Programacin III
J ava
41
Profesor: Marcelo Montecinos C.
Lectura de n
Lectura de n

meros
meros
int i =I nt eger . val ueOf ( i n. r eadLi ne( ) ) . i nt Val ue( ) ;
double d=Doubl e. val ueOf ( i n. r eadLi ne( ) ) . doubl eVal ue( ) ;
int i =I nt eger . val ueOf ( i n. r eadLi ne( ) . t r i m( ) ) . i nt Val ue( ) ;
double d=Doubl e. val ueOf ( i n. r eadLi ne( ) . t r i m( ) ) . doubl eVal ue( ) ;
Taller Programacin III
J ava
42
Profesor: Marcelo Montecinos C.
Lectura de datos
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 LectTecladoApp
/* 3) */ {
/* 4) */ public static void main(String Arg[ ]) throws IOException
/* 5) */ {
/* 6) */ BufferedReader entrada=newBufferedReader(newInputStreamReader(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) */ }
Taller Programacin III
J ava
43
Profesor: Marcelo Montecinos C.
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.
Taller Programacin III
J ava
44
Profesor: Marcelo Montecinos C.
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.
Taller Programacin III
J ava
45
Profesor: Marcelo Montecinos C.
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.
Taller Programacin III
J ava
46
Profesor: Marcelo Montecinos C.
Estructuras de un Programa
Estructuras de un Programa
Taller Programacin III
J ava
47
Profesor: Marcelo Montecinos C.
Debemos recordar:
Debemos recordar:
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.
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;
}
}
Todo el cdigo de un mtodo
o bloque de instrucciones
estar entre la llave de apertura
( { ) y la correspondiente llave
de cierre ( } ).
Todas las instrucciones terminan
con punto y coma ;
Taller Programacin III
J ava
48
Profesor: Marcelo Montecinos C.
Palabras Reservadas
Palabras Reservadas
Son palabras que tienen un
significado especial dentro
del lenguaje , en nuestro
caso JAVA.
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;
}
}
Taller Programacin III
J ava
49
Profesor: Marcelo Montecinos C.
Identificadores
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
Taller Programacin III
J ava
50
Profesor: Marcelo Montecinos C.
Algunas convenciones en cuanto a identificadores
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)
Taller Programacin III
J ava
51
Profesor: Marcelo Montecinos C.
Inicializaci
Inicializaci

n de Variables
n de Variables.
En Java, cuando una variable es creada, Java le da
un valor inicial segn la siguiente tabla.
byte,short, int 0
long 0L
float 0.0f
double 0.0d
char \u0000
(null)
boolean false
variables referencia null
Taller Programacin III
J ava
52
Profesor: Marcelo Montecinos C.
Java
Java
Arreglos
Arreglos
Taller Programacin III
J ava
53
Profesor: Marcelo Montecinos C.
Arreglos
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.
Taller Programacin III
J ava
54
Profesor: Marcelo Montecinos C.
Arreglos
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
tamao, como el contenido de un
Taller Programacin III
J ava
55
Profesor: Marcelo Montecinos C.
Arreglos
Arreglos
Se utilizan para agruparinformacin
relacionada
Pueden tener ser de una o msdimensiones. Los
de una dimensin losdenominaremos vectores
y de losde dos dimensionesmatrices o tablas
Para accesar un elemento particular del
arreglo, se utilizan los ndices
Taller Programacin III
J ava
56
Profesor: Marcelo Montecinos C.
Vectores
Vectores
Ejemplo de un vector que contiene 7 nmerosenteros
3 6 8 1 0 4 2
0 1 2 3 4 5 6
ndices
Elementosdel
vector
Elemento que ocupa la
posicin 3 en el vector
Taller Programacin III
J ava
57
Profesor: Marcelo Montecinos C.
Vectores
Vectores
Declaraci
Declaraci

n
n
en Java
en Java
tipoDato[ ] nombreVariable;
tipoDato nombreVariable[ ];
Para declarar un vector de nmero enteros, al cual se le
d el nombre de miVector miVector se puede hacer de la siguiente
manera:
int[ ] miVector;
// o tambin
intmiVector[ ];
Taller Programacin III
J ava
58
Profesor: Marcelo Montecinos C.
Creaci
Creaci

n
n
int[] miVector;
// o tambin
int miVector[];
Cuando se declara una variable vector, esta no tiene
ningn valor. Antes de asignar cualquier valor, se debe
reservarun espacio en memoria, utilizando el operador
new y asignarlo a la variable.
Declaraci
Declaraci

n
n
Vectores
Vectores
nombreVector = newtipoDato[tamao];
miVector = new int[7];
Continuando con el ejemplo anterior
Taller Programacin III
J ava
59
Profesor: Marcelo Montecinos C.
Vectores
Vectores
Creacin:
Creacin:
miVector = new int[7];
Al reservar espacio para loselementosde 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
elementosenteros.
New: operadorespecial que reserva espacio en memoria
Taller Programacin III
J ava
60
Profesor: Marcelo Montecinos C.
Vectores
Vectores
Inicializacin:
Dependiendo del tipo de datosque contenga un vector,
estosson inicializadospordefecto con lossiguientesvalores:
Si son vectoresnumricos, se inicializan en cero.
Si son vectoresde caracteres, se inicializan en /u000.
Si son vectoresbooleanos, se inicializan en false.
Taller Programacin III
J ava
61
Profesor: Marcelo Montecinos C.
Vectores
Vectores
Creacin:
miVector = new int[7];
Inicializacin
Un vector completo se puede inicializar de la siguiente
manera
miVector = {3, 6, 8, 1, 0, 4, 2};
Taller Programacin III
J ava
62
Profesor: Marcelo Montecinos C.
Vectores
Vectores
Creacin:
miVector = new int[7];
Utilizacin
nombreVector [ndice]
Para accesar un elemento de un vector, se coloca el
nombre del vectory entre corchetesel ndice del elemento
que se desea.
3 6 8 1 0 4 2
0 1 2 3 4 5 6
Por ejemplo, si se desea obtener el nmero 8del siguiente vector:
miVector[2]
Taller Programacin III
J ava
63
Profesor: Marcelo Montecinos C.
Vectores
Vectores
Creacin:
miVector = new int[7];
Utilizacin
Losndicesen 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
Taller Programacin III
J ava
64
Profesor: Marcelo Montecinos C.
Ejemplo: crear un vector de 5 posiciones, rellenarlo y
luego mostrar su contenido.
Vectores
Vectores
classEjemploVec
{
static intmiVector[ ];
public static void main (String arg[])
{
miVector= newint[5];
llenarVector();
mostrarVector();
System.out.print("El tamano de mi vector es ");
System.out.println(miVector.length);
}
Taller Programacin III
J ava
65
Profesor: Marcelo Montecinos C.
Vectores
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
Taller Programacin III
J ava
66
Profesor: Marcelo Montecinos C.
Matrices
Matrices
0 1 2 3 4 5
0
1
2
3
4
5
(matriz 2 3)
(matriz 4 0)
Taller Programacin III
J ava
67
Profesor: Marcelo Montecinos C.
Matrices
Matrices
Son arreglosde dos dimensiones
La informacin esdispuesta en filasy columnas
Para accesar un elemento se deben especificar
dos subndices: fila y columna.
Pueden ser creadasde cualquiertipo
Pueden ser vistoscomo vectoresde vectores
Taller Programacin III
J ava
68
Profesor: Marcelo Montecinos C.
Matrices
Matrices
Declaracin:
tipoDato nombreVariable[ ][ ];
Para declarar una matriz de nmerosenteros, llamada
miMatriz, se debe hacer de la siguiente manera:
intmiMatriz[ ][ ];
Taller Programacin III
J ava
69
Profesor: Marcelo Montecinos C.
Matrices
Matrices
Creacin:
nombreMatriz = newtipoDato[filas][columnas];
Para crear una matriz de 2 filasy 3 columnasde
nmerosenteros, llamada miMatriz, se escribe
miMatriz= new int[2][3];
Taller Programacin III
J ava
70
Profesor: Marcelo Montecinos C.
Matrices
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]
Taller Programacin III
J ava
71
Profesor: Marcelo Montecinos C.
Matrices
Matrices
Creacin:
miMatriz= new int[2][3];
Primero crea un vector de 2 elementos
Elemento 0
Elemento 1
Taller Programacin III
J ava
72
Profesor: Marcelo Montecinos C.
Matrices
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]
miMatriz[1][0] miMatriz[1][1] miMatriz[1][2]
Fila 0
Fila 1
Columna 2
Columna 0
Taller Programacin III
J ava
73
Profesor: Marcelo Montecinos C.
Matrices
Matrices
Ejemplo: Crear una matriz de 2 filasy 3 columnas, llenarla y
luego mostrar su contenido.
classEjemploMat
{
public static void main (String arg[])
{
intmiMatriz[][];
miMatriz= newint[2][3];
llenarMatriz(miMatriz);
mostrarMatriz(miMatriz);
}
Taller Programacin III
J ava
74
Profesor: Marcelo Montecinos C.
static void llenarMatriz(intm[][])
{
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(intm[][])
{
for (int i=0; i < 2; i++)
{
for (int j=0; j< 3; j++)
{
System.out.print(m[i][j] + " ");
}
System.out.println();
}
}
}
Taller Programacin III
J ava
75
Profesor: Marcelo Montecinos C.
Ejercicios
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.
Taller Programacin III
J ava
76
Profesor: Marcelo Montecinos C.
Ejercicios
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.
Taller Programacin III
J ava
77
Profesor: Marcelo Montecinos C.
Operadores
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.
Taller Programacin III
J ava
78
Profesor: Marcelo Montecinos C.
Operadores Aritm
Operadores Aritm

ticos Binarios
ticos 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)
Taller Programacin III
J ava
79
Profesor: Marcelo Montecinos C.
Operadores Aritm
Operadores Aritm

ticos Binarios
ticos 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);
}
}
1
2
10
Taller Programacin III
J ava
80
Profesor: Marcelo Montecinos C.
Operadores Aritm
Operadores Aritm

ticos Unitarios.
ticos Unitarios.
Operador Significado
++ Incremento
-- Decremento
Estos operadores se pueden aplicar en dos formas,
prefija y postfija, que adquieren importancia
cuando los mismos se usan dentro de una expresin
mayor.
Taller Programacin III
J ava
81
Profesor: Marcelo Montecinos C.
Operadores Aritm
Operadores Aritm

ticos Unitarios
ticos 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
Taller Programacin III
J ava
82
Profesor: Marcelo Montecinos C.
Operadores Aritm
Operadores Aritm

ticos Unitarios
ticos 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
Taller Programacin III
J ava
83
Profesor: Marcelo Montecinos C.
Operadores de Asignaci
Operadores de Asignaci

n.
n.
Operador Significado
= asignacin
+= asignacin y suma
-= asignacin y resta
*= asignacin y mult.
/= asignacin y div.
%= asignacin y mod.
Taller Programacin III
J ava
84
Profesor: Marcelo Montecinos C.
Operadores de Asignaci
Operadores de Asignaci

n
n
.
.
Veamos un ejemplo:
class CPrueba
{
public static void main(String arg[])
{
int i , j;
i=5;
i += 2;
System.out.println("el valor de i es "+i);
i = 5;
i %= 2;
System.out.println("el valor de i es "+i);
}
}
// equivale a i = i + 2;
// equivale a i = i % 2;
7
1
Taller Programacin III
J ava
85
Profesor: Marcelo Montecinos C.
Operadores Relacionales.
Operadores Relacionales.
Operador Nombre Ejemplo Respuesta
== igual 1 == 2 false
!= distinto 1 != 2 true
> mayor que 1 > 2 false
< menor que 1 < 2 true
>= mayor o igual 1 >= 2 false
<= menor o igual 1 <= 2 true
Taller Programacin III
J ava
86
Profesor: Marcelo Montecinos C.
Operadores L
Operadores L

gicos
gicos.
Operador Significado
&& and
|| or
Tablas de valores lgicos:
AND
T F
T T F
F F F
OR
T F
T T T
F T F
Taller Programacin III
J ava
87
Profesor: Marcelo Montecinos C.
Operadores
Operadores
Orden de precedencia en los operadores:
1. ++ --
2. * / %
3. + -
4. < > <= >=
5. == !=
6. &
7. |
8. = *= /= %= +=
-=
Taller Programacin III
J ava
88
Profesor: Marcelo Montecinos C.
Expresiones L
Expresiones L

gicas
gicas
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)
Taller Programacin III
J ava
89
Profesor: Marcelo Montecinos C.
Los
Los
argumentos
argumentos
de un
de un
programa
programa
Si se invoca al programa P1 de ka siguiente
manera: j ava P1 est os son par amet r os
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
St r i ng ar gs[ ]
public class Parametros {
public static void main(String args[]) {
for(int i=0; i < args.length; i++)
System.out.pritnln(args[i]);
}
}
Taller Programacin III
J ava
90
Profesor: Marcelo Montecinos C.
Exceptions
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 J AVA 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).
Taller Programacin III
J ava
91
Profesor: Marcelo Montecinos C.
C
C

mo
mo
programar
programar
Exception Handlers ?
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.
Taller Programacin III
J ava
92
Profesor: Marcelo Montecinos C.
Ejemplo
Ejemplo
de Exception I/ O
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(newFileReader(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);}
}
}
Taller Programacin III
J ava
93
Profesor: Marcelo Montecinos C.
Ejemplo
Ejemplo
de Exception I/ O (2)
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);
}
}
}
Taller Programacin III
J ava
94
Profesor: Marcelo Montecinos C.
Ejemplo
Ejemplo
de Exception I/ O (3)
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(newFileReader(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.
Taller Programacin III
J ava
95
Profesor: Marcelo Montecinos C.
Estructuras de Decisi
Estructuras de Decisi

n
n
Taller Programacin III
J ava
96
Profesor: Marcelo Montecinos C.
Estructuras
Estructuras de Decisin
if (expresin lgica)
{
<bloque de instrucciones >
}
else
{
<bloque de instrucciones>
}
Taller Programacin III
J ava
97
Profesor: Marcelo Montecinos C.
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);
}
}
}
Estructuras de Decisi
Estructuras de Decisi

n
n
Taller Programacin III
J ava
98
Profesor: Marcelo Montecinos C.
Estructuras de Decisi
Estructuras de Decisi

n
n
Decisin Anidada
if (expresin lgica)
{
if (expresin lgica)
{
<bloque de instrucciones >
}
else
{
<bloque de instrucciones >
}
}
else
{
<bloque de instrucciones >
}
Taller Programacin III
J ava
99
Profesor: Marcelo Montecinos C.
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;
}
}
}
Taller Programacin III
J ava
100
Profesor: Marcelo Montecinos C.
Estructuras de Decisi
Estructuras de Decisi

n
n
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);
}
}
Taller Programacin III
J ava
101
Profesor: Marcelo Montecinos C.
Estructuras de Decisi
Estructuras de Decisi

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

n
n
if
if

else
else
-
-
if
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.
Taller Programacin III
J ava
103
Profesor: Marcelo Montecinos C.
Estructuras de Decisi
Estructuras de Decisi

n
n
if
if

else
else
-
-
if
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
Taller Programacin III
J ava
104
Profesor: Marcelo Montecinos C.
Estructuras de Decisi
Estructuras de Decisi

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

n
n
swicht
swicht
switch (expr1)
{
case valor1:
instrucciones;
break;
case valor2:
instrucciones;
break;
default:
instrucciones;
break;
}
Taller Programacin III
J ava
106
Profesor: Marcelo Montecinos C.
switch
switch
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.
switch (expr1)
{
case valor1:
instrucciones;
break;
case valor2:
instrucciones;
break;
default:
instrucciones;
break;
}
Estructuras de Decisi
Estructuras de Decisi

n
n
Taller Programacin III
J ava
107
Profesor: Marcelo Montecinos C.
Estructuras de Decisi
Estructuras de Decisi

n
n
Veamos un ejemplo con switch en Java
switch (numEst)
{
case 20:
numEst += 3;
break;
case 50:
numEst++;
break;
default:
numEst--;
break;
}
Taller Programacin III
J ava
108
Profesor: Marcelo Montecinos C.
Estructuras de Decisi
Estructuras de Decisi

n
n
Veamos
Veamos
un
un
ejemplo
ejemplo
con
con
switch
switch
Haremos un programa que reciba un
mes (nmero) y nos indique la
estacin que hay en ese mes.
Taller Programacin III
J ava
109
Profesor: Marcelo Montecinos C.
switch switch (mes) (mes)
{
case 12:
case 1:
case 2:
System.out.println ("Invierno");
break;
case 3:
case 4:
case 5:
System.out.println ("Primavera");
break;
case 6:
case 7:
case 8:
System.out.println ("Verano");
break;
case 9:
case 10:
case 11:
System.out.println ("Otono");
break;
default:
System.out.println ("Mes desconocido");
}
Taller Programacin III
J ava
110
Profesor: Marcelo Montecinos C.
switch (mes)
{
case 12:
case 1: System.out.println (Estamos en ");
case 2:
System.out.println ("Invierno");
break;
case 3:
case 4:
case 5:
System.out.println ("Primavera");
break;
case 6:
case 7:
case 8:
System.out.println ("Verano");
break;
case 9:
case 10:
case 11:
System.out.println ("Otono");
break;
default:
System.out.println ("Mes desconocido");
}
Si mes = 2
La salida es:
Invierno
Si mes = 12
La salida es:
Estamos en
Invierno
Taller Programacin III
J ava
111
Profesor: Marcelo Montecinos C.
Ejercicios
Ejercicios
1. Desarrolle un programa en Java que le permita leer el nombre , la
edad , el sexo y el estado civil de cualquier persona e imprima el
nombre de la persona si es un hombre casado y mayor de 40 aos
o una mujer soltera menor de 50 aos.
2. Desarrolle un programa en Java para leer el nombre de un
empleado, el salario bsico por hora y el nmero de horas
trabajadas durante una semana. Calcule el salario neto , teniendo
en cuenta que si el nmero de horas trabajadas durante la semana
es mayor de 48 horas, esas horas dems se consideran horas
extras y tienen un recargo del 35%. Imprima el nombre del
empleado y su salario neto.
Taller Programacin III
J ava
112
Profesor: Marcelo Montecinos C.
Ejercicios
Ejercicios
En la tienda Sigo de pie los empleados reciben una cierta comisin
dependiendo del cdigo del artculo que vendan.
Cdigo del artculo Clculo de la comisin
1
15% del precio de venta
2
40% de la diferencia del precio de venta
y el precio mnimo de venta
3
10% del precio mnimo de venta ms el
50% de la diferencia del precio de venta
y el precio mnimo de venta
4
Bs. 100 por unidad ms el 5% del precio
mnimo de venta
5
Bs. 500 por unidad
Hacer un programa que imprima el Nombre del vendedor, el cdigo
del artculo que vendi y la comisin que se gan.
Taller Programacin III
J ava
113
Profesor: Marcelo Montecinos C.
Resumen
Resumen
En resumen, los conceptos vistos fueron :
if (expresin lgica)
{ bloque de instrucciones }
else
{ bloque de instrucciones }
if else - if
switch (expr1)
{
case valor1: instrucciones;
break;
case valor2: instrucciones;
break;
default: instrucciones;
break;
}
Instrucciones
Taller Programacin III
J ava
114
Profesor: Marcelo Montecinos C.
Sentencias
Sentencias
de
de
Iteraci
Iteraci

n
n
Taller Programacin III
J ava
115
Profesor: Marcelo Montecinos C.
Sentencias
Sentencias
de
de
Iteraci
Iteraci

n
n
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.
Taller Programacin III
J ava
116
Profesor: Marcelo Montecinos C.
while
while
Sentencias Sentencias de de Iteraci Iteraci n n
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++;
}
Taller Programacin III
J ava
117
Profesor: Marcelo Montecinos C.
while
while
Sentencias Sentencias de de Iteraci Iteraci n n
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.
Taller Programacin III
J ava
118
Profesor: Marcelo Montecinos C.
class class CalFactura CalFactura
{ {
public static void main(String public static void main(String args args[ ]) [ ])
{ {
char char resp resp; ;
double double monto,isv monto,isv; ;
System.out.println("Indique System.out.println("Indique si si desea desea calcular calcular factura factura s/n"); s/n");
resp resp= =CTeclado.ReadChar CTeclado.ReadChar( ); ( );
while (( while ((resp resp =='s') || ( =='s') || (resp resp =='S')) =='S'))
{ {
System.out.println("Indique System.out.println("Indique el el monto monto de la de la factura factura"); ");
monto monto= =CTeclado.ReadDouble CTeclado.ReadDouble(); ();
isv isv=( =(monto monto*14.5/100); *14.5/100);
System.out.println("El System.out.println("El monto monto a a pagar pagar de ISV de ISV es es :"+ :"+isv isv); );
System.out.println("Desea System.out.println("Desea calcular calcular para para otra otra factura factura"); ");
resp resp= =CTeclado.ReadChar CTeclado.ReadChar(); ();
} }
} }
} }
Taller Programacin III
J ava
119
Profesor: Marcelo Montecinos C.
do
do
-
-
while
while
Sentencias Sentencias de de Iteraci Iteraci n n
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);
}
while (x < 20);
Taller Programacin III
J ava
120
Profesor: Marcelo Montecinos C.
do
do
-
-
while
while
Sentencias Sentencias de de Iteraci Iteraci n n
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
ejecuta al menos una vez.
Taller Programacin III
J ava
121
Profesor: Marcelo Montecinos C.
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'));
}
}
Taller Programacin III
J ava
122
Profesor: Marcelo Montecinos C.
for
for
Sentencias Sentencias de de Iteraci Iteraci n n
for (expr. inicial; expr. Lgica;modificacion)
{
bloque de instrucciones;
}
Ejemplo: Mostrar los nmeros del 1 al 10
for (int i = 1; i < 10; i++)
{
System.out.println(i = + i);
}
Taller Programacin III
J ava
123
Profesor: Marcelo Montecinos C.
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.
for
for
Sentencias Sentencias de de Iteraci Iteraci n n
Taller Programacin III
J ava
124
Profesor: Marcelo Montecinos C.
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);
}
}
}
Taller Programacin III
J ava
125
Profesor: Marcelo Montecinos C.
Sentencias
Sentencias
de
de
Iteraci
Iteraci

n
n
En resumen, los conceptos vistos fueron :
while (expresin lgica)
{
bloque de instrucciones;
}
do
{
bloque de instrucciones;
}
while (expresion lgica);
for (expr. inicial; expr. Lgica; paso)
{
bloque de instrucciones;
}
Instrucciones Instrucciones
Taller Programacin III
J ava
126
Profesor: Marcelo Montecinos C.
Ejercicios
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
Salida:
promn, numa, numr: numrico
Entrada.
nota: numrico
Taller Programacin III
J ava
127
Profesor: Marcelo Montecinos C.
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
Taller Programacin III
J ava
128
Profesor: Marcelo Montecinos C.
2. Se requiere que se obtenga la misma
informacin pero, para todos los estudiantes
de una escuela.
Entrada.
nota: numrico
Salida:
promn, numa, numr:
numrico
Taller Programacin III
J ava
129
Profesor: Marcelo Montecinos C.
1. Inicio Escuela.
2. promedioMax, numa, numr, prom,acumNotas,nota,carnet: numrico
3. Leer carnet
4. promedioMax 0
5. Mientras ( carnet != 0 ) hacer
Comenzar
3.1 numa 0
3.2 numr 0
3.3 acumNotas 0
3.4 Para cont=1 hasta 6 hacer +1
Comenzar
3.4.1 Leer nota
3.4.2 acumNotas acumNotas + nota
3.4.3 Si( nota < 10) entonces
3.4.3.1 numr numr + 1
sino
3.4.3.2 numa numa + 1
Fin para
3.5 prom acumNotas/6
3.6 Si (prom > promedioMax) entoces
3.6.1 promedioMax prom
3.7 Mostrar ( El promedio del estudiantes es : prom)
3.8 Mostrar (El estudiante tiene , numa ,materias aprobadas)
3.9 Mostrar (El estudiante tiene , numr, materias reprobadas)
3.10 Leer carnet
Fin Mientras
6. Mostrar promedioMax
7. Terminar Escuela
Profesor: Marcelo Montecinos C. 130
Strings en J ava
Strings en J ava
Cadena de caracteres
Taller Programacin III
J ava
131
Profesor: Marcelo Montecinos C.
Strings
Strings
En Java un String no es un tipo de
dato primitivo como char o int.
Es una clase que maneja cadena
de caracteres.
Taller Programacin III
J ava
132
Profesor: Marcelo Montecinos C.
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
Strings
Taller Programacin III
J ava
133
Profesor: Marcelo Montecinos C.
Strings
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 "
Taller Programacin III
J ava
134
Profesor: Marcelo Montecinos C.
String
String
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
hasta el final de la cadena
substring(int posicinInicial, int posicionFinal);
copia desde la posicin inicial
hasta la posicin final-1
Taller Programacin III
J ava
135
Profesor: Marcelo Montecinos C.
String
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
Taller Programacin III
J ava
136
Profesor: Marcelo Montecinos C.
String
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
Taller Programacin III
J ava
137
Profesor: Marcelo Montecinos C.
String
String
Para convertir los caracteres de una cadena de
maysculas a minsculas
toLowerCase()
ejemplo,
cadena=CASA MIA;
System.out.println(cadena.toLowerCase());
la salida sera,
casa mia
Taller Programacin III
J ava
138
Profesor: Marcelo Montecinos C.
String
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
Taller Programacin III
J ava
139
Profesor: Marcelo Montecinos C.
String
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");
}
Taller Programacin III
J ava
140
Profesor: Marcelo Montecinos C.
String
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");
}
Taller Programacin III
J ava
141
Profesor: Marcelo Montecinos C.
String
String
Para comparar si dos objetos hacen hacen referencia 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);
}
Taller Programacin III
J ava
142
Profesor: Marcelo Montecinos C.
String
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");}
}
Taller Programacin III
J ava
143
Profesor: Marcelo Montecinos C.
String
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");
}
Taller Programacin III
J ava
144
Profesor: Marcelo Montecinos C.
String
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");
}
Taller Programacin III
J ava
145
Profesor: Marcelo Montecinos C.
String
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");
}
Taller Programacin III
J ava
146
Profesor: Marcelo Montecinos C.
Paquetes
Paquetes
Paquetes J ava 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. 147
J DBC
J ava Database
Connectivity
Taller Programacin III
J ava
148
Profesor: Marcelo Montecinos C.
Introducci
Introducci

n
n
J DBC es una API, formada por conjunto de
clases e interfaces en el lenguaje de
programacin J ava, 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.
Taller Programacin III
J ava
149
Profesor: Marcelo Montecinos C.

Qu
Qu

hace J DBC?
hace J DBC?
Establece una conexin a una base de
datos.
Enva sentencias SQL.
Procesa los resultados de estas
sentencias.
Taller Programacin III
J ava
150
Profesor: Marcelo Montecinos C.
Arquitectura J DBC
Arquitectura J DBC
Arquitectura normal
Puente J DBC-ODBC
Aplicaciones J ava
J DBC API
Adm. de controladores
J DBC
Controlador
J DBC
DB
Controlador
J DBC
DB
Aplicaciones J ava
J DBC API
Adm. de controladores J DBC
C. ODBC
DB
C. ODBC
DB
Adm. de controladoresODBC
Puente J DBC/ODBC
Taller Programacin III
J ava
151
Profesor: Marcelo Montecinos C.
Primer ejemplo b
Primer ejemplo b

sico
sico
Connect i on con = Dr i ver Manager . get Connect i on (
" j dbc: odbc: nombr e" , " l ogi n" ,
" passwor d" ) ;
St at ement st mt = con. cr eat eSt at ement ( ) ;
Resul t Set r s = st mt . execut eQuer y( " SELECT a, b, c
FROM Tabl e1" ) ;
whi l e ( r s. next ( ) ) {
i nt x = r s. get I nt ( " a" ) ;
St r i ng s = r s. get St r i ng( " b" ) ;
f l oat f = r s. get Fl oat ( " c" ) ;
}
J DBC usa una URL para especificar la base de
datos.
Taller Programacin III
J ava
152
Profesor: Marcelo Montecinos C.
...Primer ejemplo b
...Primer ejemplo b

sico
sico
Ejemplos de URL:
jdbc:mysql://myserver:4444/db1
jdbc:oracle://oraserver
jdbc:odbc:mydatabase
Taller Programacin III
J ava
153
Profesor: Marcelo Montecinos C.
J DBC vs. ODBC
J DBC vs. ODBC
Se puede usar ODBC desde J ava, pero el
puente J DBC-ODBC ayuda bastante.
ODBC tiene una interfaz tipo C rompiendo el
esquema de seguridad, robustez e
implementacin de J ava.
ODBC mezcla funciones simple y complejas.
Los controladores de ODBC deben ser
instalados en cada cliente.
Taller Programacin III
J ava
154
Profesor: Marcelo Montecinos C.
...J DBC vs. ODBC
J DBC es una interfaz natural en J ava.
Taller Programacin III
J ava
155
Profesor: Marcelo Montecinos C.
Modelos de acceso a BD
Modelos de acceso a BD
De 2 capas
La aplicacin habla directamente
con la base de datos.
Controlador J DBC 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.
Aplicacin
J ava
J DBC
DBMS
Cl i ent e
Ser vi dor
BD
Pr ot ocol o
BD
Taller Programacin III
J ava
156
Profesor: Marcelo Montecinos C.
Modelos de acceso a BD
Modelos de acceso a BD
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.
Aplicacin
J ava
J DBC
DBMS
Applet en J ava o
Navegador
HTML
Cl i ent e ( GUI )
Ll amadas HTTP,
RMI , CORBA
Ser vi dor
BD
Ser vi dor
Pr ot ocol o
BD
Taller Programacin III
J ava
157
Profesor: Marcelo Montecinos C.
Categor
Categor

as de los controladores J DBC


as de los controladores J DBC
Puente J DBC-ODBC.
Parte API Nativa-Parte J ava. Se convierte las
llamadas J DBC al sistema de la Base de
datos.
J DBC-Red. Es slo J ava. Las llamadas J DBC
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 J ava. Se usa un
protocolo de red con la BD.
Taller Programacin III
J ava
158
Profesor: Marcelo Montecinos C.
Conexi
Conexi

n
n
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.
Taller Programacin III
J ava
159
Profesor: Marcelo Montecinos C.
...Conexi
...Conexi

n
n
Sintxis de una URL J DBC:
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
Taller Programacin III
J ava
160
Profesor: Marcelo Montecinos C.
Enviando sentencias SQL
Enviando sentencias SQL
J DBC 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
Taller Programacin III
J ava
161
Profesor: Marcelo Montecinos C.
...Enviando sentencias SQL
...Enviando sentencias SQL
J DBC 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.
Taller Programacin III
J ava
162
Profesor: Marcelo Montecinos C.
Transacciones
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.
Taller Programacin III
J ava
163
Profesor: Marcelo Montecinos C.
Procesando respuestas
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.
Taller Programacin III
J ava
164
Profesor: Marcelo Montecinos C.
Cargando la clase del controlador J DBC
Cargando la clase del controlador J DBC
Ejemplo:
Cl ass. f or Name( empr esa. db. Dr i ver " ) ;
Esto crea una instancia del controlador
y llama al mtodo
DriverManager.registerDriver
registrando este controlador en la lista
de controladores disponibles para
conexiones.
Taller Programacin III
J ava
165
Profesor: Marcelo Montecinos C.
Ejemplo de sentencia
Ejemplo de sentencia
Connect i on con =
Dr i ver Manager . get Connect i on (
"j dbc: odbc: nombr e", "l ogi n",
"passwor d") ;
Pr epar edSt at ement pst mt =
con. pr epar eSt at ement ( UPDATE t abl a1 SET
m=? WHERE x=?) ;
pst mt . set St r i ng( 1, "Hol a") ;
f or ( i nt i = 0; i < 10; i ++) {
pst mt . set I nt ( 2, i ) ;
i nt r owCount = pst mt . execut eUpdat e( ) ;
}
Taller Programacin III
J ava
166
Profesor: Marcelo Montecinos C.
Primer ejemplo b
Primer ejemplo b

sico
sico
Connect i on con =
Dr i ver Manager . get Connect i on (
"j dbc: odbc: nombr e",
"l ogi n",
"passwor d") ;
St at ement st mt = con. cr eat eSt at ement ( ) ;
Resul t Set r s = st mt . execut eQuer y( "SELECT
a, b, c FROM Tabl e1") ;
whi l e ( r s. next ( ) ) {
i nt x = r s. get I nt ( "a") ;
St r i ng s = r s. get St r i ng( "b") ;
f l oat f = r s. get Fl oat ( "c") ;
}
Profesor: Marcelo Montecinos C. 167
Clases
Clases
en Java
en Java
Taller Programacin III
J ava
168
Profesor: Marcelo Montecinos C.
Declaracin de Clases
modi f i cador class nombr eCl ase {
< decl ar aci n de campos >
< decl ar aci n de mt odos >
}
modi f i cador 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 publ i c, la clase podr utilizarse
fuera del paquete, pero si no se declara publ i c, slo podr utilizarse
dentro del paquete
Taller Programacin III
J ava
169
Profesor: Marcelo Montecinos C.
Declaracin de Objetos
nombr eCl ase nombr eObj et o;
nombr eCl ase nombr eObj et o1, nombr eObj et o2, nombr eObj et o3;
nombr eCl ase nombr eObj et o = nombr eOt r oObj et o;
nombr eCl ase nombr eObj et o = new nombr eCl ase( ) ;
Ejemplo:
cl asePubl i ca el Obj et o;
cl asePubl i ca el Obj et o1, el Obj et o2, el Obj et o3;
cl asePubl i ca el Obj et o4 = el Obj et o;
cl asePubl i ca el Obj et o5 = new cl asePubl i ca( ) ;
Taller Programacin III
J ava
170
Profesor: Marcelo Montecinos C.
Declaraciones de Campos
modi f i cador es t i po nombr eCampo;
modi f i cador 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
publ i c.
Otros modificadores que se pueden aadir son:
- static, indica que el campo pertenece a la clase, no a un objeto concreto
- final, indica que dicho campo no puede ser sobreescrito en una subclase
t i po es el tipo del campo (tipo primitivo o clase del objeto)
nombr eCampo es el nombre del campo
Taller Programacin III
J ava
171
Profesor: Marcelo Montecinos C.
Acceso a Campos
obj et o. campo; / / si campo no es st at i c
nombr eCl ase. campo; / / si campo es st at i c
el Obj et o. dobl ePubl i co = 5. 0;
doubl e dobl e = el Obj et o. dobl ePubl i co;
Cl ase. dobl ePubl i coEst at i co = 7. 0;
Doubl e dobl e = Cl ase. dobl ePubl i coEst at i co;
Taller Programacin III
J ava
172
Profesor: Marcelo Montecinos C.
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.
Taller Programacin III
J ava
173
Profesor: Marcelo Montecinos C.
Declaracin de Mtodos
modi f i cador t i po nombr eMet odo( <l i st a de par amet r os f or mal es>) {
< cuer po del mt odo; campos e i nst r ucci ones >
return expr esi on; / / sol o mt odos que devuel ven r esul t ado
}
<l i st a de par amet r os f or mal es> = ( t i po campo, t i po campo, . . . )
modi f i cador significa lo mismo que para los campos.
t i po es el tipo devuelto por el mtodo, puede ser:
- void si el mtodo no devuelve nada
- un tipo primitivo
- una clase
nombr eMet odo es el nombre del mtodo
Taller Programacin III
J ava
174
Profesor: Marcelo Montecinos C.
Ejemplo de Clase
publ i c cl ass Cl ase {
pr i vat e i nt ent er oPr i vado;
st at i c pr i vat e i nt ent er oEst at i coPr i vado;
publ i c voi d est abl eceEnt er o( i nt ent er o) {
ent er oPr i vado = ent er o;
}
publ i c i nt r ecuper aEnt er o( ) {
r et ur n ent er o;
}
st at i c publ i c voi d est abl eceEnt er oEst at i co( i nt ent er o) {
ent er oEst at i coPr i vado = ent er o;
}
st at i c publ i c i nt r ecuper aEnt er oEst at i co( ) {
r et ur n ent er oEst at i co;
}
}
Taller Programacin III
J ava
175
Profesor: Marcelo Montecinos C.
Llamadas a Mtodos
met odo( <l i st a par amet r os r eal es>) ; / / met odos de l a pr opi a cl ase
obj et o. met odo( <l i st a dpar amet r os r eal es>) ; / / met odos no est at i cos
nombr ecl ase. met odo( <l i st a par amet r os r eal es>) ; / / met odos est at i cos
Ejemplo:
el Obj et o. est abl eceEnt er o( 7) ;
i nt ent er o = el Obj et o. r ecuper aEnt er o( ) ;
Cl ase. est abl eceEnt er oEst at i co( 8) ;
i nt ent er o = Cl ase. r ecuper aEnt er oEst at i co( ) ;
Taller Programacin III
J ava
176
Profesor: Marcelo Montecinos C.
Declaracin de Mtodos Constructores
modi f i cador es nombr eCl ase( <l i st a ar gument os f or mal es>) {
< cuer po del mt odo const r uct or >
}
Ejemplo:
publ i c cl ass Cl ase {
pr i vat e i nt ent er oPr i vado;
publ i c Cl ase( ) {
ent er oPr i vado = 0;
}
publ i c Cl ase( i nt ent er o) {
ent er oPr i vado = ent er o;
}
}
Taller Programacin III
J ava
177
Profesor: Marcelo Montecinos C.
Llamadas a Mtodos Constructores
nombr eCl ase obj et o = new nombr eCl ase( <l i st a par amet r os r eal es>) ;
Ejemplo:
Cl ase el Obj et o;
el Obj et o = new Cl ase( ) ;
O en una sola lnea:
Cl ase el Obj et o = new Cl ase( ) ;
Cl ase el Obj et o = new Cl ase( 5) ;
Taller Programacin III
J ava
178
Profesor: Marcelo Montecinos C.
Modelo de un Programa
public class nombr ePr ogr ama {
public static void mai n( St r i ng[ ] ar gs) {
< cuer po del pr ogr ama >
}
}
Taller Programacin III
J ava
179
Profesor: Marcelo Montecinos C.
Herencia
modi f i cador es class nombr eCl ase extends nombr eCl aseQueExt i ende {
}
Ejemplo
publ i c cl ass Cl aseExt endi da ext ends Cl ase {
}
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.
Taller Programacin III
J ava
180
Profesor: Marcelo Montecinos C.
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).
Cl aseExt endi da el Obj et oExt endi do = new Cl aseExt endi da( ) ;
Cl ase el Obj et o = l aCl aseExt endi da;
Cl aseExt endi da el Obj et oExt endi do = ( Cl aseExt endi da) el Obj et o;
Taller Programacin III
J ava
181
Profesor: Marcelo Montecinos C.
Superconstruccin
modi f i cador es cl ass nombr ecl ase ext ends nombr eCl aseQueEst i ende {
publ i c nombr eCl ase( <l i st a de par amet r os f or mal es>) {
super( <l i st a de par amet r os r eal es>) ;
<i nst r ucci ones de i ni ci al i zaci on>
}
}
Importante: La llamada al superconstructor debe
ser la primera instruccin de un constructor.
Taller Programacin III
J ava
182
Profesor: Marcelo Montecinos C.
Ejemplo de Superconstruccin
publ i c cl ass Cl ase {
pr i vat e i nt ent er oPr i vado;
publ i c Cl ase( i nt ent er o) {
ent er oPr i vado = ent er o;
}
}
publ i c cl ass Cl aseExt endi da ext ends Cl ase {
pr i vat e doubl e dobl ePr i vado;
publ i c Cl aseExt endi da( i nt ent er o, doubl e dobl e) {
super ( ent er o) ;
dobl ePr i vado = dobl e;
}
}
Taller Programacin III
J ava
183
Profesor: Marcelo Montecinos C.
Variables Enmascaradas
publ i c cl ass Cl ase {
publ i c i nt dat o;
}
publ i c cl ass Cl aseExt endi da ext ends Cl ase {
publ i c doubl e dat o;
publ i c est abl eceDat os( i nt ent er o, doubl e dobl e) {
super . dat o = ent er o;
dat o = dobl e;
}
Cl ase el Obj et o = new Cl ase( ) ;
Cl aseExt endi da el Obj et oExt endi do = new Cl aseExt endi da( ) ;
el Obj et o. dat o = 5; / / es un val or ent er o
el Obj et oExt endi do. dat o = 6. 4; / / es un val or dobl e
el Obj et oExt endi do. est abl eceDat os( 3, 7. 8) ;
Taller Programacin III
J ava
184
Profesor: Marcelo Montecinos C.
Sobreescritura de Mtodos
publ i c cl ass Cl ase {
publ i c i nt dat o;
publ i c est abl eceDat o( i nt ent er o) {
dat o = ent er o;
}
}
publ i c cl ass Cl aseExt endi da ext ends Cl ase {
publ i c i nt dat oExt endi do;
publ i c est abl eceDat o( i nt ent er o) {
super . est abl eceDat o( ent er o) ;
dat oExt endi do = ent er o*2;
}
Taller Programacin III
J ava
185
Profesor: Marcelo Montecinos C.
M
M

todos en
todos en
Java
Java
Taller Programacin III
J ava
186
Profesor: Marcelo Montecinos C.
Mtodos
La mejor forma de
La mejor forma de
crear y mantener un
crear y mantener un
programa grande, es
programa grande, es
construirlo a partir de
construirlo a partir de
piezas m
piezas m

s peque
s peque

as o
as o
m
m

dulos.
dulos.
Cada uno de los cuales
Cada uno de los cuales
es m
es m

s manejable que
s manejable que
el programa en su
el programa en su
totalidad
totalidad
Taller Programacin III
J ava
187
Profesor: Marcelo Montecinos C.
Mtodos
Los m
Los m

todos tambi
todos tambi

n son
n son
utilizados para evitar la
utilizados para evitar la
repetici
repetici

n de c
n de c

digo en un
digo en un
programa al poder ejecutarlo
programa al poder ejecutarlo
desde varios puntos de un
desde varios puntos de un
programa con s
programa con s

lo invocarlo.
lo invocarlo.
Taller Programacin III
J ava
188
Profesor: Marcelo Montecinos C.
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.
Taller Programacin III
J ava
189
Profesor: Marcelo Montecinos C.
La llamada a m
La llamada a m

todos especifica el nombre del


todos especifica el nombre del
m
m

todo y proporciona la informaci


todo y proporciona la informaci

n (en
n (en
forma de
forma de
argumentos
argumentos
) cuando el m
) cuando el m

todo lo
todo lo
necesite para hacer su trabajo
necesite para hacer su trabajo
Mtodos
El formato de una definicin de mtodo es:
static tipo-de-valor-devuelto nombredelmtodo(lista-param)
{
declaraciones y sentencias
}
Taller Programacin III
J ava
190
Profesor: Marcelo Montecinos C.
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.
Taller Programacin III
J ava
191
Profesor: Marcelo Montecinos C.
Mtodos
El nombre es cualquier identificador
vlido.
El tipo-de-valor-devuelto
es el tipo de
es el tipo de
dato del resultado
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.
Taller Programacin III
J ava
192
Profesor: Marcelo Montecinos C.
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.
Taller Programacin III
J ava
193
Profesor: Marcelo Montecinos C.
Mtodos
Si se especifica un tipo-de-valor-
devuelto 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.
Taller Programacin III
J ava
194
Profesor: Marcelo Montecinos C.
Todas las variables declaradas en
las definiciones de los mtodos son
variables locales; solo se conocen
en el mtodo en el que se definen.
Mtodos
static int SumarNum(int e e)
{
e+=e;
System.out.println(++e);
return e; //Este mtodo retorna un valor
}
Taller Programacin III
J ava
195
Profesor: Marcelo Montecinos C.
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.
Taller Programacin III
J ava
196
Profesor: Marcelo Montecinos C.
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.
Mtodos
Esta es una declaracin de un mtodo que contiene 2 errores.
static
static
void
void
Calcular (
Calcular (
float
float
x,y
x,y
)
)
;
;
Taller Programacin III
J ava
197
Profesor: Marcelo Montecinos C.
Definir una variable local de un mtodo igual que un
parmetro es un error de sintaxis.
Mtodos
class CCmporvalor
{
public static void main(String args[])
{
int a=10;
System.out.println(a);
SumarNum(a);
System.out.println(a);
}
static int SumarNum(int e)
{
e+=e;
System.out.println(e);
return e; //Este mtodo retorna un valor
}
}
Ejemplo:
Taller Programacin III
J ava
198
Profesor: Marcelo Montecinos C.
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:
a) a) Si el mtodo no devuelve un resultado el control se
devuelve cuando se llega a la llave derecha que
termina el mtodo.
b) b) Al ejecutarse la sentencia return tambin, si el
mtodo NO devuelve ningn resultado.
c) c) return expresin;
Mtodos
Taller Programacin III
J ava
199
Profesor: Marcelo Montecinos C.
Ejemplo
Ejemplo
Taller Programacin III
J ava
200
Profesor: Marcelo Montecinos C.
Entrada: v1,v2,v3 :numricos
Inicio Programa Principal
V1,v2,v3,promn,mayor:numricos
Procesar
Procesar
IntroDatos
IntroDatos //Llamada a un subprograma tipo procedimiento
promn
promn

Procesar
Procesar
Calprom
Calprom //Llamada a un subprograma tipo funcin
Procesar
Procesar
Imprime(promn
Imprime(promn
)
)
Mostrar (El mayor es mayor
Procesar
Procesar
Max
Max)
Terminar Programa Principal
Taller Programacin III
J ava
201
Profesor: Marcelo Montecinos C.
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( ));
}
Taller Programacin III
J ava
202
Profesor: Marcelo Montecinos C.
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
Taller Programacin III
J ava
203
Profesor: Marcelo Montecinos C.
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( );
}
Taller Programacin III
J ava
204
Profesor: Marcelo Montecinos C.
Inicio Calcprom
aux: numrico
aux (v1+v2+v3)/3
Retornar aux
Inicio Imprime(valor)
valor:numrico
Mostrar (Promedio)
Mostrar (valor)
Regresar
Taller Programacin III
J ava
205
Profesor: Marcelo Montecinos C.
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);
}
Taller Programacin III
J ava
206
Profesor: Marcelo Montecinos C.
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.
Taller Programacin III
J ava
207
Profesor: Marcelo Montecinos C.
static int Max() // Mtodo que retorna un valor
{
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;
}
//V1,V2,V3 variables globales
Taller Programacin III
J ava
208
Profesor: Marcelo Montecinos C.
Propiedades de los Objetos
Objetos nulos: null
El identificador this
publ i c cl ass Cl ase {
pr i vat e i nt ent er o;
publ i c Cl ase( i nt ent er o) {
t hi s. ent er o = ent er o;
}
}
Taller Programacin III
J ava
209
Profesor: Marcelo Montecinos C.
Objetos vs Variables
- Una variable tiene memoria para un solo
valor y dispone de un conjunto predefinido de
operaciones segn sea su tipo.
- Un objeto tiene memoria para un grupo de
varios valores, junto con un conjunto
coherente de mtodos que operan sobre esos
valores. Tanto mtodos como valores estn
encapsulados en la clase de la que se ha
obtenido el objeto.
Taller Programacin III
J ava
210
Profesor: Marcelo Montecinos C.
La superclase Object
En J ava, todas las clases son subclases
de una clase especial llamada Obj ect .
J ava alcanza la generalidad utilizando
objetos de diferentes clases en las
mismas partes del programa, pero
todos ellos pertenecen a la clase
Obj ect .
Taller Programacin III
J ava
211
Profesor: Marcelo Montecinos C.
Igualdad de Objetos
modi f i cador class nombr eCl ase {
public boolean equal s( ) {
< i nst r ucci ones par a compar ar con l os campos de obj >
return r esul t ado de l a compar aci on;
}
}
Ejemplo:
publ i c cl ass Cl ase {
pr i vat e i nt ent er o;
publ i c bool ean equal s( Cl ase c) {
r et ur n ( c. ent er o==ent er o) ;
}
}
Taller Programacin III
J ava
212
Profesor: Marcelo Montecinos C.
Asignacin de Objetos
modi f i cador class nombr eCl ase implements Cl oneabl e {
public Object cl one( ) {
nombr eCl ase obj = new nombr eCl ase( par amet r os) ;
< i nst r ucci ones par a copi ar l os campos a obj >
return obj ;
}
}
publ i c cl ass Cl ase i mpl ement s Cl oneabl e {
pr i vat e i nt ent er o;
publ i c Obj ect cl one( ) {
Cl ase c = new Cl ase( ) ;
c. ent er o = ent er o;
r et ur n c;
}
}
Taller Programacin III
J ava
213
Profesor: Marcelo Montecinos C.
Arrays
Declaracin e instanciacin de un array de n enteros:
i nt mi Ar r ay[ ] ;
mi Ar r ay = new i nt [ n] ;
Lo mismo en una sola lnea:
i nt mi Ar r ay[ ] = new i nt [ n] ;
Declaracin e instanciacin de un array de n objetos:
Mi Cl ase mi Ar r ay[ ] = new Mi Cl ase[ n] ;
f or ( i nt i =0; i <n; i ++) mi Ar r ay[ i ] = new Mi Cl ase( ) ;
Taller Programacin III
J ava
214
Profesor: Marcelo Montecinos C.
Conversiones de Clase
El mtodo clone invocado sobre clase2
devuelve un objeto de la clase Obj ect . Esto
debe ser as, porque lo exige la interfaz
Cl oneabl e. Para convertirlo de nuevo a
Clase necesitamos la conversin explcita de
tipo.
Cl ase obj et o1 =
( Cl ase) obj et o2. cl one( ) ;
Taller Programacin III
J ava
215
Profesor: Marcelo Montecinos C.
Paquetes
Paquetes J ava 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.*;
Taller Programacin III
J ava
216
Profesor: Marcelo Montecinos C.
Paquetes
package nombr ePaquet e;
modi f i cador class nombr eCl ase {
< decl ar aci on de l a cl ase >
}
Importante: Si deseamos que una clase sea utilizada
fuera de su paquete, deberemos declararla como
publ i c.
Taller Programacin III
J ava
217
Profesor: Marcelo Montecinos C.
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...
}
Taller Programacin III
J ava
218
Profesor: Marcelo Montecinos C.
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...
}
Taller Programacin III
J ava
219
Profesor: Marcelo Montecinos C.
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 (J ava 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.
Taller Programacin III
J ava
220
Profesor: Marcelo Montecinos C.
Interfaces(4)
O sea que las interfaces definitivamente no sirven para
implementar herencia mltiple ? SI y No:
Una clase solo puede heredar constantes de la interfaz
Una clase no puede heredar implementaciones de una
interfaz
Una interfaz se puede usar como una clase
Una interfaz puede ser una extensin de una clase
abstracta, con lo cual se heredan caractersticas de otra
clase ms:
Ej: public interface ObjetoGrafico extends ObjetoGeometrico
public class ComponenteGrafica extends J Panel
implements ObjetoGrfico:
Taller Programacin III
J ava
221
Profesor: Marcelo Montecinos C.
Haciendo ms de una cosa a la vez:
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)
Taller Programacin III
J ava
222
Profesor: Marcelo Montecinos C.
El mtodo run de la clase Thread
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 J ava (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).
Taller Programacin III
J ava
223
Profesor: Marcelo Montecinos C.
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
and catch
Taller Programacin III
J ava
224
Profesor: Marcelo Montecinos C.
La forma extendida de Thread(2)
public class TwoThreadsTest {
public static void main (String[] args) {
new SimpleThread("J amaica").start();
new SimpleThread("Fiji").start();
}
}
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().
Taller Programacin III
J ava
225
Profesor: Marcelo Montecinos C.
Implentacinhaciendointerface
publ i c cl ass Mi Thr ead2 i mpl ement s Runnabl e {
publ i c voi d r un( ) {
i nt i = 0;
whi l e( t r ue)
Syst em. out . pr i nt l n( i ++) ;
}
}
publ i c cl ass Test Thr ead {
publ i c st at i c voi d mai n( St r i ng ar gs[ ] )
{
b = new Mi Thr ead2( ) ;
Thr ead t = new
Thr ead( b) ; t . st ar t ( ) ;
f or ( i nt i =0; i <1000; i ++) ;
t . st op( ) ;
}
}
Taller Programacin III
J ava
226
Profesor: Marcelo Montecinos C.
Usando threads para atender clientes de
un Servidor de Sockets
La forma de implementar servidores que atiendan a varios clientes
paralelamente a la vez es combinando threads con sockets
El servidor abre un ServerSocket desde donde oye ciualquier intento por
conectarse con l de un cliente.
Una vez establecida la 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).
Taller Programacin III
J ava
227
Profesor: Marcelo Montecinos C.
Ejemplos de programas interesantes
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)
Taller Programacin III
J ava
228
Profesor: Marcelo Montecinos C.
Objetos Remotos en J AVA
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)
Taller Programacin III
J ava
229
Profesor: Marcelo Montecinos C.
Interfaces, objetos y mtodos
remotos
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
Taller Programacin III
J ava
230
Profesor: Marcelo Montecinos C.
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
las interfaces remotas estn definidas.
Taller Programacin III
J ava
231
Profesor: Marcelo Montecinos C.
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.
Taller Programacin III
J ava
232
Profesor: Marcelo Montecinos C.
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(newRMISecurityManager());
try { NumeroImpl n = new NumeroImpl();
Naming.rebind("//"+args[0]+"/elNumero",n);
System.out.println("Numero creado");
} catch (Exception e) {}
}
}
Taller Programacin III
J ava
233
Profesor: Marcelo Montecinos C.
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.
Cliente
rmiregistry
servidor
Internet
Naming.rebind(1)
Naming.lookup(2)
Objeto.metodo() (3)
Taller Programacin III
J ava
234
Profesor: Marcelo Montecinos C.
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) {}
}
}
Taller Programacin III
J ava
235
Profesor: Marcelo Montecinos C.
Compilar los cdigos fuentes y generar
las clases y los llamados stubs y
skeletons
Una vez implementados las 3 clases hay que compilarlas para
generar
Numero.class: la interfaz que define lo que se conocer del
objeto en toda la red.
NumeroImpl.class: que es el que implementa el objeto remoto.
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
Taller Programacin III
J ava
236
Profesor: Marcelo Montecinos C.
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
Taller Programacin III
J ava
237
Profesor: Marcelo Montecinos C.
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.
Taller Programacin III
J ava
238
Profesor: Marcelo Montecinos C.
Networking con J ava
(introduccin)
J ava 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.
J ava implementa una serie de clases que apoyan esto
independientemente de la plataforma (URL, sockets, RMI, IDL-CORBA,
J DBL. Veamos un par de ellas:
Taller Programacin III
J ava
239
Profesor: Marcelo Montecinos C.
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.
Taller Programacin III
J ava
240
Profesor: Marcelo Montecinos C.
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()
Taller Programacin III
J ava
241
Profesor: Marcelo Montecinos C.
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) { }
}
}
Taller Programacin III
J ava
242
Profesor: Marcelo Montecinos C.
Los Sockets
Sockets se pueden describir como dos puntos que arman un puente
de transporte de datos entre dos programas. Dos programas
pueden establecer gracias a los sockets una comunicacin segura
(hay recuperacin de errores de transmisin). Un proggrama puede
leer datos de un socket (lo que otro pragrama escribi) o puede
escribir datos en un socket ( para que lo lea otro programa)
En una comunicacin entre dos programas con sockets siempre hay
un servidor y un cliente. El servidor es el que primero establece la
posibilidad de comunicacin y se queda escuchando a ver si hay
alguien que quiere comuncarse con el por medio de este socket.El
cliente es un programa que, sabiendo que hay un programa servidor
escuchando, se conecta al socket del servidor y escribe y/o lee de
el.
Taller Programacin III
J ava
243
Profesor: Marcelo Montecinos C.
Servlets
Base de datos
Servidor
Cliente
Taller Programacin III
J ava
244
Profesor: Marcelo Montecinos C.
Servlets
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.
Taller Programacin III
J ava
245
Profesor: Marcelo Montecinos C.
Cundo se suelen utilizar
La pgina web se basa en datos que
proporciona el usuario.
Ejemplo: e-commerce sites.
Los datos cambian frecuentemente.
Ejemplo: Partes meteorolgicos.
La pgina web utiliza informacin de
BDs u otras fuentes.
Ejemplo: Aplicaciones comerciales.
Taller Programacin III
J ava
246
Profesor: Marcelo Montecinos C.
Applets
cliente
NAVEGADOR
WEB
MQUINA
VIRTUAL JAVA
El usuario pide un applet en java
Llega un applet en java
Arranca la mquina
Virtual de java y
Se ejecuta el applet
servidor
Taller Programacin III
J ava
247
Profesor: Marcelo Montecinos C.
Servlets
Base de datos
Servidor
Cliente
Taller Programacin III
J ava
248
Profesor: Marcelo Montecinos C.
Servlets. Requisitos
El servidor debe tener una mquina virtual
J ava.
El servidor debe soportar la API de los
servlets J ava.
J avaServer Web Development Kit (J SWDK).
http://java.sun.com/products/servlet/
Servidores capaces de ejecutar servlets:
J ava Web Server
Netscape Fast Track y Enterprise
OReilly WebSite Professional
Lotus Domino Go WebServer
Novel IntraNetWare
IBM Internet Connection Server
Otros
Taller Programacin III
J ava
249
Profesor: Marcelo Montecinos C.
Ejecucin de un servlet
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.
Taller Programacin III
J ava
250
Profesor: Marcelo Montecinos C.
Desde un navegador web
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
Taller Programacin III
J ava
251
Profesor: Marcelo Montecinos C.
Desde una pgina web
Un servlet tambin puede ser llamado
desde el cdigo de una pgina web, al
igual que se llamara a cualquier CGI.
Ejemplo:
<formaction =
http://www.datsi.fi.upm.es/~mperez/servl
ets/serv2 method=post>
Taller Programacin III
J ava
252
Profesor: Marcelo Montecinos C.
Desde otro servlet
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.
Taller Programacin III
J ava
253
Profesor: Marcelo Montecinos C.
Desde otro servlet
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);
...
}
}
Taller Programacin III
J ava
254
Profesor: Marcelo Montecinos C.
Arquitectura de los servlets
Biblioteca javax.servlet
Servlets
HttpServlet
MiServlet
Taller Programacin III
J ava
255
Profesor: Marcelo Montecinos C.
Interaccin con los clientes
Objeto ServletRequest:
Comunicacin que fluye del cliente al
servidor.
Objeto ServletResponse:
Encapsula la informacin enviada desde el
servidor al cliente.
Taller Programacin III
J ava
256
Profesor: Marcelo Montecinos C.
Estructura de un Servlet
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class SomeServlet extends
HttpServlet {
// El servidor enva una pgina
// web al cliente
public void doGet
(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,
IOException
{
// Utilizar request para leer
// datos procedentes del
// cliente (ej: cookies,
// otros datos)
// Utiliza response para
// especificar la respuesta
// (tipo de contenido, establecer
// cookies, ...)
PrintWriter out =
response.getWriter();
// Utilizar out para enviar el
// contenido al navegador
}
// Anlogamente, sobreescribir
// doPost().
}
Taller Programacin III
J ava
257
Profesor: Marcelo Montecinos C.
Ejemplo Servlets: Hola Mundo
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();
}
}
Taller Programacin III
J ava
258
Profesor: Marcelo Montecinos C.
Ejemplo Servlets: Hola Mundo
Taller Programacin III
J ava
259
Profesor: Marcelo Montecinos C.
Obtencin y envo de informacin
Obtencin de datos
del cliente:
getParameter()
getParameterValues()
getParameterNames()
getReader
getInputStream()
Envo de datos al
cliente:
getWriter
getOutputStream
Taller Programacin III
J ava
260
Profesor: Marcelo Montecinos C.
Ejemplo: Lectura de parmetros
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";
response.setContentType
("text/html");
out = response.getWriter();
out.println("<HTML><HEAD><TITLE>");
out.println(title);
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
request,HttpServletResponse
response)
throws ServletException,IOException {
doGet(request,response);
}
}
Taller Programacin III
J ava
261
Profesor: Marcelo Montecinos C.
Ejemplo: Lectura de parmetros
Taller Programacin III
J ava
262
Profesor: Marcelo Montecinos C.
Ejemplo: Lectura de parmetros II
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
public class ShowParameters extends HttpServlet {
public void doGet( HttpServletRequest request,
HttpServletResponse response)
throws ServletException,IOException
{
PrintWriter out;
String title="Leyendo todos los parmetros";
response.setContentType ("text/html");
out = response.getWriter();
out.println("<HTML><HEAD><TITLE>");
out.println(title);
out.println("</TITLE></HEAD><BODY>");
Taller Programacin III
J ava
263
Profesor: Marcelo Montecinos C.
Ejemplo: Lectura de parmetros II
out.println("<H1 ALIGN=CENTER>"+ title
+"</H1>");
out.println("<TABLE BORDER=1
ALIGN=CENTER>");
out.println("<TR><TH>Nombre de
parmetro<TH>Valores de parmetro");
Enumeration nombresDeParam =
request.getParameterNames();
while (nombresDeParam.hasMoreElements()){
String nombreParam = (String)
nombresDeParam.nextElement();
out.println("<TR><TD>" + nombreParam);
out.println("<TD>");
String[] valoresDeParam=
request.getParameterValues(nombreParam);
if (valoresDeParam.length == 1) {
String valorParam =
valoresDeParam[0];
if (valorParam.length()== 0)
out.print("<I>No existe valor</I>");
else
out.print(valorParam);
} else {
out.println("<UL>");
for (int i=0;
i<valoresDeParam.length; i++) {
out.println("<LI>" +
valoresDeParam[i]);
}
out.println("</UL>");
}
}
out.println("</TABLE>");
out.println("</BODY></HTML>");
out.close();
}
public void doPost(HttpServletRequest
request,HttpServletResponse
response)
throws ServletException,IOException {
doGet(request,response);
}
}
Taller Programacin III
J ava
264
Profesor: Marcelo Montecinos C.
Ejemplo: Lectura de parmetros
II
Taller Programacin III
J ava
265
Profesor: Marcelo Montecinos C.
Ejemplo: Uso de formulario
<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>
Taller Programacin III
J ava
266
Profesor: Marcelo Montecinos C.
Ejemplo: Uso de formulario
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>
Taller Programacin III
J ava
267
Profesor: Marcelo Montecinos C.
Ejemplo: Uso de formulario
Taller Programacin III
J ava
268
Profesor: Marcelo Montecinos C.
Ejemplo: Uso de formulario
Taller Programacin III
J ava
269
Profesor: Marcelo Montecinos C.
Ciclo de vida de un servlet
Servidor Servlet
Carga
init()
Servidor
Servlet
Manejo de
peticiones
Cliente
Cliente
service()
doGet()
doPost()
Servidor Servlet
Descarga
destroy()
Taller Programacin III
J ava
270
Profesor: Marcelo Montecinos C.
Almacenamiento del estado de un
cliente
Estado del cliente:
Situacin en la que se encuentra un cliente
en sucesivas peticiones al servidor.
Mecanismos:
Almacenamiento de sesiones en el servidor
Cookies
Taller Programacin III
J ava
271
Profesor: Marcelo Montecinos C.
Servlets vs CGI
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