You are on page 1of 212

POO con Java

Java es OO
Todas las funciones estn asociadas a objetos Casi todos los tipos de datos son objetos
Files, arrays, strings, sockets, etc Mantiene tipos de datos "simples"
byte, short, int, long, float, char, boolean

Object es el ancestro de todas las clases


Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Java tiene una gran cantidad de libreras estndar


Threads - procesos ligeros Construccin y uso de estructuras de datos Anlisis de cadenas/streams Alta precisin en las operaciones aritmticas Serializacin - almacenar el estado de los objetos en disco o enviarlos a travs de un socket Invocar objetos remotos - RMI Interfase con DBMS - JDBC Y mucho ms
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Versiones de Java
Java 1.0 es lanzado en 1995 Java 1.1 es lanzado a mediados de 1997
Un nuevo modelo con un manejo basado en listeners RMI y serializacin de objetos Soporte para clases internas y annimas Alta precisin en las operaciones aritmticas JDBC JavaBeans Firmas digitales en applets
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Versiones de Java
Java 2 Platform es lanzado en Dic 1998 Estndar Edition (JDK 1.2)
Componentes GUI Swing basados 100% en Java Java 2D Soporte de estructuras de datos complejas Soporte de diversos formatos de audio Impresin de objetos grficos CORBA
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Versiones de Java
JDK 1.3 es lanzado en primavera del 2000
Caractersticas principales
JNDI RMI-IIOP

JDK 1.4 en primavera del 2004


Caractersticas principales:
Soporte XML Librera de E/S de nueva generacin (java.nio) SSL JASS API de autenticacin y autorizacin
Desarrollo de Aplicaciones para Internet con Java

Instituto Tecnolgico de Tepic, 2007

Java 2 Platform Enterprise Edition


Enfocado a soluciones e-commerce
Java Servlets y Java Server Pages La respuesta a ASP o ColdFusion Entreprise JavaBeans, para encapsular lgica de la aplicacin en componentes de servidor JDBC Acceso a datos JavaMail, envi y recepcin de correos electrnicos con los protocolos SMTP, POP3 y IMAP JAXP para anlisis de documentos XML Java Message Service, para comunicacin asncrona entre aplicaciones
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Una aplicacin bsica


holamundo.java "Aplicacin" es el trmino con el que se identifica a un programa de java
Observe que el nombre de la clase y el nombre del archivo son iguales Un archivo puede tener mltiples clases, pero solo una de ellas puede ser publica

Archivo holamundo.java
public class holamundo { public static void main(String [] args) { System.out.println("Hola Mundo"); } }
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Una aplicacin bsica


holamundo.java Compilacin
javac holamundo.java

Ejecucin
java holamundo

Resultado
Hola Mundo

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Argumentos de la lnea de comando


Diferencia con C
En Java, String es un tipo de dato real Los arreglos tienen una longitud asociada El nombre del archivo no es parte de los argumentos

Archivo ShowArgs.java
public class ShowArgs { public static void main(String[] args) { for (int i=0; i<args.length; i++) { System.out.println("Arg " + i + " es " + args[i]); } } }
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Argumentos de la lnea de comando


Compilando y ejecutando
javac ShowArgs.java java ShowArgs uno dos tres cuatro

Resultados
Arg Arg Arg Arg 0 1 2 3 es es es es uno dos tres cuatro

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Nomenclatura de la POO
"Clase" significa una categora de cosas
Una clase puede ser usada como un tipo de un campo, una variable local o para especificar el valor de retorno de una funcin

"Objeto" es una cosa que se crea a partir de una clase


Tambin es conocida como "instancia"

Por ejemplo, considere la siguiente lnea:


String s1 = "Hola"; En donde, String es una clase, s1 y la cadena "Hola" son objetos (o instancias de la clase String)
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Ejemplo1
Variables e Instancias
class Ruta1 { public double x, y, speed, direction; public String name; } public class Test1 { public static void main(String[] args) { Ruta1 s1 = new Ruta1(); s1.x = 0.0; s1.y = 0.0; s1.speed = 0.0; s1.direction = 0.0; //Este s1.name = "Ruta1"; Ruta1 s2 = new Ruta1(); s2.x = 0.0; s2.y = 0.0; s2.speed = 2.0; s2.direction = 135.0; //Noroeste s2.name = "Ruta2"; ...
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Ejemplo1
Variables e Instancias
... s1.x = s1.x + s1.speed * Math.cos(s1.direction * Math.PI / 180.0); s1.y = s1.y + s1.speed * Math.sin(s1.direction * Math.PI / 180.0); s2.x = s2.x + s2.speed * Math.cos(s2.direction * Math.PI / 180.0); s2.y = s2.y + s2.speed * Math.sin(s2.direction * Math.PI / 180.0); System.out.println(s1.name + " esta en (" + s1.x + "," + s1.y + ")."); System.out.println(s2.name + " esta en (" + s2.x + "," + s2.y + ")."); } }

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Ejemplo1
Resultados Compilando y ejecutando
javac Test1.java java Test1

Resultados
Ruta1 esta en (1,0). Ruta2 esta en (-1.41421,1.41421).

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Ejemplo1
Puntos clave Convenciones de nombrado Formato de la definicin de las clases Crear objetos con "new" Acceso a las propiedades con "objeto.propiedad"

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Convenciones de nombrado
Utilice maysculas en la primera letra de la clase
public class MyClass {

Utilice minsculas en la primera letra de las propiedades, variables locales y mtodos


myPropiedad, myVariable, myMetodo
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Estructura de una clase


La estructura general de una clase sencilla es:
modifier class classname { modifier data-type field1; modifier data-type field2; ... modifier data-type fieldN; modifier Return-Type methodName1 (parameters) { //sentencias } ... modifier Return-Type methodNameN (parameters) { //sentencias } }
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Objetos y referencias
Cuando una clase es definida, puede declarar fcilmente variables utilizando esa clase
Ruta ruta1,ruta2; Point start; Color blue;

Los objetos referenciados inicialmente son null


Los valores nulos son distintos a cero Un tipo de dato simple no puede ser asignado a un objeto

El operador new es utilizado para crear los nuevos objetos


ClassName variableName = new ClassName()
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Accesando variables de instancia


Se utiliza un punto entre el nombre de la variable y el nombre del campo o propiedad
nombreVariable.nombreCampo

Por ejemplo, la clase Point de Java tiene los campos x y y


Point p = new Point(1,2); int xCuadrada = p.x * p.x; int xMasy = p.x + p.y; p.x = 7; xCuadrada = p.x * p.x;

Excepcin a la regla "nombreVariable.nombreCampo"


Cuando el campo es accesado desde un mtodo de la misma clase
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Ejemplo2
Mtodos
class Ruta2 { public double x=0.0, y=0.0, speed=0.0, direction=0.0; public String name="SinNombrar"; private double gradosAradianes(double grados) { return ( grados * Math.PI / 180.0 ); } public void move() { double angulo = gradosAradianes(direction); x = x + speed * Math.cos(angulo); y = y + speed * Math.sin(angulo); } public void printLocation() { System.out.println(name + " esta en (" + x + "," + y + ")."); } }

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Ejemplo2
Mtodos
public class Test2 { public static void main(String[] args) { Ruta2 s1 = new Ruta2(); s1.name = "Ruta1"; Ruta2 s2 = new Ruta2(); s2.speed = 2.0; s2.direction = 135.0; //Noroeste s2.name = "Ruta2"; s1.move(); s2.move(); s1.printLocation(); s2.printLocation(); } }

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Ejemplo2
Puntos clave Formato de la definicin de los mtodos Mtodos que accesan los campos locales Llamada a mtodos Mtodos estticos Valores por defecto a los campos Definiciones publicas y privadas

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Definicin de mtodos
Funciones dentro de clases
Declaracin de un mtodo sencillo:
public returnType methodName( type1 arg1, type2 arg2, ...) { ... return (valor de returnType); }

Excepcin de la regla: cuando el tipo de retorno es void En este caso, la sentencia return no requiere regresar ningn valor.

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Definicin de mtodos
Ejemplos
Considere los siguientes dos ejemplos
El primero, eleva al cuadrado un entero El segundo, regresa el ms veloz de dos objetos Ruta, asumiendo que en la clase Ruta se ha definido un campo llamado velocidad
// Ejemplo de la llamada: // int val = square(7); public int square(int x) { return ( x * x ); } //Ejemplo de la llamada: // Ruta masrapida = masRapida(ruta1,ruta2) public Ruta masRapida(Ruta r1, Ruta r2) { if (r1.velocidad > r2.velocidad) { return(r1); } else { return(r2); } }

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Llamada a mtodos
El trmino "mtodo" puede explicarse como "una funcin asociada a un objeto"
La forma ms usual de llamar un mtodo es la siguiente:
objectName.methodName()

Por ejemplo, la clase String tiene un mtodo llamado toUpperCase que regresa la cadena en maysculas
El mtodo no requiere argumentos
String s1 = "Hola"; String s2 = s1.toUpperCase(); // s2 es "HOLA"

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Llamada a mtodos
Existen dos formas distintas de realizar llamadas a mtodos:
Cuando se llama a un mtodo dentro de la definicin de la clase Mtodos declarados como static

Llamada a un mtodo definido dentro de la misma clase


No necesita el nombre de la variable Por ejemplo, en clase Ruta2 existe el mtodo gradosAradianes, para llamar este mtodo dentro de la misma clase se utiliza:
double angulo = gradosAradianes(direction)
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Mtodos estticos
Los mtodos estticos no requieren accesar a campos dentro de la clase Su comportamiento es similar a las funciones globales en otros lenguajes
ClassName.functionName(arguments);

Por ejemplo, la clase Math tiene un mtodo llamado cos que requiere un argumento de tipo double
Puede realizar la llamada al mtodo Math.cos sin que e requiera crear un objeto de la clase Math

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Visibilidad
Mtodos pblicos y privados
Una declaracin de un mtodo private significa que este no puede ser llamado desde fuera de la declaracin de la clase Utilice la declaracin public para los mtodos que realmente deben estar disponibles a los usuarios Puede cambiar o eliminar mtodos privados sin afectar a los otros usuarios.

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Variables en mtodos
Cuando declara una variable dentro de un mtodo, la declaracin se ve como la siguiente:
Type varName = value;

El valor puede ser:


Una constante, Otra variable, Una llamada a un mtodo, Una invocacin a un "constructor"
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Variables en mtodos
Ejemplos
int x = 3; int y = x; // Sintaxis para crear un objeto String String s1 = "Hello"; // Sintaxis String s2 = String s3 = String s4 = normal para crear objetos new String("Adios"); s2; s3.toUpperCase();

// Resultado: s4 es "ADIOS" // Se asume que el mtodo findFastestShip ha sido declarado // y que regresa un objeto Ship ship1 = new Ship(); Ship ship2 = ship1; Ship ship3 = findFastestShip();
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Ejemplo3
Constructores
class Ruta3 { private double x, y, speed, direction; private String name; public Ruta3(double x, double y, double speed, double direction, String name) { this.x = x; // "this" diferencia las variables de this.y = y; // instancia de las variable locales. this.speed = speed; this.direction = direction; this.name = name; } private double degreesToRadians(double degrees) { return(degrees * Math.PI / 180.0); } Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java ...

Ejemplo3
Constructores
public void move() { double angle = degreesToRadians(direction); x = x + speed * Math.cos(angle); y = y + speed * Math.sin(angle); } public void printLocation() { System.out.println(name + " is at (" + x + "," + y + ")."); } } public class Test3 { public static void main(String[] args) { Ruta3 s1 = new Ruta3(0.0, 0.0, 1.0, 0.0, "Ship1"); Ruta3 s2 = new Ruta3(0.0, 0.0, 2.0, 135.0, "Ship2"); s1.move(); s2.move(); s1.printLocation(); s2.printLocation(); } }
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Ejemplo3
Constructores Compilando y ejecutando:
javac Test3.java java Test3

Salida:
Ship1 is at (1,0). Ship2 is at (-1.41421,1.41421).

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Ejemplo3
Puntos clave Formato de la definicin de constructores La referencia "this"

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Constructores
Los constructores son funciones especiales que son llamadas cuando una clase es creada con new
Los constructores son especialmente tiles para proporcionar valores a los campos Los constructores son declarados como
public ClassName(args) { ... }

Observe que el nombre del constructor debe ser igual que el nombre de la clase No retornan ningn valor y no requieren la palabra clave void, como los mtodos regulares Java automticamente provee de un constructor sin argumentos para todas las clases
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

La variable this
El nombre this es usada dentro de mtodos no estticos para referirse al objeto actual Los usos ms comunes de la referencia this son las siguientes:
Para pasar la referencia del objeto actual como un parmetro a otro mtodo someMethod(this); Para resolver conflictos de nombres
Su uso permite diferenciar variables locales de variables de instancia con el mismo nombre

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Ejemplo4
Overloading
class Ruta4 { private double x=0.0, y=0.0, speed=1.0, direction=1.0; private String name; public Ruta4(double x, double y, double speed, double direction, String name){ this.x = x; this.y = y; this.speed = speed; this.direction = direction; this.name = name; } public Ruta4(String name){ this.name = name; } private double degreesToRadians(double degrees) { return(degrees * Math.PI / 180.0); }
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Ejemplo4
Overloading
... public void move() { move(1); } public void move(int steps) { double angle = degreesToRadians(direction); x = x + (double)steps * speed * Math.cos(angle); y = y + (double)steps * speed * Math.sin(angle); } public void printLocation() { System.out.println(name + " is at (" + x + "," + y + ")."); } }

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Ejemplo4
Overloading
public class Test4 { public static void main(String[] args) { Ruta4 s1 = new Ruta4("Ship1"); Ruta4 s2 = new Ruta4(0.0, 0.0, 2.0, 135.0, "Ship2"); s1.move(); s2.move(3); s1.printLocation(); s2.printLocation(); } }

Compilando y ejecutando:
javac Test4.java java Test4

Salida:
Ship1 is at (1,0). Ship2 is at (-4.24264,4.24264).
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Overloading
Puntos claves
Permite la definicin de mas de un mtodo o constructor con el mismo nombre
Las funciones sobrecargadas pueden diferir en el numero y tipo de argumentos. Java decide que constructor o mtodo es el apropiado

Ejemplos
Los siguientes son dos mtodos square que se diferencian por el tipo de dato del argumento
// square(4) es 16 public int square(int x) { return (x*x); } // square("dos") es "dos dos" public string square(String s) { return (s + " " + s); }
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Ejemplo5
POO; Diseo y uso
public class Ruta5 { private double x=0.0, y=0.0, speed=1.0, direction=0.0; private String name; // Constructores public Ruta5(double x, double y, double speed, double direction, String name) { setX(x); setY(y); setSpeed(speed); setDirection(direction); setName(name); } public Ruta5(String name) { setName(name); }
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Ejemplo5
POO; Diseo y uso
/** Mueve un paso. */ public void move() { moveInternal(1); } /** Mueve N pasos. */ public void move(int steps) { moveInternal(steps); } private void moveInternal(int steps) { double angle = degreesToRadians(direction); x = x + (double)steps * speed * Math.cos(angle); y = y + (double)steps * speed * Math.sin(angle); } private double degreesToRadians(double degrees) { return(degrees * Math.PI / 180.0); }
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Ejemplo5
POO; Diseo y uso
/** Reporta la ubicacion en la salida estandar. */ public void printLocation() { System.out.println(getName() + " is at (" + getX() + "," + getY() + ")."); } /** Lee la coordenada X. */ public double getX() { return(x); } /** Establece la coordenada X. */ public void setX(double x) { this.x = x; }

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Ejemplo5
POO; Diseo y uso
/** Lee la coordenada Y. */ public double getY() { return(y); } /** Establece la coordenada Y. */ public void setY(double y) { this.y = y; } /** Lee la velocidad. */ public double getSpeed() { return(speed); } /** Establece la velocidad. */ public void setSpeed(double speed) { if(speed>200) { System.out.println("La velocidad no debe ser mayor " + "a 200!"); } else { this.speed = speed; } }
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Ejemplo5
POO; Diseo y uso
/** Lee el rumbo actual */ public double getDirection() { return(direction); } /** Establece el rumbo */ public void setDirection(double direction) { this.direction = direction; } /** Lee el nombre de la ruta. No puede ser modificado */ public String getName() { return(name); } private void setName(String name) { this.name = name; } }
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Ejemplo5
POO; Diseo y uso
public class Test5 { public static void main(String[] args) { Ship s1 = new Ruta5("Ruta1"); Ship s2 = new Ruta5(0.0, 0.0, 2.0, 135.0, "Ruta2"); s1.move(); s2.move(3); s1.printLocation(); s2.printLocation(); if (args.length==1) { s1.setSpeed(Integer.parseInt(args[0])); s1.move(); s1.printLocation(); } } }
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Ejemplo5
Puntos claves Encapsulacin
Permite realizar cambios a las estructuras de datos y sus representaciones internas sin que los usuarios de la clase tengan que cambiar el cdigo Permite agregar constraints a los valores sin que los usuarios de la clase tengan que cambiar el cdigo Le permite realizar cambios secundarios sin que los usuarios de la clase tengan que cambiar el cdigo

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Ejemplo6
Herencia: Vehiculo.java
public class Vehiculo extends Ruta5 { private String color = "red"; /** Asigna el color rojo y una velocidad de 20 km/h. */ public Vehiculo(String name) { super(name); setSpeed(20); } /** Construye un objeto Vehiculo con los argumentos especificados. */ public Vehiculo(double x, double y, double speed, double direction, String name, String color) { super(x, y, speed, direction, name); setColor(color); }
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Ejemplo6
Herencia: Vehiculo.java
/** Imprime la ubicacin. Sobreescribe el metodo de la superclase */ public void printLocation() { System.out.print(getColor().toUpperCase() + " "); super.printLocation(); } /** Lee el color del Vehiculo. */ public String getColor() { return(color); } /** Establece el color del Vehiculo. */ public void setColor(String colorName) { color = colorName; } }

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Ejemplo6
Herencia: VehiculoTest.java
public class VehiculoTest { public static void main(String[] args) { Vehiculo s1 = new Vehiculo("Vehiculo1"); Vehiculo s2 = new Vehiculo(0.0, 0.0, 2.0, 135.0, "Vehiculo2", "blue"); Ruta5 s3 = new Ruta5(0.0, 0.0, 2.0, 135.0, "Ruta3"); s1.move(); s2.move(); s3.move(); s1.printLocation(); s2.printLocation(); s3.printLocation(); } }
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Ejemplo6
Herencia: Ejecucin Compilacin y Ejecucin
javac VehiculoTest.java java VehiculoTest

Salida
RED Vehiculo1 is at (20,0). BLUE Vehiculo2 is at (-1.41421,1.41421). Ruta3 is at (-1.41421,1.41421).

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Ejemplo6
Puntos claves Formato de la definicin de subclases Uso de mtodos heredados Uso de super() para accesar a constructores heredados
Solo cuando el constructor sin argumentos no es aceptado

Uso de super.metodo() para llamar mtodos heredados


Solo cuando hay un conflicto de nombre
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Herencia
Sintaxis de la definicin de subclases
public class NewClass extends OldClass { ... }

Nomenclatura
La clase existente es llamada "superclase", "clase base" o "clase padre" La nueva clase es llamada "subclase", "clase derivada" o "clase hija"

Efecto de la herencia
La subclase automticamente tiene todos los mtodos pblicos y campos de la superclase Puede agregar mtodos y campos que no estn disponibles en la superclase
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Constructores heredados y super()


Cuando crea una instancia de una subclase, el sistema llama primero al constructor de la superclase
Puede accesar el constructor de la superclase por medio super() Si el super() es usado en el constructor de la subclase, super() debe ser la primera instruccin del constructor

Ciclo de vida de los constructores


Cada constructor tiene 3 fases:
Llamada al constructor de la superclase Inicializa las variables de instancia Ejecuta el cuerpo del constructor
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Sobreescribiendo mtodos y el super.metodo()


Puede sobreescribir un mtodo de la superclase definiendo un mtodo en la subclase utilizando el mismo nombre, tipo de retorno y argumentos Si un mtodos de la superclase y de la subclase tiene la misma definicin, puede utilizar super.metodo() para referirse al mtodo heredado
super.methodName(...)
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Creando paquetes de clases


Un package organiza las clases en subdirectorios para prevenir conflictos de nombre. Para crear un package Aadir la declaracin package a cada archivo
package misclases;

En los programas que vayan a utilizar las clases se debe incluir:


import misclases.*;

La declaracin package debe ser la primera del archivo Si la declaracin package es omitida, las clases son ubicadas en el paquete por defecto, sin nombre.
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Creando paquetes de clases


La jerarqua del package determina la estructura del sistema de archivo

La raz es un paquete que puede ser accesible a travs de la variable de ambiente CLASSPATH
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Compilando classes dentro de un paquete


Paso 1
Crear los directorios src y classes
src: contendr los programas classes: contendr las clases compiladas

Dentro de src crear el directorio paquete1


Las clases del package paquete1 estaran en este directorio

Paso 2
Definir la variable CLASSPATH
CLASSPATH=$HOME/java/classes export CLASSPATH

Paso 3
Compilar los programas desde el directorio src/paquete1
javac d $CLASSPATH Ruta2.java

Paso 4
Ejecutar los prorgamas desde classes
java paquete1/Test2
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Fundamentos del lenguaje

Fundamentos del lenguaje


Archivos fuente Palabras reservadas e identificadores Literales Arreglos

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Fundamentos del lenguaje


Los archivos tienen extensin .java Mismo nombre que la clase Cdigo fuente contiene 3 elementos no requeridos pero con precedencia:
1. Declaracin de paquete 2. Imports 3. Definiciones de clase
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Fundamentos del lenguaje


Un paquete es una coleccin de clases con nombre. Los paquetes sirven para agrupar un conjunto de clases relacionadas y definen un namespace para las clases contenidas. Para definir el paquete de una clase se utiliza la palabra package. Si aparece en el cdigo fuente, debe ser la primera palabra del archivo. Formato de declaracin: package uno.dos.tres; Refleja estructura de directorios. Comnmente se usa el dominio de la empresa en modo inverso: com.softtek.curso
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Fundamentos del lenguaje


Una clase en un paquete puede hacer referencia a cualquier otra clase dentro del mismo paquete simplemente con su nombre. Si la clase se encuentra en otro paquete, se usa el nombre completo del paquete y la clase: com.softtek.Clase. Para simplificar el cdigo se utiliza la palabra import. La palabra import puede hacer referencia a una clase especfica o a un conjunto de clases: import com.softtek.Clase; import com.softtek.*;
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Fundamentos del lenguaje


Las clases se definen con la palabra reservada class. public class NombreClase { } Los nombres de variables deben empezar con una letra o los caracteres $ y _.
foobar ABCdef $abcd 3_abc !algo // // // // // bien bien bien mal mal

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Fundamentos del lenguaje


Hay dos tipos de comentarios:
int var; // comentarios de lnea

/** * comentarios varias lneas */

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Fundamentos del lenguaje


Tipos de datos o primitivos
boolean char byte long short int long float double
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Fundamentos del lenguaje


Tamao en bits
Tipo
boolean

bits
1

Tipo
char

bits
16

Byte

short

16

Int

32

long

64

Float
Instituto Tecnolgico de Tepic, 2007

32

double

64

Desarrollo de Aplicaciones para Internet con Java

Fundamentos del lenguaje


Enteros con signo
byte short int long

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Fundamentos del lenguaje


Rangos de valores

Tipo
byte

Tamao
8

Mnimo
-2.00E+007

Mximo
2.00E+007 - 1

short

16

-2.00E+015

2.00E+015 - 1

int

32

-2.00E+031

2.00E+031 - 1

long
Instituto Tecnolgico de Tepic, 2007

64

-2.00E+063

2.00E+063 - 1

Desarrollo de Aplicaciones para Internet con Java

Fundamentos del lenguaje


Existen dos tipos de primitivos de punto flotante: float y double. Las clases Float y Double definen valores especiales. Todos los tipos numricos tienen signo
Float.NaN Float.NEGATIVE_INFINITY Float.POSITIVE_INFINITY Double.NaN Double.NEGATIVE_INFINITY Double.POSITIVE_INFINITY
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Literales
Una literal es un valor especificado en el codigo fuente. Las literales representan valores primitivos o cadenas de caracteres. A continuacin se describen los siguientes tipos de literales.

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Literales
Las literales de tipo boolean pueden tener el valor true o false.
boolean a = true; boolean b = false;

Literales de caracteres
char = 'c';
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Literales
Para especificar un carcter en UNICODE se usa la siguiente notacion:
char c1 = '\u4567';

Existen algunos caracteres especiales que requieren una notacin distinta.

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Literales
Caracteres especiales:
'\n' nueva linea. '\r' return. '\t' tab. '\'' comillas simples. '\\' backslash '\"' comillas.

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Literales
Los valores enteros se expresan en forma decimal, octal y hexadecimal. Las literales octal llevan el prefijo 0 (cero). Hexadecimal lleva el prefijo 0x 0X. Los valores pueden ser mayscula o minscula.

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Literales
Ejemplo. El 28 se puede escribir de las siguientes formas:
28 034 0x1c 0x1C 0X1c 0X1C

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Literales de punto flotante


Una literal de punto flotante expresa un nmero de punto flotante. Para que una expresin sea interpretada como una literal de punto flotante debe cumplir con alguna de las siguientes condiciones:
1. Punto decimal: 1.23 2. Tener la letra E e para indicar notacion cientifica: 4.23E+21 3. El sufijo F o f para indicar float: 1.23f 4. El sufijo D o d para indicar double: 1.23d
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Literales de punto flotante


Una literal de punto flotante sin el sufijo F o D es double por defecto.

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

La clase String
Para Java las cadenas de texto son objetos especiales. Los textos deben manejarse creando objetos de tipo String. Ejemplo:
String texto1 = "Prueba de texto!";
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Comparacin entre objetos String


Los objetos String no pueden compararse directamente con los operadores de comparacin. En su lugar se deben utilizar estas expresiones:
cadena1.equals(cadena2); cadena1.equalsIgnoreCase(cadena2); s1.compareTo(s2); s1.compareToIgnoreCase(s2)
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Arreglos
Un arreglo en Java es una coleccin ordenada de primitivos, referencias a objetos u otro arreglos. Los arreglos son homogneos, es decir, todos los elementos deben ser del mismo tipo. Los elementos en un arreglo tienen un ndice numrico.
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Arreglos
Los arreglos tienen un tamao fijo. Para crear un arreglo se deben seguir tres pasos:

1. Declaracin 2. Construccin 3. Inicializacin

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Arreglos
La declaracion le indica al compilador el nombre del arreglo y el tipo de elementos que almacena:
int[] abc; double[] def; Objeto[] ghi; float[][] dosDimensiones;

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Arreglos
La declaracin no especifica el tamao del arreglo. El tamao se especifica al momento de ejecucin con el operador new.
int [] ints; ints = new int[20];

Cuando un arreglo se construye sus elementos inicializados a sus valores por defecto.
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Longitud de un arreglo
Los arreglos poseen una propiedad que permite conocer su longitud. Se trata de la propiedad length.

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

La clase Arrays
En el paquete java.utils se encuentra una clase esttica llamada Arrays. Una clase esttica permite ser utilizada como si fuera un objeto. Esta clase posee mtodos muy interesantes para utilizar sobre los arreglos. Su uso es Arrays.mtodo(argumentos);

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Mtodo fill de Arrays


Permite rellenar todo un arreglo unidimensional con un determinado valor. Sus argumentos son el arreglo a rellenar y el valor deseado:
//Todo el array vale -1 Arrays.fill(valores,-1);

Tambin permite decidir desde que ndice hasta qu ndice rellenamos:


//Del elemento 5 al 7 valdrn -1 Arrays.fill(valores,5,8,-1);
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Mtodos de Arrays
equals
Compara dos arreglos y devuelve true si son iguales. Se consideran iguales si son del mismo tipo, tamao y contienen los mismos valores.

sort
Permite ordenar un arreglo en orden ascendente. Se pueden ordenar slo una serie de elementos desde un determinado punto hasta un determinado punto. int x[]={4,5,2,3,7,8,2,3,9,5}; Arrays.sort(x); Arrays.sort(x,2,5); elemento
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Fundamentos del lenguaje


Valores iniciales
Tipo
byte int float char Referencia de objeto
Instituto Tecnolgico de Tepic, 2007

Valor inicial
0 0 0.0f \u0000 null

Tipo
short long double boolean

Valor inicial
0 0L 0.0d false

Desarrollo de Aplicaciones para Internet con Java

Arreglos
Los arreglos tienen un ndice para cada elemento con el rango [0 .. n-1].
long[] abc; abc = new long[100]; for(i=0 ; i<100 ; i++) { abc[i] = i * 3; }

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Fundamentos de clases
El mtodo main() es el punto de entrada para una aplicacin Java. Para crear una aplicacin es necesario escribir alguna clase con el mtodo main(). La firma de main() es:
public static void main(String args[])

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Fundamentos de clases
public static void main(String args[])

Argumentos de entrada Valor devuelto Indica que pertenece a la clase

El modificador public es necesario

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Argumentos
Los argumentos que reciben los mtodos se pasan por valor (primitivos) o por referencia (objetos). Cuando un argumento es un primitivo se hace una copia del valor. Los cambios internos a un argumento no surten efecto fuera del mtodo. En el caso de objetos se pasa una referencia al objeto. Esta referencia no puede ser modificada, pero s el objeto. Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Destruccin de objetos
En Java hay un recolector de basura que se encarga de gestionar los objetos que se dejan de usar y de eliminarles de memoria. Este proceso es automtico e impredecible y trabajo en un hilo (thread) de baja prioridad. Este proceso trabaja cuando detecta que un objeto hace demasiado tiempo que no se utiliza en un programa.
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Destruccin de objetos
Se puede forzar la eliminacin de un objeto asignndole el valor null. Sin embargo no se libera inmediatamente la memoria, sino que pasar un cierto tiempo hasta su total destruccin. Es posible invocar al recolector de basura desde el cdigo invocando al mtodo esttico System.gc();
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

El mtodo finalize
Es un mtodo que es llamado antes de eliminar definitivamente al objeto para hacer limpieza final.
class uno { dos d; uno() { d = new dos(); } protected void finalize(){ d = null; } }
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

El mtodo finalize
Es un mtodo de tipo protected heredado por todas las clases ya que est definido en la clase raz Object. La diferencia respecto a los mtodos destructores de C++ estriba en que en Java no se llaman al instante.
De hecho es imposible saber cuando son llamados.

La llamada System.gc() llama a todos los finalize pendientes inmediatamente.


Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

El mtodo finalize
class Libro { boolean comprobado = false; Libro (boolean comprobar) { comprobado = comprobar; } void correcto() { comprobado = false; } public void finalize() { if (comprobado) System.out.println("Error: Comprobado"); } }

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

El mtodo finalize
public class CondicionMuerte { public static void main (String[] args) { Libro novela = new Libro(true) ; // Eliminacin correcta: novela.correcto() ; // Modificar la referencia // olvidando la limpieza: new Libro(true) ; // Forzar la recoleccin de basura y // finalizacin: System.runFinalization(); System.gc(); } }
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Modificadores

Modificadores Introduccin
Los modificadores son palabras reservadas que proveen informacin al compilador acerca de la naturaleza del cdigo, datos o clases. Los modificadores especifican las, por ejemplo, que una caracterstica es de tipo static, final o transient. Una caracterstica es una clase, un mtodo o una variable. Un grupo de modificadores, llamados modificadores de acceso, indican qu clases tienen permitido utilizar una caracterstica.
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Modificadores Introduccin
Los modificadores ms comunes son los de acceso: public, protected y private. El resto de los modificadores no se pueden categorizar.
final abstract static native transient synchronized volatile
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Modificadores de Acceso
Los modificadores de acceso determinan qu clases pueden utilizar cierta caracterstica. Las caractersticas de una clase son:
La clase misma. Sus variables. Sus mtodos y constructores.

Las nicas variables sobre las que se aplican los modificadores de acceso son las variables de clase. Las variables de los mtodos no llevan modificadores de acceso porque pertenecen nicamente al mtodo.
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Modificadores de Acceso
Los modificadores de acceso son:
public private protected

El nico modificador de acceso permitido para una clase no interna es public. Una caracterstica puede tener como mximo un modificador. Cuando una caracterstica no tiene modificador de acceso se toma un valor por defecto. El valor por defecto no tiene un nombre estndar (friendly, package o default).
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Modificadores de Acceso: ejemplo


Ejemplo, declaraciones permitidas:
class Algo { } public class Objeto { } private int i; Set conjunto; protected double metodo() { }

Declaraciones no permitidas:
public protected int x; default Objeto getObjeto() { }
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Modificadores de Acceso: public El modificador de acceso ms permisivo es public. Cualquier clase, variable o mtodo publico se puede utilizar en cualquier clase en Java. Las aplicaciones Java deben declarar el mtodo main().

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Modificadores de Acceso: private El modificador private es el ms restrictivo. Una variable o mtodo de tipo privado slo es accesible para las instancias creadas por la misma clase.

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Modificadores de Acceso: default


Las clases, variables o mtodos que no tienen modificador de acceso toman un valor llamado default. El modificador de acceso default permite que las caractersticas de una clase sean accesibles para cualquier clase en el mismo paquete. Una clase que hereda de otra no tiene acceso a las caractersticas default del padre si no se encuentra en el mismo paquete.

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Modificadores de Acceso: protected


Las caractersticas que tienen el modificador de acceso protected son ms accesibles que las default. nicamente los mtodos y las variables se pueden declarar como protected. Las caractersticas de tipo protected de una clase son accesibles desde las clases que heredan. Al igual que default, protected permite el acceso a las clases del mismo paquete.
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Modificadores de Acceso: Resumen


Los modificadores de acceso en Java son:
public una caracterstica public es accesible para cualquier clase. protected una caracterstica protected puede ser accedida desde una clase que hereda o desde cualquier clase que pertenece al mismo paquete. default las caractersticas default son accesibles para las clases del mismo paquete. private una caracterstica private slo es visible para la clase a la cual pertenece.

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Otros modificadores
Los modificadores que no son de acceso son los siguientes:
final abstract static native transient synchronized volatile

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Modificadores: final
Se trata de una palabra que se coloca antecediendo a un mtodo, variable o clase. Sirve para indicar que ese mtodo no puede ser sobrescrito por las subclases. Si una subclase intentar sobrescribir el mtodo, el compilador de Java avisar del error.
Una clase final no puede tener herencia. Una variable de tipo final no puede ser modificada una vez que se le haya asignado un valor. Un mtodo final no puede ser redefinido por una clase que herede.
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Clases abstactas: abstract


A veces resulta que en las superclases se desean incluir mtodos que no se desea implementar.
nicamente la firma del mtodo

Se indican en la clase para que el desarrollador que desee crear una subclase heredada de la clase abstracta, est obligado a sobrescribir el mtodo. Las clases abstractas no deben de ser instanciadas.
No se pueden crear objetos de las clases abstractas)..
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Modificadores: static Normalmente hay que crear objetos para poder utilizar los mtodos y propiedades de una determinada clase. Esto no es necesario si la propiedad o el mtodo se definen precedidos de la palabra clave static. De esta forma se podr utilizar el mtodo sin definir objeto alguno, utilizando el nombre de la clase como si fuera un objeto.
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Ejemplo de un mtodo static


class Calc { static public int factorial(int n) { int fact=1; while (n>0) fact *=n--; return fact; } } public class app { //private Calc calc = new Calc(); public static void main(String[] args) { System.out.println(Calc.factorial(5)); } }

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Caractersticas de las propiedades estticas


Cada vez que se crea un objeto con new, se almacena ste en memoria. Los mtodos y propiedades normales, gastan memoria por cada objeto que se cree, sin embargo los mtodos estticos no gastan memoria por cada objeto creado. Los mtodos y atributos static son los mismos para todos los objetos creados.
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Mtodos normales o mtodos estticos?


Hay que crear mtodos y propiedades estticos cuando ese mtodo o propiedad vale o da el mismo resultado en todos los objetos. Hay que utilizar mtodos normales cuando el mtodo da resultados distintos segn el objeto.
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Modificadores: static
Los mtodos tambin pueden ser declarados static. Los mtodos estticos no tienen acceso a las caractersticas no estticas de la clase. Los mtodos estticos no realizan operaciones sobre objetos, por lo que pueden ser llamados sin crear una sola instancia de la clase. El mtodo main es un ejemplo.

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Modificadores: static
El tercer uso de static es para inicializar bloques de cdigo.
public class Estatica { static int x = 1; static { System.out.println("Hola 1" + x++); } public static void main(String args[]) { System.out.println("Hola 2" + x++); } }

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Modificadores: static
Parece un mtodo, pero es simplemente la palabra clave static seguida de un cuerpo de mtodo. Este cdigo, como otras inicializaciones estticas, se ejecuta slo una vez, la primera vez que se cree un objeto de esa clase o la primera vez que se acceda a un miembro esttico de esa clase Se ejecuta incluso si nunca se llega a crear un objeto de esa clase.

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Modificadores
Modificado Clase r public protected (default)* private final abstract static native transient volatile synchroniz ed s no s no s s no no no no no Variable s s s s s no s no s s no Mtodo s s s s s s s s no no s Construct or s s s s no no no no no no no Bloque de cdigo no no no no no no s no no no s

* default no se refiere a una palabra reservada en Java.


Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Interfaces
Una interfaz en realidad es una serie de constantes y mtodos abstractos. Cuando una clase implementa un determinado interfaz debe anular los mtodos abstractos de ste, redefinindolos en la propia clase. Esta es la base de una interfaz, hay una obligacin por parte de la clase que implemente la interfaz de redefinir los mtodos de sta. No definen el tipo de objeto que es, sino lo que puede hacer (sus capacidades).
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Interfaces
Una interfaz se crea exactamente igual que una clase. La diferencia es que la palabra interface sustituye a la palabra class y que slo se pueden definir en un interfaz constantes y mtodos abstractos.
interface arrancable(){ boolean motorArrancado=false; void arrancar(); void detenerMotor(); }
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Conversin y Casting

Conversin de primitivos
Los tipos de datos primitivos de Java pueden ser convertidos en otros tipos. La conversin de un primitivo se puede dar en los siguientes casos.
Asignacin. Llamada a mtodo. Promocin aritmtica.

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Conversin de primitivos: Asignacin


La conversin de asignacin se da cuando se asigna un valor a una variable de un tipo distinto al del valor original.
// Legal int i; double d; i =10; d = 10; // asigna un tipo int a una variable double // Ilegal double d; short s; double d = 1.2345; s = d; // asigna un tipo double a una variable short
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Conversin de primitivos: Asignacin


Las reglas generales para la conversin de tipos en asignaciones son las siguientes:
Un tipo boolean no puede ser convertido a ningn otro tipo. Un tipo no booleano puede ser convertido a otro tipo no booleano siempre y cuando el segundo tipo tenga mayor tamao (widening conversion). Un tipo no booleano no puede ser convertido a otro tipo no booleano cuando el segundo tipo tenga un tamao menor (narrowing conversion).

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Conversiones widening vlidas

char

int byte short

long

float

double

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Conversin de primitivos en mtodos


Una conversin de primitivos en un mtodo se da cuando se pasa un valor como argumento con un tipo distinto al esperado. Por ejemplo, la clase Math define el mtodo esttico cos(),el cual recibe como argumento un double.
float rads; double d; rads = 1.2345f; d = Math.cod(rads);
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Conversin de primitivos: promocin aritmtica


El ltimo tipo de conversin es la promocin aritmtica. La promocin aritmtica se da en sentencias con operadores aritmticos. Ejemplo:
short s = 9; int i = 10; float f = 11.1f; double d = 12.2; if( -s * i >= f / d) System.out.println(">>>>>>>>>>>>"); else System.out.println("<<<<<<<<<<<<");
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Promocin aritmtica
Las reglas que se aplican a la promocin aritmtica dependen del tipo de operador: unario o binario. Los operadores unarios se aplican a un solo valor. Los operadores binarios requieren dos valores.
Operadores unarios

+ +

&

++ * ^

-/ | %

~ >> >>> <<

Operadores binarios

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Promocin aritmtica
Para los operadores unarios se aplican dos reglas:
Si el operando es de tipo byte, short o char, se convierte a un int De lo contrario, no hay conversin.

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Promocin aritmtica
Para los operadores binarios se aplican las siguientes reglas:
Si uno de los operandos es de tipo double, el otro operando es convertido a double. Si uno de los operandos es de tipo float, el otro operando es convertido a float. Si uno de los operandos es de tipo long, el otro operando es convertido a long. De lo contrario, ambos operandos son convertidos a int.
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Primitivos y casting
En los casos vistos previamente, Java hace automticamente la conversin de datos. casting significa indicarle al compilador explcitamente que se requiere una conversin. Para hacer una operacin de casting se usa el tipo de dato entre parntesis. int i = 5; double d = (double)i; // igual int i = 5; double d = i;
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Casting
Las operaciones de casting son necesarias cuando el tipo de dato al cual se va a convertir es ms chico que el tipo original. Este tipo de conversin no se hace implcitamente.
// Ilegal short s = 259; byte b = s; // error System.out.println("s = " + s + ", b = " + b); // Legal short s = 259; // 100000011 byte b = (byte)s; // casting explcito System.out.println("s = " + s + ", b = " + b);
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Control de flujo y excepciones

Ciclos
Existen 5 construcciones que operan en ciclos:
while do for continue break
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

while
while(condicin boolean) bloque o sentencia int 1 = 0; while(i <= 5) System.out.println("cinco veces"); System.out.println("una vez"); int 1 = 0; while(i <= 5) { System.out.println("cinco veces"); System.out.println("una vez"); }

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

do while
do ciclo while(condicin booleana) do { ciclo } while(condicin booleana) El ciclo do while se ejecuta por lo menos una vez.
Desarrollo de Aplicaciones para Internet con Java

Instituto Tecnolgico de Tepic, 2007

for
for( sentencia ; condicin ; expresin) ciclo for( sentencia ; condicin ; expresin) { ciclo } La sentencia se ejecuta una vez antes del ciclo. La condicin debe ser una expresin booleana, similar a la condicin de while. El ciclo se ejecuta repetidamente mientras la condicin tenga el valor true. La expresin se ejecuta inmediatamente despus del bloque del ciclo.

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

continue
continue se emplea para salir de ciclos anidados o para interrumpir un bloque dentro de un ciclo.
salida: for(i = 0 ; i < 5 ; i++) for(j = 0 ; j < 10 ; if( (i*2) == j continue } } } { j++) { ) { salida;

while( i < 15 ) { if( (i % 2) == 0 ) continue; System.out.println("i : " + i ); i++; }


Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

break
break se utiliza para interrumpir ciclos. j = 0; while(j < 10) { if(j == 7) { break; } System.out.println("j : " + j ); j++; }
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Sentencias de seleccin
En Java existe dos tipos de sentencias de seleccin:
if / else switch

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

if /else
La estructura condicional if / else toma una sentencia booleana como condicin. Se ejecuta nicamente un bloque. Tres tipos de combinaciones para estructuras if. if(condicin) { bloque } if(condicin) { bloque1 } else { bloque2 }
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

if
if(condicin) bloque1 {

} else if(condicin2) { bloque2 } else if(condicinN) { bloqueN } else { bloque3


Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

switch
La estructura de seleccin switch tiene la siguiente estructura:
swith(valor int) { case 1: // 1 break; case 2: // 2 break; case 3: // 3 break; default: // bloque defecto (opcional) break; Instituto Desarrollo de Aplicaciones para Internet con Java } Tecnolgico de Tepic, 2007

Manejo de Excepciones

Introduccin a las excepciones


Uno de los problemas ms importantes al escribir aplicaciones es el tratamiento de los errores. Errores no previstos que distorsionan la ejecucin del programa. Se denomina excepcin a una situacin que no se puede resolver y que provoca la detencin del programa.
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Introduccin a las excepciones


En Java hay muchos tipos de excepciones
El paquete java.lang.Exception y sus subpaquetes contienen todos los tipos de excepciones.

Cuando se produce un error se genera un objeto asociado a esa excepcin.


Este objeto es de la clase Exception o de alguna de sus herederas.

Este objeto se pasa al cdigo que se ha definido para manejar la excepcin.


Dicho cdigo puede manipular las propiedades del objeto Exception.
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Jerarqua de las excepciones

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Manejo de errores
Excepciones En java, la clase que maneja las excepciones es Exception (java.lang.Exception)
Est basad en la clase Throwable (java.lang.Throwable).

La clase de Throwable lleva a cabo una especie de "foto" de qu suceda en el cdigo cuando ocurri la excepcin. Puede tambin contener una secuencia de mensajes que den ms informacin sobre el error.
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Throwable
Segn su superclase, hay dos tipos de excepciones
Checked: el programa no compila si no existe un manejador de excepciones. Son las subclases de Exception que no son subclases de RuntimeException. Unchecked: su captura no es obligatoria. Son las subclases de RuntimeException. java.lang.Object java.lang.Throwable java.lang.Exception java.lang.RuntimeException

Lo lgico sera que RuntimeException fuera subclase de Throwable, pero por algn motivo histrico (?) no es as. En el constructor de Throwable se puede especificar:
Un mensaje indicando el motivo de la excepcin. Instituto de Tepic, 2007 a otro objeto Throwable asociado. Desarrollo de Aplicaciones para Internet con Java Tecnolgico Una referencia

El mtodo getStackTrace()
Devuelve un array de elementos StackTraceElement, que representan cada uno (excepto el primero en la pila) una llamada a un mtodo. Cuando ejecutamos Throwable.printStacktrace() obtenemos una representacin como cadena de estos objetos. Todos los objetos derivados de Throwable proporcionan la informacin siguiente:
El tipo de excepcin (la clase). Donde ocurri la excepcin (el stacktrace). Un mensaje de error.
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Manejo de errores

Bloques "try/catch/finally"

Dentro del bloque try se colocan las instrucciones susceptibles de provocar una excepcin. El bloque catch sirve para capturar esa excepcin y evitar el fin de la ejecucin del programa.
Desde el bloque catch se maneja, en definitiva, la excepcin.

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Manejo de errores

Bloques "try/catch/finally" Cuando se produce una excepcin, se busca el catch que posea el manejador de excepcin adecuado.
Ser el que utilice el mismo tipo de excepcin que se ha producido.

Esto puede causar problemas si no se tiene cuidado, ya que la clase Exception es la superclase de todas las dems.
Si se produjo, por ejemplo, una excepcin de tipo AritmethicException y el primer catch captura el tipo genrico Exception, ser ese catch el que se ejecute y no los dems.
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Manejo de errores

Bloques "try/catch/finally"
boolean indiceNoValido=true; int i,j; //Entero que tomar nos aleatorios de 0 a 9 String texto[]={"Uno","Dos","Tres","Cuatro","Cinco"}; while(indiceNoValido){ try{ i=(int)Math.round(Math.random()*9); System.out.println(texto[i]); indiceNoValido=false; if(!indiceNoValido) j = Integer.parseInt(texto[i]); }catch(ArrayIndexOutOfBoundsException exc){ System.out.println("Fallo en el ndice"); } } Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Manejo de errores
Tipos de excepcin
Hay muchos tipos de excepciones en Java, y todos se basan en la clase Exception. Puede capturar cualquier tipo de excepcin especificando el objeto Exception en un bloque catch. Puede ser ms selectivo especificando un tipo particular de excepcin.
try { . . . } catch (ArrayIndexOutOfBoundsException e) { out.println("Array index out of bounds"); }
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Manejo de errores
Excepciones mltiples Puede utilizar mltiples bloques catch declaracin try/catch.
Cada bloque catch puede manejar un tipo de excepcin.

En el ejemplo siguiente se utiliza un bloque try con mltiples catch.


El primer bloque captura un hipottico error de lmites en el arreglo. El segundo bloque captura errores aritmticos en caso de que estos ocurran. Si ocurre un error, y no es de ninguna de estas categoras, entra en accin el tercer bloque catch.

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Manejo de errores
Excepciones mltiples
try{ ... //puede haber excepcin objeto.usarArchivo("C:\texto.txt"); .. } catch(IOException ioe){... } catch(InterruptedException ie){... } ... //otros catch para otras posibles excepciones
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Manejo de errores

Declaraciones "try/catch" anidadas

Puede anidar bloques try dentro de otro bloque try. Si un bloque try interno no encuentra el catch que maneje el tipo especifico de error, utiliza el del bloque externo. En el ejemplo siguiente se da un ejemplo de un programa con bloque try/catch anidados.
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Manejo de errores

Bloques "try/catch/finally"
boolean indiceNoValido=true; int i,j; //Entero que tomar nos aleatorios de 0 a 9 String texto[]={"Uno","Dos","Tres","Cuatro","Cinco"}; while(indiceNoValido){ try{ i=(int)Math.round(Math.random()*9); System.out.println(texto[i]); indiceNoValido=false; try { if(!indiceNoValido) j = Integer.parseInt(texto[i]); } catch(NumberFormatException e) { System.out.println(Error de formato); } }catch(ArrayIndexOutOfBoundsException exc){ System.out.println("Fallo en el ndice"); } }
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Lanzamiento de excepciones
throws Esta instruccin nos permite lanzar a nosotros nuestras propias excepciones.
O lo que es lo mismo, crear artificialmente nosotros las excepciones. throw new Exception();

El flujo del programa se dirigir a la instruccin try/catch ms cercana. Se pueden utilizar constructores en esta llamada.
El formato de los constructores depende de la clase que se utilice. throw new Exception("Error grave, grave");
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Lanzamiento de excepciones
throws
throw permite tambin relanzar excepciones. Esto significa que dentro de un catch podemos colocar una instruccin throw para lanzar la nueva excepcin que ser capturada por el catch correspondiente
try{ ... } catch(ArrayIndexOutOfBoundsException exc){ throw new IOException(); } catch(IOException){ ... }

El segundo catch capturar tambin las excepciones del primer tipo


Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

La clusula finally
La clusula finally est pensada para limpiar el cdigo en caso de excepcin.
try{ ... }catch (FileNotFoundException fnfe){ ... }catch(IOException ioe){ ... }catch(Exception e){ ... }finally{ ...//Instrucciones de limpieza }
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

La clusula finally
Las sentencias finally se ejecutan tras haberse ejecutado el catch correspondiente. Si ningn catch captur la excepcin, entonces se ejecutarn esas sentencias antes de devolver el control al siguiente nivel o antes de romperse la ejecucin. Hay que tener muy en cuenta que las sentencias finally se ejecutan independientemente de si hubo o no excepcin.
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Hilos Mltiples

Hilos mltiples
Los objetos proporcionan una forma de dividir un programa en secciones independientes. A menudo, tambin es necesario convertir un programa en subtareas separadas que se ejecuten independientemente. Cada una de estas subtareas independientes recibe el nombre de hilo, y uno programa como si cada hilo se ejecutara por s mismo y tuviera la UCP para l slo.
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Hilos mltiples
Un proceso es un programa en ejecucin autocontenido con su propio espacio de direcciones. Un sistema operativo multitarea es capaz de ejecutar ms de un proceso (programa) a la vez, mientras hace que parezca como si cada uno fuera el nico que se est ejecutando, proporcionndole ciclos de UCP peridicamente. Por consiguiente, un nico proceso puede tener mltiples hilos ejecutndose concurrentemente.
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Hilos mltiples
Precauciones
El mantenimiento y depuracin se complica significativamente.

Las dos tcnicas principales


Programe una subclase de Thread con el comportamiento que usted requiera Implemente una interfaz Runnable y programe las acciones en el mtodo run del objeto

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Heredar de Thread
La forma ms simple de crear un hilo es heredar de la clase Thread, que tiene todo lo necesario para crear y ejecutar hilos. El mtodo ms importante de Thread es run(), que debe ser sobreescrito para hacer que el hilo haga lo que se le mande. Por consiguiente, run() es el cdigo que se ejecutar "simultneamente" con los otros hilos del programa.
En el momento en que acabe run(), se termina el hilo.
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Mecanismo Uno:
Subclase de Thread Cree una subclase de Thread
No es necesario importar paquetes: Thread se encuentra en java.lang

Escriba las acciones que sern ejecutadas en el mtodo run de la subclase


public void run { }

Cree una instancia de la subclase Thread


O un lote de instancias si desea manejar mltiples hilos.

Ejecute el mtodo start del objeto instanciado


Para ejecutar el mtodo run debe hacer una llamada al mtodo start
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Mecanismo Uno:
Ejemplo
public class HiloSimple extends Thread { private int cuentaAtras = 5; private static int conteoHilos = 0; private int numeroHilo = ++conteoHilos; public HiloSimple() { System.out.println("Creando " + numeroHilo); } public void run() { while(true) { System.out.println("Hilo " + numeroHilo + " ( " + cuentaAtras + " )"); if(--cuentaAtras == 0) return; } }

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Mecanismo Uno:
Ejemplo
public static void main (String[] args) { for(int i=0;i<5;i++) new HiloSimple().start(); System.out.println("Todos los hilos" + "Arrancados"); } }

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Resultados de HiloSimple
Creando 1 Creando 2 Hilo 1 ( 5 ) Hilo 1 ( 4 ) Hilo 1 ( 3 ) Hilo 1 ( 2 ) Hilo 1 ( 1 ) Creando 3 Creando 4 Creando 5 Todos los hilos Arrancados Hilo 2 ( 5 ) Hilo 2 ( 4 ) Hilo 2 ( 3 ) Hilo 2 ( 2 )
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Hilos demonio
Un hilo "demonio" es aqul que supuestamente proporciona un servicio general en segundo plano mientras se est ejecutando el programa, no siendo parte de la esencia del programa. Por consiguiente, cuando todos los hilos no demonio acaban, se finaliza el programa. Se puede averiguar si un hilo es un demonio llamando a isDaemon()
Se puede activar o desactivar el funcionamiento como demonio de un hilo con setDaemon(). Si un hilo es un demonio, todos los hilos que cree sern a su vez demonios.
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Mecanismo Dos:
Runnable

Programe las acciones en el mtodo run del la clase Implemente la interface Runnable
Si la clase es una subclase, cuide que la clase principal no sea subclase de Thread

Cree una instancia del Thread pasando el objeto existente (p.e., el Runnable)
Thread t = new Thread(theRunnable);

Ejecute el mtodo start del Thread


t.start();
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Mecanismo Dos:
Ejemplo
class Contador2 implements Runnable { private static int totalNum = 0; private int actualNum, loopLimit; public Contador2(int loopLimit) { this.loopLimit = loopLimit; actualNum = totalNum++; } private void pausa(double segundos) { try { Thread.sleep(Math.round(1000.0*segundos)); } catch (InterrumpedException e) {} }
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Mecanismo Dos:
Ejemplo
public void run() { for (int i=0;i<loopLimit;i++) { System.out.println("Contador " + actualNum + ": " + i); pausa(Math.random()); } } } public class pruebaContador2 { public static void main(String[] args) { new Thread(new Contador2(5)).start(); new Thread(new Contador2(5)).start(); new Thread(new Contador2(5)).start(); } }

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Errores de ejecucin:
Considere el siguiente cdigo
public class PruebaError implements Runnable { private int totalNum = 0; private int loopLimit = 5; public void start() { for (int i=0; i<3; i++) { new Thread(this).start(); } } private void pausa(double segundos) { try { Thread.sleep(Math.round(1000.0*segundos)); } catch (InterruptedException e) {} } ...

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Errores de ejecucin:
Considere el siguiente cdigo
public void run() { int currentNum = totalNum; System.out.println("currentNum igual a " + currentNum ); totalNum = totalNum + 1; for (int i=0;i<loopLimit;i++) { System.out.println("Contador " + currentNum + ": " + i); pausa(Math.random()); } } }

Qu est mal en este cdigo?


Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Errores de ejecucin:
Resultado de la ejecucin del cdigo anterior
Resultados normales Resultados ocasionales

currentNum igual a 0 Contador 0:0 currentNum igual a 1 Contador 1:0 currentNum igual a 2 Contador 2:0 Contador 2:1 Contador 1:1 Contador 0:1 Contador 2:2 Contador 0:2 Contador 1:2 Contador 1:3 Contador 0:3 Contador 2:3 Contador 1:4 Contador 0:4 Contador 2:4

currentNum igual a 0 Contador 0:0 currentNum igual a 1 currentNum igual a 1 Contador 0:1 Contador 1:0 Contador 1:0 Contador 0:2 Contador 0:3 Contador 1:1 Contador 0:4 Contador 1:1 Contador 1:2 Contador 1:3 Contador 1:2 Contador 1:3 Contador 1:4 Contador 1:4

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Errores de ejecucin:
Solucin Haga las cosas en la menor cantidad de pasos posible
public void run() { int currentNum = totalNum++; System.out.println("currentNum igual a " + currentNum ); for (int i=0;i<loopLimit;i++) { System.out.println("Contador " + currentNum + ": " + i); pausa(Math.ramdom()); } }
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Como comparte Java los recursos


Java tiene soporte integrado para prevenir colisiones. Si las propiedades del objeto son private y se accede a esa memoria slo a travs de mtodos, se pueden evitar las colisiones haciendo que un mtodo particular sea synchronized.
Slo un hilo puede invocar a un mtodo synchronized en cada instante para cada objeto
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Como comparte Java los recursos


Cada objeto contiene un nico bloqueo que forma parte del objeto automticamente. Cuando se llama a cualquier mtodo synchronized, se bloquea el objeto y no se puede invocar a ningn otro mtodo synchronized del objeto hasta que el primero acabe y libere el bloqueo. Hay un nico bloqueo que es compartido por todos los mtodos synchronized de un objeto en particular, y este bloqueo evita que la memoria en comn sea escrita por ms de un mtodo en cada instante.
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Recursos compartidos:
Sincronizacin
Sincronizacin de una seccin de cdigo
synchronized (someObject) { code }

Interpretacin
Cuando un thread ingresa al cdigo protegido, ningn otro thread puede ingresar.

Interpretacin tcnica
Cuando un thread ingresa al cdigo protegido, ningn otro thread puede ingresar a cualquier otra seccin de cdigo protegida con el mismo identificador de bloqueo.
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Recursos compartidos:
Sincronizacin
Sincronizacin de un mtodo
public synchronized void someMethod() { code }

Este cdigo es equivalente a este otro


public void someMethod() { synchronized(this) { code } }
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Errores de sincronizacin
public class someThreadedClass extend Thread { private static RamdomClass someSharedObject; ... public synchronized void dosomeOperation() { accessSomeSharedObject(); } ... public void run() { while (someCondition) { doSomeOperation(); soSomeOtherOperation(); } } }
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Errores de sincronizacin
En el ejemplo la clase SomeThreadedClass contiene un objeto esttico, someSharedObject, que tiene la visibilidad al interior de la clase. Para evitar colisiones y conservar la integridad de datos del objeto compartido, el mtodo, doSomeOperation, es sincronizado. Previene esto que otros hilos accedan al objeto y modifiquen datos compartidos? Recuerde que una declaracin de mtodo sincronizado es equivalente a:
synchronized(this){ ... }
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Errores de sincronizacin
Recuerde que una declaracin de mtodo sincronizado es equivalente a:
synchronized(this){ ... }

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Sincronizacin de los datos compartidos

public void doSomeOperation() { synchronized(someSharedObject) { accessSomeSharedObject(); } }

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Sincronizacin de los datos compartidos


Una solucin es de sincronizar con la referencia del objeto compartido. Otra vez, los campos de datos internos del objeto no son "cerrados" y pueden ser modificados. El objeto es solamente una etiqueta, diciendo a todos otros hilos que miran la misma etiqueta si realmente ellos pueden entrar en el bloque de cdigo.
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Sincronizacin de la clase

public void doSomeOperation() {

synchronized(someThreadedClass.class ) { accessSomeSharedObject(); } }

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Sincronizacin de la clase
Otra solucin es de sincronizar sobre la clase. Java usa un objeto de clase nico para representar la informacin sobre cada clase. Si usted sincroniza un mtodo esttico, el bloqueo est es la clase correspondiente no en this.

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Sincronizacin del objeto


public class someThreadedClass extend Thread { private static Object lockObject = new Object(); ... public void dosomeOperation() { synchronized(lockObject) { accessSomeSharedObject(); } }
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Sincronizacin del objeto


La ltima solucin es simplemente crear un nuevo objeto esttico en la clase SomeThreadedClass que funcione como monitor de bloqueo. Esta ltima opcin le permite seleccionar un nombre apropiado para el bloqueo y as simplificar el mantenimiento de cdigo. Adems, si la clase tiene mltiples objetos compartidos que requieren la sincronizacin en mtodos diferentes, entonces la creacin de un nuevo objeto de bloqueo es probablemente la ms fcil para poner en prctica.
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

El problema es solo con clases derivadas de Thread


El problema de sincronizacin que ocurre con mltiples referencias this no se presenta en una clase que implementa la interface Runnable. En esta situacin, todos los hilos asociados ejecutan el mismo mtodo de la clase.
Cada hilo tiene el mismo this.

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

Estados de los hilos


Un hilo puede estar en uno de estos cuatro estados:
1. Nuevo: se ha creado el objeto hilo pero todava no se ha arrancado, por lo que no se puede ejecutar. 2. Ejecutable: Significa que el hilo puede ponerse en ejecucin cuando el mecanismo de reparto de tiempos de UCP tenga ciclos disponibles para el hilo. 3. Muerto: la forma normal de morir de un hilo es que finalice su mtodo main(). 4. Bloqueado: podra ejecutarse el hilo, pero hay algo que lo evita.
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Estados de bloqueo
Un hilo puede bloquearse por cinco motivos:
1. Se ha puesto el hilo a dormir llamando a sleep(milisegundos), en cuyo caso no se ejecutar durante el tiempo especificado. 2. Se ha suspendido la ejecucin del hilo con suspend(). No se volver ejecutable de nuevo hasta que el hilo reciba el mensaje resume(). 3. Se ha suspendido la ejecucin del hilo con wait(). No se volver ejecutable de nuevo hasta que el hilo reciba los mensajes notify() o notifyAll(). 4. El hilo est esperando a que se complete alguna E/S. 5. El hilo est intentando llamar a un mtodo synchronized de otro objeto y el bloqueo del objeto no est disponible
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Descripcin del ejemplo


Bloqueo.java
La clase Bloqueable pretende ser la clase base de todas las clases en el ejemplo que muestra el bloqueo El indicador de cambio de Bloqueable es un int i, que ser incrementado por el mtodo run() de la clase derivada. Por cada objeto Bloqueable se arranca un hilo de clase Elector, cuyo trabajo es vigilar a su objeto Bloqueable asociado para ver los cambios en i llamando a leer().
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

La primera prueba
sleep()
En Durmiente1 todo el mtodo run() es synchronized. Se ver que el Elector asociado con este objeto se ejecutar alegremente hasta que el hilo comience, y despus el Elector se detiene en seco. sta es una forma de bloquear: dado que Durmientel.run() es synchronized, y una vez que el objeto empieza, siempre est dentro de run(), el mtodo nunca cede el bloqueo del objeto, quedando Elector bloqueado.
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

La primera prueba
sleep() Durmiente2 proporciona una solucin haciendo run() no synchronized. Slo es synchronized el mtodo cambiar(), lo que significa que mientras run() est en sleep(), el Elector puede acceder al mtodo synchronized que necesite, en concreto a leer( ). Aqu se ver que el Elector contina ejecutndose al empezar el hilo Durmiente2.
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Suspender y continuar
La clase Thread tiene un mtodo suspend() para detener temporalmente el hilo y resume() lo contina en el punto en el que se detuvo. Hay que llamar a resume( ) desde otro hilo fuera del suspendido, y en este caso hay una clase separada denominada Resumidor que hace exactamente eso. Cada una de las clases que demuestra tiene un Resumidor asociado.
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Suspender y continuar
SuspenderResumirl tiene un mtodo syncronized run( ). Al arrancar este hilo se ver que su Elector asociado se bloquea esperando a que el bloqueo quede disponible, lo que no ocurre nunca. En SuspenderResumir2, no todo el run() es synchronized, sino que usa un mtodo synchronized cambiar(). Java2 ha descontinuado el uso de suspend() y resume() porque puede conducir fcilmente a interbloqueos.
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Wait y notify
El mtodo wait( ) libera el bloqueo cuando es invocado, lo que significa que se puede llamar a otros mtodos synchronized del objeto hilo durante un wait( ).
sleep( ) como suspend( ), no liberan el bloqueo cuando son invocados.

En los dos casos el mtodo run() est totalmente synchronized, sin embargo,el Elector sigue teniendo acceso completo a los mtodos.
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Bloqueo en E/S
Si un flujo est esperando a alguna actividad de E/S, se bloquear automticamente. Ambas clases funcionan con objetos Reader y Writer, se establece un flujo entubado para permitir a ambos hilos pasarse datos mutuamente de forma segura.
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Javadoc

Comentarios y JavaDoc
Java soporte 3 tipos de comentarios
// Comenta hasta el final de la lnea /* Comenta un bloque de lneas. No se permiten los comentarios anidados */ /** Un comentario JavaDoc ubicado antes de los mtodos pblicos. El texto puede contener etiquetas HTML, enlaces y etiquetas JavaDoc */

JavaDoc
Se utiliza para generar la informacin en lnea
javadoc Foo.java Bar.java
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

Etiquetas JavaDoc
@author
Especifica el autor del documento Debe usar javadoc author para generar la salida
/** Descripcin de la clase ... * @author <A HREF="mailto:jmezag@gmail.com"> Julio Meza</A> */

@version
Versin del documento Debe usar javadoc version para generar la salida

@param
Documenta el argumento del mtodo

@return
Documenta el retorno del mtodo
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

JavaDoc
Ejemplo
/**Clase publica Ship. * * @author <A HREF="mailto:jmezag@gmail.com"> * Julio Meza</A> * @version 2.0 */ public class Ship { private double x=0.0, y=0.0, speed=1.0, direction=0.0; private String name; /** Build a ship with specified parameters. */ public Ship(double x, double y, double speed, double direction, String name) { setX(x); setY(y); setSpeed(speed); setDirection(direction); setName(name); } ...
Instituto Tecnolgico de Tepic, 2007 Desarrollo de Aplicaciones para Internet con Java

JavaDoc
Ejemplo
javadoc -author -version -noindex -notree Ship.java

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

JavaDoc
Resultado

Instituto Tecnolgico de Tepic, 2007

Desarrollo de Aplicaciones para Internet con Java

You might also like