Vous êtes sur la page 1sur 140

JAVA

Lenguaje de programación

Relator : Jaime Tobar


jaime.tobar@gmail.com
Diapositivas basadas en la versión original de
Mohamed Mohamed
Contenido
• Introducción a Java
• El lenguaje Java
• Arreglos en Java
• Programación OO con Java
• Manejo de Errores
• Streams de Entrada/Salida
• Threads de Control
• Red
• Swing
• Acceso a Base de Datos
Introducción a Java
• Origen del lenguaje
– Desarrollado por SUN http://java.sun.com
– Enfocado a los electrodomésticos ( FirstPerson )

• Características de Java
– Portabilidad ( medio compilado y medio interpretado )
– Robusto ( manejo de excepciones )
– Orientado a Objeto
– Seguro ( no hay punteros )
– “Simple” ( lo más simple tomando en cuenta la OO )
Introducción a Java
• Herramientas de desarrollo
– JDK de SUN Microsystem
• Tipo de programas
– Aplicaciones
– Applet
– Servlets
– etc..
Introducción a Java
• Comparación
Introducción a Java
• Java Virtual Machine ( JVM )
– Compilación tradicional
Introducción a Java
• Java Virtual Machine ( JVM )
– Compilación JVM
El lenguaje Java
• Nuestro primer programa en Java
• public class HolaMundo {
• public static void main(String[] args) {
• System.out.println("Hola Mundo!!!");
• System.out.print("....en java");
• System.out.println(" en el 2005");
• }
• }
– El archivo debe llamarse HolaMundo.java
– Se compila con: javac HolaMundo.java
– Se ejecuta con: java HolaMundo

• ver: HolaMundo.java
El lenguaje Java
• El compilador de JAVA necesita que todas
las clases ejecutables contengan el método
main, para poderlo distinguir de otros:

• public static void main(String[] args)


Tipos de datos básicos
• Tipo Descripción Tamaño Clase

• boolean Valor lógico 1 bit Boolean


• char Carácter 16 bit Character
• byte Entero muy pequeño 8 bit
• short Entero pequeño16 bit
• int Entero normal 32 bit Integer
• long Entero grande 64 bit Long
• float Precisión simple 32 bit Float
• double Doble precisión 64 bit Double
• void Tipo vacío
El lenguaje Java
• Comentarios
– // Aquí empieza un comentario
– /* Soy un comentario de
– de varias lineas */
• Identificadores ( nombres de variables )
– Java distingue entre minúsculas y MAYUSCULAS
– el nombre de las variables comienza con una letra con
un _ o con el signo $
– ejemplos:
➡ Contador
➡ _camino
➡ $dolar
El lenguaje Java
• Operadores
– Descripción Símbolo Expresión Resultado
– Multiplicación * 2*4 8
– Resto % 5%2 1
– Suma + 2+2 4
– Resta - 7-2 5
– Incremento ++ 2++ 3
– Decremento -- --2 1
– Menos unario - -(2+4) -6

– NOTA: Hay diferencias entre ++j y j++

– ver: IncDec.java
El lenguaje Java
• Separadores
•Separador Descripción
•() Contienen listas de parámetros. También se utilizan
para modificar la precedencia en una expresión,
contener expresiones para control de flujo y realizar
conversiones de tipo.
{} Se utilizan para definir bloques de código.

[] Se utiliza tanto para declarar arreglos como para


referenciar valores dentro de los mismos.
; Separa sentencias.

, Separa identificadores consecutivos en la declaración


de variables y en las listas de parámetros.
. Separa un nombre de propiedad o método de una
variable de referencia. También separa nombre de
paquete de los de un subpaquete o una clase.
El lenguaje Java

• Palabras claves
• abstract continue for new switch
• boolean default goto null synchronized
• break do if package this
• byte double implements private threadsafe
• byvalue else import protected throw
• case extends instanceof public transient
• catch false int return true
• char final interface short try
• class finally long static void
• const float native super while
El lenguaje Java

• Expresiones
– int i = 45;
– double j = 1.5;

– String nombre = “María”;


– String nombre = null;
– nombre = new String(“María”);

– boolean flag = true;


– Float f = new Float(1.0);
El lenguaje Java
• Ejemplos:
– String mensaje = “Hola ”+”Mundo”;
– int i = 1;
– int m = i++; // m = ?
– int k = i; // k = ?
– int j = --k; // j = ?
– boolean b = false;
– boolean v = !b; // v es true o
false?
El lenguaje Java
• Clase String
– Esta clase almacena una cadena de
caracteres.
– Existen varios métodos que nos facilitan el
trabajo.
– String cadena = new String(“Hello World”);
 cadena.length() // devuelve el largo del String
 cadena.toLowerCase() // convierte el String a
minúsculas
 cadena.toUpperCase() // a MAYUSCULAS
 cadena.trim() // elimina los espacios en blanco al
comienzo y al final del String
El lenguaje Java
• Control de flujo
– if
– if( expresión booleana )
• sentencia;
– if - else
– if( expresión booleana )
• sentencia;
– else
• sentencia;
El lenguaje Java
– while
– while ( expresión booleana )
• sentencia;
– do – while
– do
– sentencia;
– while (expresión booleana)
– for
– for (inicialización; expresión booleana; paso)
– sentencia;
El lenguaje Java
– switch
– switch (expresión) {
– case valor1: sentencia; break;
– case valor2: sentencia; break;
– case valor3: sentencia; break;
– // ...
– default: sentencia;
–}
El lenguaje Java
• Ejemplos:
– if( m == 1 ) {
• m++;
• flag = true;
• } else {
• m--;
• flag = false;
• }
– for( int i=0,k=1; i<10 && k < 50; i++,k +=2 ) {
– sentencias;
– }
El lenguaje Java

➲ Ejercicio:
Haga un programa que recorra los 100 primeros
números, los imprima en pantalla y diga a su lado si es
impar o par

[terminal] El numero 25 es impar

ver: Numeros.java
Arreglos

• Un arreglo (array) es una manera de


agrupar valores de un mismo tipo bajo un
mismo nombre.
• Existen dos formas de declarar arreglos:
– char [] c;
– char c [];
• Crear matrices, es sencillamente agregar
corchetes.
– String [][] s;
Arreglos
• Ejemplos

– String [] nombres = new String[3];


• nombres[0] = “María”;
• nombres[1] = “José”;
• nombres[2] = “Carmen”;

– o bien

– String [] paises = { “Chile”;”Argentina”;”Francia” };


– if( nombres.length == paises.length )
– sentencia; // Se ejecuta?
Arreglos
– archivo Arreglos.java
– public class Arreglos {

– public static void main(String[] args) {
• String[] paises =
{"España","Holanda","Brasil"};
• System.out.println(paises[1]);
• System.out.println(paises.length);
– }
– }
– Modificar el archivo para que imprima los nombres de
todos los paises y su largo.

– ver: Arreglos.java y Arreglos_mod.java


Interactuando con nuestro
programa
•Hay varias formas de entregarle
información a nuestro programa, pero las
más básicas que usaremos en el comienzo
son a través de la línea de comando:

•c:\java Aplicacion estos son


parametros

•estos se recuperan dento del programa vía


el arreglo args[], con args[0]=”estos”
y asi sucesivamente.
Interactuando con nuestro
programa
La otra forma es que nuestro programa pregunte por ella:
c :\ java Aplicacion
Ingrese una linea(termina con enter)

lo ingresado se recupera via un lector de teclado:

importjava.io.*;
public class ......
public static void main(String[ ]args) throws IO Exception{
BufferedReader input ;
input = new BufferedReader(new InputStream Reader(System.in));

Donde System.in es el teclado e input la variable que nos permitira


recoger lo que se escriba.

String s = input.readLine();
Interactuando con nuestro
programa
• Esta última manera acarrea ciertas rigideces que
se apreciarán en el ejemplo:

• Se debe poner al principio del archivo .java:


• import java.io.*;

• Se debe agregar la clausula throws IOException al


main
• public static void main (String args[])throws
IOException
Ejercicios
• Ejercicios
– Inicializar un arreglo con los primeros 100 números e
imprimirlo en pantalla (el arreglo).
– Inicializar un arreglo con los primeros 100 números pares (
0,2,4,6,..) e imprimir los primeros 10 números.
– Recibir su nombre vía línea de comandos e imprimirlo en
pantalla.
– Que su programa pregunte por su nombre, lo lea del
teclado y lo imprima en pantalla.

– ver: Arreglos100.java, ArreglosPar.java, leer_stdin.java y leer_args.java


Programación OO con Java
• Que es la Orientación a Objetos?
– Consiste en el concepto de encapsulamiento.
– Yo sé que es lo que hace una clase, pero no sé
de que manera lo hace.
– En términos más sencillos, yo sé que el método
ordenarArreglos(int [] arreglo), ordena un arreglo
de enteros, pero no sé que técnica usa para esto
(quickSort,bubbleSort,etc..).
Programación OO con Java
• Qué son los Objetos?
– Un objeto contiene en sí mismo la información y los
métodos o funciones necesarios para manipular esa
información, restringiéndose solo a la información mas
relevante de la entidad real o virtual que se desea
modelar.
Programación OO con Java
• Abstracción
Programación OO con Java
• Qué son las Clases?
– Las clases son las matrices de las que luego se
pueden crear múltiples objetos del mismo tipo.
– La clase define las variables y los métodos comunes a
los objetos de ese tipo, pero luego, cada objeto tendrá
sus propios valores y compartirán las mismas
funciones.
Programación OO con Java

• Qué son los mensaje?


– Los mensajes son simples llamadas a las
funciones o métodos del objeto con el se
quiere comunicar para decirle que haga
cualquier cosa.
Programación OO con Java
• Cómo crear un Objeto?
– Primero hay que declarar el Objeto.
• Date fecha;
• String nombre;
• Integer i;
– Después hay que inicializarlo.
• fecha = new Date(2004,08,29);
• nombre = new String(“María”);
• i = new Integer(1024);

– En general se tiene:
Clase variable = new Clase(Parametros constructor);
Programación OO con Java
• Constructores
– Un objeto se crea usando constructores.

– public class Rectangulo {


– float x1,y1,x2,y2;
– public Rectangulo(float ex1, float ey1,
float ex2, float ey2) {
– x1 = ex1;
– x2 = ex2;
– y1 = ey1;
– y2 = ey2;
– }
– }
Programación OO con Java
• Ejercicio
– Cree una clase Caja que posea
– Alto
– Ancho
– Y un método para calcular su área

– Ver: Caja.java, Cajita.java y usa_caja.java


Programación OO con Java

• Que es la herencia?
– Permite crear una clase a través de una clase
existente, y esta clase tendrá todas las
variables y los métodos de su ”superclase”, y
además se le podrán añadir otras variables y
métodos propios.
Programación OO con Java

• Existen superclases y subclases.


• Las subclases heredan los métodos y
variables de las superclases.
• Las superclases se transforman en padres
y abuelos de las subclases.
• En Java la superclase más alta en el árbol
jerárquico es la clase Object.
• Todas las clases heredan los métodos de la
clase Object.
Programación OO con Java
• Para referirse a una variable de la
clase superior se utiliza super.variable.
• Para referirse a un método de las
clases superiores se utiliza la sentencia
super.metodo().
• Para referirse a una variable propia de
la clase se utiliza la sentencia
this.(varible|metodo()).
Programación OO con Java
• Ejemplo:
– Nuestra superclase es Integer
– Integer implementa el método suma().
– Nuestra subclase será IntegerMensaje que
extiende Integer.
– IntegerMensaje debe entregar el mensaje “Estoy
sumando” antes de efectuar la suma y enseguida
sumar.
Programación OO con Java
– Entonces el método de suma de
IntegerMensaje es distinto que el método
suma de Integer

– public IntegerMensaje suma() {


– System.out.println(“Estoy sumando”);
– super.suma();
– }

– Vemos que aprovechamos que la suma se


efectúa en la superclase y la reutilizamos para
hacer el cálculo.
Programación OO con Java
• Cómo es el constructor de un hijo?

– public class RecV extends Rectangulo {


– public String s;
– public RecV(float ex1, float ey1,
float ex2, float ey2, String cadena) {
• super(ex1,ey1,ex2,ey2);
• s = cadena;
– }
– }
Programación OO con Java
• Se deben seguir reglas:
– Los constructores NO se heredan, a diferencia de los
métodos.

– Toda clase debe tener un constructor. Si no esta


declarado explícitamente, por defecto tiene el
constructor con 0-parámetros.

– Si una clase tiene definidos constructores, esos son


los únicos que tiene, específicamente deja de existir
el constructor con 0-argumentos.
Programación OO con Java
• Se deben seguir reglas:
– El cuerpo de un constructor debe llamar una vez al
constructor de la clase padre, que debe preceder a
cualquier otra acción en el cuerpo del constructor.
Si el cuerpo de un constructor no comienza con
una sentencia llamando explícitamente al
constructor de la clase padre, entonces la
sentencia

– super() ;

– se asume (i.e. el constructor con 0-


argumentos).
Programación OO con Java
• Ejercicio
– Cree una clase hijo, Cajita que incluya un
nuevo parámetro: profundidad y un nuevo
método: volumen

– Ver: Cajita.java y usa_caja.java


Programación OO con Java
• Sobre carga de constructores
– public Rectangulo() {
– x1 = 1;
– x2 = 2;
– y1 = 1;
– y2 = 2;
– }
– public Rectangulo(float x1,float y1) {
– this.x1 = x1;
– x2 = 2;
– this.y1 = y1;
– y2 = 2;
– }
Programación OO con Java
• Una clase implementa métodos
– public float calcularArea() {
– return (x2-x1) * (y2-y1);
–}
• Un método puede ser sobrecargado
– public float calcularArea(int modificador)
{
– return (x2-x1) * (y2-y1) *
modificador;
–}
Programación OO con Java

• Paquete (Package)
– Los paquetes son grupos relacionados de clases
e interfaces y proporcionan un mecanismo
conveniente para manejar un gran juego de
clases e interfaces y evitar los conflictos de
nombres. Además de los paquetes de Java
puede crear sus propios paquetes y poner en
ellos definiciones de clases y de interfaces
utilizando la sentencia package.
Programación OO con Java
• El paquete de lenguaje Java, también
conocido como java.lang, contiene las
clases que son el corazón del lenguaje
Java.
• Para utilizar un paquete, se utiliza la
sentencia import nombrePackage;
• Esta sentencia debe estar al comienzo del
archivo.
Programación OO con Java
• Control de accesos a atributos y metodos
– public
• Cualquier clase puede acceder a las propiedades y
métodos públicos.
– protected
• Sólo las clases heredades y aquellas situadas en el
mismo paquete pueden acceder a las propiedades
y métodos protegidos.
– private
• Las variables y métodos privados sólo pueden ser
accedidos desde dentro de la clase.
Programación OO con Java
• private protected
– Sólo las clases heredades pueden acceder a las
propiedades y métodos protegidos.
Programación OO con Java
• Clases Public, Abstract, y Final
– Public:
• El modificador public declara que la clase puede
ser utilizada por objetos que estén fuera del
paquete actual. Por defecto, una clase sólo puede
ser utilizada por otras clases del mismo paquete en
el que están declaradas.
– Abstract:
• El modificador abstract declara que la clase es una
clase abstracta. Una clase abstracta podría
contener métodos abstractos (métodos sin
implementación). Una clase abstracta está
diseñada para ser una superclase.
Programación OO con Java
– Final:
–Utilizando el modificador final se puede declarar que
una clase es final, que no puede tener subclases.
Existen (al menos) dos razones por las que se podría
querer hacer esto:
– razones de seguridad.
– razones de diseño.
Programación OO con Java
• Implementación de clases abstractas
– abstract class Geometria{
• El cuerpo de la clase
• Variables y métodos, incluyendo tipo de retorno;
– }

• Implementación de subclases
– class Circulo extends Geometria {
• El cuerpo de la clase
• implementación de métodos superiores ( pisarlas )
• implementación de otros métodos
– }
Programación OO con Java
• Ejercicios:
– Implementar la Clase Geometria ( abstracta )
– La clase debe tener los siguientes métodos:
• calculaArea();
• calculaPerimetro();
– Implementar las clases Rectangulo,Circulo y Triangulo que
extienden la clase Geometria.
– Haga un programa que reciba como argumentos el tipo de la
geometría y las dimensiones.
– ej: java calculo R 10 5
• resultado: Rectángulo, área = 50 y perímetro = 30

• ver: dir Abstractas


Programación OO con Java
• Interfaz
– Una interfaz es una colección de definiciones de
métodos (sin implementaciones) y de valores
constantes.
– Una clase puede implementar más de una
interfaz.
– Las interfaces son lo más parecido a la herencia
múltiple ( pero no lo es ).
Programación OO con Java
• Ejemplo
– public class Auto {
• String modelo,color;
– public void recorrido() {
» System.out.println(“Santiago-
Valparaiso”);
–}
• }
– interface Velocidad {
• public float velocidadActual();
• }
Programación OO con Java
• interface Aceleracion {
– public float aceleracionActual();
– }

– public class AutoMovil extends Auto


implements Velocidad,Aceleracion {
• public float velocidadActual() {
– System.out.println(“Velocidad = 100”);
• }
– public float aceleracionActual() {
» System.out.println(“Aceleración = 12”);
• }
– }

– ver:Prueba.java,ChaoInterface.java,HelloImpInter.java y
HelloInterface.java
Programación OO con Java
• Clases importantes en Java
– Clase Object
• boolean o.equals( Object )
• Object o.clone()
• Class o.getClass()
• String o.toString()
– Clase Character
• boolean Character.isDigit( char )
• boolean Character.isLetter( char )
• boolean Character.isSpace( char )
Programación OO con Java
– Clase String
• int cad.length()
• char cad.charAt( int)
• boolean cad.equals( Object )
• boolean cad.equalsIgnoreCase( Object )
– Clase StringBuffer
• StringBuffer sb1 = new StringBuffer(4);
• sb1=”Hola”;
• StringBuffer sb2 = new StringBuffer(“Toma
sentado.”);
• sb2.insert(6,”café ”);
• System.out.println(sb2.toString());
• Resultado: Toma café sentado.
Programación OO con Java
– Clase StringTokenizer
• Permite dividir un string en pedazos(tokens).
• Ejemplo:
– StringTokenizer st = new StringTokenizer("es una
prueba",“ “ );
– while (st.hasMoreTokens()) {
– println(st.nextToken());
– }
• Resultado:
– es
» una
» prueba
Programación OO con Java

– Ejercicio:

– Cree un programa que:

– - Primero lea el String que separa las palabras o “tokens”


– - Luego lea esas palabras y las imprima en pantalla junto
con su largo.
– - Y termine su ejecución al ingresar el usuario “*”.

– ver: Tokens.java
Programación OO con Java
– Clase Random
– Se utiliza para generar secuencias aleatorias.
• Random ran = new Random();
– ran.nextInt(int n);
» Retorna un número aleatoria desde cero hasta n
– Clase Date
– Clase Properties
– Clase Runtime
• Permite ejecutar comandos en procesos separados
• Ejemplo
– Process p = Runtime.getRuntime().exec("xterm");

– ver: comando.java
Programación OO con Java
– Clase Math
– Es una clase sin ningún constructor, y todos sus
métodos son estáticos
• int Math.abs( int )
• long Math.abs( long )
• float Math.abs( float )
• double Math.abs( double )
• double Math.random()
• double Math.PI
Manejo de Errores
• Excepciones
–Las excepciones son la manera que ofrece
Java de manejar los errores en tiempo de
ejecución. Muchos lenguajes imperativos,
cuando tenían un error de este clase lo que
hacían era detener la ejecución del programa.
Las excepciones nos permiten escribir código
que nos permita manejar ese error y continuar
(si lo estimamos conveniente) con la ejecución
del programa.
Manejo de Errores

• try...catch...finally
– try {}
• Con el bloque try marcamos en que parte del
código esperamos que se genere un error.
– catch{}
• Con catch atrapamos el error y enviamos algún
mensaje si es necesario.
– finally
• El código en este bloque se ejecuta siempre, se
produzca o no la excepción.
Manejo de Errores
– Un bloque try puede tener asignado más
de un bloque catch
– Clase Exception
• String e.getMessage()
– Devuelve el mensaje detallado si existe o null en caso
contrario.
• void e.printStackTrace()
– Escribe por la salida de error estándar una lista que
nos permitirá localizar donde se generó el error. Es
muy útil para depurar, pero no es conveniente que lo
usuarios finales vean estas cosas.
Manejo de Errores
• Ejercicio
– Construya su propia excepción que notifique en
pantalla que fue creada
– Haga un programa que cree esa excepción
– Modifique su excepción y ahora implemente el
constructor que reciba el mensaje
– Use el programa para ver los errores que produce
– Ahora encapsule su código con try y catch

• ver: Hello.java y FileIsCorruptedException.java


Streams de Entrada/Salida
• Los Canales de I/O Estándar
– Entrada estandard: referenciado por System.in
•utilizado para la entrada del programa, típicamente lee la
entrada introducida por el usuario.
– Salida estandard: referenciado por System.out
•utilizado para la salida del programa, típicamente muestra
información al usuario.
– Error estandard: referenciado por System.err
•utilizado para mostrar mensajes de error al usuario.
Streams de Entrada/Salida

• I/O: Leer y Escribir


–Frecuentemente los programas necesitan traer
información desde una fuente externa o enviar
información a un fuente externa. La información
puede estar en cualquier parte, en un archivo, en
disco, en algún lugar de la red, en memoria o en otro
programa. También puede ser de cualquier tipo:
objetos, caracteres, imágenes o sonidos.
Streams de Entrada/Salida
• En este capítulo solamente analizaremos el
caso de los streams de archivos.
• Clase File
– En esta clase se define un archivo o un
directorio.
– Ejemplo:
• File archivo = new File(“archivo.txt”);
• File directorio = new File(“directorio”);
Streams de Entrada/Salida
• import java.io.*;

– public class Copiar {


– public static void main(String[] args) throws IOException {
– File inputFile = new File("entrada.txt");
– File outputFile = new File("salida.txt");
– FileReader in = new FileReader(inputFile);
– FileWriter out = new FileWriter(outputFile);
– int c;
– while ((c = in.read()) != -1)
– out.write(c);
– in.close();
– out.close();
– }
– }
Streams de Entrada/Salida
• PipedWriter y PipedReader.
• SequenceInputStream
– Crea un sólo stream de entrada desde varias
fuentes de entrada ( se utiliza para concatenar ).
• FilterInputStream y FilterOutputStream.
Streams de Entrada/Salida
• Ejercicio
– Escribir un programa que lea los contenidos de un
archivo e imprima en la salida estos contenidos en
MAYUSCULAS.
– Hint:
• Utilice para la lectura:

– BufferedReader input = new BufferedReader( new FileReader(


archivo ) );
– PrintWriter output = new PrintWriter(new FileWriter("copia.txt"));

– ver: LeerArchivo.java y ManipularArchivo.java


Streams de Entrada/Salida
• Contructor:
• File(File parent, String child)
• Creates a new File instance from a
parent abstract pathname and a child
pathname string.
• File(String pathname)
• Creates a new File instance by
converting the given pathname string into
an abstract pathname.
• File(String parent, String child)
• Creates a new File instance from a
parent pathname string and a child
Streams de Entrada/Salida
• getName()
• Returns the name of the file or directory denoted by this abstract
pathname.
• getParent()
• Returns the pathname string of this abstract pathname's parent, or
null if this pathname does not name a parent directory.
• isDirectory()
• Tests whether the file denoted by this abstract pathname is a
directory.
• length()
• Returns the length of the file denoted by this abstract pathname.
• list(FilenameFilter filter)
• Returns an array of strings naming the files and directories in the
directory denoted by this abstract pathname that satisfy the specified filter.
• listFiles(FileFilter filter)
• Returns an array of abstract pathnames denoting the files and
directories in the directory denoted by this abstract pathname that satisfy
the specified filter.
Streams de Entrada/Salida
• Ejercicio
– Haga un programa que reciba como
parámetro el nombre de un directorio.
– Este programa debe imprimir la lista de los
directorio y archivos que los componen.
– Su programa debe desplegar el tamaño de
los archivos.
– Modifique su programa para que imprima la
lista de los sub directorios.

– ver: readdir.java
Threads de Control
• Programación secuencial
– Cada línea del programa se ejecuta en el mismo orden en el
cual fue invocada.
• Programación paralela
– Una parte del programa puede invocar a uno o más proceso
que se ejecute en forma paralela.
– Generalmente se utilizan en una arquitectura multi
procesadores.
– Los S.O. modernos implementan multi-procesos sin la
necesidad de multi procesadores.
Threads de Control
• Java provee un mecanismo de
Threads, que permite ejecutar varios
procesos en forma paralela.
• La manera de usar procesos paralelos
es extendiendo la clase Thread e
implementar el método run();
• Para la invocación se utiliza el método
start();
Threads de Control
• Ejemplo
– public class DosThreads {
• public static void main(String[] args){
– new ThreadsSimple("Santiago").start();
» new ThreadsSimple("Arica").start();
– }
– }
– Donde la clase ThreadsSimple implementa un
proceso en paralelo.
Threads de Control
• public class ThreadsSimple extends Thread {
– public ThreadsSimple(String str){
• super(str);
• }

• public void run() {


– for (inti = 0;i< 10;i++) {
» System.out.println(i + " " + getName());
» try {
» sleep((int) (Math.random() * 1000));
» } catch (InterruptedException e) {}
– }
– System.out.println("HECHO! " + getName());
• }
– }

• ver: ThreadsImpPack.java y ThreadsSimple.java


Red
• Trabajo en Red

• El entorno Java es altamente considerado en parte


por su capacidad para escribir programas que utilizan
e interactúan con los recursos de Internet y la World
Wide Web.
Red

• Para transmisión de datos por Red, se


utiliza uno de dos protocolos:
– TCP:
• TCP es un protocolo basado en conexión que
proporciona un flujo fiable de datos entre dos
computadores.
– UDP:
• UDP es un protocolo que envía paquetes de datos
independientes, desde un computador a otro sin
garantías sobre su llegada.
Red

• Para establecer
una conexión de
se debe especificar
el protocolo y el
puerto.
Red
• URL
– URL es un acrónimo que viene de Uniform
Resource Locator y es una referencia (una
dirección) a un recurso de Internet.
– http://java.sun.com/
• Clase URL
– La clase URL proporciona varios métodos que
permiten preguntar a los objetos URL.
Red
• Crear un Objeto URL
– URL linuxCenter = new URL("http://ww.linuxcenter.cl");
– URL(URL URLbase, String URLrelativa)
•URL linuxProductos = new URL
(”linuxCenter,”productos.html”)

➡Existen más constructores que pueden ser vistos en la


API de JAVA.
Red
• Excepciones en los constructores de URLs

– try {
– URL myURL = new URL(. . .)
– } catch (MalformedURLException e) {
– . . .
– // Aquí va el código del
manejador de excepciones
– . . .
–}
Red
– getProtocol()
• Devuelve el componente identificador de protocolo
de la URL.
– getHost()
• Devuelve el componente nombre del host de la
URL.
– getPort()
• Devuelve el componente número del puerto de la
URL. Este método devuelve un entero que es el
número de puerto. Si el puerto no está selccionado,
devuelve -1.
– getFile()
• Devuelve el componente nombre de fichero de la
URL.
Red
– getRef()
• Obtiene el componente referencia de la URL.
–Ejemplo:
– import java.net.*;
– class ParseURL {
– public static void main(String[] args) {
– URL aURL = null;
– try {
– aURL = new
URL("http://java.sun.com:80/tutorial/intro.html#DOWNLOADING");
– System.out.println("protocol = " + aURL.getProtocol());
– System.out.println("host = " + aURL.getHost());
– System.out.println("filename = " + aURL.getFile());
– System.out.println("port = " + aURL.getPort());
– System.out.println("ref = " + aURL.getRef());
– } catch (MalformedURLException e) {
– System.out.println("MalformedURLException: " + e);
– }
– }
Red
– Resultado del ejemplo:
• protocol = http
• host = java.sun.com
• filename = /tutorial/intro.html
• port = 80
• ref = DOWNLOADING
Red
• Leer desde una URL
– import java.net.*;
– import java.io.*;

– class OpenStreamTest {
– public static void main(String[] args) {
– try {
– URL yahoo = new URL("http://www.yahoo.com/");
– DataInputStream dis = new DataInputStream(yahoo.openStream());
– String inputLine;

– while ((inputLine = dis.readLine()) != null) {


– System.out.println(inputLine);
– }
– dis.close();
– } catch (MalformedURLException me) {
– System.out.println("MalformedURLException: " + me);
– } catch (IOException ioe) {
– System.out.println("IOException: " + ioe);
– }
– }
Red
• Resultado
• <html><head>
• <script language=javascript>
• var now=new Date,t1=0,t2=0,t3=0,t4=0,t5=0,t6=0,hp=0,cc='',ylp='';t1=now.getTime();
• </script>

• <title>Yahoo!</title>
• <meta http-equiv="PICS-Label" content='(PICS-1.1 "http://www.icra.org/ratingsv02.html" l r (cz 1
lz 1 nz 1 oz 1 vz 1) gen true for "http://www.yahoo.com" r (cz 1 lz 1 nz 1 oz 1 vz 1)
"http://www.rsac.org/ratingsv01.html" l r (n 0 s 0 v 0 l 0) gen true for "http://www.yahoo.com"
r (n 0 s 0 v 0 l 0))'>
• <base
href="http://www.yahoo.com/_ylh=X3oDMTEwZGh2NmNjBF9TAzI3MTYxNDkEdGVzdAMwBHRtcGwDaW5kZXgtdGJs/"
target=_top>
• <script language=javascript><!--
• lck='',sss=1101710360,ylp='http://geo.yahoo.com/serv2?t=1101710360&_ylp=A9htdkYYxKpBr7MAdk71cSkA
';//--></script><script language=javascript>
• var b,d,l='',n='0',r,s,y;
• .
• .
• <script language=javascript>d.sf1.p.focus();</script>
• <script language=javascript>
• now=new Date;
• t4=now.getTime();
• </script>
• </body>
Red
• La Clase URL me permite interactuar a
nivel de la WEB.
• La Clase Socket me permite interactuar a
nivel de cualquier aplicación.
• Java nos provee de herramientas para
trabajar con la internet en una libreria:
–java.net.*
Red

Hola
Hola
Chao
Chao
Red
•Usando la clase de java ServerSocket y
threads, se puede crear un servidor que
atienda simultáneamente a más de un cliente.

•Un ServerSocket espera un pedido por medio


de la red, aceptando ese pedido y ejecutando
lo que el programador desee, llegando incluso
a devolver un resultado al cliente.
Red

•El ServerSocket pone nuestra disposición


métodos que permiten capturar la llegada del
Socket cliente.


Red
• Ejemplo: Sockets

• Cree un programa que se conecte al servidor que


tiene corriendo el profesor usando la IP que le dirá.

• ver: EchoServer.java y EchoClient.java


Swing/JFC
• JFC es la abreviatura de Java Foundation
Classes, que comprende un grupo de
características para ayudar a construir
interfaces gráficos de usuario (GUIs).
• Los componentes Swing
– Incluye todo desde botones hasta splitpanes y
tablas.
Swing/JFC
• Soporte de Aspecto y Comportamiento
Conectable
– Le ofrece a cualquier componente Swing una
amplia selección de aspectos y comportamientos.
Por ejemplo, el mismo programa puede usar el
Aspecto y Comportamiento Java o el Aspecto y
Comportamiento Windows.
Swing/JFC
• API de Accesibilidad
– Permite tecnologías asistivas como lectores de
pantalla y display Braille para obtener información
desde la interfaz de usuario.
• Java 2D API
– Permite a los desarrolladores incorporar
fácilmente gráficos 2D de alta calidad, texto, e
imágenes en aplicaciones y applets Java.
Swing/JFC
• Soporte de Drag and Drop
– Proporciona la habilidad de arrastrar y soltar entre
aplicaciones Java y aplicaciones nativas.
• Para utilizar JFC se importan las bibliotecas
swing.
– Import javax.swing.*;
Swing/JFC

• Se puede simular las interfaces


gráficas en Java como un árbol
– La raíz de este árbol están las clases
contenedoras, son tres :
• JFrame.
• JDialog.
• JApplet.
Swing/JFC
– El tallo de este árbol, lo componen las clases
llamadas contenedoras intermedio, como:
• JPanel.
• JScrollPane.
• JTabbedPane.
Swing/JFC
– Las hojas del árbol están compuestas por los
componentes atómicos:
• JButton.
• JLabel.
• JComboBox.
• JTextField.
• JTable.
• ....
Swing/JFC
• Para crear un GUI, se deben cumplir los
siguientes pasos:
– Crear un Contenedor.
– Asignar un contenedor intermedio a él.
– Asignar uno o varios componentes atómicos al
contenedor intermedio.
Swing/JFC
• Ejemplo:
– import javax.swing.*;
• public class VentanaSwing extends JFrame {
• public VentanaSwing(){
• super("Primera Ventana");
• setLocation(100,100);
• setSize(200,100);
• show();
• }
• public static void main(String[] arg) {
• new VentanaSwing();
• System.out.println("He creado la ventana");
• }
• }
Swing/JFC
• Una aplicación que utiliza Swing,
indirectamente está utilizando Threads.
• Una aplicación gráfica siempre debe
estar a la espera de algún evento,
apretar una tecla y/o mover el mouse
(también presionarlo).
• Existen procesos que están
permanentemente atentos a la espera
de estos eventos.
Swing/JFC
• Estos escuchadores de eventos funcionan en
paralelo con la aplicación swing.
• Por lo tanto la manera más seguro de ejecutar
una aplicación swing es declarándola como un
Thread.
Swing/JFC
• Forma segura de correr una aplicación
swing
– public static void main(String[] args) {

javax.swing.SwingUtilities.invokeLater(new
Runnable() {
– public void run() {
– // Invocar la aplicación
– }
– });
– }
Swing/JFC
• Crear un botón
– JButton button = new JButton("Soy un boton");
– button.setMnemonic(KeyEvent.VK_B);

– button.addActionListener(new ActionListener()
– {
• public void actionPerformed(ActionEvent e)
• {
– numClicks++;
– label.setText(labelPrefix + numClicks);
• }
– });
Swing/JFC
• Manejo de eventos
– ActionListener
• El usuario pulsa un botón, presiona Return mientras teclea
en un campo de texto, o elige un ítem de menú.
– WindowListener
• El usuario elige un frame (ventana principal).
– MouseListener
• El usuario pulsa un botón del ratón mientras el cursor está
sobre un componente.
– MouseMotionListener
• El usuario mueve el cursor sobre un componente.
Swing/JFC
– ComponentListener
– El componente se hace visible.
– FocusListener
• El componente obtiene obtiene el foco del teclado.
– ListSelectionListener
• Cambia la tabla o la selección de una lista.
• Para manejar los eventos es necesario
importar las bibliotecas de java.awt.*;
Swing/JFC
• Crear una etiqueta
– JLabel label = new Jlabel(“Una etiqueta");

• Crear TextField
– JTextField texto = new JtextField("Texto”);
– texto.setToolTipText("Escriba un texto");

• Crear ComboBox
– JComboBox comboBox = new JcomboBox(array);
– comboBox.setSelectedIndex(2);
Swing/JFC
• Ejemplo
JFrame

JPane

JMenu
JTextField

JButton

JLabel

JComboB
ox
Swing/JFC
• Ejercitar swing con los componentes
presentados usando la informacion disponible
en la API de JAVA.

– ver: Swing*.java
Acceso a Base de Datos
• JDBC fue diseñado para mantener sencillas
las cosas sencillas.
• JDBC nos permite hacer una conexión hacia
una Base de datos.
• Podemos realizar cualquier tipo de consultas,
modificación y creación de nuevas tablas.
Acceso a Base de Datos
• Los pasos necesarios:
– Cargar el driver ( el driver se obtiene del
proveedor de la BD ).
– Establecer la conexión.
– Crear sentencias.
– Ejecutar las sentencias.
Acceso a Base de Datos
• Pero que hacer con el driver? Como lo uso?
• La mejor respuesta disponible es esta:
– "Once you have un-archived the distribution archive,
you can install the driver in one of three ways:
‣ Either copy the "com" and "org" subdirectories and
all of their contents to anywhere you like, and put the
directory holding the "com" and "org" subdirectories
in your classpath,
‣ or put mysql-connector-java-[version]-bin.jar in your
classpath, either by adding the FULL path to it to
your CLASSPATH environment variable,
‣ or by copying the .jar file to
$JAVA_HOME/jre/lib/ext."
Acceso a Base de Datos
• Pero hay una opción más sencilla en
Windows:
• Descomprimir el .zip, y mover el .java a ese
directorio.
Acceso a Base de Datos
• Cargar el driver
– En nuestro caso usaremos la BD MySql, el driver se
puede obtener desde : http://www.mysql.org

– La carga del driver consiste en esta linea:

– Class.forName("com.mysql.jdbc.Driver").newInstance();
Acceso a Base de Datos

• La línea anterior es solamente válida para


MySql.
• Establecer una conexión

– String url = ”jdbc:mysql://localhost”


– Connection con =
DriverManager.getConnection(url,"login","pass");
Acceso a Base de Datos
• Crear sentencias
– Un objeto Statement es el que envía nuestras
sentencias SQL al controlador de la base de
datos.
– Simplemente creamos un objeto Statement y lo
ejecutamos, suministrando el método SQL
apropiado con la sentencia SQL que queremos
enviar.
Acceso a Base de Datos
– Para una sentencia SELECT, el método a
ejecutar es executeQuery.
– Para sentencias que crean o modifican tablas, el
método a utilizar es executeUpdate.
– Statement stmt = con.createStatement();
– Donde con es la conexión establecida
anteriormente.
Acceso a Base de Datos

• Ejecutar sentencias
– En este momento stmt existe, pero no tiene
ninguna sentencia SQL que pasarle al
controlador de la base de datos.
– stmt.executeQuery(“SELECT * FROM tabla”);
– stmt.executeUpdate(“INSERT INTO tabla
VALUE .....”);
Acceso a Base de Datos

• Recuperar valores desde una tabla


– JDBC devuelve los resultados en un objeto ResultSet.

– ResultSet rs = stmt.executeQuery("SELECT * FROM tabla");

– La variable rs, que es un ejemplar de ResultSet,


contiene las filas de tabla.
Acceso a Base de Datos
– Para recorrer todas las filas existentes en rs,
utilizamos el método next().
– while( rs.next() ) {
• // código
•}
– Para recuperar una columna, se puede
utilizar tanto el nombre de la columna
como su posición.
• rs.getString(“nombre”);
– rs.getString(1);
Acceso a Base de Datos

• Las sentencias que podemos ejecutar


pueden ser tan complejas como nos sea
posible.
• La labor de los métodos getString,
getFloat, etc.., es tranformar los valores
de la base de datos a valores de JAVA.
Acceso a Base de Datos
• Ejercicios
– Descargue el driver de mysql de www.mysql.org
– Descomprimalo
– Haga un programa que se conecte a la base de
datos triskelion que esta corriendo en el
computador del profesor.
– Use el login alumno y el password java.
– Haga una consulta sencilla, usando el esquema
que se le entrego al inicio de la clase.
– Imprima el resultado en la pantalla.
– Ejecute usando
‣ java -cp $CLASSPATH:mysql-...-.jar nombre_prog
Acceso a Base de Datos
• ResultSetMetaData
– Como su nombre lo indica, nos da informaci’on
sobre los datos.
– El ResultSet no guarda información como los
nombres de las columnas, los tipos SQL de los
datos o la cantidad de columnas.
•ResultSetMetaData rsmd = rs.getMetaData();
– donde rs es nuestro objeto ResultSet.
– Existen otros métodos disponibles en la API.
Acceso a Base de Datos
• Ejercicios
– Haga un programa que se conecte a la base de
datos triskelion que esta corriendo en el
computador del profesor.
– Use el login alumno y el password java.
– Revise una tabla completa, usando el esquema
que se le entrego al inicio de la clase.
– Guarde la tabla, con los nombres de las
columnas en un archivo csv en su computador.
– Ejecute usando
‣ java -cp $CLASSPATH:mysql-...-.jar nombre_prog
JAR
• El formato de archivos JAR permite
empaquetar varios archivos en un sólo archivo.
Típicamente un archivo JAR contendrá los
archivos de clases y los recursos auxiliares
asociados con los applets y aplicaciones.
Estos recursos auxiliares podrían incluir, por
ejemplo, archivos de imagen y sonido que
sean utilizados por una aplicacion.
JAR
• El formato de archivos JAR proporciona
muchos beneficios:
– Seguridad: Puede firmar digitalmente el contenido
de un archivo JAR. Los usuarios que reconozcan
su firma pueden permitir a su software privilegios
de seguridad que de otro modo no tendría.
JAR
– Disminuir el tiempo de descarga: Si sus
applets están empaquetados en un archivo
JAR, los archivos de clases y los recursos
asociados pueden ser descargados por el
navegador en una sola transacción HTTP sin
necesidad de abrir una nueva conexión para
cada fichero.
JAR
– Compresión: El formato JAR permite
comprimir los archivos para ahorrar espacio.
– Portabilidad: El mecanismos para manejar los
ficheros JAR son una parte estándar del corazón
del API de la plataforma Java.
JAR
– Empaquetado sellado : Los paquetes
almacenados en archivos JAR pueden ser
sellados opcionalmente para que el paquete
puede reforzar su consistencia. El sellado de
un paquete dentro de un archivo JAR
significa que todas las clases definidas en
ese paquete deben encontrarse dentro del
mismo archivo JAR.
JAR

– Empaquetado versionado : Un archivo


JAR puede contener datos sobre los
archivos que contiene, como información
sobre el vendedor o la versión.
JAR
• Uso:
– Para crear un fichero JAR
• jar cf jar-file input-file(s)
– Para ver el contenido de un fichero JAR
• jar tf jar-file
– Para extraer el contenido de un fichero JAR
• jar xf jar-file
– Para ejecutar una aplicación empaquetada en un fichero JAR
• java -cp app.jar MainClass
• java -jar app.jar
JAR
• Firmar archivos JAR
– Se utiliza la firma de archivos JAR para
autentificar al proveedor del software.
– Si una aplicación necesita ejecutar acciones
sensibles al sistema, la plataforma impide dichas
acciones a menos que el archivos JAR esté
firmado y verificado por una fuente confiable.
Fin

Curso dictado por Jaime Tobar E.


jaime.tobar@gmail.com

Vous aimerez peut-être aussi