Download Fundamentos de Redes de Computadores

Document related concepts
no text concepts found
Transcript
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.
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
Java es un lenguaje interpretado
P1.java
P1.class
Salida
del
Prog.
Compilador de java (específico x plataforma)
javac P1.java
Intérprete de java (específico x plataforma)
java P1 (class)
2
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
¿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
3
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
Java Applets
Html
Animator.class
Animator.class
<applet code=Animator.class >
<parameters>
</applet>
4
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
Java Servlets
HTML from page
HTML from servlet
MyServlet.class
HTML-page with a
reference to a servlet
5
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
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
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl
6
Módulo ECI - 11: Fundamentos de Redes de Computadores
Un segundo programa...
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
7
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
Leyendo líneas del keyboard
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);
}
}
• 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
8
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
Leyendo números del keyboard
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 !”);
}
}
• En Java2 there existe también Double.parseDouble(aString)
• Si el contenido de la linea no es un número se cae
9
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
Tipos primitivos de datos en JAVA
enteros: int, long, short, byte
Const. 1, -1, 1024, 1L
reales: float, double
Const. 1.0, -3.14159, 1.5e4, 1.0f
caracter: char
Const. ‘a’, ‘X’, ‘@’
lógico: boolean
Const. true, false
Constantes de String: “Hola“,“12 de Abril“10
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
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
11
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
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;
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl
12
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 { }
13
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
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:3561
Enter the value given by the customer :10000
give 1 of 5000
give 1 of 1000
give 4 of 100
give 3 of 10
give 1 of 5
give 4 of 1
14
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
Programando ciclos
El ciclo básico
while (condition)
instruction;
Otras formas
do
instruction;
while (condition);
for (instr1; condition; instr2)
instruction;
15
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
Con while
int 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));
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl
16
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: 20
greatest changed, now is 20
Enter a number: 5
no change, number was smaller
Enter a number:
the greatest number was
17
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
Programa Ejemplo
public class MCD {
//calculo del maximo comun divisor entre 15 y 24
public 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);
}
}
18
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
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.
19
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
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.
20
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
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]);
}
}
21
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
Exceptions
Have 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
22
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
General form of exception programming
try {
put here the instructions that may cause an exception
} catch (ExceptionOfType1 e) {
write a propper reaction
}
23
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
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");
}
}
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl
24
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");
}
}
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl
25
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).
26
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
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”);}
}
}
27
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
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”);
}
}
}
28
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
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.
29
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
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.
30
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl