30
1 Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores 2- InterNetworking con Java ¿ Por qué JAVA ? En este curso: Los programas son más simples => se peude usar más tiempo en explicar la lógica de los programas que para explicar las instrucciones del lenguaje. En general: Java nace cuando la internet ya está madura (1993-4) => nace “sabiendo” que existe TCP/IP y que la programación distribuida es importante, lo que se nota en el diseño. Además de las típicas funcionalidades básicas de comunicación (comunicación por canales TCP y UDP) incorpora otras de alto nivel de abstracción: RMI, Applets, JDBL, URL ¿ Siempre es mejor JAVA ? No, Java es multiplataforma por lo tanto sólo puede hacer cosas que sean comúnes a todas las plataformas. Con la estandarización de TCP/IP como red virtual para todos los equipos esto es cada vez menos importante. Aún así hay cosas: Nombres y ports sólo se pueden asociar en C ya que es exclusivo de UNIX.

2- InterNetworking con Java

Embed Size (px)

DESCRIPTION

2- InterNetworking con Java. ¿ Por qué JAVA ? En este curso: Los programas son más simples => se peude usar más tiempo en explicar la lógica de los programas que para explicar las instrucciones del lenguaje. - PowerPoint PPT Presentation

Citation preview

Page 1: 2- InterNetworking con Java

1Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl

Módulo ECI - 11: Fundamentos de Redes de Computadores

2- InterNetworking con Java ¿ Por qué JAVA ?

En este curso: Los programas son más simples => se peude usar más tiempo en explicar la lógica de los programas que para explicar las instrucciones del lenguaje.

En general: Java nace cuando la internet ya está madura (1993-4) => nace “sabiendo” que existe TCP/IP y que la programación distribuida es importante, lo que se nota en el diseño.

Además de las típicas funcionalidades básicas de comunicación (comunicación por canales TCP y UDP) incorpora otras de alto nivel de abstracción: RMI, Applets, JDBL, URL

¿ Siempre es mejor JAVA ? No, Java es multiplataforma por lo tanto sólo puede hacer cosas que sean

comúnes a todas las plataformas. Con la estandarización de TCP/IP como red virtual para todos los

equipos esto es cada vez menos importante. Aún así hay cosas: Nombres y ports sólo se pueden asociar en C ya que es exclusivo de UNIX.

Page 2: 2- InterNetworking con Java

2Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl

Módulo ECI - 11: Fundamentos de Redes de Computadores

Java es un lenguaje interpretado

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

P1.java P1.class

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

Salida del Prog.

Page 3: 2- InterNetworking con Java

3Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl

Módulo ECI - 11: Fundamentos de Redes de Computadores

¿Qué tipo de programas se pueden desarrollar con JAVA ?

Stand alone: escritos con un editor de texto, compilados e interpretados

Applets: programas que corren dentro de una www-page.

Servlets: programs invocados por una www-page pero que corren en el servidor

Page 4: 2- InterNetworking con Java

4Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl

Módulo ECI - 11: Fundamentos de Redes de Computadores

Java Applets

<applet code=Animator.class ><parameters></applet>

Html

Animator.class

Animator.class

Page 5: 2- InterNetworking con Java

5Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl

Módulo ECI - 11: Fundamentos de Redes de Computadores

Java Servlets

MyServlet.class

HTML-page with a reference to a servlet

HTML from page

HTML from servlet

Page 6: 2- InterNetworking con Java

6Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl

Módulo ECI - 11: Fundamentos de Redes de Computadores

Un primer programa en JAVA

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

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

} } Todo programa es escrito como el método estático

llamado main en una clase cualquiera Este método se empieza a ejecutar cuando se invoca el

intérprete de java para una clase dada args es un arreglo de Strings que contiene los parámetros con los que fué invocado el programa. Ver HelloWorld.jva

Page 7: 2- InterNetworking con Java

7Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl

Módulo ECI - 11: Fundamentos de Redes de Computadores

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

int myNumber1 = 5; double myNumber2 = 9.0; System.out.println(“number is ” +myNumber1); System.out.println(”number plus 1 is ”+(myNumber1 + 1)); System.out.println(”number minus 3 is ”+(myNumber1 - 3));

System.out.println(”double of number is ”+(myNumber1 * 2)); System.out.println(”half of number is ”+(myNumber1 / 2));

System.out.println(”My other number is ”+myNumber2); System.out.println(”The half is ” + (myNumber2 / 2));

System.out.println(“The square root is ” + Math.sqrt(myNumber2));

} // end of the main method } // end of the class

Un segundo programa...

Page 8: 2- InterNetworking con Java

8Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl

Módulo ECI - 11: Fundamentos de Redes de Computadores

import java.io.*;

public class Program3 {

public static void main(String args[ ]) throws IOException {

BufferedReader inKbd = new BufferedReader(

new InputStreamReader(System.in));

String inputLine;

System.out.print(“please enter your name: ”);

inputLine = inKbd.readLine();

System.out.println(“Hajimemashite,”+ inputLine);

}

}

Leyendo líneas del keyboard

• Para hacer I/O es necesario importar clases de java.io • Es necesario escribir throws IOException• No es la forma usual de programar I/O

Page 9: 2- InterNetworking con Java

9Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl

Módulo ECI - 11: Fundamentos de Redes de Computadores

import java.io.*;public class Program4 {

public static void main(String args[ ]) throws IOException { BufferedReader inKbd = new BufferedReader(

new InputStreamReader(System.in)); String inputLine; System.out.print(“I am Jalisco, enter your number ! ”); inputLine = inKbd.readLine(); int yourNumber = Integer.parseInt(inputLine); System.out.println(“Mine is ”+ (yourNumber+1)+” I

win !”); }

}

Leyendo números del keyboard

• En Java2 there existe también Double.parseDouble(aString)• Si el contenido de la linea no es un número se cae

Page 10: 2- InterNetworking con Java

10Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl

Módulo ECI - 11: Fundamentos de Redes de Computadores

Tipos primitivos de datos en JAVA

enteros: int, long, short, byte Const. 1, -1, 1024, 1L reales: float, doubleConst. 1.0, -3.14159, 1.5e4, 1.0f

caracter: char Const. ‘a’, ‘X’, ‘@’ lógico: boolean Const. true, false

Constantes de String: “Hola“,“12 de Abril“

Page 11: 2- InterNetworking con Java

11Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl

Módulo ECI - 11: Fundamentos de Redes de Computadores

Declaraciones

int i;int i = 1;double pi = 3.14159;char c = ‘a’;boolean estamos_bien = true;

Las declaraciones de variables pueden ir en cualquier parte del programa pero siempre antes de que la variable sea usada.Hay que tener cuidado con el rango de validez (scope) de la declaración

Page 12: 2- InterNetworking con Java

12Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl

Módulo ECI - 11: Fundamentos de Redes de Computadores

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

dia + “de”+mes Casts: (int) pi (pi = 3.1) (int)

(Math.random()*100)+1) Otros: a == 1 ? a+1 : a-1 Asignacion: a = 1; Asignación como operador: a = b = c = d = 0; boolean cero = ( b = c - 10) == 0;

Page 13: 2- InterNetworking con Java

13Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl

Módulo ECI - 11: Fundamentos de Redes de Computadores

Controllando la secuancia de instrucciones

Conditional execution of instructions: if (condition)

instruction;

if(condition) instruction;

else instruction;

It is always possible to write more than one instruction after the if and the else by grouping them inside curly brackets { }

Page 14: 2- InterNetworking con Java

14Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl

Módulo ECI - 11: Fundamentos de Redes de Computadores

Problema (Program5) El programa debe leer dos números del teclado. El primero

corresponde a la cantidad que el cliente debe pagar el segundo a la cantidad que paga. El programa debe decir cómo dar el vuelto en billetes de 5000, 1000 y 500 y monedas de 100, 50, 10, 5 y 1.

Enter the value to pay:3561Enter the value given by the customer :10000give 1 of 5000give 1 of 1000give 4 of 100give 3 of 10give 1 of 5give 4 of 1

Page 15: 2- InterNetworking con Java

15Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl

Módulo ECI - 11: Fundamentos de Redes de Computadores

Programando ciclos

El ciclo básico while (condition)

instruction;

Otras formas

do instruction; while (condition);

for (instr1; condition; instr2)instruction;

Page 16: 2- InterNetworking con Java

16Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl

Módulo ECI - 11: Fundamentos de Redes de Computadores

Con whileint i = 1;while (i <= 10) { System.out.println(”5 X ” + i + ” = ”+(i*5))

i = i + 1; }

Con do while int i = 1; do {

System.out.println(”5 X ” + i + ” = ”+(i*5)); i = i + 1;

} while (i <= 10);

Con for for (i = 1; i <= 10; i = i +1)

System.out.println(”5 X ” + i + ” = ”+(i*5));

Page 17: 2- InterNetworking con Java

17Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl

Módulo ECI - 11: Fundamentos de Redes de Computadores

Problema (Program41)

Escriba un programa que pida el ingreso de 10 números e imprima el mayor de ellos

Enter a number: 20greatest changed, now is 20Enter a number: 5no change, number was smallerEnter a number:

the greatest number was

Page 18: 2- InterNetworking con Java

18Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl

Módulo ECI - 11: Fundamentos de Redes de Computadores

Programa Ejemplopublic class MCD {

//calculo del maximo comun divisor entre 15 y 24public static void main(String args[ ]) { int x = 15, y = 24;

while (x != y) { if (x < y)

y = y - x; else

x = x - y; } System.out.println(“el MCD entre 15 y 24 es “ + x);}

}

Page 19: 2- InterNetworking con Java

19Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl

Módulo ECI - 11: Fundamentos de Redes de Computadores

Arreglos

Se pueden declarar como: int[] A; int A[];

Esto es la declaración del puntero al arreglo, no se especifica tamaño en la declaración;

Inicialización: A = new int[10]; int[] A = new int[10];

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

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

length es un campo del objeto arreglo y no un método. No es necesario el método ya que el tamaño, como el contenido de un String no varían despuésde su creación.

Page 20: 2- InterNetworking con Java

20Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl

Módulo ECI - 11: Fundamentos de Redes de Computadores

Problema (Program6)

Lea un lista de números desde el teclado que termina con un 0. Los números son del 1 al 99. Al terminar de leer la lista de números el programa debe responder con un estadística del porcentaje de números entre 1 y 9, 10 y 19, 20 y 29 ... 90 y 99.

Page 21: 2- InterNetworking con Java

21Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl

Módulo ECI - 11: Fundamentos de Redes de Computadores

Argumentos de un Programa Si se invoca al programa P1 de ka siguiente manera: java

P1 estos son parametros entonces en el programa se tendrá args[0] = “estos”, args[1] = “son”, args[2] = “parametros”.

Se reciben como un arreglo de strings en la variable declarada como parámetro del programa String args[]

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

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

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

}

Page 22: 2- InterNetworking con Java

22Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl

Módulo ECI - 11: Fundamentos de Redes de Computadores

ExceptionsHave you think about how easy is to make the Program6 to fail ?Just run it and try the following entries: 12 4r To program the proper instructions to prevent the program from failing would cost some non trivial work and it will make the overall code of the program more obscure

Page 23: 2- InterNetworking con Java

23Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl

Módulo ECI - 11: Fundamentos de Redes de Computadores

General form of exception programming

try { put here the instructions that may cause an exception

} catch (ExceptionOfType1 e) { write a propper reaction

}

Page 24: 2- InterNetworking con Java

24Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl

Módulo ECI - 11: Fundamentos de Redes de Computadores

Basic try and catch block (you do not care what happened)

while (true) { try { System.out.print("Enter a value: "); inputLine = inKbd.readLine(); int number = Integer.parseInt(inputLine); if (number == 0)

break; counter = counter + 1;

count[number - 1] = count[number - 1] + 1; System.out.println("OK"); } catch (Exception e) { System.out.println(e);

System.out.println("NOT OK, entry ignored"); } }

Page 25: 2- InterNetworking con Java

25Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl

Módulo ECI - 11: Fundamentos de Redes de Computadores

Refined try and catch block (you want to know what happened)

while (true) { try { System.out.print("Enter a value: "); inputLine = inKbd.readLine(); int number = Integer.parseInt(inputLine); if (number == 0) break;

counter = counter + 1; count[number - 1] = count[number - 1] + 1; System.out.println("OK"); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("Not a valid Number");} catch (NumberFormatException e) { System.out.println("This is Not a Number at all"); } }

Page 26: 2- InterNetworking con Java

26Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl

Módulo ECI - 11: Fundamentos de Redes de Computadores

Exceptions (resumen) Una Exeption es un evento que rompe la ejecución normal de un

programa (debido a un error). Cuando ocurre un evento como este un objeto de la clase Exception es generado o “lanzado” (throw).

Existen varios tipos de clases derivadas Exception dependiendo de que fue lo que originó el evento: IOException, IndexOutOfBoundsException, UnknownHostException, etc.

Cuando esto sucede, el intérprete de JAVA busca un exception handler adecuado para esta exception, que ejecuta un pedazo de código (programado por el usuario) que debería reaccionar en forma adecuada a esta falla del programa. Esto se llama “atrapar una exception” (catch).

Cuando no se ha escrito ningún ningún handler que atrape esta exception, el programa se detiene (se cae). La razón para introducir exceptions es que la programación para reaccionar ante fallas se hace más fácil (no hay que preverlas todas).

Page 27: 2- InterNetworking con Java

27Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl

Módulo ECI - 11: Fundamentos de Redes de Computadores

Ejemplo de Exceptions en I/O (1) Muchas veces el compilador OBLIGA a programar el código

de modo de atrapar exceptions cuando estas pueden suceder con cierta probabilidad. Las más frecuentes son las de IO.

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

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

try { in = new BufferedReader(new FileReader(“Origen.txt”))}; catch (IOException e) {

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

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

try { while( (line = in.readLine()) != null)

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

}}

Page 28: 2- InterNetworking con Java

28Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl

Módulo ECI - 11: Fundamentos de Redes de Computadores

Ejemplo de Exceptions en I/O (2) Se puede omitir poner tantos try-catch si no importa donde sucedió import java.io.*; //importa clases de la biblioteca IO public class ProgrmaÍO2{

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

try { in = new BufferedReader(

new InputStreamReader(System.in)); out = new PrintWriter( new FileWriter(“Destino.txt”));

System.out.println(“ingrese linea”); while( (line = in.readLine()) != “”){

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

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

} }}

Page 29: 2- InterNetworking con Java

29Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl

Módulo ECI - 11: Fundamentos de Redes de Computadores

Ejemplo de Exceptions en I/O (3) También se puede evitar tener que preocuparse de las exceptions

siempre y cuando el método que la pordría generar se declare como que “lanza” una excepción:

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

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

in = new BufferedReader(new FileReader(“Origen.txt”)); out = new PrintWriter( new FileWriter(“Destino.txt”));

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

} } Esto implica que el programa se caerá si hay una excepción

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

Page 30: 2- InterNetworking con Java

30Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl

Módulo ECI - 11: Fundamentos de Redes de Computadores

Ejemplo de Exceptions en I/O (3) También se puede evitar tener que preocuparse de las exceptions

siempre y cuando el método que la pordría generar se declare como que “lanza” una excepción:

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

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

in = new BufferedReader(new FileReader(“Origen.txt”)); out = new PrintWriter( new FileWriter(“Destino.txt”));

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

} } Esto implica que el programa se caerá si hay una excepción

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