Está en la página 1de 171

Java Standard

Edition

JULIO RAL CARRANZA RUIZ


JAVA J2EE TRAINER

Java

Lenguaje de Programacin Orientado a Objetos


Multiplataforma, portable.
Compilado e Interpretado
Creador :James Gosling
Empresa: Sun Microsystems
Data: 1990

La Mquina Virtual JVM

Es el componente de la tecnologa encargado de


mantener la independencia de la plataforma.
Llamada HotSpot.
Es una mquina computacional abstracta. Con
su juego de instrucciones, gestin de memoria,
etc.

Compilado Interpretado Portable

11000110

Producto.java

Producto.class

JVM (Sun, BEA, IBM)

Intrprete

Ligero
Aplicacin

Producto.class

Plataforma Java

Garbage Collection

Tcnica de la JVM que libera de memoria


a un objeto cuando ya no es
referenciado (usado).
Tambin combate la fragmentacin de la
memoria, todo en tiempo de ejecucin
del programa.
Reciclado de Memoria

Tecnologas Java

Java Platform SE

Que se puede desarrollar con esta plataforma base?

OBJETOS

Programacin Orientada a
objetos

conjunto de objetos interactuando

Objetos
Un objeto puede caracterizar una
entidad fsica (coche) o abstracta
(ecuacin matemtica)
Objeto = unidad atmica que
encapsula estado y comportamiento

Clase

Clase es la representacin abstracta de uno o


ms objetos.
La clase define el mbito de definicin de un
conjunto de objetos idnticos.
Cada objeto pertenece a una clase
Los objetos se crean por instanciacin 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

Objetos

Definicin de Clase en Java

mbito class NombreDeClase

{
//propiedades
//mtodos
}
-----------------------------------------------Donde mbito: public, final, abstract

Tipos de clase

abstract :
Una clase abstract tiene al menos un mtodo 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.

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

Conversin de tipos

Java es un lenguaje fuertemente tipado, es decir, en tiempo de


compilacin se comprueba la compatibilidad de tipos

Conversin implcita: (automtica)

tipos primitivos a uno que soporte un rango mayor de valores


float saldo = 300;
entero
int codigo = 3.7;

//podemos asignarle un
//ERROR

Conversin explcita:
tipos primitivos perdiendo informacin
long l = 223456723456;
int i = (int)l;

Operadores

Relacionales

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

Lgicos

&& , || , !

Precedencia de Operadores

Constructores

Permiten instanciar una clase


Class Cliente
{
Cliente()
{
}
}
Caractersticas:

Objetos en Java

.
NombreClase objeto;
Objeto = new NombreClase();

..
.

Mtodos
Tipo_de_retorno nombreMtodo(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 bsqueda.
El nombre del paquete es el nombre de la ruta
contada a partir de su classpath.
Ejemplos:

mbito de Mtodos y Variables de


Clases
Acceso desde:

private

protected

public

(package,
default)

la propia clase
subclase en el
mismo paquete

otras clases en el
mismo paquete

subclases en otros
paquetes

otras clases en
otros paquetes

Sobrecarga de Mtodos
Static, final
Sentencias de Control

HERENCIA

Herencia
Vehculo

Veihculo Terrestre

Coche

Camin

Vehculo Areo

Avin

Helicptero

Herencia
Una subclase hereda de su superclase mtodos y
variables tanto de clase como de instancia.
Una subclase puede aadir nuevos mtodos y variables.
Una subclase puede redefinir mtodos 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 raz (paquete java.lang)
Object describe las propiedades comunes a todos los objetos

Object
A

B
C

Terminologa:
- 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,


raz de la jerarqua.

Toda clase tiene disponibles sus mtodos:

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


objeto
public boolean equals(Object obj) igualdad de valores
public String toString() Devuelve la representacin del obj
en un
String
protected Object clone() devuelve una copia del objeto
public int hashCode() devuelve un cdigo que identifica de
manera
nica al objeto
protected void finalize() relacionado con liberar memoria

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

Definicin en Java

class Clase_Hija extends Clase_Padre


{
//propiedades
//mtodos
}
Clase_Padre: Superclase

Ejemplo
public class ContadorColoreado extends Contador {
//nueva variable de instancia
private String color ;

Llamada al
constructor del
padre

public ContadorColoreado(){
super();
setColor(transparente);
}
public ContadorColoreado(int v, int s, String c) {
super(v,s);
Object
setColor(c);
}
Contador
...
}

ContadorColoreado

Overwriting - Redefinicin

Un mtodo de la subclase con la misma signatura y


valor de retorno que un mtodo de la superclase lo est
REDEFINIENDO.

Los mtodos solo se diferencian entre nmero de


parmetros y/o tipo de datos entre sus parmetros.

Para evitar la redefinicin de un mtodo se utiliza el


modificador final.

Los atributos no se pueden redefinir, slo se OCULTAN


(el campo de la superclase todava existe pero no se
puede acceder).

public 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]);
}
}

Ejemplo redefinicin

public class Rectangulo extends Poligono{ //{}


private double lado1;
privare double lado2;

public float perimetro(){


return 2*lado1+2*lado2;
}
}

Aade atributos

Redefine mtodos

super

Palabra clave disponible en todos los mtodos no-static

Se invoca a la versin del mtodo 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;
}
}

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

Dos

Tres

Cuatro

mbito de Mtodos y Variables de


Clases
Acceso desde:

private

protected

public

(packagedefault)

la propia clase
subclase en el
mismo paquete

otras clases en el
mismo paquete

subclases en otros
paquetes

otras clases en
otros paquetes

X: puede acceder al atributo en objetos que pertenezcan a la subclase,


pero no en los que pertenecen a la clase padre.

INTERFACES

Clases: Encapsulacin

La encapsulacin en un objeto permite una alta


cohesin y un bajo acoplamiento, favorece la
modularidad y el mantenimiento

Los atributos de una clase no deberan ser


manipulables directamente por el resto de
objetos

Clases: Encapsulacin

Niveles de encapsulacin 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 mtodos y/constantes


abstractas que podrn ser implementados en
cualquier clase que la necesite.

Un interface es una expresin de diseo, mientras que


una clase es una expresin de diseo e
implementacin.
Las clases pueden implementar ms 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 mtodos de las interfaces son implcitamente public y abstract.


No se necesita tipear en la declaracin del mtodo public ni abstract.

Todas las variables definidas en un interface debern ser public, static,


and final, es decir, las interfaces pueden declarar solo constantes, no
variables de instancia.

Los mtodos de una interface no deben ser static.

Como los mtodos de la interfaces son abstract, ellos no pueden ser


final, struct, o native.

Una interface puede extender uno o ms 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 mtodos y atributos que


permitan modelar un cierto concepto, que ser
refinado mediante la herencia.

Mtodos abstractos:
slo cuentan con la declaracin y no poseen
cuerpo de definicin
la implementacin es especfica de cada
subclase

Toda clase que contenga algn mtodo abstracto


(heredado o no) es abstracta. Puede tener
tambin mtodos efectivos.
Tiene que derivarse obligatoriamente
NO se puede hacer un newdeunaclase
abstracta.

Ejemplos

public abstract class Figura {


public abstract void dibujar();
public abstract void rotar();
...
}
public class Rectangulo extends Figura {
public void dibujar(){
//cdigo especifico para dibujar rectngulos
...

}
...

PATRONES DE DISEO
BASE

Agenda

Propsito de los patrones


Fundamentos de diseo.
Creacin.

Estructurales

Factory Method
Singleton
Abstract Factory

Adapter
Facade
Composite

Comportamiento
Command
State
Observer

Qu es un patrn de
diseo?

Ante un problema reiterado ofrece una


solucin 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 dbiles de
la solucin.
Describe otros patrones asociados.

Por qu usarlos?

Mejora en la comunicacin y
documentacin

Mejora la ingeniera de software.

Eleva el nivel del grupo de desarrollo.

Previene reinventar la rueda en diseo

Hay que hacer un Factory Method


Facilita la documentacin interna del proyecto.

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.

Singleton

Cambio el constructor a privado.


Hago que la clase no pueda ser
heredada.
Agrego una variable esttica del
mismo tipo de la clase donde esta
contenida. (instancia)
Agrego un mtodo esttico que
retorne la variable esttica.
(GetInstance)
No creo el objeto hasta que sea
necesario (Lazy Creation)
Agrego el cdigo necesario para no
crear dos instancias en distintos
thread.

Factory Method

Patrn de creacin (mbito de clase)


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

Ncleo de abstracciones de colecciones de utilidad


(interfaces) e implementaciones ampliamente tiles.

Las interfaces proporcionan mtodos para todas las


operaciones comunes y las implementaciones
concretas especifican la decisin 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

Jerarqua de colecciones
devuelve

Iterator

devuelve

Collection

Map

devuelve

ListIterator

List

Set

AbstractCollection
AbstractList

TreeMap

AbstractMap

HashMap

AbstractSet
HashSet

ArrayList

SortedSet

SortedMap

AbstractSequentialList

LinkedList

TreeSet

extends
implements
interface
class

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 coleccin cuyos elementos permanecen en un orden particular a


menos que se modifique la lista (no significa lista enlazada aunque es una
posible implementacin).
- 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 coleccin: coleccin de claves
(keySet), coleccin de valores (values), coleccin de
asociaciones clave-valor (entrySet).

SortedMap: Un mapa cuyas claves estn 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 coleccin (conjunto) donde no puede haber


elementos repetidos, y cuyos elementos no se almacenan
necesariamente siguiendo un orden particular.
-

Mismos mtodos que Collection con otro contrato.

SortedSet Conjunto con elementos ordenados.


-Object first()
-Object last()
-SortedSet
subSet(Object
fromElement,
toElement)
-SortedSet headSet(Object toElement)
-SortedSet tailSet(Object fromElement)

Object

Iteracin

Collection >> Iterator iterator();

interface Iterator{
boolean hasNext();
/* Devuelve true si la iteracin tiene mas elementos */
Object next();
/* Devuelve el siguiente elemento de la iteracin
Lanza excepcin NoSuchElementException */
void remove();
/* Elimina el ltimo elemento devuelto por la iteracin
Est capacitado para decir que no lo implementa
UnsupportedOperationException */
}
La interfaz ListIterator extiende a Iterator y maneja un objeto
List ordenado. Permite iterar hacia delante y hacia atrs.

Ejemplo de uso de
Iteradores

Clculo 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 coleccin que implemente la interfaz Collection

GENERICS

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


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

Mtodos genricos
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 paramtrico:
Generics

Permite parametrizar tipos

Permite al compilador asegurar la


validez de los tipos

Ejemplo de Colecciones: List<Animal>

Mueve el control de errores del tiempo de


ejecucin (ClassCastException) al tiempo
de compilacin

Mejora la robustez y legibilidad del


cdigo

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

Despus:
Animal perro = new Animal();
List<Animal> granja = new ArrayList<Animal>();
granja.add(perro);
Animal a = granja.get(0); // SIN CASTING
granja.add(hola);
// ERROR !!!

Simplemente te ahorra
castings ?

Chequeo en tiempo de compilacin

Si introducimos otro tipo nos avisa, no falla


con ClassCastException en tiempo de
ejecucin

Refuerza las relaciones entre clases

Ahora sabemos que un banco tiene una


lista de Cuentas. Es ms legible y obliga al
programador.

NUEVAS
CARACTERSTICAS
DEL LENGUAJE

Collection Interfaces

Collection Clases

AutoBoxing

Esta tcnica se ha aadido a Java para:

suplir la carencia de no poder utilizar generics con los tipos


simples

minimizar el nmero 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 conversin automtica y simtrica entre


tipos simples y sus clases envoltorio
Double od=34.45; // * Autoboxing
double ds=od; // * Unboxing

Enumerados

Las enumeraciones de elementos se solan hacer en Java 1.4 con


atributos de clase enteros y constantes
class 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 producan 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;
}

Enumerados
public 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
Mtodo

En Java 1.5 se ha aadido 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 estticos


de una clase

En el caso de que tengamos que hacer uso


intensivo de los miembros de una clase de
utilidad, se ha ampliado en Java 1.5 la clusula
import
para 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

Excepcin

Es una seal 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.

Ejecucin normal

Con ocurrencia de
excepcin
-

hijo

+padre

Anidamiento

rbol de Excepciones

Tipos

Checked Exceptions: Significa que el


compilador chequea que los mtodos lancen
solo la Excepcin que ellos mismos lo tiene
declarados para lanzarlos.
Unchecked Runtime Exceptions: Representan
errores que se generan en la lgica de
programacin en tiempo de ejecucin y que
razonablemente no pueden ser recuperados.
Por ejemplo:
ArrayIndexOutOfBoundsException. Prevenir
esto podra ser imprctico capturarlo.

Class Name

Exception Condition Represented

ArithmeticException

An invalid arithmetic condition has arisen such as an attempt to divide


an integer value by zero.

IndexOutOfBoundsExce
ption

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.

NegativeArraySizeExcep
tion

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.

IllegalArgumentExceptio
n

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 excepcin se usa la
sentencia: throw new PropiaExcepcion()
Ejemplo:

Lanzando Excepciones
double myMethod() throws IOException,
FileNotFoundException
{ // codigo
}
Otra forma:
try {
// Cdigo que genera un excepcin aritmtica
} catch(ArithmeticException e)
{
// proceso de la excepcin
throw e; // Relanza la exception al programa que lo
llama
}

Otra forma de relanzar una


Excepcin
try {
// Cdigo que genera un excepcin aritmtica
} catch(ArithmeticException e)
{
// proceso de la excepcin
throw e; // Relanza la exception al programa que lo llama
}

NETWORKING

IP Addresses

Java tiene la calse


java.net.InetAddress el cul abstrae la
direcciones de red.
Sigue los siguientes propsitos:

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

String getHostName()

String getHostAddress()

Obtiene el host name (ejemplo: www.sun.com)


Obtiene tu IP (ejemplo170.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 comunicacin


bidireccional entre un servidor programa y uno o ms
programas cliente.
Al socket se le asocia con un especfico 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
conexin con el cliente y continen 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 pblico y provee una serie de servicios a
requerimiento.
java.net.Socket es usado por clientes que
desean establecer conexin remota a un servidor.
Un cliente es una pieza de software
usualmente sobre diferente mquina el cual
hace uso del servicio.

java.net.ServerSocket

Escucha sobre un puerto conocido


incoming connections
Provee un Socket de comunicacin 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


conexin con el servidor.

void close()

Llamado por el servidor cuando se intenta bajar


el servicio y asegurar la liberacind e recursos.

java.net.Socket

Provee acceso a TCP/IP streams


Bi-directional comunicacin entre sender
and receiver
Puede ser usado para conectarse a
direcciones remotas y puertos:

Socket(String remoteHost, int port)

Tambin es usado para aceptar un


incoming connection.

java.net.Socket

Puede obtenerse el accesos a input and


output streams
Input stream permite la recepcin de la
data de otras partes

InputSteam getInputStream()

Output stream permite despachar la


data hacia otras partes

OutputStream getOutputStream()

Funcionamiento
Client (sid)
s = new Socket
(Carl, 80)

Server (fred)
2037

80

2037

1583

ServerSocket ss.
s = ss.accept()

Socket s

s.getInputStream()2037
s.getOuputStream()

1583 s.getInputStream()

s.getOuputStream(

TCP server

public 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
//
}
catch
//
}
}

(UnknownHostException uhe) {
Very unlikely to occur
(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

Definicin

Thread es una pieza de cdigo que


puede ser ejecutada concurrentemente
con otra dentro de un mismo contexto.

Concurrency Models I

Processes versus Threads


Threads

Fibres

thread library

Operating System

Process

Thread Lifecycle: 4 states

RUNNABLE
NEW

running

not
running

TERMINATED

BLOCKED/
WAITING/
TIMED_WAITING

Thread Lifecycle: 4 states

RUNNABLE
NEW

start()
running

not
running

TERMINATED

BLOCKED/
WAITING/
TIMED_WAITING

Thread Lifecycle: 4 states


sleep()
block on I/O
wait()
RUNNABLE
NEW

start()
running

not
running

TERMINATED

BLOCKED/
WAITING/
TIMED_WAITING

Thread Lifecycle: 4 states


sleep()
block on I/O
wait()
RUNNABLE
NEW

start()
running

not
running

BLOCKED/
WAITING/
TIMED_WAITING

time elapsed
I/O done
notify()
TERMINATED

Thread Lifecycle: 4 states


sleep()
block on I/O
wait()
RUNNABLE
NEW

start()
running

not
running

run() method
returns

TERMINATED

BLOCKED/
WAITING/
TIMED_WAITING

time elapsed
I/O done
notify()

Non-Existing
create thread object
destroy

New
start
Executable
wait, join

notify, notifyAll
thread termination

destroy
run method
exits

Blocked
destroy

Dead
garbage collected
and finalization

Non-Existing

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 mtodo startes llamado, el thread
llega a ser elegible para la ejecucin segn la
agenda.
Si el thread llama al mtodo wait desde su
objeto, o al mtodo join desde otro objeto, el
thread se bloquea es decri se pone en un estado
blocked y no ser elegible par ala ejecucin.
Este llegar a ser ejecuable cuando otro thread le
notifique travz de su mtodo 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());
}
}

Sincronizacin

Cuando tenemos varios threads, muchas


veces deseamos que stos puedan
compartir datos u objetos, por lo tanto,
es indispensable saber sincronizar sus
actividades; sto tambin nos permitir
evitar la colisin 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 tpicamente no
terminan.
Cuando todos los threads hayan terminado,
los daemon threads tambin terminan
cuando el programa principal termina.
El mtodo 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 ejecucin de un mtodo run o


se genera una excepcin de tipo interrupted.
Va una llamada la mtodo stop (deprecated)
Llamando el mtodo destroy
----PD: join() espera a que el thread temine de
ejcutarse.

POOLS CON JAVA 5

Executor

La ms importante caracterstica nueva para el manejo de


multiprocesamiento de aplicaciones es el nuevo Framework
Executor de Java 5.

Permite resolver la cancelacin y cierre de los threads en


una situacin de multiproceso y sin control de nmero 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_mtodo;
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, segn sea necesario sin incurrir en la sobrecarga
crear siempre la creacin 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
mtodo 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 sesin

Crear componentes Swing de


interface visual de la plataforma
Java.
Usar Layouts para la distribucin de
componentes.
Controlar los eventos que generan
los componentes visuales.

Swing Root Class

Mtodos Generales
y
x

alto

ancho

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

setSize(int ancho, int alto);

setLocation(int x, int y);

setVisible(boolean b);

Contenedores
Object
Component
Container
Jcomponent
JPanel
Window
...

add(Component comp);

remove(Component alto);

setLayout(LayoutManager mrg);

Manejo de Eventos: Listeners


Listener Activado que escucha
Los Eventos

Componente emisor de
Eventos

Acci
n

Evento
Respuesta

componente.addTipoListener(implementacionDelObjetoListener);

Activando e implementando un
listener
public interface ActionListener
{
void actionPerformed(ActionEvent e)
}

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

..
}
}
);

Activando e implementando un
listener
public interface MouseListener
void
mouseClicked(MouseEvent e)
void
mouseEntered(MouseEvent e)
void
mouseExited(MouseEvent e)
void
mousePressed(MouseEvent e)
void
mouseReleased(MouseEvent e)

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

.
}
}
);

Acciones (eventos) Vs
Interfaces Listener
Accin 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 interacta 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 seleccin 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.WindowsLookAndFee
l"
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 dilogo de mensajes, simple y estndar se


utiliza JOptionPane.

JOptionPane

JOptionPane.showConfirmDialog();

JOptionPane.showMessageDialog();

JOptionPane.showOptionDialog)();

JOptionPane.showInputDialog();

Todos los dilogos son modales (no contina la ejecucin


hasta que no se cierra).

Se pueden configurar mediante parmetros: ttulo, mensaje,


icono, etc.

Elementos..

JOptionPane
JOptionPane.showMessageDialog( this,
"El mensaje!",
"Ttulo",
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 seleccin en una list o una
table cambia o acaba de cambiar .

JCheckBox

LosJCheckBoxpermite 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 unButtonGrouppara que una


seleccin 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 aplicacin Java.
Tiene su propia versin 3.0, 4.0
Tecnologa que permite desarrollar
Drivers JDBC.
Se hace realidad "write once and run
anywhere"

Drivers

Driver Categories
Driver Category

All Java

Network Connection

1. JDBCODBC 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
modificacin todava 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 leda
para ser modificada. Sin embargo esta ya
est siendo modificada por otro proceso.

Niveles de aislamiento
Integridad en Tx

con.setTransactionIsolation(TRANSACTION_READ_UNCOMMITTE
D);
Vlido para toda la sesin
TRANSACTION_NONE
TRANSACTION_READ_UNCOMMITTED (1)

Permite leer datos modificados eventualmente aunque la data no haya sido


commit.
Es el ms permisivo nivel de aislamiento transaccional
Rpido
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


garanta que la data no va ha ser cambiada de nuevo. Es decir
congela el mismo resultado cada ves que la data es leda.
No permite dirty reads y non-repeatable reads.
Si permite phantom reads.

TRANSACTION_SERIALIZABLE (8)

Bloquea la data tal que una sola transaccin a la ves puede


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

Evolucin 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 combinacin de Java con
lenguajes dinmicos como PHP, Python, Ruby y
JavaScript.
Incluye el motor Rhino, de Mozilla, una
implementacin 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 grfica y en el rendimiento.

Evolucin 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.
Introduccin de anotaciones estndar para detectar fallos
en el software.

No oficiales:

NIO2
Java Module System.
Java Kernel.
Nueva API para el manejo de Das y Fechas, la cual
reemplazara las antiguas clases Date y Calendar.
Posibilidad de operar con clases BigDecimal usando
operandos.

Eso es todo Gracias

También podría gustarte