curso java inacap

Post on 15-Dec-2014

6.267 Views

Category:

Technology

18 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

TRANSCRIPT

Taller Programación III

Java

1Profesor: Marcelo Montecinos C.

IntroducciIntroduccióón aln alLenguaje de ProgramaciLenguaje de ProgramacióónnJavaJava

Taller Programación III

Java

2Profesor: Marcelo Montecinos C.

¿¿ PorPor ququéé JAVA (JAVA (porpor ququéé tan tan famosofamoso ) ?) ?

Orientado al objeto (tendencia en boga)Simple (similar a c, sin complejidades)Multiplataforma (Windows, PowerMac, Unix)Robusto (hace chequeos, elimina punteros)Recolección de basura automáticaBibliotecas estándarRealmente portable en un 100%Facilidades para programación en redes

Taller Programación III

Java

3Profesor: Marcelo Montecinos C.

Java Java -- CaracterCaracteríísticassticas

Plataforma independiente (portable)

Dinámico (constantemente evolucionando)

Fortalece la seguridad y la portabilidad

Taller Programación III

Java

4Profesor: Marcelo Montecinos C.

JAVA JAVA eses un un lenguajelenguaje interpretadointerpretado

P1.java P1.classSalida

delProg.

Compilador de java (específico x plataforma) javac P1.java

Intérprete de java (específico x plataforma) java P1 (class)

Taller Programación III

Java

5Profesor: Marcelo Montecinos C.

Java -Máquina Virtual (JVM)

Hardware

Sistema Operativo

Ambiente Runtime

InterpretadorJava

JVM

Java Java -- CaracterCaracteríísticassticas

Taller Programación III

Java

6Profesor: Marcelo Montecinos C.

(Editor de texto)

(Programa traducido a bytes-code)

¿Cómo trabaja la tecnología Java?

¿qué sucede en este paso?

Java Java -- CaracterCaracteríísticassticas

Taller Programación III

Java

7Profesor: Marcelo Montecinos C.

Java Java -- CaracterCaracteríísticassticas¿Cómo trabaja la tecnología Java?

Taller Programación III

Java

8Profesor: Marcelo Montecinos C.

Estructura de un Programa en JavaEstructura de un Programa en Java

// Este es el esqueleto de un programa en Java

class <nombre del Programa>

{

/* Definiciones globales*/

/* Metodo Principal*/

/* Otros Métodos*/

}

Se utiliza para abrir un bloque de instrucciones.

Se utiliza para cerrar un bloque de instrucciones

Taller Programación III

Java

9Profesor: Marcelo Montecinos C.

Los comentarios en Java pueden hacerse de dos maneras:Estructura de un Programa en JavaEstructura de un Programa en Java

// Este es el esqueleto de un programa en Java

class <nombre del Programa>{

/* Definiciones globales*/

/* Este es el Método Principal*/

/* Otros Métodos*/

}

Si sólo quiero comentario de una línea coloco // al inicio de es esta

Si quiero comentario de mas de una línea coloco /* al inicio del comentario y */ al final

Taller Programación III

Java

10Profesor: Marcelo Montecinos C.

Estructura de un Programa en JavaEstructura de un Programa en Java// Este es el esqueleto de un programa en Java

class <nombre del Programa>{

/* Definiciones globales*/

/* Método Principal*/

/* Otros Métodos*/

}

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

Cada aplicación de Java debe tener un método principal llamado main, que define donde comienza el flujo del programa.

Deben seguir las convenciones utilizadas en algoritmo.

Taller Programación III

Java

11Profesor: Marcelo Montecinos C.

// Este es el esqueleto de un programa en Javaclass <nombre del Programa> {

/* Definiciones globales*/

public static void main (String args[]){

/* Definiciones locales*/......

/* cuerpo de instrucciones */......

}}

Todo el código de un método estará entre la llave de apertura ( { ) y la correspondiente llave de cierre ( } ).

Sintaxis del mSintaxis del méétodo todo MainMain

Taller Programación III

Java

12Profesor: Marcelo Montecinos C.

// Este es el esqueleto de un programa en Javaclass <nombre del Programa> {

/* Definiciones globales*/

public static void main (String args[])

{

/* 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 código que está fuera de su clase, cuando el programa comienza.

La palabra static permite que main sea llamado por el intérprete de Java antes de que se cree cualquier objeto .

La palabra void indica al compilador que main no devuelve ningún valor.

String args[], declara una variable argsque es una especie de vector que puede contener cadenas de caracteres.

Sintaxis del mSintaxis del méétodo todo MainMain

Taller Programación III

Java

13Profesor: Marcelo Montecinos C.

// Este es el esqueleto de un programa en Javaclass <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 método principal.

Sintaxis del mSintaxis del méétodo todo MainMain

Después de cada instrucción se coloca ;

Taller Programación III

Java

14Profesor: Marcelo Montecinos C.

EjemploEjemplo// Este programa escribe un texto

class EjemploTexto {

public static void main (String args[]) {

System.out.println(“El que pregunta algo que noentiende se siente ignorante solo una vez, el que no preguntalo que no entiende se sentirá ignorante toda su vida”);}

}

Taller Programación III

Java

15Profesor: Marcelo Montecinos C.

Salida de datosSalida de datos

Para mostrar un texto por pantalla puedo hacerlo de dos maneras:

System.out.println (texto);

System.out.print (texto);

Taller Programación III

Java

16Profesor: Marcelo Montecinos C.

Salida por pantallaSalida por pantalla

import java.io.*;

System.out.println(elementos);System.out.println();System.out.print(elementos);

System.out.println("hola"); // escribe "hola"

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

double d=6.4; System.out.println("d="+d); // escribe d=6.4;

Taller Programación III

Java

17Profesor: Marcelo Montecinos C.

Un primer Un primer programaprograma en JAVAen JAVA

public class Hello {

public static void main(String args[ ]) {

System.out.println(“Hola Mundo“);}

}Todo programa es escrito como el método estático llamado main en unaclase cualquieraEste método se empieza a ejecutar cuando se invoca el intérprete de java para una clase dadaargs es un arreglo de Strings que contiene los parámetroscon los que fué invocado el programa.

Taller Programación III

Java

18Profesor: Marcelo Montecinos C.

DeclaraciDeclaracióón de Variablesn de Variables

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

DeclaraciDeclaracióón de Constantes:n de Constantes:

static final tipo nombre = valor;

Taller Programación III

Java

19Profesor: Marcelo Montecinos C.

DefiniciDefinicióón de variablesn de variablesLos 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 Programación III

Java

20Profesor: Marcelo Montecinos C.

Tipos de datosTipos de datos

4 5237

Integer (enteros)

13.45Floating Point(punto flotante)

Numérico

Taller Programación III

Java

21Profesor: Marcelo Montecinos C.

Tipos de datosTipos de datos

Integer (enteros)

Byte : 8 bits -27 ..... 27 –1

Short : 16 bits

Int : 32 bits

Long : 64 bits

Taller Programación III

Java

22Profesor: Marcelo Montecinos C.

Tipos de datosTipos de datos

Float : 32 bits

Double : 64 bits

Floating Point(punto flotante)

Taller Programación III

Java

23Profesor: Marcelo Montecinos C.

Tipos de datosTipos de datos

Caracteres char : ‘a’, ‘z’, ‘D’, ‘%’, ‘s’,’#’….

Cadenas de caracteres

String: “Pedro Garcia”“Juan Lopez””Rojo”

boolean: truefalse

Lógicos

Taller Programación III

Java

24Profesor: Marcelo Montecinos C.

TiposTipos primitivosprimitivos de de datosdatos en JAVAen JAVA

enteros: int, long, short, byteConst. 1, -1, 1024, 1Lreales: float, doubleConst. 1.0, -3.14159, 1.5e4, 1.0fcaracter: char

Const. ‘a’, ‘X’, ‘@’lógico: boolean

Const. true, falseConstantes de String: “Hola“,“12 de Abril“

Taller Programación III

Java

25Profesor: 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 =“María”;str = “blanco”;

} }

DeclaraciDeclaracióón de variablesn de variables

Taller Programación III

Java

26Profesor: Marcelo Montecinos C.

AsignaciAsignacióón de valores a variablesn de valores a variables

Se puede dar valores a las variables en el momento de su declaración o en una instrucción de asignación independiente una vez que ha sido declarada.

Se utiliza el signo = en ambos casos.

Ejemplo:

int x =5;boolean t;t = true;

Taller Programación III

Java

27Profesor: Marcelo Montecinos C.

AsignaciAsignacióón de valores a variablesn de valores a variables

Las asignaciones también pueden ser expresiones en notación INFIJA.

Ejemplo:monto = pvp * cantidad ;

Donde pvp y cantidad deberán ser variables anteriormente declaradas y con valor previo asignado.

Taller Programación III

Java

28Profesor: Marcelo Montecinos C.

AsignaciAsignacióón de valores a variablesn 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 Programación III

Java

29Profesor: Marcelo Montecinos C.

AsignaciAsignacióón de valores a variablesn de valores a variables

Algunas de las operaciones a utilizar en la asignación:

() indica prioridad de ejecución* multiplicación/ división decimal + , - suma, resta

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

Taller Programación III

Java

30Profesor: Marcelo Montecinos C.

OperadoresOperadores

Igualdad y desigualdad: == , !=

Comparación: <, <=, >, >=Suma y resta unarios: +, -Suma, multiplicación, división y módulo: +, -, *, /, %Incremento y decremento prefijos y posfijos: ++, --Desplazamiento con signo y sin signo: <<, >>, >>>Negación lógica unaria de bits: ~Lógica de bits: &, |, ^Lógica booleana: &&, ||

Taller Programación III

Java

31Profesor: Marcelo Montecinos C.

AsignaciAsignacióónn

Utilización de operadores:var1 = var2 + var3; // asignar a var1 el valor de var2 + var3var1 = var2 - ver3; // asignar a var1 el valor de var2 - var3var1 = var2 * ver3; // asignar a var1 el valor de var2 * var3var1 = var2 / ver3; // asignar a var1 el valor de var2 / var3var1 = var2 % ver3; // asignar a var1 el valor de var2 % var3

Asignaciones de incremento decremento:

variable++; // añadir uno a variablevariable--; // restar uno a varibale

variable += exp; // añadir exp a variablevariable -= exp; // restar exp a variable

Taller Programación III

Java

32Profesor: Marcelo Montecinos C.

AsignaciAsignacióón de valores a variablesn 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 Programación III

Java

33Profesor: Marcelo Montecinos C.

ExpresionesExpresiones

Grupos de PrecedenciaGrupo 0: ( )Grupo 1: ++, --, + (unario), - (unario)Grupo 2: *, /, %Grupo 3: +, -, + (concatenación)

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

Taller Programación III

Java

34Profesor: Marcelo Montecinos C.

ExpresionesExpresiones y y asignaciasignacióónn

Aritmeticas: suma + 20 * c / (mod % 3)Relacionales: a > b, b >= c, c != 4, a == 0De String: “hola “+ nombre + “ hoy es “+

dia + “de”+mesCasts: (int) pi (pi = 3.1) (int) (Math.random()*100)+1)Otros: a == 1 ? a+1 : a-1Asignacion: a = 1;Asignación como operador: a = b = c = d = 0;boolean cero = ( b = c - 10) == 0;

Taller Programación III

Java

35Profesor: Marcelo Montecinos C.

Conversiones entre tiposConversiones entre tipos

Asignar una variable a otra cuyo tipo es mayor de tamaño:

byte => short => int => long => float => double

Para pasar de un tipo a otro menor en tamaño, tenemos que hacer una conversión explícita de tipos:º

(tipo)expresion

Taller Programación III

Java

36Profesor: Marcelo Montecinos C.

ConversionesConversiones de de tipotipoJava no reclama si un tipo de menor rango se convierte as unode mayor rango.

byte < short < int < long < float < double

Tipo Bits Rangoint 32 -2**31 .. 2**31-1short 16 -2**15 .. 2**15-1byte 8 -2**7 .. 2**7-1long 64 -2**63 .. 2**63-1float 32 -10**32 .. 10**32

double 64 -10**300 .. 10**300

Taller Programación III

Java

37Profesor: Marcelo Montecinos C.

EjemplosEjemplos

int i = 1;long l = i; //okl = 1000000000000;float f = l; //okdouble d= 1.0e24; int i = d; // Error float f = 1.0f; int i = f; // Errorshort s = i; //Errordouble d = 1.0; int i = (int)d; //okint i = 256;byte b = (byte)i; //ok pero b ==0;

Taller Programación III

Java

38Profesor: Marcelo Montecinos C.

Excepciones definidas por el usuarioExcepciones definidas por el usuario

public class nombre extends Exception {public nombre() {}public nombre(String s) { }

}

throw new nombre(“mensaje”);

Taller Programación III

Java

39Profesor: Marcelo Montecinos C.

EjemploEjemplo

public void leeArchivo(String nombre) throws IOException {BufferedReader fin = new BufferedReader(new FileReader(nombre));try {

while(true) {cadena = fin.readLine();System.out.println(cadena);

}} catch (EOFException e) {

System.out.println("Fin del archivo");}

}

Taller Programación III

Java

40Profesor: Marcelo Montecinos C.

Entrada desde tecladoEntrada desde teclado

import java.io.*;

BufferedReader entrada = newBufferedReader(new InputStreamReader(System.in));

String cadena = entrada.readLine();

Taller Programación III

Java

41Profesor: Marcelo Montecinos C.

Lectura de nLectura de núúmerosmeros

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

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

Taller Programación III

Java

42Profesor: Marcelo Montecinos C.

Lectura de datosLectura de datosEste programa se encarga de pedir el ingreso de un número, para luego mostrarlo en pantalla.

/* 1) */ import java.io.*;

/* 2) */ public class LectTecladoApp

/* 3) */ {

/* 4) */ public static void main(String Arg[ ]) throws IOException

/* 5) */ {

/* 6) */ BufferedReader entrada= new BufferedReader(new InputStreamReader(System.in));

/* 7) */ int num;

/* 8) */ System.out.print("Ingrese numero : ");

/* 9) */ num = Integer.parseInt(entrada.readLine( ));

/* 10) */ System.out.println("Ud ingreso el numero : " + num );

/* 11) */ }

/* 12) */ }

Taller Programación III

Java

43Profesor: Marcelo Montecinos C.

1) Se invoca a la librería de entrada y salida io(Input,Output), para usar en nuestro programa todas sus clases disponibles.

import : Indica que se tienen importar (incluir) cierta librería. java.io : Acceso a la librería io. java.io.* : Selecciona todas las clases disponibles.

4) Declaración del programa principal con opción de control de errores.

throws IOException : Indica que cualquier error de entrada o salida de datos, será manejado en forma interna (automática) por el programa.

6) Se crean las instancias necesarias para crear un objeto que permita manejar la lectura de datos por teclado.

Taller Programación III

Java

44Profesor: Marcelo Montecinos C.

BufferedReader : Clase perteneciente a la librería io que crea un buffer de entrada donde se almacenarán los carácteres ingresados por teclado. in : Variable de tipo BufferedReader.

7) Se declara la variable num de tipo entero (int).

8) Se llama al método print para escribir un mensaje en pantalla dejando el cursor inmediatamente a continuación del mensaje.

Taller Programación III

Java

45Profesor: Marcelo Montecinos C.

9) Se lee el número, asignando el valor a la variable num.

in.readline : Método que retorna el "string" leído por teclado. Integer.parseInt : Método que convierte un string (cadena de caracteres) en un dato numérico de tipo int. Integer : Clase estándar que no necesita ser instanciada(está disponible por defecto).

10) Se llama al método println para escribir un mensaje en pantalla que consta de una parte estática y otra variable.

El método println y print soportan varios objetos concatenados mediante el operador + , logrando imprimir cadenas de carácteres y variables numéricas.

Taller Programación III

Java

46Profesor: Marcelo Montecinos C.

Estructuras de un ProgramaEstructuras de un Programa

Taller Programación III

Java

47Profesor: Marcelo Montecinos C.

Debemos recordar: Debemos recordar:

Los espacios en blanco se permiten entre los elementos del código fuente. Los espacios, los tabuladores y nuevas líneas deben usarse para darlegibilidad al código.

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 código de un métodoo bloque de instruccionesestará entre la llave de apertura( { ) y la correspondiente llave de cierre ( } ).

Todas las instrucciones terminan con punto y coma “ ; ”

Taller Programación III

Java

48Profesor: Marcelo Montecinos C.

Palabras ReservadasPalabras ReservadasSon palabras que tienen unsignificado especial dentrodel lenguaje , en nuestrocaso 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 Programación III

Java

49Profesor: Marcelo Montecinos C.

Identificadores Identificadores

Son identificadores, los nombres que reciben las variables, constantes, clases, métodos o instancias de un programa.

Comienzan con una letra y pueden contener letras y números.

Son sensitivos a las mayúsculas y minúsculas.

Pueden contener palabras claves del lenguaje siempre y cuando no sean completamente iguales.

Pueden tener cualquier longitud

Taller Programación III

Java

50Profesor: Marcelo Montecinos C.

Algunas convenciones en cuanto a identificadoresAlgunas convenciones en cuanto a identificadores..

Programas: deben ser nombres, escritos en modo mixto y con la primera letra de cada palabra en mayúsculas.

Métodos: deben ser verbos, en modo mixto, con la primera letra en minúscula. Las palabras se separarán usando letras mayúsculas.

Variables: deben ser nombres que permitan deducir lo que contienen, siguen las mismas reglas que los subprogramas. Los identificadores de una sola letra deben evitarse. (con sus excepciones)

Taller Programación III

Java

51Profesor: Marcelo Montecinos C.

InicializaciInicializacióón de Variablesn de Variables.En Java, cuando una variable es creada, Java le da un valor inicial según la siguiente tabla.

byte,short, int 0long 0Lfloat 0.0fdouble 0.0dchar ‘\u0000’(null)boolean falsevariables referencia null

Taller Programación III

Java

52Profesor: Marcelo Montecinos C.

Java Java ArreglosArreglos

Taller Programación III

Java

53Profesor: Marcelo Montecinos C.

ArreglosArreglos

Es un tipo especial de dato al que se hacereferencia por un nombre.

Está compuesto por una colección de elementos del mismo tipo de datos que se almacenan consecutivamente en memoria.

Pueden ser creados de cualquier tipo.

Taller Programación III

Java

54Profesor: Marcelo Montecinos C.

ArreglosArreglosSe pueden declarar como: int[] A; intA[];

Esto es la declaración del puntero al arreglo, no se especifica tamaño en la declaración;Inicialización: A = new int[10]; int[] A = new int[10];

Empiezan desde 0: for(int i=0; i < 10; ++i) A[i] = 0;

Se puede averiguar el largo: intlargo = A.length;

length es un campo del objetoarreglo y no un método. No esnecesario el método ya que el tamaño, como el contenido de un

Taller Programación III

Java

55Profesor: Marcelo Montecinos C.

ArreglosArreglos

Se utilizan para agrupar informaciónrelacionada

Pueden tener ser de una o más dimensiones. Los de una dimensión los denominaremos vectoresy de los de dos dimensiones matrices o tablas

Para accesar un elemento particular del arreglo, se utilizan los índices

Taller Programación III

Java

56Profesor: Marcelo Montecinos C.

VectoresVectoresEjemplo de un vector que contiene 7 números enteros

3 6 8 1 0 4 2

0 1 2 3 4 5 6 índices

Elementos delvector

Elemento que ocupa laposición 3 en el vector

Taller Programación III

Java

57Profesor: Marcelo Montecinos C.

VectoresVectoresDeclaraciDeclaracióónn en Javaen Java

tipoDato[ ] nombreVariable;

tipoDato nombreVariable[ ];

Para declarar un vector de número enteros, al cual se le dá el nombre de miVectormiVector se puede hacer de la siguientemanera:

int[ ] miVector;// o tambiénint miVector[ ];

Taller Programación III

Java

58Profesor: Marcelo Montecinos C.

CreaciCreacióónnint[] miVector;// o tambiénint miVector[];

Cuando se declara una variable vector, esta no tieneningún valor. Antes de asignar cualquier valor, se debereservar un espacio en memoria, utilizando el operadornew y asignarlo a la variable.

DeclaraciDeclaracióónn VectoresVectores

nombreVector = new tipoDato[tamaño];

miVector = new int[7];Continuando con el ejemplo anterior

Taller Programación III

Java

59Profesor: Marcelo Montecinos C.

VectoresVectoresCreación:

Creación:

miVector = new int[7];

Al reservar espacio para los elementos de un vector, mediante new, se inicializa automáticamente en cero sucontenido.Cuando se ejecuta esta sentencia de creación , la varianble miVector, hará referencia a un vector de 7 elementos enteros.

New: operador especial que reserva espacio en memoria

Taller Programación III

Java

60Profesor: Marcelo Montecinos C.

VectoresVectores

Inicialización:

Dependiendo del tipo de datos que contenga un vector,estos son inicializados por defecto con los siguientes valores:

Si son vectores numéricos, se inicializan en cero.

Si son vectores de caracteres, se inicializan en ‘/u000’.

Si son vectores booleanos, se inicializan en false.

Taller Programación III

Java

61Profesor: Marcelo Montecinos C.

VectoresVectoresCreación:

miVector = new int[7];

Inicialización

Un vector completo se puede inicializar de la siguientemanera

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

Taller Programación III

Java

62Profesor: Marcelo Montecinos C.

VectoresVectoresCreación:miVector = new int[7];

UtilizaciónnombreVector [índice]

Para accesar un elemento de un vector, se coloca el nombre del vector y entre corchetes el índice del elementoque se desea.

3 6 8 1 0 4 2

0 1 2 3 4 5 6Por ejemplo, si se desea obtener el número 8 del siguiente vector:

miVector [2]

Taller Programación III

Java

63Profesor: Marcelo Montecinos C.

VectoresVectoresCreación:

miVector = new int[7];

Utilización

Los índices en un vector, van desde 0 hasta el tamaño – 1.El tamaño de un vector se obtiene con el método length, con la siguiente sintaxis:

nombreVector.length

En nuestro ejemplo:

miVector.length

Taller Programación III

Java

64Profesor: Marcelo Montecinos C.

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

VectoresVectores

class EjemploVec{

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

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

}

Taller Programación III

Java

65Profesor: Marcelo Montecinos C.

VectoresVectores

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 Programación III

Java

66Profesor: Marcelo Montecinos C.

MatricesMatrices0 1 2 3 4 5

0

1

2

3

4

5

(matriz 2 3)

(matriz 4 0)

Taller Programación III

Java

67Profesor: Marcelo Montecinos C.

MatricesMatrices

Son arreglos de dos dimensiones

La información es dispuesta en filas y columnas

Para accesar un elemento se deben especificardos subíndices: fila y columna.

Pueden ser creadas de cualquier tipo

Pueden ser vistos como vectores de vectores

Taller Programación III

Java

68Profesor: Marcelo Montecinos C.

MatricesMatrices

Declaración:

tipoDato nombreVariable[ ][ ];

Para declarar una matriz de números enteros, llamadamiMatriz, se debe hacer de la siguiente manera:

int miMatriz[ ][ ];

Taller Programación III

Java

69Profesor: Marcelo Montecinos C.

MatricesMatrices

Creación:

nombreMatriz = new tipoDato[filas][columnas];

Para crear una matriz de 2 filas y 3 columnas de números enteros, llamada miMatriz, se escribe

miMatriz = new int [2][3];

Taller Programación III

Java

70Profesor: Marcelo Montecinos C.

MatricesMatrices

Creación: miMatriz = new int [2][3];

genera

miMatriz[0][0] miMatriz[0][1] miMatriz[0][2]

miMatriz[1][0] miMatriz[1][1] miMatriz[1][2]

Taller Programación III

Java

71Profesor: Marcelo Montecinos C.

MatricesMatrices

Creación: miMatriz = new int [2][3];

Primero crea un vector de 2 elementos

Elemento 0

Elemento 1

Taller Programación III

Java

72Profesor: Marcelo Montecinos C.

MatricesMatrices

Creación: miMatriz = new int [2][3];

Luego cada elemento lo transforma en un vector de 3 elementos

miMatriz[0][0] miMatriz[0][1] miMatriz[0][2]

miMatriz[1][0] miMatriz[1][1] miMatriz[1][2]

Fila 0

Fila 1

Columna 2Columna 0

Taller Programación III

Java

73Profesor: Marcelo Montecinos C.

MatricesMatricesEjemplo: Crear una matriz de 2 filas y 3 columnas, llenarla y luego mostrar su contenido.

class EjemploMat{

public static void main (String arg[]){

int miMatriz[][];

miMatriz = new int[2][3];llenarMatriz(miMatriz);mostrarMatriz(miMatriz);

}

Taller Programación III

Java

74Profesor: Marcelo Montecinos C.

static void llenarMatriz(int m[][]){

for (int i=0; i < 2; ++i){

for (int j=0; j< 3; ++j){

System.out.println("Intro. Elem. " + i + " " + j);m[i][j] = CTeclado.ReadInt();

}}

}static void mostrarMatriz(int m[][]){

for (int i=0; i < 2; i++){

for (int j=0; j< 3; j++){

System.out.print(m[i][j] + " ");}System.out.println();

}}}

Taller Programación III

Java

75Profesor: Marcelo Montecinos C.

EjerciciosEjercicios

1. Se deben crear tres vectores vecA, vecB y vecC de m elementos cada uno; se debe crear otro arreglo vecNuev donde cada elemento sea la suma de los elementos de cada arreglo.

2. Se deben crear dos vectores. En uno se colocarán los carnet de los estudiantes que aprobaron Cálculo 1, en otro los que aprobaron Etica. Crear un tercer arreglo que contenga los carnet de los estudiantes que aprobaron ambas materias.

Taller Programación III

Java

76Profesor: Marcelo Montecinos C.

EjerciciosEjercicios

3. Se deben crear dos vectores uno de ellos de nelementos, el otro de m elementos . Llenarlos con números ,colocándo en cada uno los elementos ordenados de menor a mayor.

Crear un tercer vector de tamaño n+m el cual contendrá los elementos de los vectores ordenados de menor a mayor.

Taller Programación III

Java

77Profesor: Marcelo Montecinos C.

OperadoresOperadores

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

Vamos a estudiar lossiguientes operadores:

Aritméticos : binarios y unitarios.

Operadores de Asignación.

Relacionales.

Lógicos.

Taller Programación III

Java

78Profesor: Marcelo Montecinos C.

Operadores AritmOperadores Aritmééticos Binariosticos Binarios.

Operador Significado

+ Suma- Resta* Multiplicación/ División entera

(si los operandos son de tipo entero)

/ División real(si los operandos son reales)

% Módulo, resto de división entera(no es necesario que los operandossean reales)

Taller Programación III

Java

79Profesor: Marcelo Montecinos C.

Operadores AritmOperadores Aritmééticos Binariosticos 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 Programación III

Java

80Profesor: Marcelo Montecinos C.

Operadores AritmOperadores 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 expresión mayor.

Taller Programación III

Java

81Profesor: Marcelo Montecinos C.

Operadores AritmOperadores Aritmééticos Unitariosticos Unitarios.Veamos un ejemplo:

class CPrueba{

public static void main(String arg[]) {

int i;i=5;//incrementando antes o después de a

System.out.println("el valor de i++ es "+ i++);

System.out.println("el valor de i++ es "+ ++i);}

}

57

Taller Programación III

Java

82Profesor: Marcelo Montecinos C.

Operadores AritmOperadores Aritmééticos Unitariosticos Unitarios.Veamos un ejemplo:

class CPrueba{

public static void main(String arg[]) {

int i;i=5;//decrementando antes o después de a

System.out.println("el valor de i-- es "+ i--);

System.out.println("el valor de i-- es "+ --i);}

}

53

Taller Programación III

Java

83Profesor: Marcelo Montecinos C.

Operadores de AsignaciOperadores de Asignacióón.n.

Operador Significado

= asignación+= asignación y suma-= asignación y resta*= asignación y mult./= asignación y div.%= asignación y mod.

Taller Programación III

Java

84Profesor: Marcelo Montecinos C.

Operadores de AsignaciOperadores de Asignacióónn..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 Programación III

Java

85Profesor: 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 Programación III

Java

86Profesor: Marcelo Montecinos C.

Operadores LOperadores Lóógicosgicos.

Operador Significado

&& and|| or

Tablas de valores lógicos:

AND T FT T FF F F

OR T FT T TF T F

Taller Programación III

Java

87Profesor: Marcelo Montecinos C.

OperadoresOperadoresOrden de precedencia en los operadores:

1. ++ --2. * / %3. + -4. < > <= >=5. == !=6. &7. |8. = *= /= %= +=

-=

Taller Programación III

Java

88Profesor: Marcelo Montecinos C.

Expresiones LExpresiones LóógicasgicasLas expresiones lógicas se definen como un conjunto de operadores y operandos.

Son las que devuelven como resultado un valor booleano(true o false).

Contienen operadores relacionales y/o operadores lógicos.

Ejemplo:(X >= Y)(X >= Y) && (X>= Z)(A != 0) || (A != 5)

Taller Programación III

Java

89Profesor: Marcelo Montecinos C.

Los Los argumentosargumentos de un de un programaprogramaSi se invoca al programa P1 de ka siguientemanera: java P1 estos son parametrosentonces en el programa se tendrá args[0] = “estos”, args[1] = “son”, args[2] = “parametros”.Se reciben como un arreglo de strings en la variable declarada como parámetro del programaString args[]

public class Parametros {public static void main(String args[]) {

for(int i=0; i < args.length; i++)

System.out.pritnln(args[i]);}

}

Taller Programación III

Java

90Profesor: Marcelo Montecinos C.

ExceptionsExceptionsUna Exeption es un evento que rompe la ejecución normal de un programa (debido a un error). Cuando ocurre un evento como este un objeto de la clase Exception es generado o “lanzado” (throw). Existen varios tipos de clases derivadas Exception dependiendo de que fue lo que originó el evento: IOException, IndexOutOfBoundsException, UnknownHostException, etc.Cuando esto sucede, el intérprete de JAVA busca un exception handler adecuado para esta exception, que ejecuta un pedazo de código(programado por el usuario) que debería reaccionar en forma adecuadaa esta falla del programa. Esto se llama “atrapar una exception”(catch). Cuando no se ha escrito ningún ningún handler que atrape estaexception, el programa se detiene (se cae). La razón para introducirexceptions es que la programación para reaccionar ante fallas se hacemás fácil (no hay que preverlas todas).

Taller Programación III

Java

91Profesor: Marcelo Montecinos C.

CCóómomo programarprogramar Exception Handlers ?Exception Handlers ?

Forma general: en un bloque try-catchtry {

lista de instrucciones que pueden generar un error}

catch (ExceptionTipo1 e) {lista de instrucciones para enmendar el error de Tipo1

{catch (ExceptionTipo2 e) {

lista de instrucciones para enmendar el error de Tipo1}

catch (ExceptionTipo3 e) {lista de instrucciones para enmendar el error de Tipo1

}Si no se conoce o no importa el tipo de exception específico se puedeponer Exception y se atrapan todos (basta un solo bloque cach). Sihay más de un bloque se ejecuta sólo un bloque catch según el tipode error.

Taller Programación III

Java

92Profesor: Marcelo Montecinos C.

EjemploEjemplo de Exception I/O de Exception I/O

Muchas veces el compilador OBLIGA a programar el código de modo de atraparexceptions cuando estas pueden suceder con cierta probabilidad. Las másfrecuentes son las de IO.

import java.io.*; //importa clases de la biblioteca IOpublic class ProgrmaÍO{

public static void main(String args[]) {BufferedReader in; PrintWriter out; String line;try { in = new BufferedReader(new FileReader(“Origen.txt”))};catch (IOException e) {

System.out.println(“error en apertura”); System.exit(1);}try { out = new PrintWriter( new FileWriter(“Destino.txt”))};catch (IOException e) {

System.out.println(“error en creacion”); System.exit(1);}try {

while( (line = in.readLine()) != null)out.println(line);

catch (IOException e) { System.out.println(“problemas”);}}

}

Taller Programación III

Java

93Profesor: Marcelo Montecinos C.

EjemploEjemplo de Exception I/O (2)de Exception I/O (2)

Se puede omitir poner tantos try-catch si no importa dondesucedió

import java.io.*; //importa clases de la biblioteca IOpublic class ProgrmaÍO2{

public static void main(String args[]) {BufferedReader in; PrintWriter out; String line;try {

in = new BufferedReader(new InputStreamReader(System.in));

out = new PrintWriter( new FileWriter(“Destino.txt”));System.out.println(“ingrese linea”);while( (line = in.readLine()) != “”){

out.println(line);System.out.println(“ingrese linea”);

}catch (Exception e) { System.out.println(“problemas”);}

}}

Taller Programación III

Java

94Profesor: Marcelo Montecinos C.

EjemploEjemplo de Exception I/O (3)de Exception I/O (3)También se puede evitar tener que preocuparse de las exceptions siemprey cuando el método que la pordría generar se declare como que “lanza”una excepción:

import java.io.*; //importa clases de la biblioteca IOpublic class ProgrmaÍO3{

public static void main(String args[]) throws IOException{BufferedReader in; PrintWriter out; String line;in = new BufferedReader(new FileReader(“Origen.txt”));out = new PrintWriter( new FileWriter(“Destino.txt”));while( (line = in.readLine()) != null)

out.println(line);}

}

Esto implica que el programa se caerá si hay una excepción durante la generación del programa. En otros casos se puede declarar que uno o más métodos lanzan una IOException y el programa o método principal se preocupa de escribir el Exception handler.

Taller Programación III

Java

95Profesor: Marcelo Montecinos C.

Estructuras de DecisiEstructuras de Decisióónn

Taller Programación III

Java

96Profesor: Marcelo Montecinos C.

EstructurasEstructuras de Decisión

if (expresión lógica){

<bloque de instrucciones >}else{

<bloque de instrucciones>}

Taller Programación III

Java

97Profesor: 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 DecisiEstructuras de Decisióónn

Taller Programación III

Java

98Profesor: Marcelo Montecinos C.

Estructuras de DecisiEstructuras de DecisióónnDecisión Anidada

if (expresión lógica){

if (expresión lógica){

<bloque de instrucciones >}else{

<bloque de instrucciones >}

}else{

<bloque de instrucciones >}

Taller Programación III

Java

99Profesor: Marcelo Montecinos C.

Veamos un ejemplo de Decisión Anidada

class CPrueba{

public static void main(String arg[]) {

int a , b, c;a = 1; b = 3;if (a < b) {

if (b > c) {

a++;}else {

b++;}

}else {

a = a + b;}

}}

Taller Programación III

Java

100Profesor: Marcelo Montecinos C.

Estructuras de DecisiEstructuras de DecisióónnVeamos otro ejemplo de Decisión Anidada

if (X > 10) {

if (X < 20) {

System.out.println( X + ” esta entre 10 y 20”); }else{

System.out.println( X + “es mayor a 20”); }

}else{

if (X > 0) {

System.out.println( X + “entre 1 y 10”); }else{

System.out.println( X + “igual o menor a cero”); }

}

Taller Programación III

Java

101Profesor: Marcelo Montecinos C.

Estructuras de DecisiEstructuras de DecisióónnEjercicio

Deseamos hacer un programa que dado el sueldo de una persona, le aumente un 50% si la persona ganamenos de 180000 Bs ó un 20% si gana más.

if (sueldo < 18000) {

sueldo *= 1.5;}else{

sueldo *= 1.2;}

Taller Programación III

Java

102Profesor: Marcelo Montecinos C.

Estructuras de DecisiEstructuras de Decisióónn

ifif –– elseelse -- ifif

Llamada también : alternativas múltiples.

Realiza una verificación de las expresioneslógicas, y cuando consigue una que se cumple, ejecuta su bloque de instrucciones y no toma en cuenta el resto de las expresiones.

Si no se cumple ninguna expresión, ejecuta el else.

No necesariamente debe tener else.

Taller Programación III

Java

103Profesor: Marcelo Montecinos C.

Estructuras de DecisiEstructuras de Decisióónn

ifif –– elseelse -- ifif

Haremos un programa que me permita evaluaruna función, en base a un número d.

Si d > 0 (-4 + Math.sqrt (d))/2

Si d = 0 -4/2

Si d < 0 (-4 + Math.sqrt (Math.abs (d)) )/2

Taller Programación III

Java

104Profesor: Marcelo Montecinos C.

Estructuras de DecisiEstructuras de Decisióónnclassclass CEvaluarCEvaluar{{

publicpublic staticstatic voidvoid mainmain ((StringString argsargs[])[]){{

intint d;d;doubledouble x;x;System.out.printlnSystem.out.println ("Introduzca el valor de d ");("Introduzca el valor de d ");d = d = CTeclado.ReadIntCTeclado.ReadInt();();ifif (d > 0)(d > 0){{

x = (x = (--4 + 4 + Math.sqrtMath.sqrt (d))/2;(d))/2;}}elseelse ifif (d == 0)(d == 0){{

x = x = --4/2;4/2;}}elseelse{{

x = (x = (--4 + 4 + Math.sqrtMath.sqrt ((Math.absMath.abs (d)) )/2;(d)) )/2;}}System.out.printlnSystem.out.println ("El valor de ("El valor de x x es " + x);es " + x);

}}}}

Taller Programación III

Java

105Profesor: Marcelo Montecinos C.

Estructuras de DecisiEstructuras de Decisióónnswichtswicht

switch (expr1){

case valor1:instrucciones;break;

case valor2:instrucciones;break;

default:instrucciones;break;

}

Taller Programación III

Java

106Profesor: Marcelo Montecinos C.

switchswitch

expr1 debe ser compatible con valores enteros o carácter.

Cuando la expresión coincide con algún literal de la sentencia case, se ejecutan las instrucciones correspondientes a ese case

Si ninguna de las constantes coincide con la expresión, 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 ejecución salte a la primera línea de código que sigue a la sentencia swicht completa.

La sentencia break es opcional, de omitirse la ejecución continuará en el siguiente case.

switch (expr1){

case valor1:instrucciones;break;

case valor2:instrucciones;break;

default:instrucciones;break;

}

Estructuras de DecisiEstructuras de Decisióónn

Taller Programación III

Java

107Profesor: Marcelo Montecinos C.

Estructuras de DecisiEstructuras de Decisióónn

Veamos un ejemplo con switch en Java

switch (numEst) {case 20:

numEst += 3;break;

case 50:numEst++;break;

default:numEst--;break;

}

Taller Programación III

Java

108Profesor: Marcelo Montecinos C.

Estructuras de DecisiEstructuras de Decisióónn

VeamosVeamos unun ejemploejemplo concon switchswitch

Haremos un programa que reciba un mes (número) y nos indique la estación que hay en ese mes.

Taller Programación III

Java

109Profesor: Marcelo Montecinos C.

switchswitch (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 Programación III

Java

110Profesor: 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 = 2La salida es:Invierno

Si mes = 12La salida es:Estamos enInvierno

Taller Programación III

Java

111Profesor: Marcelo Montecinos C.

EjerciciosEjercicios

1. Desarrolle un programa en Java que le permita leer el nombre , la edad , el sexo y el estado civil de cualquier persona e imprima el nombre de la persona si es un hombre casado y mayor de 40 años o una mujer soltera menor de 50 años.

2. Desarrolle un programa en Java para leer el nombre de un empleado, el salario básico por hora y el número de horas trabajadas durante una semana. Calcule el salario neto , teniendo en cuenta que si el número de horas trabajadas durante la semana es mayor de 48 horas, esas horas demás se consideran horas extras y tienen un recargo del 35%. Imprima el nombre del empleado y su salario neto.

Taller Programación III

Java

112Profesor: Marcelo Montecinos C.

EjerciciosEjerciciosEn la tienda “Sigo de pie” los empleados reciben una cierta comisión dependiendo del código del artículo que vendan.

Código del artículo Cálculo de la comisión

1 15% del precio de venta

2 40% de la diferencia del precio de venta y el precio mínimo de venta

3 10% del precio mínimo de venta más el 50% de la diferencia del precio de venta

y el precio mínimo de venta4 Bs. 100 por unidad más el 5% del precio

mínimo de venta5 Bs. 500 por unidad

Hacer un programa que imprima el Nombre del vendedor, el código del artículo que vendió y la comisión que se ganó.

Taller Programación III

Java

113Profesor: Marcelo Montecinos C.

ResumenResumenEn resumen, los conceptos vistos fueron :

if (expresión lógica){ bloque de instrucciones }else{ bloque de instrucciones }

if – else - ifswitch (expr1)

{case valor1: instrucciones;

break;case valor2: instrucciones;

break;default: instrucciones;

break;}

Instrucciones

Taller Programación III

Java

114Profesor: Marcelo Montecinos C.

SentenciasSentencias de de IteraciIteracióónn

Taller Programación III

Java

115Profesor: Marcelo Montecinos C.

SentenciasSentencias de de IteraciIteracióónn

Las sentencias de iteración en Java son: while, do-while y for.

Se utilizan para ejecutar varias veces un conjunto de instrucciones.

Cada sentencia de repetición tiene unautilidad adecuada dependiendo de la situación.

Taller Programación III

Java

116Profesor: Marcelo Montecinos C.

while while SentenciasSentencias de de IteraciIteracióónn

while (expresión lógica){

bloque de instrucciones;

}

Ejemplo: Mostrar los números del 0 al 9

int i =0;while (i < 10){

System.out.println(“el valor de i es : “ + i);i++;

}

Taller Programación III

Java

117Profesor: Marcelo Montecinos C.

while while SentenciasSentencias de de IteraciIteracióónn

Evalúa su expresión condicional al inicio del bucle.

Repite un bloque de instrucciones, mientrassu expresión sea verdadera.

Cuando la expresión es falsa, el control pasa a la siguiente línea de código que hay inmediatamente después del bucle.

Puede suceder que el bloque de intruccionesnunca se ejecute.

Taller Programación III

Java

118Profesor: Marcelo Montecinos C.

class class CalFacturaCalFactura{{

public static void main(String public static void main(String argsargs[ ])[ ]){{

char char respresp;;double double monto,isvmonto,isv;;System.out.println("IndiqueSystem.out.println("Indique sisi deseadesea calcularcalcular facturafactura s/n");s/n");respresp==CTeclado.ReadCharCTeclado.ReadChar( );( );while ((while ((respresp =='s') || (=='s') || (respresp =='S')) =='S'))

{{System.out.println("IndiqueSystem.out.println("Indique el el montomonto de la de la facturafactura");");montomonto==CTeclado.ReadDoubleCTeclado.ReadDouble();();isvisv=(=(montomonto*14.5/100);*14.5/100);System.out.println("ElSystem.out.println("El montomonto a a pagarpagar de ISV de ISV eses :"+:"+isvisv););System.out.println("DeseaSystem.out.println("Desea calcularcalcular parapara otraotra facturafactura");");respresp==CTeclado.ReadCharCTeclado.ReadChar();();

}}} }

}}

Taller Programación III

Java

119Profesor: Marcelo Montecinos C.

dodo--whilewhileSentenciasSentencias de de IteraciIteracióónn

do {

bloque de instrucciones; }while (expresion lógica);

Ejemplo:

Mostrar los númerosdivisibles por 3 menores a 20

x=0;do{

x = x + 3;System.out.println(“x = “ + x);

} while (x < 20);

Taller Programación III

Java

120Profesor: Marcelo Montecinos C.

dodo--whilewhileSentenciasSentencias de de IteraciIteracióónn

Evalúa su expresión condicional al final del bucle.

Repite un bloque de instrucciones, mientrassu expresión sea verdadera.

Cuando la expresión es falsa, el control pasa a la siguiente línea de código que hay inmediatamente después del bucle.

El bloque de instrucciones de este ciclo se ejecuta al menos una vez.

Taller Programación III

Java

121Profesor: 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 Programación III

Java

122Profesor: Marcelo Montecinos C.

forforSentenciasSentencias de de IteraciIteracióónn

for (expr. inicial; expr. Lógica;modificacion){

bloque de instrucciones;}

Ejemplo: Mostrar los números del 1 al 10

for (int i = 1; i < 10; i++){

System.out.println(“i = “ + i);}

Taller Programación III

Java

123Profesor: Marcelo Montecinos C.

Se utiliza para ejecutar un bloque de instrucciones un número determinado (fijo) de veces.

Repite un bloque de instrucciones, mientras su expresiónsea verdadera.

La primera vez que se va a ejecutar el ciclo, se realiza la inicialización, es decir, se declara y asigna un valor inicial a la variable que va a controlar el ciclo. Estosucede una sola vez.

Cuando la expresión es verdadera, se ejecuta la modificación de la variable que controla el ciclo. Esto esautomático.

forforSentenciasSentencias de de IteraciIteracióónn

Taller Programación III

Java

124Profesor: 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 términos :");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 Programación III

Java

125Profesor: Marcelo Montecinos C.

SentenciasSentencias de de IteraciIteracióónnEn resumen, los conceptos vistos fueron :

while (expresión lógica){

bloque de instrucciones;}

do{

bloque de instrucciones; }

while (expresion lógica);

for (expr. inicial; expr. Lógica; paso){

bloque de instrucciones;}

InstruccionesInstrucciones

Taller Programación III

Java

126Profesor: Marcelo Montecinos C.

EjerciciosEjercicios1. Se desea saber el promedio de notas que tiene un

estudiante. Hasta la fecha ha cursado 6 materias; además se quiere el número de materias reprobadas y el número de materias aprobadas.

Escribir el programa en Java dado el Algoritmo

Salida:

promn, numa, numr: numéricoEntrada.

nota: numérico

Taller Programación III

Java

127Profesor: Marcelo Montecinos C.

1. Inicio Promedio.2. numa, numr, prom, acumNotas,nota: numérico3. numa 04. numr 05. acumNotas 06. Para cont=1 hasta 6 hacer (+1)Comenzar

6.1 Leer nota6.2 acumNotas acumNotas+nota6.3 Si (nota < 10) entonces6.3.1 numr numr + 1Sino6.3.2 numa numa + 1

Fin Para7. prom acumNotas/68. 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 Programación III

Java

128Profesor: Marcelo Montecinos C.

2. Se requiere que se obtenga la misma información pero, para todos los estudiantes de una escuela.

Entrada.nota: numérico

Salida:promn, numa, numr: numérico

Taller Programación III

Java

129Profesor: Marcelo Montecinos C.

1. Inicio Escuela.2. promedioMax, numa, numr, prom,acumNotas,nota,carnet: numérico3. Leer carnet4. promedioMax 05. Mientras ( carnet != 0 ) hacerComenzar3.1 numa 03.2 numr 03.3 acumNotas 03.4 Para cont=1 hasta 6 hacer +1Comenzar

3.4.1 Leer nota3.4.2 acumNotas acumNotas + nota3.4.3 Si( nota < 10) entonces3.4.3.1 numr numr + 1

sino3.4.3.2 numa numa + 1Fin para

3.5 prom acumNotas/63.6 Si (prom > promedioMax) entoces3.6.1 promedioMax prom3.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 carnetFin Mientras6. Mostrar promedioMax7. Terminar Escuela

Profesor: Marcelo Montecinos C. 130

Strings en JavaStrings en Java

Cadena de caracteres

Taller Programación III

Java

131Profesor: Marcelo Montecinos C.

StringsStrings

En Java un String no es un tipo de dato primitivo como char o int.

Es una clase que maneja cadenade caracteres.

Taller Programación III

Java

132Profesor: 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 Stringcadena = nombre;

A partir de este momento cadena y nombre hacen referencia a la mismainstancia. (No se copia el valor , solo la referencia)

StringsStrings

Taller Programación III

Java

133Profesor: Marcelo Montecinos C.

StringsStringsPara obtener la longitud de la candena

nombre.length()

Si deseamos concatenar cadenasnombre = "Juan"+" Garcia”;

Se puede utilizar el metodo concat para concatenar dos cadenas,

nombre = " Carlos“;cadena=nombre.concat(" Juan ");

el contenido de cadena, al final sería: "CarlosJuan "

Taller Programación III

Java

134Profesor: Marcelo Montecinos C.

StringStringPara obtener el caracter que se encuentra en una posición

charAt(posición);ejemplo,

cadena.charAt(0) devolveria el caracter “C”donde posición se inicia en cero.

Para extraer una subcadena, hay dos formas

substring(int posiciónInicial); copia desde la posición inicial hasta el final de la cadena

substring(int posiciónInicial, int posicionFinal);copia desde la posición inicial hasta la posición final-1

Taller Programación III

Java

135Profesor: Marcelo Montecinos C.

StringStringUn ejemplo de substring,

nombre=“Maria Rosa”;System.out.println(nombre.substring(2));System.out.println(nombre.substring(2,4));

la salida sería,ria Rosari

Taller Programación III

Java

136Profesor: Marcelo Montecinos C.

StringStringPara sustituir una letra por otra dentro de la cadena

replace(char original,char sustituto)

ejemplo,cadena=“casa mia”;System.out.println(cadena.replace('a','e'));la salida sería,

cese mie

Taller Programación III

Java

137Profesor: Marcelo Montecinos C.

StringStringPara convertir los caracteres de una cadena de

mayúsculas a minúsculas

toLowerCase()

ejemplo,cadena=“CASA MIA”;System.out.println(cadena.toLowerCase());

la salida sería,casa mia

Taller Programación III

Java

138Profesor: Marcelo Montecinos C.

StringStringPara convertir los caracteres de una cadena de minúsculas a mayúsculas

toUpperCase()

ejemplo,cadena=“casa mia”;System.out.println(cadena.toUpperCase());

la salida sería,CASA MIA

Taller Programación III

Java

139Profesor: Marcelo Montecinos C.

StringStringPara 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 Programación III

Java

140Profesor: Marcelo Montecinos C.

StringStringPara comparar los caracteres dentro de dos instancias, sin diferenciar

entre mayúsculas y minúsculasequalsIgnoreCase()

ejemplo,if (s1.equalsIgnoreCase(s2))

{System.out.println("Son iguales los caracteres");

}else{

System.out.println("no son iguales los caracteres");}

Taller Programación III

Java

141Profesor: Marcelo Montecinos C.

StringStringPara comparar si dos objetos hacenhacen referenciareferencia 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 Programación III

Java

142Profesor: Marcelo Montecinos C.

StringString

Para saber si una cadena es menor, igual o mayorlexicográficamente 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 Programación III

Java

143Profesor: Marcelo Montecinos C.

StringStringPara determinar si la cadena comienza con una cadenaespecificada.

startsWith()

ejemplo,if (s1.startsWith("car"))

{System.out.println("SI");}

else{System.out.println("NO");}

Taller Programación III

Java

144Profesor: Marcelo Montecinos C.

StringStringPara determinar si una cadena se encuentra, a partir de una posición, dentro de una cadena especificada,

startsWith(String cadena,int posición)

ejemplo,if (s1.startsWith("car",3))

{System.out.println("SI");}

else{System.out.println("NO");}

Taller Programación III

Java

145Profesor: Marcelo Montecinos C.

StringStringPara 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 Programación III

Java

146Profesor: Marcelo Montecinos C.

PaquetesPaquetesPaquetes Java más importantes:

- lang – para funciones del lenguaje;- util – para utilidades adicionales;- io – para entrada y salida;- text – para formateo especializado;- awt – para gráficos e interfaz gráfica de usuario

Para acceder a cualquiera de estos paquetes, excepto lang que está siempre disponible, usamos el siguiente modelo:

import java.nombrepaquete.*;

Profesor: Marcelo Montecinos C. 147

JDBC

Java DatabaseConnectivity

Taller Programación III

Java

148Profesor: Marcelo Montecinos C.

IntroducciIntroduccióónn

JDBC es una API, formada por conjunto de clases e interfaces en el lenguaje de programación Java, para ejecutar sentencias SQL.Ofrece un estándar de conexión a cualquier base de datos disponible en el mercado.Permite obtener los datos en forma fácil y cómoda en ambientes cliente-servidor a través de Internet/Intranet.

Taller Programación III

Java

149Profesor: Marcelo Montecinos C.

¿¿QuQuéé hace JDBC?hace JDBC?

Establece una conexión a una base de datos.Envía sentencias SQL.Procesa los resultados de estas sentencias.

Taller Programación III

Java

150Profesor: Marcelo Montecinos C.

Arquitectura JDBCArquitectura JDBCArquitectura normal Puente JDBC-ODBC

Aplicaciones Java

JDBC API

Adm. de controladores JDBC

ControladorJDBC

DB

ControladorJDBC

DB

Aplicaciones Java

JDBC API

Adm. de controladores JDBC

C. ODBC

DB

C. ODBC

DB

Adm. de controladoresODBC

Puente JDBC/ODBC

Taller Programación III

Java

151Profesor: Marcelo Montecinos C.

Primer ejemplo bPrimer ejemplo báásicosico

Connection con = DriverManager.getConnection ("jdbc:odbc:nombre", "login", "password");

Statement stmt = con.createStatement();ResultSet rs = stmt.executeQuery("SELECT a, b, c

FROM Table1");while (rs.next()) {

int x = rs.getInt("a");String s = rs.getString("b");float f = rs.getFloat("c");

}

JDBC usa una URL para especificar la base de datos.

Taller Programación III

Java

152Profesor: Marcelo Montecinos C.

...Primer ejemplo b...Primer ejemplo báásicosico

Ejemplos de URL:jdbc:mysql://myserver:4444/db1jdbc:oracle://oraserverjdbc:odbc:mydatabase

Taller Programación III

Java

153Profesor: Marcelo Montecinos C.

JDBC vs. ODBCJDBC vs. ODBC

Se puede usar ODBC desde Java, pero el puente JDBC-ODBC ayuda bastante.ODBC tiene una interfaz tipo C rompiendo el esquema de seguridad, robustez e implementación de Java.ODBC mezcla funciones simple y complejas.Los controladores de ODBC deben ser instalados en cada cliente.

Taller Programación III

Java

154Profesor: Marcelo Montecinos C.

...JDBC vs. ODBC

JDBC es una interfaz natural en Java.

Taller Programación III

Java

155Profesor: Marcelo Montecinos C.

Modelos de acceso a BDModelos de acceso a BD

De 2 capasLa aplicación “habla” directamente con la base de datos.Controlador JDBC se comunica con el sistema específico que maneja la base de datos.La base de datos puede estar en otra máquina, con lo que el cliente se comunica por red. Esta es la configuración llamada cliente/servidor.

AplicaciónJavaJDBC

DBMS

Cliente

Servidor

BD

Protocolo

BD

Taller Programación III

Java

156Profesor: Marcelo Montecinos C.

Modelos de acceso a BDModelos de acceso a BD

De 3 capasLos comandos son enviados a la capa intermedia de servicios, la cual envía sentencias SQL a la base de datos. Ésta las procesa y envía los resultados de vuelta a la capa intermedia, para luego ser enviados al cliente.Permite un control de acceso y de actualización.Provee ventajas de performance.

AplicaciónJavaJDBC

DBMS

Applet en Java oNavegador

HTML

Cliente (GUI)

Llamadas HTTP,

RMI,CORBA

ServidorBD

Servidor

Protocolo

BD

Taller Programación III

Java

157Profesor: Marcelo Montecinos C.

CategorCategoríías de los controladores JDBCas de los controladores JDBC

Puente JDBC-ODBC.Parte API Nativa-Parte Java. Se convierte las llamadas JDBC al sistema de la Base de datos.JDBC-Red. Es sólo Java. Las llamadas JDBC son convertidas a un protocolo de red independiente del sistema de la base de datos. Este protocolo es convertido en un servidorProtocolo Nativo. Es sólo Java. Se usa un protocolo de red con la BD.

Taller Programación III

Java

158Profesor: Marcelo Montecinos C.

ConexiConexióónn

Un objeto “Connection” representa una conexión a una base de datos.Una sesión incluye las sentencias SQL que son ejecutadas y los resultados de éstas.Establecer la conexión: “DriverManager.getConnection”La clase “DriverManager” intenta ubicar el controlador que pueda conectarse a la base de datos representada en la URL.

Taller Programación III

Java

159Profesor: Marcelo Montecinos C.

...Conexi...Conexióónn

Sintáxis de una URL JDBC:jdbc:<subprotocolo>:<subnombre><subprotocolo> es el nombre del controlador o del mecanismo de conexión. Ejemplo: odbc.<subnombre> es la identificación de la base de datos. El formato varia según el controlador especificado. Ejemplo: //servidor:puerto/etc

Taller Programación III

Java

160Profesor: Marcelo Montecinos C.

Enviando sentencias SQLEnviando sentencias SQL

JDBC permite que se escriba cualquier tipo de sentencia SQL. Aunque ésta fuera dependiente de la base de datos sólo se correría el riesgo de incompatibilidad al cambiar de base de datos.

Llamadas a procedimientos almacenadosFormatos de fecha

Taller Programación III

Java

161Profesor: Marcelo Montecinos C.

...Enviando sentencias SQL...Enviando sentencias SQL

JDBC provee 3 clases:“Statement”: Este objeto es usado para enviar sentecias SQL simples. Es creado por el método “createStatement”.“PreparedStatement”: Este objeto es usado para sentencias que requieren uno o más parámetros. La sentencia es precompilada y guardada para uso futuro.“CallableStatement”: Es usado para ejecutar procedimientos almacenados.

Taller Programación III

Java

162Profesor: Marcelo Montecinos C.

TransaccionesTransacciones

Una transacción consiste en una o más sentencias que han sido ejecutadas y luego confirmadas (commit) o deshechas (rolled back)Auto-commit está predeterminado.Si Auto-commit está desactivado se debe usar los métodos “commit” o “rollback” explícitamente.

Taller Programación III

Java

163Profesor: Marcelo Montecinos C.

Procesando respuestasProcesando respuestas

Las respuestas a las sentencias SQL se reciben en el objeto “ResultSet” que mantiene las filas.Este objeto provee el acceso a los datos de esas filas a través de un conjunto de métodos “get”, los cuales, a su vez, permiten el acceso a cada columna de estas filas.

Taller Programación III

Java

164Profesor: Marcelo Montecinos C.

Cargando la clase del controlador JDBCCargando la clase del controlador JDBC

Ejemplo:Class.forName(”empresa.db.Driver");

Esto crea una instancia del controlador y llama al método “DriverManager.registerDriver”registrando este controlador en la lista de controladores disponibles para conexiones.

Taller Programación III

Java

165Profesor: Marcelo Montecinos C.

Ejemplo de sentenciaEjemplo de sentencia

Connection con = DriverManager.getConnection (

"jdbc:odbc:nombre", "login", "password");

PreparedStatement pstmt = con.prepareStatement( “UPDATE tabla1 SET m=? WHERE x=?”);

pstmt.setString(1, "Hola"); for (int i = 0; i < 10; i++) {pstmt.setInt(2, i);int rowCount = pstmt.executeUpdate();

}

Taller Programación III

Java

166Profesor: Marcelo Montecinos C.

Primer ejemplo bPrimer ejemplo báásicosico

Connection con = DriverManager.getConnection (

"jdbc:odbc:nombre", "login",

"password");Statement stmt = con.createStatement();ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1");

while (rs.next()) {int x = rs.getInt("a");String s = rs.getString("b");float f = rs.getFloat("c");

}

Profesor: Marcelo Montecinos C. 167

ClasesClases en Javaen Java

Taller Programación III

Java

168Profesor: Marcelo Montecinos C.

Declaración de Clasesmodificador class nombreClase {

< declaración de campos >< declaración de métodos >

}

modificador puede ser public o nada; si la clase no pertenece a un paquete, ambas definiciones son equivalentes; si la clase pertenece a un paquete, entonces, si se declara public, la clase podrá utilizarse fuera del paquete, pero si no se declara public, sólo podrá utilizarse dentro del paquete

Taller Programación III

Java

169Profesor: Marcelo Montecinos C.

Declaración de ObjetosnombreClase nombreObjeto;

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

Ejemplo:clasePublica elObjeto;

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

Taller Programación III

Java

170Profesor: Marcelo Montecinos C.

Declaraciones de Camposmodificadores tipo nombreCampo;

modificador puede ser: - private, accesible solo desde dentro de la propia clase- protected, accesible solo desde la propia clase, clases del mismo paquete o

subclases - public,accesible por todos- package,si no se especifica nada, es el modo por defecto, accesible solo desde el

propio paquete; si la clase no se encuentra dentro de un paquete, es equivalente a public.

Otros modificadores que se pueden añadir son:- static, indica que el campo pertenece a la clase, no a un objeto concreto- final, indica que dicho campo no puede ser sobreescrito en una subclasetipo es el tipo del campo (tipo primitivo o clase del objeto)nombreCampo es el nombre del campo

Taller Programación III

Java

171Profesor: Marcelo Montecinos C.

Acceso a Camposobjeto.campo; // si campo no es staticnombreClase.campo; // si campo es static

elObjeto.doblePublico = 5.0;double doble = elObjeto.doblePublico;

Clase.doblePublicoEstatico = 7.0;Double doble = Clase.doblePublicoEstatico;

Taller Programación III

Java

172Profesor: Marcelo Montecinos C.

Métodos de una ClaseSon los que tienen la responsabilidad de: - Entregar datos acerca del objeto- Modificar datos dentro del objeto (especialmente si las componenetesdel objeto no fueron declarados como public)- Crear un nuevo objeto (constructores)

Los métodos pueden ser públicos, privados o protegidos (public, private, protected), al igual que las compoenetes- pirvate: implica que pueden ser vistas sólo en la clase actual. Son invisibles incluso para clases derivadas de esta.- protected: implica que pueden ser vistas por las derivadas. Tambienson vistas dentro del paquete (agrupación de clases en un archivo). Este es eldefault.- public:son vistas desde cualquier lado.

Taller Programación III

Java

173Profesor: Marcelo Montecinos C.

Declaración de Métodosmodificador tipo nombreMetodo(<lista de parametros formales>) {

< cuerpo del método; campos e instrucciones >return expresion; // solo métodos que devuelven resultado

}<lista de parametros formales> = (tipo campo, tipo campo, ...)

modificador significa lo mismo que para los campos.

tipo es el tipo devuelto por el método, puede ser:

- void si el método no devuelve nada

- un tipo primitivo

- una clase

nombreMetodo es el nombre del método

Taller Programación III

Java

174Profesor: Marcelo Montecinos C.

Ejemplo de Clasepublic class Clase {

private int enteroPrivado;static private int enteroEstaticoPrivado;public void estableceEntero(int entero) {

enteroPrivado = entero;}public int recuperaEntero() {

return entero;}static public void estableceEnteroEstatico(int entero) {

enteroEstaticoPrivado = entero;}static public int recuperaEnteroEstatico() {

return enteroEstatico;}

}

Taller Programación III

Java

175Profesor: Marcelo Montecinos C.

Llamadas a Métodosmetodo(<lista parametros reales>); // metodos de la propia clase

objeto.metodo(<lista dparametros reales>); // metodos no estaticosnombreclase.metodo(<lista parametros reales>); //metodos estaticos

Ejemplo:

elObjeto.estableceEntero(7);int entero = elObjeto.recuperaEntero();

Clase.estableceEnteroEstatico(8);int entero = Clase.recuperaEnteroEstatico();

Taller Programación III

Java

176Profesor: Marcelo Montecinos C.

Declaración de Métodos Constructores

modificadores nombreClase(<lista argumentos formales>) {< cuerpo del método constructor >

}

Ejemplo:public class Clase {

private int enteroPrivado;public Clase() {

enteroPrivado = 0;}public Clase(int entero) {

enteroPrivado = entero;}

}

Taller Programación III

Java

177Profesor: Marcelo Montecinos C.

Llamadas a Métodos Constructores

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

Ejemplo:Clase elObjeto;

elObjeto = new Clase();

O en una sola línea:Clase elObjeto = new Clase();Clase elObjeto = new Clase(5);

Taller Programación III

Java

178Profesor: Marcelo Montecinos C.

Modelo de un Programapublic class nombrePrograma {

public static void main(String[] args) {< cuerpo del programa >

}}

Taller Programación III

Java

179Profesor: Marcelo Montecinos C.

Herenciamodificadores class nombreClase extends nombreClaseQueExtiende {

}

Ejemplopublic class ClaseExtendida extends Clase {}

Una clase que extiende otra, se llama subclase o clase hija, mientras que la clase a la que extiende (la original) se llamasuperclase o clase paterna.La subclase hereda los miembros (propiedades y métodos) de la superclase.

Taller Programación III

Java

180Profesor: Marcelo Montecinos C.

Cambio de tipoCualquier objeto de una subclase puede ser asignado a un objeto de su superclase.Cualquier objeto de una superclase puede ser asignado a una subclase con una conversión explícita (cambio de tipo).

ClaseExtendida elObjetoExtendido = new ClaseExtendida();

Clase elObjeto = laClaseExtendida;

ClaseExtendida elObjetoExtendido = (ClaseExtendida)elObjeto;

Taller Programación III

Java

181Profesor: Marcelo Montecinos C.

Superconstrucciónmodificadores class nombreclase extends nombreClaseQueEstiende {

public nombreClase(<lista de parametros formales>) {super(<lista de parametros reales>);

<instrucciones de inicializacion>}

}

Importante: La llamada al superconstructor debe ser la primera instrucción de un constructor.

Taller Programación III

Java

182Profesor: Marcelo Montecinos C.

Ejemplo de Superconstrucciónpublic class Clase {

private int enteroPrivado;public Clase(int entero) {

enteroPrivado = entero;}

}

public class ClaseExtendida extends Clase {private double doblePrivado;public ClaseExtendida(int entero, double doble) {

super(entero);doblePrivado = doble;

}}

Taller Programación III

Java

183Profesor: Marcelo Montecinos C.

Variables Enmascaradaspublic class Clase {

public int dato;}public class ClaseExtendida extends Clase {

public double dato;public estableceDatos(int entero, double doble) {

super.dato = entero;dato = doble;

}Clase elObjeto = new Clase();ClaseExtendida elObjetoExtendido = new ClaseExtendida();elObjeto.dato = 5; // es un valor enteroelObjetoExtendido.dato = 6.4; // es un valor dobleelObjetoExtendido.estableceDatos(3,7.8);

Taller Programación III

Java

184Profesor: Marcelo Montecinos C.

Sobreescritura de Métodospublic class Clase {

public int dato;public estableceDato(int entero) {

dato = entero;

}}

public class ClaseExtendida extends Clase {

public int datoExtendido;public estableceDato(int entero) {

super.estableceDato(entero);

datoExtendido = entero*2;}

Taller Programación III

Java

185Profesor: Marcelo Montecinos C.

MMéétodos en todos en JavaJava

Taller Programación III

Java

186Profesor: Marcelo Montecinos C.

Métodos

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 mpiezas máás peques pequeññas o as o mmóódulos. dulos. Cada uno de los cuales Cada uno de los cuales es mes máás manejable que s manejable que el programa en su el programa en su totalidadtotalidad

Taller Programación III

Java

187Profesor: Marcelo Montecinos C.

Métodos

Los mLos méétodos tambitodos tambiéén son n son utilizados para evitar la utilizados para evitar la repeticirepeticióón de cn 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 sprograma con sóólo invocarlo.lo invocarlo.

Taller Programación III

Java

188Profesor: Marcelo Montecinos C.

Métodos

Esta técnica de descomposición se denomina Divide y vencerás.

Los módulos (subprogramas) en Java se denominan métodos.

Un método se invoca ,es decir, se le pide realizar su tarea designada con una llamada de método.

Taller Programación III

Java

189Profesor: Marcelo Montecinos C.

La llamada a mLa llamada a méétodos especifica el nombre del todos especifica el nombre del mméétodo y proporciona la informacitodo y proporciona la informacióón (en n (en forma de forma de argumentosargumentos) cuando el m) cuando el méétodo lo todo lo necesite para hacer su trabajonecesite para hacer su trabajo

Métodos

El formato de una definición de método es:

static tipo-de-valor-devuelto nombredelmétodo(lista-param)

{

declaraciones y sentencias

}

Taller Programación III

Java

190Profesor: Marcelo Montecinos C.

Métodos

Casi todos los métodos tienen una lista de parámetros; los parámetros de un método también son variables locales.

Es recomendable limitar los métodos a realizar una sola tarea bien definida y el nombre del método debe expresar efectivamente dicha tarea.

Taller Programación III

Java

191Profesor: Marcelo Montecinos C.

Métodos

El nombre es cualquier identificador válido.

El tipo-de-valor-devuelto es el tipo de es el tipo de dato del resultadodato del resultado, que el método devuelve al invocador.

El tipo-de-valor-devuelto void indica que el método no devuelve ningún valor, es un procedimiento.

Taller Programación III

Java

192Profesor: Marcelo Montecinos C.

Métodos

Omitir el tipo-de-valor-devuelto en una definición de método causa un error de sintaxis.

Olvidar devolver un valor desde un método que se supone debe devolver un valor es un error de sintaxis.

Taller Programación III

Java

193Profesor: Marcelo Montecinos C.

Métodos

Si se especifica un tipo-de-valor-devuelto distinto de void el método debe contener una sentencia return.

Devolver un valor de un método cuyo tipo devuelto se ha declarado void causa un error de sintaxis.

Taller Programación III

Java

194Profesor: Marcelo Montecinos C.

Todas las variables declaradas en las definiciones de los métodos son variables locales; solo se conocen en el método en el que se definen.

Métodos

static int SumarNum(int ee)

{

e+=e;

System.out.println(++e);

return e; //Este método retorna un valor

}

Taller Programación III

Java

195Profesor: Marcelo Montecinos C.

Métodos

La lista-de-parámetros es una lista separada por comas que contiene las declaraciones de los parámetros que el método recibe cuando es invocado.

Si un método no recibe valores, se coloca un juego de paréntesis vacío ( ) después del nombre del método.

Taller Programación III

Java

196Profesor: Marcelo Montecinos C.

Declarar parámetros para un método que poseen el mismo tipo float x,y en lugar de float x, float y producirá un error de compilación porque se requiere un tipo para cada parámetro.

Colocar punto y coma después del paréntesis que encierra la lista de parámetros es un error de sintaxis.

Métodos

Esta es una declaración de un método que contiene 2 errores.staticstatic voidvoid Calcular (Calcular (floatfloat x,yx,y));;

Taller Programación III

Java

197Profesor: Marcelo Montecinos C.

Definir una variable local de un método igual que un parámetro es un error de sintaxis.

Métodosclass 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 método retorna un valor

}}

Ejemplo:

Taller Programación III

Java

198Profesor: Marcelo Montecinos C.

Definir un método dentro de otro es un error de sintaxis.

Existen tres formas de devolver el control al punto en el que se invocó un método:

a)a) Si el método no devuelve un resultado el control se devuelve cuando se llega a la llave derecha que termina el método.

b)b) Al ejecutarse la sentencia return también, si el método NO devuelve ningún resultado.

c) c) return expresión;

Métodos

Taller Programación III

Java

199Profesor: Marcelo Montecinos C.

EjemploEjemplo

Taller Programación III

Java

200Profesor: Marcelo Montecinos C.

Entrada: v1,v2,v3 :numéricos

Inicio Programa Principal

V1,v2,v3,promn,mayor:numéricos

Procesar Procesar IntroDatosIntroDatos //Llamada a un subprograma tipo procedimiento

promnpromn Procesar Procesar CalpromCalprom //Llamada a un subprograma tipo función

Procesar Procesar Imprime(promnImprime(promn))

Mostrar (“El mayor es “ mayor ProcesarProcesar MaxMax)

Terminar Programa Principal

Taller Programación III

Java

201Profesor: Marcelo Montecinos C.

class CPrueba //Clase (Programa)

{

static int v1,v2,v3;//Números enteros declarados en forma Global

public static void main (String args[ ]) //Método principal

{

float prom;

IntroDatos(); //Llamada a un método que no devuelve nada

prom=CalcProm(); //Llamada a un método tipo función

Imprime(prom); //Llamada a un método con pase de parámetros

System.out.println("El mayor: "+ Max( ));

}

Taller Programación III

Java

202Profesor: 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 Programación III

Java

203Profesor: Marcelo Montecinos C.

static void IntroDatos() //Método 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 Programación III

Java

204Profesor: Marcelo Montecinos C.

Inicio Calcprom

aux: numérico

aux (v1+v2+v3)/3

Retornar aux

Inicio Imprime(valor)

valor:numérico

Mostrar (“Promedio”)

Mostrar (valor)

Regresar

Taller Programación III

Java

205Profesor: Marcelo Montecinos C.

static float CalcProm( ) //Método que devuelve un valor{

float aux;aux=(v1+v2+v3)/3; //V1,V2,V3 variables globalesreturn aux; // Valor que retorna el método

}

static void Imprime(float valor)//Observe el cambio de nombre{

System.out.print("Promedio: ");System.out.println(valor);

}

Taller Programación III

Java

206Profesor: Marcelo Montecinos C.

Inicio Max

aux:numérico

aux 0

Si ((v1>=v2)and (v1>=v3)) entonces

Aux v1

Si ((v2>=v1)and(v2>=v3))entonces

Aux v2

Si ((v3>=v1)and(v3>=v2))entonces

Aux v3

Retornar aux.

Taller Programación III

Java

207Profesor: Marcelo Montecinos C.

static int Max() // Método 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 Programación III

Java

208Profesor: Marcelo Montecinos C.

Propiedades de los Objetos

Objetos nulos: null

El identificador this

public class Clase {private int entero;

public Clase(int entero) {this.entero = entero;

}

}

Taller Programación III

Java

209Profesor: Marcelo Montecinos C.

Objetos vs Variables

- Una variable tiene memoria para un solo valor y dispone de un conjunto predefinido de operaciones según sea su tipo.

- Un objeto tiene memoria para un grupo de varios valores, junto con un conjunto coherente de métodos que operan sobre esos valores. Tanto métodos como valores están encapsulados en la clase de la que se ha obtenido el objeto.

Taller Programación III

Java

210Profesor: Marcelo Montecinos C.

La superclase Object

En Java, todas las clases son subclases de una clase especial llamada Object.Java alcanza la generalidad utilizando objetos de diferentes clases en las mismas partes del programa, pero todos ellos pertenecen a la claseObject.

Taller Programación III

Java

211Profesor: Marcelo Montecinos C.

Igualdad de Objetosmodificador class nombreClase {

public boolean equals() {< instrucciones para comparar con los campos de obj >return resultado de la comparacion;

}}

Ejemplo:public class Clase {

private int entero;public boolean equals(Clase c) {

return (c.entero==entero);}

}

Taller Programación III

Java

212Profesor: Marcelo Montecinos C.

Asignación de Objetosmodificador class nombreClase implements Cloneable {

public Object clone() {nombreClase obj = new nombreClase(parametros);< instrucciones para copiar los campos a obj >return obj;

}}

public class Clase implements Cloneable {private int entero;public Object clone() {

Clase c = new Clase();c.entero = entero;return c;

}}

Taller Programación III

Java

213Profesor: Marcelo Montecinos C.

Arrays

Declaración e instanciación de un array de n enteros:int miArray[];miArray = new int[n];

Lo mismo en una sola línea:int miArray[] = new int[n];

Declaración e instanciación de un array de n objetos:MiClase miArray[] = new MiClase[n];for(int i=0;i<n;i++) miArray[i] = new MiClase();

Taller Programación III

Java

214Profesor: Marcelo Montecinos C.

Conversiones de Clase

El método clone invocado sobre clase2devuelve un objeto de la clase Object. Esto debe ser así, porque lo exige la interfaz Cloneable. Para convertirlo de nuevo a Clase necesitamos la conversión explícita de tipo.

Clase objeto1 = (Clase)objeto2.clone();

Taller Programación III

Java

215Profesor: Marcelo Montecinos C.

Paquetes

Paquetes Java más importantes:- lang – para funciones del lenguaje;- util – para utilidades adicionales;- io – para entrada y salida;- text – para formateo especializado;- awt – para gráficos e interfaz gráfica de usuario

Para acceder a cualquiera de estos paquetes, excepto lang que está siempre disponible, usamos el siguiente modelo:

import java.nombrepaquete.*;

Taller Programación III

Java

216Profesor: Marcelo Montecinos C.

Paquetes

package nombrePaquete;modificador class nombreClase {

< declaracion de la clase >}

Importante: Si deseamos que una clase sea utilizada fuera de su paquete, deberemos declararla como public.

Taller Programación III

Java

217Profesor: Marcelo Montecinos C.

InterfacesUna interfaz es una forma especial de una clase que consisteexclusivamente de declaraciones de métodos abstractos y constantes. En vez de la palabra clave “class” las interfaces tienen la palabra“interface”. Todos los métodos declarados son abstractos. Esto implicaque tienen que ser implementadas por alguna clase que use estainterfaz. 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 Programación III

Java

218Profesor: Marcelo Montecinos C.

Interfaces (2)La interfaz funciona como un protocolo: cualquier clase que ocupoe la interfaz debe implementar todos los métodos que la interfaz declara.

public class MiOjetosGrafico1 implements ObjetoGrafico{private int origenX, origenY, ancho, alto;private estaVisible;

public void trasladar(int x, int y) {if (origenX+x <= MaxAncho)

origenX += x;else ....if (origenY+y <= MaxAlto)

origenY +=y;else ......

}public void escalar(float p){ ......}public boolean visible(){ .......}etc...

}

Taller Programación III

Java

219Profesor: Marcelo Montecinos C.

Interfaces(3)A estas alturas nos deberíamos estar preguntando por qué no lo hicimos

con clases abstractas, acaso no es lo mismo ? NO!!!!Si quisieramos hacer una clase abstracta entonces los objetos gráficos

están obligados a ser derivados de esta única clase abstracta (Java no permite múltiple herencia). En muchos casos querríamos que losobjetos gráficos fueran heredados de otras clases (incluso distintasclases para distintos objetos gráficos) pero que todos tuvieran la mismainterfaz.

Taller Programación III

Java

220Profesor: Marcelo Montecinos C.

Interfaces(4)O sea que las interfaces definitivamente no sirven paraimplementar herencia múltiple ? SI y No:Una clase solo puede heredar constantes de la interfazUna clase no puede heredar implementaciones de unainterfazUna interfaz se puede usar como una claseUna interfaz puede ser una extensión de una claseabstracta, con lo cual se heredan características de otraclase más:

Ej: public interface ObjetoGrafico extends ObjetoGeometricopublic class ComponenteGrafica extends JPanel

implements ObjetoGráfico:

Taller Programación III

Java

221Profesor: Marcelo Montecinos C.

Haciendo más de una cosa a la vez: Threads

Un thread es una secuencia o flujo de de instrucciones que se ejecutandentro de un programa. Tiene un comienzo y un fin. Entonces qué diferenciatiene con un proceso ? El thread sólo puede ser creado dentro de un proceso. Y un proceso(programa) puede crear varios threads dentro de él que se ejecutan en paralelo.Entonces, qué diferencia tiene con multiprocesos a la UNIX ? (para los queprogramaron en C, qué los difiere del fork ?)El programa principal está “conciente” de los threads que existen, hay variables que los identifican. Pueden ser creados, inicializados, sustendidos, reactivados o parados por el el programa que los creó. El programa principal puede darles parámetros distintos a cada thread. Los thread se pueden programar con la canatidad de variables necesarias parasu ejecución (no lo heredan TODO)

Taller Programación III

Java

222Profesor: Marcelo Montecinos C.

El método 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 método run de la clase thread, que es un método que se debe escribir siempre.Hay dos formas de implementar Threads en Java (quecoincide con las dos formas vistas de implementar métodosdefinidos):

Crear una nueva clase que extienda la clase abstractaThread e implementar el método abstracto run.Implementar la interfaz runnable, lo cual implica que se va a reescribir el método run.

La razón para escoger una u otra forma es simplemente siqueremos que la clase que implementa el thread sea además extendida de otra clase (aparte de la clase thread).

Taller Programación III

Java

223Profesor: 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 método this.sleep(milisegundos) debe ir en un bloque try and catch

Taller Programación III

Java

224Profesor: Marcelo Montecinos C.

La forma extendida de Thread(2)

public class TwoThreadsTest {public static void main (String[] args) {

new SimpleThread("Jamaica").start();new SimpleThread("Fiji").start();

}}

El método start() inicia la ejecucón de un thread. Estoimplica que se empieza a ejecutar el código escrito en el método run del thread. También existen otros métodos quese le pueden aplicar a un thread: suspend(), resume(), stop().

Taller Programación III

Java

225Profesor: Marcelo Montecinos C.

Implentación haciendo interface

public class MiThread2 implements Runnable {public void run() {

int i = 0; while(true)

System.out.println(i++);}

}

public class TestThread {public static void main(String args[])

{b = new MiThread2(); Thread t = new

Thread(b);t.start();for (int i=0; i<1000; i++);t.stop();

}}

Taller Programación III

Java

226Profesor: Marcelo Montecinos C.

Usando threads para atender clientes de un Servidor de Sockets

La forma de implementar servidores que atiendan a varios clientesparalelamente a la vez es combinando threads con socketsEl servidor abre un ServerSocket desde donde oye ciualquier intento porconectarse con él de un cliente.Una vez establecida la conexión, abre un socket normal e inicia un thread queatiende a este cliente. El socket abierto se pasa como parámetro. De esamanera puede seguir oyendo por el ServerSocket sin estar bloqueado.El thread tiene un método run que atiende los pedidos del clienteEl cliente se conecta al servidor sin saber que finalmente será un socket el queestá atendiéndolo.Si el protocolo de atención especifica la manipulación de datos comunes (porejemplo a un archivo con información sobre cuentas corrientes), hay que tenercuidado con los accesos concurrentes a estos datos (métodos synchronized).

Taller Programación III

Java

227Profesor: 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 quesea atendido. El server siguie esperando clientes en el ciclo.El programa MultiServerThread es el thread que atiende al cliente. En estecaso sólo manda dos strings, uno avisándole que número de cliente es el otro para despedirse.El programa Client.java se comunica con el servidor y lee los dos strings desde el socket establecido, los cuales los imprime en pantalla.El programa Syncron.java muestra como debe declararse un método al cualacceden varios threads de modo que no se produzca problema de accesoindebido (más de un thread puede obtener el mismo número!!)Los programas DateServer y DateClient muestran como se pueden traspasarobjetos facilmente por un socket (siempre que estos sean serializables)

Taller Programación III

Java

228Profesor: Marcelo Montecinos C.

Objetos Remotos en JAVA

La tecnología RMI (Remote Method Invocation) permite a un programacorriendo en una máquina virtual de java (un intérprete) invocar el métodode un objeto localizado en otra máquina virtual de java (ubicada en cualquier parte de la red TCP/IP que se pueda acceder desde el lugar)Normalmente se tiende a ver aplicaciones que usan RMI como aplicacionesde cliente servidor. Una típica aplicación de servidor crea un objeto, lo “publica” para que pueda ser accesible de cualquier otro lado y espera a quellamen clientes pidiendo la invocación de sus métodos. Una típica aplicacióncliente obtiene una referencia al objeto remoto en el servidor y luego invocasus métodos como si fuera un objeto local. RMI provee mecanismos con los cuales el cliente y el servidor se puedenintercambiar información, convirtiendolas en aplicaciones de objetosdistribuidos. Estos mecanismos deben hacer posible: 1) localizar objetosremotos, 2) comunicarse con los objetos remotos 3) traspasar el código de los objetos remotos (deben ser serializables)

Taller Programación III

Java

229Profesor: Marcelo Montecinos C.

Interfaces, objetos y métodosremotos

Como en otras aplicaciones, una aplicación distribuida que usa RMI estáconstituida por interfaces y clases. Las interfaces definen los métodosque serán conocidos por los clientes de los objetos remotos. Las clasesremotas implementan estos y quizas otros métodos también. Un objeto remoto se implementa siguiendo los siguientes pasos:

1) Diseño e implementación de las componentes de la aplicación distribuida2) Compilar los códigos fuentes y generar los llamados “stubs” y skeletons3) echar a andar la aplicación

Taller Programación III

Java

230Profesor: Marcelo Montecinos C.

Diseñar e implementar lascomponentes de la aplicación

Definir las interfaces remotas: Una interfaz remotaespecifica los métodos que pueden ser invocados en forma remota por un cliente. Los clientes conoceránlos objetos remotos sólo a través de las interfaces. Implementación de los objetos remotos: los objetosremotos deben implementar una o más interfaces remotas. Además pueden implementar otros métodosque no corresponden a las interfaces remotas y queson de uso local. Implementar los clientes: Los clientes que usan losobjetos remotos se pueden implementar una vez quelas interfaces remotas están definidas.

Taller Programación III

Java

231Profesor: Marcelo Montecinos C.

Un ej: Un objeto remoto quecontiene un número

//el archivo de definición de la interfaz

import java.rmi.*;public interface Numero extends Remote {

public int getNumero() throws RemoteException;}

Este es la definición de la interfaz: implica que los clientessólo conocerán el método getNumero() de el objeto remoto. Para los clientes la clase de este objeto es Numero, no importa cómo lo haya llamado en el archivo de implementación del tipo de objeto.

Taller Programación III

Java

232Profesor: Marcelo Montecinos C.

Un ej: Un objeto remoto(2)

//el archivo de definición de la implementaciónimport java.rmi.*;import java.rmi.server.UnicastRemoteObject;

public class NumeroImpl extends UnicastRemoteObject implements Numero

{ int cont = 0;

public int getNumero() throws RemoteException {int ret = cont++;return ret;

}

public static void main(String args[]) {System.setSecurityManager(new RMISecurityManager());try { NumeroImpl n = new NumeroImpl();

Naming.rebind("//"+args[0]+"/elNumero",n);System.out.println("Numero creado");

} catch (Exception e) {}}

}

Taller Programación III

Java

233Profesor: Marcelo Montecinos C.

Aclaración: Existe un servidor de comunicaciones !!!!

Es un programa que provee java llamado rmiregistrySe echa a correr en la máquina donde está el programa servidor del objeto remotoCualquier cliente que quiera ocupar el objeto remoto debe pedirle a él unareferencia al objeto remoto antes de ocuparlo => debe saber con quénombre se registró y en qué máquina esta corriendo.

Cliente

rmiregistry

servidor

Internet Naming.rebind(1)

Naming.lookup(2)

Objeto.metodo() (3)

Taller Programación III

Java

234Profesor: Marcelo Montecinos C.

Un ej: Un objeto remoto quecontiene un número(3)

//el archivo del cliente

import java.rmi*;import java.rmi.server.*;

class ClienteNumero {public static void main(String args[]) {

try {Numero N = (Numero) Naming.lookup("//"+args[0]+"/elNumero");

System.out.println("El numero vale ahora "+N.getNumero();} catch( Exception e) {}

}}

Taller Programación III

Java

235Profesor: Marcelo Montecinos C.

Compilar los códigos fuentes y generarlas clases y los llamados “stubs” y skeletons

Una vez implementados las 3 clases hay que compilarlas paragenerar

Numero.class: la interfaz que define lo que se conocerá del objeto en toda la red.NumeroImpl.class: que es el que implementa el objeto remoto. Además de implementar el constructor y el método de la interfazcontiene un main que lo único que hace es crear el objeto y registrarlo o publicarlo con un nobre dado.Cliente.classEsto se hace con el compilador javac

Taller Programación III

Java

236Profesor: Marcelo Montecinos C.

Compilar los códigos fuentes y generarlas clases y los llamados “stubs” y skeletons(2)

Una vez generadas las 3 clases hay que compilar la clase implementadorapara 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 losclientes que piden acceso al objeto remoto NumeroImpl.NumeroImpl_skel.class: es como un esqueleto de la clase. Tiene sólo la estructura de la clase pero es suficiente información para que el clientepueda reunir todo los antecedentes para llegar a hacer un pedido al stubEsto se hace con el compilador rmic NumeroImpl

Taller Programación III

Java

237Profesor: Marcelo Montecinos C.

Echar a andar la aplicación

Echar a correr rmiregistry: java rmiregistryEchar a correr el programa servidor de objetoremoto: java NumeroImplEchar a correr cliente(s): java Cliente.Una vez obtenida la referencia por el cliente el flujode datos corre: cliente -> skel->stub->Server->stub->skel->clienteVeamos una aplicación más interesante: Un Banco: los clientes son un ejecutivo de cuentas y un clientecualquiera. El servidor tiene la info sobre las cuentas.

Taller Programación III

Java

238Profesor: Marcelo Montecinos C.

Networking con Java (introducción)

Java es un lenguaje que nace cuando la internet está en plenodesasarrollo.Los diseñadores de java ya saben que se necesita un lenguaje queapoye la programación distribuida en la internet con protocolos TCP/IPEs importante contar con un lenguaje que sea independiente de la plataforma para programar las comunicaciones entre dos procesos, yaque la internet también es independiente de la plataforma.Java implementa una serie de clases que apoyan estoindependientemente de la plataforma (URL, sockets, RMI, IDL-CORBA, JDBL. Veamos un par de ellas:

Taller Programación III

Java

239Profesor: Marcelo Montecinos C.

Los URLUn URL es un UNIFORM RESOURCE LOCATOR. Consiste en una dirección de un recurso que un servidor en la internet pone a disposición de los usuarios, como por ej. http://www.arminco.comEn 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 datosen 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 ellodebemos crear un objeto URL, con el nombre del protocoloy la dirección del recurso que queremos recuperar.

Taller Programación III

Java

240Profesor: 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 tipoMalformedURLException por eso se deben tomar las medidas necesarias(como por ej: usar un bloque try-catch)try {

URL miURL = new URL(....); }catch(MalFormedURLException e) {

// codigo para atrapar la exception}Métodos que se pueden aplicar a un objeto de la clase URL:

getProtocol(), getHost(), getPort(), getFile(), openConnection()

Taller Programación III

Java

241Profesor: 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 Programación III

Java

242Profesor: Marcelo Montecinos C.

Los Sockets

Sockets se pueden describir como dos puntos que arman un puentede transporte de datos entre dos programas. Dos programaspueden establecer gracias a los sockets una comunicación segura(hay recuperación de errores de transmisión). Un proggrama puedeleer datos de un socket (lo que otro pragrama escribió) o puedeescribir datos en un socket ( para que lo lea otro programa)En una comunicación entre dos programas con sockets siempre hay un servidor y un cliente. El servidor es el que primero establece la posibilidad de comunicación y se queda escuchando a ver si hay alguien que quiere comuncarse con el por medio de este socket.El cliente es un programa que, sabiendo que hay un programa servidorescuchando, se conecta al socket del servidor y escribe y/o lee de el.

Taller Programación III

Java

243Profesor: Marcelo Montecinos C.

Servlets

Base de datos

Servidor

Cliente

Taller Programación III

Java

244Profesor: Marcelo Montecinos C.

Servlets

Programas que se ejecutan en los servidores.Añaden funcionalidad a un servidor web, del mismo modo que los applets añaden funcionalidad a los navegadores.

Similares a los scripts CGI, salvo que ofrecen una independencia de la plataforma.

⇒ A diferencia de mecanismos propietarios (tales como la API de Netscape Server o módulos de Apache), son independientes del servidor y de la plataforma.

Taller Programación III

Java

245Profesor: Marcelo Montecinos C.

Cuándo se suelen utilizar

La página web se basa en datos que proporciona el usuario.

Ejemplo: e-commerce sites.Los datos cambian frecuentemente.

Ejemplo: Partes meteorológicos.La página web utiliza información de BDs u otras fuentes.

Ejemplo: Aplicaciones comerciales.

Taller Programación III

Java

246Profesor: Marcelo Montecinos C.

Applets

cliente

NAVEGADORWEB

MÁQUINA VIRTUAL JAVA

El usuario pide un applet en java

Llega un applet en java

Arranca la máquinaVirtual de java ySe ejecuta el applet

servidor

Taller Programación III

Java

247Profesor: Marcelo Montecinos C.

Servlets

Base de datos

Servidor

Cliente

Taller Programación III

Java

248Profesor: Marcelo Montecinos C.

Servlets. Requisitos

El servidor debe tener una máquina virtual Java.El servidor debe soportar la API de los servlets Java.

JavaServer Web Development Kit (JSWDK). http://java.sun.com/products/servlet/

Servidores capaces de ejecutar servlets:Java Web ServerNetscape Fast Track y EnterpriseO’Reilly WebSite ProfessionalLotus Domino Go WebServerNovel IntraNetWareIBM Internet Connection ServerOtros

Taller Programación III

Java

249Profesor: Marcelo Montecinos C.

Ejecución de un servlet

Formas de iniciar la ejecución:Introducir la dirección URL del servlet en un navegador web.Llamar al servlet desde una página web.Ejecutar un servlet llamándolo desde otro servlet.

Taller Programación III

Java

250Profesor: Marcelo Montecinos C.

Desde un navegador web

http://nombre_maquina:puerto/ruta_servlet/nombre_servletLas llamadas a servlets pueden contener parámetros:

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

Taller Programación III

Java

251Profesor: Marcelo Montecinos C.

Desde una página web

Un servlet también puede ser llamado desde el código de una página web, al igual que se llamaría a cualquier CGI.Ejemplo:

<form action = “http://www.datsi.fi.upm.es/~mperez/servlets/serv2” method=“post”>

Taller Programación III

Java

252Profesor: Marcelo Montecinos C.

Desde otro servlet

Se puede lanzar la ejecución de un servlet desde otro.Pasos:

Conocer el nombre del servlet que queremos llamar.Proporcionar acceso al objeto “Servlet” del servlet llamado.Llamar al método público del servlet.

Taller Programación III

Java

253Profesor: Marcelo Montecinos C.

Desde otro servletpublic class servletCalling extends HttpServlet {

public void doGet (HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException

{...Servlet servlet_get = (Servlet)

getServletConfig().getServletContext().getServlet(“servletCalled”);

String data_get = servlet_get.method1(data);...

}}

Taller Programación III

Java

254Profesor: Marcelo Montecinos C.

Arquitectura de los servlets

Biblioteca ‘javax.servlet’

Servlets

HttpServlet

MiServlet

Taller Programación III

Java

255Profesor: Marcelo Montecinos C.

Interacción con los clientes

Objeto ‘ServletRequest’:Comunicación que fluye del cliente al servidor.

Objeto ‘ServletResponse’:Encapsula la información enviada desde el servidor al cliente.

Taller Programación III

Java

256Profesor: Marcelo Montecinos C.

Estructura de un Servlet

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class SomeServlet extends

HttpServlet {// El servidor envía una página// web al clientepublic 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

}// Análogamente, sobreescribir// doPost().

}

Taller Programación III

Java

257Profesor: Marcelo Montecinos C.

Ejemplo Servlets: Hola Mundo

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class HolaMundoSrvlt extends

HttpServlet {// El servidor envía una página web al clientepublic 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 Programación III

Java

258Profesor: Marcelo Montecinos C.

Ejemplo Servlets: Hola Mundo

Taller Programación III

Java

259Profesor: Marcelo Montecinos C.

Obtención y envío de información

Obtención de datos del cliente:

getParameter()getParameterValues()getParameterNames()

getReadergetInputStream()

Envío de datos al cliente:

getWritergetOutputStream

Taller Programación III

Java

260Profesor: Marcelo Montecinos C.

Ejemplo: Lectura de parámetros

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 parámetros";

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,HttpServletResponseresponse)throws ServletException,IOException {doGet(request,response);

}}

Taller Programación III

Java

261Profesor: Marcelo Montecinos C.

Ejemplo: Lectura de parámetros

Taller Programación III

Java

262Profesor: Marcelo Montecinos C.

Ejemplo: Lectura de parámetros 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 parámetros";response.setContentType ("text/html");out = response.getWriter();out.println("<HTML><HEAD><TITLE>");out.println(title);out.println("</TITLE></HEAD><BODY>");

Taller Programación III

Java

263Profesor: Marcelo Montecinos C.

Ejemplo: Lectura de parámetros IIout.println("<H1 ALIGN=CENTER>"+ title+"</H1>");out.println("<TABLE BORDER=1 ALIGN=CENTER>");out.println("<TR><TH>Nombre de parámetro<TH>Valores de parámetro");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>");

elseout.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,HttpServletResponseresponse)throws ServletException,IOException {doGet(request,response);

}}

Taller Programación III

Java

264Profesor: Marcelo Montecinos C.

Ejemplo: Lectura de parámetros II

Taller Programación III

Java

265Profesor: 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">Número Artículo:<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 Programación III

Java

266Profesor: Marcelo Montecinos C.

Ejemplo: Uso de formularioDirección:

<TEXTAREA NAME="direccion" ROWS=3 COLS=40> </TEXTAREA><BR>Tarjeta de crédito: <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>Número de tarjeta de crédito:<INPUT TYPE="PASSWORD" NAME="numTarjeta"> <BR>Repetición del número de tarjeta de crédito:<INPUT TYPE="PASSWORD" NAME="numTarjeta"> <BR><BR><CENTER>

<INPUT TYPE="SUBMIT" VALUE="Enviar solicitud"></CENTER>

</FORM></BODY></HTML>

Taller Programación III

Java

267Profesor: Marcelo Montecinos C.

Ejemplo: Uso de formulario

Taller Programación III

Java

268Profesor: Marcelo Montecinos C.

Ejemplo: Uso de formulario

Taller Programación III

Java

269Profesor: Marcelo Montecinos C.

Ciclo de vida de un servlet

Servidor Servlet

Cargainit()

Servidor

Servlet Manejo depeticiones

Cliente

Cliente

service()doGet()doPost()

Servidor Servlet

Descargadestroy()

Taller Programación III

Java

270Profesor: Marcelo Montecinos C.

Almacenamiento del estado de un cliente

Estado del cliente:Situación en la que se encuentra un cliente en sucesivas peticiones al servidor.

Mecanismos:Almacenamiento de sesiones en el servidor“Cookies”

Taller Programación III

Java

271Profesor: Marcelo Montecinos C.

Servlets vs CGI

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

PortabilidadModularidadEl uso de parámetros es más sencillo en el caso de los servlets

top related