Download postituloBaloian2 - DCC

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
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.
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
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“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
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
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
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
6
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 { }
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
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);
}
}
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
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);
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
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”;
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
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
Búsqueda de Substrings
String 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”);
}
}
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl
11
Módulo ECI - 11: Fundamentos de Redes de Computadores
Clases definidas por usuario
Partamos 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”);
}}
12
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
Agregando métodos a la clase Auto
public 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;
}
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
Herencia
public 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;
}
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
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 lenguage 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 !!!!!
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
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.
16
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 Parametros {
public static void main(String args[]) {
for(int i=0; i < args.length; i++)
System.out.pritnln(args[i]);
}
}
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
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).
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
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”);}
}
}
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
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”);
}
}
}
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
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.
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
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.
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
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);
}
}
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
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.
24
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
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()
25
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
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) { }
}
}
26
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) 698 8427 - Email: hthiemer @ cec.uchile.cl