26
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

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.

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

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

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

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

Instrucciones de Control

Instrucción condicional: if (cond) instr;

if(cond) instr; else instr;

Ciclos: while (cond) instr; Ciclos: do instr; while (cond); Ciclos for (instr1; i<10; instr2)

instr; Selección switch/case Agrupación de instrucciones bajo un if, else, while,

for, etc. se realiza con paréntesis crespo { }

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

Programa Ejemplopublic 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);

}}

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

Programando Orientado al Objeto Las clases son definiciones de tipos de datos nuevos

Un una instancia de una clase (dato) se llama objeto

Consisten en la declaración de un conjunto de datos y métodos que operan sobre estos datos (pueden modificar o los datos o sólo retornar valores).

Dentro de los métodos hay uno bien especial que se llama constructor. Tiene el mismo nombre de la clase y se llama cada vez que se quiere crear un objeto nuevo de esa clase.

Clase variable x; x = new Clase(parametros);

y = x.metodoConResultado(parametros);

x.metodoSinResultados(parametros);

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

La Clase String Son parte del lenguaje (no hay que importarlos) Se crean: String s = new String(“Hola Mundo”); pero esto se puede resumir con String s = “Hola Mundo”; u

Tamaño de un String: int i = s.length(); k-esimo carácter: char c = s.charAt(k); Subsecuencias: String sub = s.substring(k);

String sub = s.substring(inicio, fin);

Búsqueda de subsecuencias: int i = s.indexOf(“hola”);

Comparacion: boolean iguales s1.equals(s2);int i = s1.compareTo(s2);

0 si s1==s2, >0 si s1>s2, <0 si s1<s2

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

Búsqueda de SubstringsString s = “llego y dijo hola”;int i = s.indexOf(“go”)´; i == 3 (parten de 0)

Ej: Contar las apariciones de “hola” en un string s:

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

int i , apariciones = 0;while ((i = s.indexOf(“hola”)) !0 -

1) {++apariciones;s = s.substring(i+1);

}System.out.println(“el string hola

aparecio “+ apariciones+

“veces”); }}

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

Clases definidas por usuarioPartamos con un ejemplo; en el archivo Auto.java se tiene:

public class Auto {public String nombre;public int construccion;

public float rendimiento;}

Podemos entonces escribir un programa que use esto:

public class Programa {public static void main(String args[]) { Auto miAuto1 = new Auto(); // el constructor clase() es gratis! miAuto1.nombre = “Volkswagen”; //porque es public !!!! miAuto1.construccion = 1994; miAuto1.rendimiento = 9.65; System.out.println(“mi auto es un “+miAuto1.nombre+

“fue construido el “+miAuto1.construccion+

“y gasta “+rendimiento+”litros cada 100km”);} }

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

Agregando métodos a la clase Autopublic class Auto {

String nombre; int construccion= 1990; float rend;

public Auto() {nombre = “Yiguly”; rend = 15; //se crea con

estos valores }

public void cambiaConstrucción(int año) {construccion = año;

}

public Auto(String nombre; int construccion; float rend) {

this.construccion = construccion;this.nombre = nombre; this.rend = rend

//no hay ambigüedad! }

public float redimientoEnKxL() {return 100/rend;

}}

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

Herenciapublic class AutoColeccion extends Auto {

String comentarios; int valorColeccion; static cantidad = 0; // una sola variable para toda la clase

// conocida por todos los objetos

AutoColeccion() { //no se heredan !!!!super(); ++cantidad;

cometarios = “nada por ahora”; valorColeccion = 0; }

public void cambiaConstrucción(int año) {construccion = año;comentarios = “se cambio el valos de

construccion”; }

public static int cuantos() { //método estático !!!

return cantidad; }}

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

Resumen de Métodos Los métodos dinámicos (sobre objetos) se invocan:

variableObjeto.nombreMétodo(parametro1,..,parámetroN)

Ej: miAuto.cambiaConstruccion(1999) En el caso de los métodos estáticos:

NombreClase.nombreMétodo(parámetro1,..,parámetroN)

Ej: int i = AutoColeccion.cuantos() En Java existe la clase Math cuya función más importante es proveer al

leguage de los métodos matemáticos típicos:

Math.sqr(x), Math.sin(x), Math.max(x,y), Math.pow(x,y) El paso de parámetros es siempre por valor, salvo en el caso de objetos

y arreglos, que es por referencia (se pasa una copia del puntero al objeto)

main es un método estático de una clase !!!!!

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

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

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 Parametros {public static void main(String args[]) {

for(int i=0; i < args.length; i++)System.out.pritnln(args[i]);

} }

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

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

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

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

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

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

La Clase InetAddress

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);

} }

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

La Clase URL Un 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.com

En un objeto URL existen dos componentes principales: El descriptor de protocolo (ej. http) y el nombre del recurso (ej. www.arminco.com). http significa Hyper Text Transfer protocol pero hay otros protocolos de transferencia de datos en la internet como: el File Transfer protocol (ftp), Gopher, File o News.

En java es posible abrir una direccion de URL leer el contenido como si fuera un archivo cualquiera. Para ello debemos crear un objeto URL, con el nombre del protocolo y la dirección del recurso que queremos recuperar.

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

La Clase URL (2)

Existen varios constructores de URL:URL unRUL = new URL(“http://www.arminco.com/index.html”);unURL = new URL(“http”;”www.arminco.com”,”index.html”);inURL = new URL(“http”,”www.arminco.com”,80,”index.html”);

Al crear una variable URL se puede producir una excepcion del tipo MalformedURLException por eso se deben tomar las medidas necesarias (como por ej: usar un bloque try-catch)

try {URL miURL = new URL(....); }

catch(MalFormedURLException e) {// codigo para atrapar la exception

} Métodos que se pueden aplicar a un objeto de la clase URL:

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

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

La Clase URL (3) 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) { } }}