Documentos de Académico
Documentos de Profesional
Documentos de Cultura
P1.java
P1.class
Compilador de java (especfico x plataforma) javac P1.java Intrprete de java (especfico x plataforma) java P1 (class)
3
Todo programa es escrito como el mtodo esttico llamado main en una clase cualquiera Este mtodo se empieza a ejecutar cuando se invoca el intrprete de java para una clase dada args es un arreglo de Strings que contiene los parmetros con los que fu invocado el programa.
4
caracter: char
Const. a, X, @
lgico: boolean
Const. true, false
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 declaracin
6
Expresiones y asignacin
Aritmeticas: suma + 20 * c / (mod % 3) Relacionales: a > b, b >= c, c != 4, a == 0 De String: hola + nombre + hoy es +
dia + de+mes
Conversiones de tipo
Java no reclama si un tipo de menor rango se convierte as uno de mayor rango. byte < short < int < long < float < double
Tipo int short byte long float double Bits 32 16 8 64 32 64 Rango -2**31 .. 2**31-1 -2**15 .. 2**15-1 -2**7 .. 2**7-1 -2**63 .. 2**63-1 -10**32 .. 10**32 -10**300 .. 10**300
8
Ejemplos
int i = 1; long l = i; //ok l = 1000000000000; float f = l; //ok double d= 1.0e24; int i = d; // Error float f = 1.0f; int i = f; // Error short s = i; //Error double d = 1.0; int i = (int)d; //ok 9
Instrucciones de Control
Instruccin 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; Seleccin switch/case Agrupacin de instrucciones bajo un if, else, while, for, etc. se realiza con parntesis crespo { }
10
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); } 11 }
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 Tamao de un String: int i = s.length(); k-esimo carcter: char c = s.charAt(k); Subsecuencias: String sub =
s.substring(k); String sub = s.substring(inicio, fin);
12
Bsqueda 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 +
13
Arreglos
Se pueden declarar como: int[] A;
int
14
15
Exceptions
Una Exeption es un evento que rompe la ejecucin 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 intrprete de JAVA busca un exception handler adecuado para esta exception, que ejecuta un pedazo de cdigo (programado por el usuario) que debera reaccionar en forma adecuada a esta falla del programa. Esto se llama atrapar una exception (catch). Cuando no se ha escrito ningn ningn handler que atrape esta exception, el programa se detiene (se cae). La razn para introducir exceptions es que la programacin para reaccionar ante fallas se hace ms fcil (no hay que preverlas todas).
16
} 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 especfico se puede poner Exception y se atrapan todos (basta un solo bloque cach). Si hay ms de un bloque se ejecuta slo un bloque catch segn el tipo de error.
17
import java.io.*; //importa clases de la biblioteca IO public class ProgrmaO{ 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);} } }
18
import java.io.*; //importa clases de la biblioteca IO public class ProgrmaO3{ 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 excepcin durante la generacin del programa. En otros casos se puede declarar que uno o ms mtodos lanzan una IOException y el programa o mtodo principal se preocupa de escribir el Exception handler.
20
Los URL
Un URL es un UNIFORM RESOURCE LOCATOR. Consiste en una direccin de un recurso que un servidor en la internet pone a disposicin 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 direccin del recurso que queremos recuperar.
22
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 } Mtodos que se pueden aplicar a un objeto de la clase URL: getProtocol(), getHost(), getPort(), getFile(), openConnection()
23
Los Sockets
Sockets se pueden describir como dos puntos que arman un puente de transporte de datos entre dos programas. Dos programas pueden establecer gracias a los sockets una comunicacin segura (hay recuperacin de errores de transmisin). Un proggrama puede leer datos de un socket (lo que otro pragrama escribi) o puede escribir datos en un socket ( para que lo lea otro programa) En una comunicacin entre dos programas con sockets siempre hay un servidor y un cliente. El servidor es el que primero establece la posibilidad de comunicacin 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 servidor escuchando, se conecta al socket del servidor y escribe y/o lee de el.
25
26
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
27
Los mtodos pueden ser pblicos, privados o protegidos (public, private, protected), al igual que las compoenetes - pirvate: implica que pueden ser vistas slo en la clase actual.
Son invisibles incluso para clases derivadas de esta. - protected: implica que pueden ser vistas por las derivadas. Tambien son vistas dentro del paquete (agrupacin de clases en un archivo). Este es eldefault. 28 - public:son vistas desde cualquier lado.
public Auto() { nombre = Yiguly; rend = 15; //se crea con estos valores }
29
Herencia y estticos
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 cambiaConstruccin(int ao) { construccion = ao; comentarios = se cambio el valos de construccion; } public static int cuantos() { return cantidad; }
30
Ms sobre mtodos
Los mtodos dinmicos (sobre objetos) se invocan: variableObjeto.nombreMtodo(parametro1,..,parmetroN) Ej: miAuto.cambiaConstruccion(1999) En el caso de los mtodos estticos: NombreClase.nombreMtodo(parmetro1,..,parmetroN) Ej: int i = AutoColeccion.cuantos() En Java existe la clase Math cuya funcin ms importante es proveer al leguage de los mtodos matemticos tpicos: Math.sqr(x), Math.sin(x), Math.max(x,y), Math.pow(x,y) El paso de parmetros 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 mtodo esttico de una clase !!!!! 31
Clases Abstractas
Son clases de las cuales no se pueden crear directamente objetos. Estn destinadas a ser superclases de otras. Definen un conjunto de atributos comunes para todas las clases derivadas. abstract class Personal { int numero; String nombre; int ingreso; public Personal(int num, String nom){ numero=num; nombre=nom; } public abstract int sueldoBruto(); //implementar en clase derivada }
32
public class Empleado extends Personal { int sueldoBase, asignacion; public Empleado(String nom, int num, int sb, int as) { super(nom,num); sueldoBase = sb; asignacion = as; } public int sueldoBruto() { return sueldoBase+asignacion; } } public class Gerente extends Personal { int sueldoFijo, participacion; public Gerente(String nom, int num, int sf, int pa) { super(nom,num); sueldofijo = sf; participacion = pa; } public int sueldoBruto() { return sueldofijo+participacion*1.5; } }
34
public class ProgramaSueldos { public static void main(String args[]){ Personal[] P = new Personal[100]; /* aqu llenar arreglo por ej. con P[0] = new Trabajador(a1,b1,c,d); P[1] = new Trabajador(a2,b2,c,d); P[2] = new Empleado(e1,f1,g,h); P[3] = new Gerente(g1,l1,xy); o llamando rutina*/ int sumaSueldosBruto = 0; for(int i = 0; i<100;++i) sumaSueldosBruto += P[i].sueldoBruto(); System.out.println(la suma de los sueldos es+ sumaSueldosBruto; } } Otro ejemplo muy bueno sera el de un programa para animar figuras representadas por objetos distintos (cuadrados, rect., circ., figuras humanas) en una ventana. Estas figuras pueden rotar, agrandarse, achicarse, moverse, etc. Si queremos que un conjunto de ellas se traslade y se vuelva a dibujar, esta es la forma de hacerlo! 35
Interfaces
Una interfaz es una forma especial de una clase que consiste exclusivamente de declaraciones de mtodos abstractos y constantes. En vez de la palabra clave class las interfaces tienen la palabra interface. Todos los mtodos declarados son abstractos. Esto implica que tienen que ser implementadas por alguna clase que use esta interfaz. 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...
}
36
Interfaces (2)
La interfaz funciona como un protocolo: cualquier clase que ocupoe la interfaz debe implementar todos los mtodos 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...
37
Interfaces(3)
A estas alturas nos deberamos 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 grficos estn obligados a ser derivados de esta nica clase abstracta (Java no permite mltiple herencia). En muchos casos querramos que los objetos grficos fueran heredados de otras clases (incluso distintas clases para distintos objetos grficos) pero que todos tuvieran la misma interfaz.
38
Interfaces(4)
O sea que las interfaces definitivamente no sirven para implementar herencia mltiple ? SI y No: Una clase solo puede heredar constantes de la interfaz Una clase no puede heredar implementaciones de una interfaz Una interfaz se puede usar como una clase Una interfaz puede ser una extensin de una clase abstracta, con lo cual se heredan caractersticas de otra clase ms: Ej: public interface ObjetoGrafico extends ObjetoGeometrico public class ComponenteGrafica extends JPanel implements ObjetoGrfico:
39
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()); } }
43
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(); } }
44
1) Diseo e implementacin de las componentes de la aplicacin distribuida 2) Compilar los cdigos fuentes y generar los llamados stubs y skeletons 3) echar a andar la aplicacin
48
import java.rmi.*; public interface Numero extends Remote { public int getNumero() throws RemoteException; }
Este es la definicin de la interfaz: implica que los clientes slo conocern el mtodo getNumero() de el objeto remoto. Para los clientes la clase de este objeto es Numero, no importa cmo lo haya llamado en el archivo de implementacin del tipo de objeto.
50
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) {} }
51
Internet
Cliente Objeto.metodo() (3)
Naming.rebind(1)
servidor
52
53
Compilar los cdigos fuentes y generar las clases y los llamados stubs y skeletons
Una vez implementados las 3 clases hay que compilarlas para generar
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. Adems de implementar el constructor y el mtodo de la interfaz contiene un main que lo nico que hace es crear el objeto y registrarlo o publicarlo con un nobre dado. Cliente.class Esto se hace con el compilador javac
54
Compilar los cdigos fuentes y generar las clases y los llamados stubs y skeletons(2)
Una vez generadas las 3 clases hay que compilar la clase implementadora para 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 los clientes que piden acceso al objeto remoto NumeroImpl. NumeroImpl_skel.class: es como un esqueleto de la clase. Tiene slo la estructura de la clase pero es suficiente informacin para que el cliente pueda reunir todo los antecedentes para llegar a hacer un pedido al stub Esto se hace con el compilador rmic NumeroImpl
55