+ All Categories
Home > Documents > 1_Diapositivas

1_Diapositivas

Date post: 21-Dec-2015
Category:
Upload: jennyanccori
View: 214 times
Download: 2 times
Share this document with a friend
Description:
Documento
Popular Tags:
171
JULIO RAÚL CARRANZA RUIZ JAVA J2EE TRAINER Java Standard Edition
Transcript

JULIO RAÚL CARRANZA RUIZJAVA J2EE TRAINER

Java Standard Edition

Java

Lenguaje de Programación Orientado a Objetos Multiplataforma, portable. Compilado e Interpretado Creador :James Gosling Empresa: Sun Microsystems Data: 1990

La Máquina Virtual JVM

Es el componente de la tecnología encargado de mantener la independencia de la plataforma.

Llamada “HotSpot”. Es una máquina computacional abstracta. Con

su juego de instrucciones, gestión de memoria, etc.

Compilado – Interpretado - Portable

JVM (Sun, BEA, IBM)

11000110

Producto.java Producto.class

Intérprete

Ligero

Plataforma Java

Producto.class

Aplicación

Garbage Collection

Técnica de la JVM que libera de memoria a un objeto cuando ya no es referenciado (usado).

También combate la fragmentación de la memoria, todo en tiempo de ejecución del programa.

Reciclado de Memoria

Tecnologías Java

Java Platform SE

Que se puede desarrollar con esta plataforma base?

OBJETOS

Programación Orientada a objetos

conjunto de objetos interactuando

Objetos

Un objeto puede caracterizar una entidad física (coche) o abstracta (ecuación matemática)

Objeto = unidad atómica que encapsula estado y comportamiento

Clase

Clase es la representación abstracta de uno o más objetos.

La clase define el ámbito de definición de un conjunto de objetos idénticos.

Cada objeto pertenece a una clase Los objetos se crean por instanciación de las

clases. Una clase se almacena en un archivo y el

nombre de este archivo debe coincidir con el nombre de la clase.

Clases y Objetos

Clase

Ob

jetos

Definición de Clase en Java

ámbito class NombreDeClase

{

//propiedades

//métodos

}

------------------------------------------------

Donde ámbito: public, final, abstract

Tipos de clase

abstract : Una clase abstract tiene al menos un método abstracto. Una clase abstracta no se instancia, sino que se utiliza como clase base para la herencia.

final :Una clase final se declara como la clase que termina una cadena de herencia. No se puede heredar de una clase final. Por ejemplo, la clase Math es una clase final.

public: Las clases public son accesibles desde otras clases, bien sea directamente o por herencia. Son accesibles dentro del mismo paquete en el que se han declarado. Para acceder desde otros paquetes, primero tienen que ser importadas.

Definición de propiedades, variables

Tipo nombre_propiedad; Tipo nombre_variable;

Donde tipo:

Tipo Description

byte -128 to +127, 1 byte (8 bits) in memory

short -32768 to 32767 , 2 bytes (16 bits) in memory

int -2147483648 to 2147483647 , 4 bytes (32 bits) in memory

long -9223372036854775808 to 9223372036854775807 , 8 bytes (64 bits) in memory

Tipo Descripcion

float -3.4E38 (-3.4x1038) to +3.4E38 (+3.4x1038) , 4 bytes in memory. 7 digits

double -1.7E308 (-1.7x10308) to +1.7E308 (+1.7x10308) ,8 bytes in memory. 17 digits.

Otros tipos

char myCharacter = '\u0058'; char car = ‘A’; boolean existe = true;

Conversión de tipos

Java es un lenguaje fuertemente tipado, es decir, en tiempo de compilación se comprueba la compatibilidad de tipos

Conversión implícita: (automática) tipos primitivos a uno que soporte un rango mayor de valores

float saldo = 300; //podemos asignarle un entero

int codigo = 3.7; //ERROR

Conversión explícita: tipos primitivos perdiendo información

long l = 223456723456;

int i = (int)l;

Operadores

Relacionales >, >=, <, <=, !=, ==

Lógicos && , || , !

Precedencia de Operadores

Constructores

Permiten instanciar una clase Class Cliente

{Cliente(){}

} Características:

Objetos en Java

…….NombreClase objeto;

Objeto = new NombreClase();

…..….

Métodos

Tipo_de_retorno nombreMétodo(tipo1 param1, tipo2 param2, …)

{

…..

…….

return resultado; // no se pone si no retorna nada

}

Donde:

- Tipo_de retorno: int, String, boolean,…

- Si no retorna nada entonces Tipo_de_Retorno es void

Paquetes

Un paquete es un conjunto de clases agrupadas en un directorio.

Se le define un classpath para su búsqueda. El nombre del paquete es el nombre de la ruta

contada a partir de su classpath. Ejemplos:

Acceso desde: private protected public (package, default)

la propia clase S S S S

subclase en el mismo paquete N S S S

otras clases en el mismo paquete N S S S

subclases en otros paquetes N X S N

otras clases en otros paquetes N N S N

Ámbito de Métodos y Variables de Clases

Sobrecarga de Métodos Static, final Sentencias de Control

HERENCIA

Herencia

Vehículo

Veihículo Terrestre Vehículo Aéreo

Coche Camión Avión Helicóptero

Herencia

• Una subclase hereda de su superclase métodos y

variables tanto de clase como de instancia.

• Una subclase puede añadir nuevos métodos y variables.

• Una subclase puede redefinir métodos heredados.

• Sintaxis:class nombreHija extends nombrePadre {…}

• Por defecto toda clase extiende la clase Object

class Contador {…} class Contador extends Object {…}

Herencia

• Herencia simple

• Object es la clase raíz (paquete java.lang)

• Object describe las propiedades comunes a todos los objetos

Object

A B

C D

Terminología:- C y D son subclases de B- B es la superclase de C y D

Herencia. Clase Object

Todas las clases heredan directa o indirectamente de la clase Object, raíz de la jerarquía.

Toda clase tiene disponibles sus métodos:

public final Class getClass() clase que representa el tipo del objeto

public boolean equals(Object obj) igualdad de valores public String toString() Devuelve la representación del obj

en un String

protected Object clone() devuelve una copia del objeto public int hashCode() devuelve un código que identifica de

manera única al objeto- protected void finalize() relacionado con liberar memoria

Hay que redefinir equals, toString, hashCode y clone para adaptarlos.

Definición en Java

class Clase_Hija extends Clase_Padre{ //propiedades

//métodos}

Clase_Padre: Superclase

Ejemplo

public class ContadorColoreado extends Contador {//nueva variable de instanciaprivate String color ;

public ContadorColoreado(){super();setColor(“transparente”);

}public ContadorColoreado(int v, int s, String

c) {super(v,s);setColor(c);

}...

}

Llamada al constructor del

padre

Object

Contador

ContadorColoreado

Overwriting - Redefinición

Un método de la subclase con la misma signatura y valor de retorno que un método de la superclase lo está REDEFINIENDO.

Los métodos solo se diferencian entre número de parámetros y/o tipo de datos entre sus parámetros.

Para evitar la redefinición de un método se utiliza el modificador final.

Los atributos no se pueden redefinir, sólo se OCULTAN (el campo de la superclase todavía existe pero no se puede acceder).

Ejemplo redefiniciónpublic class Poligono{ private Punto [] vertices; private int numVertices; … public float perimetro(){ //{} double peri=0; Punto anterior=vertices[0]; Punto actual; int ultimo=numVertices-1; for (int i=1; i<=ultimo; i++){ actual=vertices[i]; peri+=anterior.distancia(actual); anterior=actual; } //distancia del ultimo con el primero return peri+=vertices[ultimo].distancia(vertices[0]); }}

public class Rectangulo extends Poligono{ //{} private double lado1; privare double lado2;

… public float perimetro(){ return 2*lado1+2*lado2; }}

Añade atributos

Redefine métodos

super

Palabra clave disponible en todos los métodos no-static

Se invoca a la versión del método de la primera superclase que lo contenga

Ejemplo:

public class Punto{… //(x,y)public void borrar(){}

}

public class Pixel extends Punto{…

public void borrar(){ super.borrar(); //borra el Punto

color = null; }

}

class Uno { public int test(){return 1;} public int result1(){return this.test();}}

class Dos extends Uno{ public int test(){return 2;}}

class Tres extends Dos{ public int result2(){return this.result1();} public int result3(){return super.test();}}

class Cuatro extends Tres{ public int test(){return 4;}}

Uno

Tres

Dos

Cuatro

Ejemplo super

Acceso desde: private protected public (package-default)

la propia clase S S S S

subclase en el mismo paquete N S S S

otras clases en el mismo paquete N S S S

subclases en otros paquetes N X S N

otras clases en otros paquetes N N S N

Ámbito de Métodos y Variables de Clases

X: puede acceder al atributo en objetos que pertenezcan a la subclase, pero no en los que pertenecen a la clase padre.

INTERFACES

Clases: Encapsulación

La encapsulación en un objeto permite una alta cohesión y un bajo acoplamiento, favorece la modularidad y el mantenimiento

Los atributos de una clase no deberían ser manipulables directamente por el resto de objetos

Clases: Encapsulación

Niveles de encapsulación Java: Private Public Protected

Class Movil{ private int numero; public int getNumero() {

return this.numero; } public void setNumero(int num) { this.numero=num; }}

Interfaces

Son un conjunto de métodos y/constantes abstractas que podrán ser implementados en cualquier clase que la necesite. Un interface es una expresión de diseño, mientras

que una clase es una expresión de diseño e implementación.

Las clases pueden implementar más de una interface. public interface ConversionFactors

{ double CONSTANTE1 = 25.4;

double CONSTANTE2 = 28.349523125;double CONSTANTE3 = 453.5924; public static double convierte(double cantidad) ;

}

Implementando la Interface …public OtraClase class implements ConversionFactors {

public static double convierte(double cantidad) {

return cantidad*CONSTANTE1; // opcional}

……. }

Notas - Interfaces

Todos lo métodos de las interfaces son implícitamente public y abstract. No se necesita tipear en la declaración del método public ni abstract.

Todas las variables definidas en un interface deberán ser public, static, and final, es decir, las interfaces pueden declarar solo constantes, no variables de instancia.

Los métodos de una interface no deben ser static. Como los métodos de la interfaces son abstract, ellos no pueden ser

final, struct, o native. Una interface puede extender uno o más interfaces. Una interface no puede ser declaradas con la keyword abstract Una interface no puede extender nada de otras clases. Una interface no puede implementar otra interface o clase. Una interface solo puede ser declarada con la keyword interface. Una Interface puede ser usada para polimofismo.

Clases abstractas

Se fija un conjunto de métodos y atributos que permitan modelar un cierto concepto, que será refinado mediante la herencia.

Métodos abstractos: sólo cuentan con la declaración y no poseen

cuerpo de definición la implementación es específica de cada

subclase Toda clase que contenga algún método

abstracto (heredado o no) es abstracta. Puede tener también métodos efectivos.

Tiene que derivarse obligatoriamente NO se puede hacer un new de una clase abstracta.

Ejemplos

public abstract class Figura {

public abstract void dibujar();

public abstract void rotar();

...

}

public class Rectangulo extends Figura {

public void dibujar(){

//código especifico para dibujar rectángulos...

} ...

}

PATRONES DE DISEÑO BASE

Agenda Propósito de los patrones Fundamentos de diseño.

•Creación.–Factory Method–Singleton–Abstract Factory

•Estructurales–Adapter–Facade–Composite

•Comportamiento–Command–State –Observer

¿Qué es un patrón de diseño? Ante un problema reiterado ofrece una

solución contrastada que lo resuelve. Describe el problema en forma sencilla. Describe el contexto en que ocurre. Describe los pasos a seguir. Describe los puntos fuertes y débiles de

la solución. Describe otros patrones asociados.

¿Por qué usarlos? Mejora en la comunicación y

documentación “Hay que hacer un Factory Method” Facilita la documentación interna del proyecto.

Mejora la ingeniería de software. Eleva el nivel del grupo de desarrollo.

Previene “reinventar la rueda” en diseño Son soluciones ya probadas.

Mejora la calidad y estructura “¿Cuan grande debe ser una clase?”

Singleton

Problema: No se puede tener mas de una instancia de

una clase. Se necesita controlar el acceso a una clase.

-ClaseUnica()+ObtenerInstancia() : ClaseUnica+Operacion1()

-instancia : ClaseUnica

ClaseUnica

Singleton

if (instancia==null){ Mutex mutex = new Mutex(); mutex.WaitOne(); if(instancia==null) instancia = new ClaseUnica(); mutex.Close();}return instancia;

if (instancia==null) instancia = new ClaseUnica();return instancia;

• Cambio el constructor a privado.• Hago que la clase no pueda ser

heredada.• Agrego una variable estática del

mismo tipo de la clase donde esta contenida. (instancia)

• Agrego un método estático que retorne la variable estática. (GetInstance)

• No creo el objeto hasta que sea necesario (Lazy Creation)

• Agrego el código necesario para no crear dos instancias en distintos thread.

Factory Method

Patrón de creación (ámbito de clase) Propósito: “Define una interfaz para crear un

objeto, pero deja que sean las subclases quienes decidan la clase del objeto a crear.” La instancia del objeto a crear depende de

condiciones externas a la clase cliente. Puede cambiar independientemente de

cambiar la clase cliente.

Factory Method

Abstract Factory

COLECCIONES

Colecciones en Java

Permite almacenar y organizar objetos de manera útil para un acceso eficiente.

Se encuentran en el paquete java.util Núcleo de abstracciones de colecciones de utilidad

(interfaces) e implementaciones ampliamente útiles. Las interfaces proporcionan métodos para todas las

operaciones comunes y las implementaciones concretas especifican la decisión de las operaciones no permitidas.

(java.lang.UnsupportedOperationException) Sobre los elementos se puede iterar (Iterator)

Colecciones Interfaces

- interface Collection- clases ArrayList, LinkedList,

HashSet, TreeSet

- interface Map- clases TreeMap, HashMap

- Iteratores: interfaz Iterator

Jerarquía de colecciones

Collection

ListIterator

Iterator Map

AbstractMapSortedMap

AbstractSequentialList

TreeMap HashMapSortedSet

AbstractSetAbstractList

AbstractCollection

SetList

HashSet TreeSet

ArrayList

LinkedList

extendsimplements

class

interface

devuelve

devuelve

devuelve

Interface Collection (1/2)

- Collection- int size()- boolean empty()- boolean contains(Object elem)- Iterator iterator()- Object[] toArray(), Object[] toArray(Object dest[])- boolean add(Object elem),- boolean remove(Object elem)- void clear()

- List – Una colección cuyos elementos permanecen en un orden particular a menos que se modifique la lista (no significa lista enlazada aunque es una posible implementación).

- void add(int index, Object element)- Object remove(int index)- Object get(int index)- Object set(int index, Object element)- int indexOf(Object o)- int lastIndexOf(Object o)- List subList(int min, int max)

Interface Map

- Map- Un objeto que asocia claves con valores. - No puede tener claves duplicadas. Object put(Object key, Object value); Object remove(Object key); Object get(Object key);

containsKey, containsValue, isEmpty, size- Proporciona tres vistas de colección: colección de claves

(keySet), colección de valores (values), colección de asociaciones clave-valor (entrySet).

- SortedMap: Un mapa cuyas claves están ordenadas.- Object firstKey(), Object lastKey(), SortedMap subMap(Object minKey, Object maxKey), SortedMap headMap(Object maxKey), SortedMap tailMap(Object minKey)

Interface Collection (2/2)-Set – Una colección (conjunto) donde no puede haber elementos repetidos, y cuyos elementos no se almacenan necesariamente siguiendo un orden particular.

- Mismos métodos que Collection con otro contrato.

-SortedSet – Conjunto con elementos ordenados.-Object first()-Object last()-SortedSet subSet(Object fromElement, Object toElement)-SortedSet headSet(Object toElement)-SortedSet tailSet(Object fromElement)

IteraciónCollection >> Iterator iterator();

interface Iterator{boolean hasNext();/* Devuelve true si la iteración tiene mas elementos */

Object next();/* Devuelve el siguiente elemento de la iteraciónLanza excepción NoSuchElementException */

void remove();/* Elimina el último elemento devuelto por la iteraciónEstá capacitado para decir que no lo implementaUnsupportedOperationException */

}

La interfaz ListIterator extiende a Iterator y maneja un objeto List ordenado. Permite iterar hacia delante y hacia atrás.

Ejemplo de uso de Iteradores

Cálculo del gasto total de un departamento

public double gastoDpto(){

double gasto=0;

Iterator it=plantilla.iterator();

while (it.hasNext()){

gasto+=((Empleado)it.next()).getSueldo();

}

return gasto;

}

Siendo plantilla una colección que implemente la interfaz Collection

GENERICS

Clases genéricas

class Cosa<T> { T nombre; public Cosa(T nombre) { this.nombre = nombre; } public void setNombre(T nombre) { this.nombre = nombre; } public T getNombre() { return nombre; }}

Usando clases genéricas

Cosa<String> cosa = new Cosa<String>("pedro");String nombre = cosa.getNombre();cosa.setNombre(new Integer(1)); // FALLO !!!

Métodos genéricos

class Bicho {public <T> T getBicho(T aBicho) { return aBicho; } public <T> void doBicho(T aBicho) { T bicho2 = aBicho; (…) }public static <T> T getBicho(T aBicho){

return aBicho;}

}

Polimorfismo paramétrico: Generics

Permite parametrizar tipos Ejemplo de Colecciones: List<Animal>

Permite al compilador asegurar la validez de los tipos Mueve el control de errores del tiempo de

ejecución (ClassCastException) al tiempo de compilación

Mejora la robustez y legibilidad del código

Ejemplo Antes:

Animal perro = new Animal();List granja = new ArrayList();granja.add(perro);Animal a = (Animal)granja.get(0);granja.add(“hola”);Animal a = (Animal)granja.get(1); // ERROR !!!

Después:Animal perro = new Animal();List<Animal> granja = new ArrayList<Animal>();granja.add(perro);Animal a = granja.get(0); // SIN CASTINGgranja.add(“hola”); // ERROR !!!

Simplemente te ahorra castings ? Chequeo en tiempo de compilación

Si introducimos otro tipo nos avisa, no falla con ClassCastException en tiempo de ejecución

Refuerza las relaciones entre clases Ahora sabemos que un banco tiene una

lista de Cuentas. Es más legible y obliga al programador.

NUEVAS CARACTERÍSTICAS DEL LENGUAJE

Collection Interfaces

Collection Clases

AutoBoxing

Esta técnica se ha añadido a Java para: suplir la carencia de no poder utilizar generics con los tipos

simples minimizar el número de casts y “news” necesarios para trabajar

con colecciones

Vector<Integer> vi=new Vector<Integer>(1);vi.setElemento(0,35); // * Autoboxing

int i=vi.getElemento(0); // * Unboxing

En general, existe una conversión automática y simétrica entre tipos simples y sus clases envoltorioDouble od=34.45; // * Autoboxing

double ds=od; // * Unboxing

Enumerados

Las enumeraciones de elementos se solían hacer en Java 1.4 con

atributos de clase enteros y constantesclass Naipes{

static public final int OROS=0;static public final int COPAS=1;static public final int ESPADAS=2;static public final int BASTOS=3;private final int numero;private final int palo;}

Los inconvenientes mayores que producían eran. No son seguros respecto al tipo (permiten utilizar cualquier entero, aunque no tenga sentido)

Naipes(int numero,int palo) {

this.numero=numero;

this.palo=palo;

}

Enumeradospublic enum Palo {OROS, COPAS, ESPADAS, BASTOS}

class Naipes{

private final int numero;

private final Palo palo;

Naipes(int numero,Palo palo) {

this.numero=numero;

this.palo=palo;

}

}

public class App {

public static void main(String[] args) {

Naipes q =new Naipes(1, Naipes.Palo.OROS);

for( Naipes.Palo palo:Naipes.Palo.values() )

System.out.println(palo);

}

}

Varios Argumentos de un Método En Java 1.5 se ha añadido la posibilidad de

utilizar lista

variable de argumentos (…)

public static void mostrar (Object... cosas) {for (Object cosa:cosas)

System.out.println("Elemento i: "+cosa);

}

public static void main(String[] args) {mostrar(1,2,"Hola"); // * Autoboxing

}

Import a miembros estáticos de una clase En el caso de que tengamos que hacer uso

intensivo de los miembros de una clase deutilidad, se ha ampliado en Java 1.5 la cláusula

importpara miembros de clase:

import static java.lang.Math.*;

public class App

{

public static void main(String[] args) { double coseno=cos(PI/4); System.out.println(""+coseno);

}

}

EXCEPCIONES

Excepción

Es una señal de un mal funcionamiento del programa o del sistema en general.

Puede ser generado por el mismo interprete o ser lanzado por el mismo programador que quiere alertar que existe una sentencia con problemas.

Ejecución normal

Con ocurrencia de excepción

- hijo

+padre

Anidamiento

Árbol de Excepciones

Tipos

Checked Exceptions: Significa que el compilador chequea que los métodos lancen solo la Excepción que ellos mismos lo tiene declarados para lanzarlos.

Unchecked Runtime Exceptions: Representan errores que se generan en la lógica de programación en tiempo de ejecución y que razonablemente no pueden ser recuperados. Por ejemplo: ArrayIndexOutOfBoundsException. Prevenir esto podría ser impráctico capturarlo.

Class Name Exception Condition Represented

ArithmeticException An invalid arithmetic condition has arisen such as an attempt to divide an integer value by zero.

IndexOutOfBoundsException

You've attempted to use an index that is outside the bounds of the object it is applied to. This may be an array, a String object, or a Vector object.

NegativeArraySizeException

You tried to define an array with a negative dimension.

NullPointerException You used an object variable containing null, when it should refer to an object for proper operation - for example, calling a method or accessing a data member.

ArrayStoreException You've attempted to store an object in an array that isn't permitted for the array type.

ClassCastException You've tried to cast an object to an invalid type - the object isn't of the class specified, nor is it a subclass, or a superclass, of the class specified.

IllegalArgumentException

You've passed an argument to a method which doesn't correspond with the parameter type.

SecurityException Your program has performed an illegal operation that is a security violation. This might be trying to read a file on the local machine from an applet.

IllegalMonitor StateException

A thread has tried to wait on the monitor for an object that the thread doesn't own. (We'll look into threads in Chapter 11).

Propias Excepciones

Se crea una clase que hereda de la clase Exception

Para generar la excepción se usa la sentencia: throw new PropiaExcepcion()

Ejemplo:

Lanzando Excepciones

double myMethod() throws IOException, FileNotFoundException

{ // codigo …

} Otra forma:

try {

// Código que genera un excepción aritmética

} catch(ArithmeticException e)

{

// proceso de la excepción

throw e; // Relanza la exception al programa que lo llama

}

Otra forma de relanzar una Excepcióntry {

// Código que genera un excepción aritmética

} catch(ArithmeticException e)

{

// proceso de la excepción

throw e; // Relanza la exception al programa que lo llama

}

NETWORKING

IP Addresses

Java tiene la calse java.net.InetAddress el cuál abstrae la direcciones de red.

Sigue los siguientes propósitos: Encapsular y direccionar Lleva a cabo consultas de nombre

(convirtiendo un nombre de host a IP) Hace reversas (direcciones a nombre)

java.net.InetAddress

Static construction usando factory InetAddress getByName(String hostName)

hostName puede ser “host.domain.com.pe”, o hostName puede ser “170.90.72.14”

InetAddress getLocalHost() Algunos métodos:

String getHostName() Obtiene el host name (ejemplo:

“www.sun.com”) String getHostAddress()

Obtiene tu IP (ejemplo“170.18.97.241”) InetAddress getLocalHost() InetAddress[] getAllByName(String hostName)

Usando InetAddress objects

import java.net.InetAddress;import java.net.UnknownHostExcepion;

public static void main(String[] args){ try { InetAddress inet1 = InetAddress.getByName(“novatel.edu.pe"); System.out.println( "HostAddress=" + inet1.getHostAddress()); InetAddress inet2 = InetAddress.getByName("170.95.72.13"); System.out.println("HostName=" + inet2.getHostName()); if (inet1.equals(inet2)) System.out.println("Addresses are equal"); } catch (UnknownHostException uhe) { uhe.printStackTrace(); }}

Socket

Es un software central que establece la comunicación bidireccional entre un servidor programa y uno o más programas cliente.

Al socket se le asocia con un específico puerto en la maquina donde corre software. Por eso cualquier programa de la red se puede comunicar con él.

Request – response Un servidor puede atender muchos clientes usando

Multithreads en donde cada thread acepte la conexión con el cliente y continúen escuchando los requests de otros clientes.

Tipos de TCP Socket

java.net.ServerSocket es usado por servidores que pueden aceptar incomming TCP/IP connections Un servidor es una pieza de software el cual

hace público y provee una serie de servicios a requerimiento.

java.net.Socket es usado por clientes que desean establecer conexión remota a un servidor. Un cliente es una pieza de software usualmente

sobre diferente máquina el cual hace uso del servicio.

java.net.ServerSocket

Escucha sobre un puerto conocido incoming connections

Provee un Socket de comunicación para un puerto dado.

Mantiene una cola que asegura las conexiones con los clientes y no los pierde.

java.net.ServerSocke

Construction: ServerSocket(int port, int backlog)

Some useful methods: Socket accept()

Espera a un cliente que intente establecer conexión con el servidor.

void close() Llamado por el servidor cuando se intenta bajar

el servicio y asegurar la liberaciónd e recursos.

java.net.Socket

Provee acceso a TCP/IP streams Bi-directional comunicación entre sender

and receiver Puede ser usado para conectarse a

direcciones remotas y puertos: Socket(String remoteHost, int port)

También es usado para aceptar un incoming connection.

java.net.Socket

Puede obtenerse el accesos a input and output streams

Input stream permite la recepción de la data de otras partes InputSteam getInputStream()

Output stream permite despachar la data hacia otras partes OutputStream getOutputStream()

Funcionamiento

2037 80

2037 1583

2037 1583

Client (sid) Server (fred)

ServerSocket ss.s = ss.accept()

s = new Socket(“Carl”, 80)

Socket s

s.getInputStream()s.getOuputStream()

s.getInputStream()s.getOuputStream()

TCP serverpublic static void main(String[] args){ try { ServerSocket agreedPort = new ServerSocket(AGREED_PORT_NUMBER, 5);

while (isStillServing()) { Socket session = agreedPort.accept(); respond(session); session.close(); }

agreedPort.close(); } catch (UnknownHostException uhe) { // Very unlikely to occur } catch (IOException ioe) { // May occur if the client misbehaves? } }

TCP client

public static void main(String[] args){ try { InetAddress server = InetAddress.getByName(args[0]); Socket connection = new Socket(server, AGREED_PORT_NUMBER); makeRequestToServer(connection); getReplyFromServer(connection); connection.close(); } catch (UnknownHostException uhe) { // arg[0] is not a valid server name or IP address } catch (IOException ioe) { // The connection to the server failed somehow: // the server might have crashed mid sentence? }}

THREADS

Definición

ThreadThread es una pieza de código que es una pieza de código que puede ser ejecutada concurrentemente puede ser ejecutada concurrentemente con otra dentro de un mismo contexto.con otra dentro de un mismo contexto.

Concurrency Models I

Processes versus Threads

Operating System

Threads Fibres Process

thread library

Thread Lifecycle: 4 states

RUNNABLE

runningnot

running

BLOCKED/WAITING/

TIMED_WAITINGNEW

TERMINATED

Thread Lifecycle: 4 states

RUNNABLE

runningnot

running

BLOCKED/WAITING/

TIMED_WAITINGNEW

TERMINATED

start()

Thread Lifecycle: 4 states

RUNNABLE

runningnot

running

BLOCKED/WAITING/

TIMED_WAITINGNEW

TERMINATED

start()

sleep()block on I/O

wait()

Thread Lifecycle: 4 states

RUNNABLE

runningnot

running

BLOCKED/WAITING/

TIMED_WAITINGNEW

TERMINATED

start()

sleep()block on I/O

wait()

time elapsedI/O donenotify()

Thread Lifecycle: 4 states

RUNNABLE

runningnot

running

BLOCKED/WAITING/

TIMED_WAITINGNEW

TERMINATED

start()

sleep()block on I/O

wait()

time elapsedI/O donenotify()

run() methodreturns

Non-Existing

New

Executable

Blocked Dead

start

create thread object

run method exits

Non-Existing

garbage collectedand finalization

wait, joinnotify, notifyAllthread termination

destroy

destroy

destroy

El thread es creado Hasta este punto el thread no es ejecutado — Java

llama a este punto el estado new state Una vez que el método startes llamado, el

thread llega a ser elegible para la ejecución según la agenda.

Si el thread llama al método wait desde su objeto, o al método join desde otro objeto, el thread se bloquea es decri se pone en un estado blocked y no será elegible par ala ejecución.

Este llegará a ser ejecuable cuando otro thread le notifique travéz de su método notify, o si el thread que estuvo en join, llega a dead.

Ejemplo: Thread

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 { sleep((long)(Math.random() * 1000)); } catch (InterruptedException e) {}}System.out.println("DONE! " + getName());

}}

Sincronización

Cuando tenemos varios threads, muchas veces deseamos que éstos puedan compartir datos u objetos, por lo tanto, es indispensable saber sincronizar sus actividades; ésto también nos permitirá evitar la colisión o mal procesamiento.

Daemon Threads

Java threads pueden ser de dos tipos: user threads o daemon threads

Daemon threads son aquellos threads que proveen servicios generales y típicamente no terminan.

Cuando todos los threads hayan terminado, los daemon threads también terminan cuando el programa principal termina.

El método setDaemon debe ser llamado antes de que el thread sea iniciado con start.

public class Thread extends Object implements Runnable { ... public void destroy(); // DEPRECATED

public final boolean isDaemon(); public final void setDaemon();

public final void stop(); // DEPRECATED

}

Un Thread Termina:

Cuando termina la ejecución de un método run o se genera una excepción de tipo interrupted.

Vía una llamada la método stop (deprecated) Llamando el método destroy

----- PD: join() espera a que el thread temine de

ejcutarse.

POOLS CON JAVA 5

Executor

La más importante característica nueva para el manejo de multiprocesamiento de aplicaciones es el nuevo Framework Executor de Java 5.

Permite resolver la cancelación y cierre de los threads en una situación de multiproceso y sin control de número de threads.

java.util.concurrent.Executor es un objeto que ejecuta Runnable tasks.

Es similar a la llamada:

nuevo Thread (aRunnableObject). start (); Se usa así:

Executor proceso = Factoria_método; exector.execute (aRunnable);

Executors, pool

Hay varias Executors disponibles en la clase java.util.concurrent.Executors.

Executor pool=Executors.newFixedThreadPool(5);

pool.execute (new RunnableTask1 ()); pool.execute (new RunnableTask2 ());

pool.execute (new RunnableTask3 ()); Aquí se ejecutan las tareas y se completan bajo el control de la Executor, que

reutiliza los threads del pool, según sea necesario sin incurrir en la sobrecarga crear siempre la creación de nuevos hilos.

Se pueden parar los threads con:

executor.shutdown(); executor.shutdown ();

La interface Callable

Java.util.concurrent.Callable La nueva interfaz es mucho nejor que la Runnable, supera dos inconvenientes de Runnable. El método run no puede retornar un resultado pues solo retorna void y no puede lanzar una checked exception.public class MyCallable implements Callable<T>{

public T call() throws Exception {

return data;

}

}

Pool con Callable, ventajas

Callable<Integer> task = new MyCallable();

Future<Integer> taskK =pool.submit(task);

Lab.

JAVA SWING

Objetivos de la sesión

Crear componentes Swing de interface visual de la plataforma Java.

Usar Layouts para la distribución de componentes.

Controlar los eventos que generan los componentes visuales.

Swing Root Class

• setBounds(int x, int y, int ancho, int alto);

• setSize(int ancho, int alto);

• setLocation(int x, int y);

• setVisible(boolean b);

ancho

altox

y

Métodos Generales

• add(Component comp);

• remove(Component alto);

• setLayout(LayoutManager mrg);

ObjectComponent

Container• Jcomponent• JPanel• Window• ...

Contenedores

Evento

Componente emisor de Eventos

Listener Activado que escuchaLos Eventos

Respuesta

componente.addTipoListener(implementacionDelObjetoListener);

Manejo de Eventos: Listeners

Acción

Activando e implementando un listener

jButton1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { ………………………

…………………….. } });

public interface ActionListener{  void actionPerformed(ActionEvent e)}

Activando e implementando un listener

jButton1.addMouseListener(new MouseAdapter() { public void mouseEntered(MouseEvent e) {

…………………………………………………………….

} });

public interface MouseListener void mouseClicked(MouseEvent e) void mouseEntered(MouseEvent e) void mouseExited(MouseEvent e) void mousePressed(MouseEvent e) void mouseReleased(MouseEvent e)

Acciones (eventos) Vs Interfaces Listener

Acción que genera un evento

Tipo de Interfaces Listener

•El usuario hace un click, presiona Return•en un área de texto o selecciona un menú

ActionListener

•El usuario escoje un frame (ventana principal)

WindowListener

•El usuario interactúa con el mouse sobre una componente

MouseListener

•El usuario pasa el mouse sobre una componente

MouseMotionListener

•Una componente se hace visible ComponentListener

•Una componente adquiere el foco del teclado

FocusListener

•Cambia la selección en una lista o tabla

ListSelectionListener

Look and Feel: UIManager.setLookAndFeel(o)

UIManager.getCrossPlatformLookAndFeelClassName() Retorna un string para un look-and-feel garantizado a trabajar .

UIManager.getSystemLookAndFeelClassName() Pa la plataforma por defecto. Sobre Windows será Windows Look & Feel. Sobre Mac OS será Mac OS Look & Feel, etc..

"javax.swing.plaf.metal.MetalLookAndFeel" Propio de Java Look & Feel.

"com.sun.java.swing.plaf.windows.WindowsLookAndFeel" ParaWindows Look & Feel solo para Windows.

"com.sun.java.swing.plaf.motif.MotifLookAndFeel" ParaCDE/Motif Look & Feel. Para cualquier plataforma

"javax.swing.plaf.mac.MacLookAndFeel" Especifica Mac OS Look & Feel, solo puede ser usado para Mac OS.

COMPONENTES SWING

JOptionPane

• Para crear un diálogo de mensajes, simple y estándar se utiliza JOptionPane.

JOptionPane JOptionPane.showConfirmDialog(); JOptionPane.showMessageDialog(); JOptionPane.showOptionDialog)(); JOptionPane.showInputDialog();

Todos los diálogos son modales (no continúa la ejecución hasta que no se cierra).

Se pueden configurar mediante parámetros: título, mensaje, icono, etc.

Elementos..

JOptionPane

JOptionPane.showMessageDialog( this,

"El mensaje!",

"Título", JOptionPane.INFORMATION_MESSAGE

);

this , si es invocado de un container

JButton

Propiedades de JButton

JLabel

Propiedades deJLabel

JList

Un Jlist presenta un grupo de opciones a elegir

Estas opciones pueden ser Strings, check boxes, combo boxes,menus, radio buttons, tables; en general pueden ser cualquier Object

JList tiene un constructor al que se puede pasar un array de objetos String para que los presente Ventaja de Swing frente AWT

Ejemplo: ListasCargadaConArreglos.java

JComboBox

Se usa en ocasiones en que el usuario debe seleccionar dentro de un grupo finito de datos.

Se usa cuando se le quiere dar al usuario un conjunto de respuestas pre definidas

Tiene dos partes: encabezado (nombre, pe. Sexo, Ciudad) y lista de opciones

Ejemplo: JComboBoxEjemplo.java

ListSelectionListener

Los eventos List selection ocurren cuando una selección en una list o una table cambia o acaba de cambiar .

JCheckBox

Los JCheckBox permite tener botones que pueden ser seleccionados como verdadero o falso.

Se parece mucho a un JButton en la manera de iniciar: new JCheckBox(String texto); new JCheckBox(String texto, boolean seleccionado); new JCheckBox(Icon icono, String texto); new JCheckBox(Icon icono, String texto, boolean

seleccionado); new JCheckBox(Icon icono); new JCheckBox(Icon icono,

boolean seleccionado);

JRadioButton

Los botones de radio son útiles cuando seleccionamos entre algunos valores (que no son tantos como para ponerlos en una lista, o en un JComboBox.

Los botones de radio, se inicializan como cualquier boton:

new JRadioButton(String texto); new JRadioButton(String texto, boolean seleccionado); new JRadioButton(Icon icono, String texto); new JRadioButton(Icon icono, String texto, boolean seleccionado); new JRadioButton(Icon icono); new JRadioButton(Icon icono, boolean seleccionado);

Salvo que hay que agregarlos todo a un ButtonGroup para que una selección simple de varios usar new ButtonGroup();

JCheckBox

amarilloboton = new JCheckBox("amarillo"); amarilloboton.setMnemonic(KeyEvent.VK_A); amarilloboton.setSelected(true);

azulboton = new JCheckBox("azul"); azulboton.setMnemonic(KeyEvent.VK_Z);

azulboton.setSelected(true);

Listeners: CheckBoxListener escucha1 = new

CheckBoxListener(); amarilloboton.addItemListener(escucha1); azulboton.addItemListener(escucha1);

JTable

JDBC

JDBC

API de JSE 1.5 que permite ejecutar sentencias SQL y Stored Procedures desde una aplicación Java.

Tiene su propia versión 3.0, 4.0… Tecnología que permite desarrollar

Drivers JDBC. Se hace realidad "write once and run

anywhere"

Drivers

Driver Categories

Driver Category All Java Network Connection

1. JDBC–ODBC Bridge No Direct

2. Native API as basis No Direct

3. JDBC-Net client, Yes server, Maybe Indirect (Security)

4. Native protocol as basis Yes Direct

Connection con=null;Class.forName("com.mysql.jdbc.Driver");con = DriverManager.getConnection( "jdbc:myDriver:wombat",

"myLogin", "myPassword"); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM

Table1");

while (rs.next()) { int x = rs.getInt("a"); String s = rs.getString("b");

float f = rs.getFloat("c"); System.out.println(x, s, f);

}

Connection con = null; PreparedStatement pstmt = null;try {

Class.forName("com.mysql.jdbc.Driver");con = DriverManager.getConnection("jdbc:default:connection"); pstmt = con.prepareStatement( "UPDATE EMPLOYEES SET CAR_NUMBER = ? " + "WHERE EMPLOYEE_NUMBER = ?");pstmt.setInt(1, carNo); pstmt.setInt(2, empNo); pstmt.executeUpdate();

} finally { if (pstmt != null)

pstmt.close(); }

con.setAutoCommit(false); PreparedStatement updateSales =

con.prepareStatement( "UPDATE COFFEES SET SALES = ? WHERE COF_NAME = ?"); updateSales.setInt(1, 50); updateSales.setString(2, "Colombian");updateSales.executeUpdate(); PreparedStatement updateTotal = con.prepareStatement( "UPDATE COFFEES SET TOTAL = TOTAL + ? WHERE COF_NAME = ?"); updateTotal.setInt(1, 50); updateTotal.setString(2, "Colombian"); updateTotal.executeUpdate(); con.commit();

con.setAutoCommit(true);

Problemas de Integridad

Dirty Reads: Sucede cuando se lee una fila que ha sido modificada por alguien y la modificación todavía no ha sido commited.

Phantom Row: Sucede cuando se lee una fila que ha sido borrada por otro proceso, y este borrado no ha sido commited.

Non-Repeatable Read:Una fila es leída para ser modificada. Sin embargo esta ya está siendo modificada por otro proceso.

Niveles de aislamientoIntegridad en Tx con.setTransactionIsolation(TRANSACTION_READ_UNCOMMITTE

D); Válido para toda la sesión

TRANSACTION_NONE TRANSACTION_READ_UNCOMMITTED (1)

Permite leer datos modificados eventualmente aunque la data no haya sido commit.

Es el más permisivo nivel de aislamiento transaccional Rápido Permite dirty reads, phantom rows y non repeatable reads.

TRANSACTION_READ_COMMITTED (2)

Previene los dirty reads, lee datos que han sido modificados con commit.

no controla los phantom rows y non-repeatable read.

TRANSACTION_REPEATABLE_READ (4) Permite leer data modificada que ha sido commitada, pero con la

garantía que la data no va ha ser cambiada de nuevo. Es decir congela el mismo resultado cada ves que la data es leída.

No permite dirty reads y non-repeatable reads. Si permite phantom reads.

TRANSACTION_SERIALIZABLE (8) Bloquea la data tal que una sola transacción a la ves puede

acceder. Es el más restrictivo nivel de aislamiento, alta integridad El más lento No pemite dirty reads, phantom reads ni non-repeatable reads.

Evolución de las versiones JSE Java SE 6 (2006) —Mustang. Sun cambió el

nombre "J2SE" por Java SE Incluye un nuevo marco de trabajo y APIs que

hacen posible la combinación de Java con lenguajes dinámicos como PHP, Python, Ruby y JavaScript.

Incluye el motor Rhino, de Mozilla, una implementación de Javascript en Java.

Incluye un cliente completo de Servicios Web y soporta las últimas especificaciones para Servicios Web, como JAX-WS 2.0, JAXB 2.0, STAX y JAXP.

Mejoras en la interfaz gráfica y en el rendimiento.

Evolución de las versiones JSE Java SE 7 —Dolphin se estima su lanzamiento

para 2009. Soporte para XML dentro del propio lenguaje. Un nuevo concepto de superpaquete. Soporte para closures. Introducción de anotaciones estándar para detectar

fallos en el software. No oficiales:

NIO2 Java Module System. Java Kernel. Nueva API para el manejo de Días y Fechas, la cual

reemplazara las antiguas clases Date y Calendar. Posibilidad de operar con clases BigDecimal usando

operandos.

Eso es todo Gracias…