Java
Java
• Moderno
• Tipado estáticamente
• Semi-interpretado
• Gran conjunto de bibliotecas
Máquina virtual
• La máquina virtual garantiza la portabilidad
del código
• Tipos de aplicaciones java:
– Standalone (main y maquina virtual)
– Applets (en la máquina virtual del navegador
– Servlets J2EE (ejecutados en un servidor de
aplicaciones Web)
Java para 01010101
Macintosh
Programa
Programa Java para 01010101
Compilador Java en Windows
Java
Bytecode
Java para 01010101
Linux
Aplicaciones de Java
Sistemas embebidos
Java Server Faces
Servidor Servlets
JINI JavaSpaces
Java Server Pages
JNI
Programación WWW
java.*
Applets Java Web Start
J2ME JavaBeans
Java3D
Programación gráfica Programación UI
Java2D
AW
Swing
T
SWT
Bases de datos JDBC
CORBA
RMI
Versiones de Java
Historia del lenguaje
• 1991: El proyecto secreto “Green Team” equipado con 13 personas, fue designado por Sun
para anticipar y planear las futuras tendencias en el mundo de la informática. Este proyecto
a puertas cerradas fue impulsado por Patrick Naughton, Mike Sheridan y James Gosling.
Estaban tentando a las compañías de cable con la idea de cómo se debían ver sus redes. Era
interactivo, y los usuarios podían leer y escribir información en el sistema. Pero las
compañías “no querían perder mucho control”. Era demasiado avanzado para la época, y el
equipo de desarrollo, que para ese momento ya eran 70, todavía buscaba un mercado al que
le pudiese interesar la idea.
Historia del lenguaje
Un mes mas tarde, el equipo estaba preparado para publicar el código binario del
navegador en su versión 1.0a, y hacerlo público para descargas públicas y privadas en
Internet. Querían que el código fuera testeado por sus amigos y por un grupo mas o
menos pequeño de gente de una red informal de desarrolladores.
El 22 de Marzo, Lisa Poulson coordinó con el periódico San Jose Mercury News para
escribir una historia sobre la tecnología Java basada en el lanzamiento oficial que
vendría pronto. El problema: en el artículo se mencionaba un sitio web que todavía ni
existía, por lo cual el equipo tuvo que dedicarse a montar un website en pocas horas.
Historia del lenguaje
Eric Schmidt y George Paolini establecen acuerdos con Marc Andreessen de Netscape
para integrar Java technology en el omnipresente Netscape. Deciden revelar dicho
acuerdo en esa misma convención, lo cual le dio un giro inesperado al release.
Es allí cuando Java se introduce en Internet. Netscape 2.0 introduce la primera JVM
(Máquina virtual Java) en un navegador WWW con la filosofía Java: “Write once, run
everywhere”
• 1997: Aparece Java 1.1 final. Se anuncia el lanzamiento del JavaBeans Development
Kit, el Java Servlet Developers Kit, la JNDI API, los Enterprise Java Beans, y las Java
Foundation Classes.
Historia del lenguaje
• 1998: Java 1.2 (Java 2). Plataforma muy madura.
Apoyado por grandes empresas: IBM, Oracle, Inprise, Hewtlett-Packard, Netscape, Sun.
VISA anuncia la primera tarjeta inteligente basada en la tecnología Java Card. Se
formaliza el Java Community Process.
• 1999: Java Enterprise Edition. Java comienza a ser una plataforma de desarrollo
profesional. Sumado a esto se lanza la J2ME.
• 2001: Se publica el catálogo de patrones para J2EE. Se publica Java Web Start 1.0
• 2002: Se publica el Java Web Services Developer Pack, más la versión 1.4 Beta de
J2EE
void - - - Void
Sistema de tipos
if (expressBool) {
....
} else {
....
}
switch (selector) {
case valor1: instrucció1;
break;
selector:
case valor2: ...........
char,byte,short,int
...
default: instruccióN;
}
Comandos y Secuenciadores
• Bucles FOR:
for (<inicialització>; <continuar si ...>;<increment>)
for (int i=0; i<10; i++) {...}
• Bucles DO-WHILE
do {
...
} while (expressioBooleana);
• Bucles WHILE
while (expressioBooleana) {
...
}
Clases en Java
• Lenguaje tipado estáticamente
• Legible
• No separación en fichero interfaz e
implementación.
• Lenguaje semi-interpretado: Máquina Virtual
Java + bytecodes
• Atributos y variables de clase
• Métodos de instancia y de clase
• Incluye metaclases (Reflexión)
Ejemplo: Cuenta
class Cuenta {
private String titular;
private int saldo;
private int codigo;
private int[] ultOper;
¿ Que ocurre ?
Propiedades de clase
• No podemos acceder desde variables de
clase a variables de instancia.
// Método de clase
public static int setInteres(int cantidadPts)
{
interes= cantidadPts
}
Propiedades de clase
public class HelloWorld {
public static void main(String[] args) {
Cuenta.setInteres(12);
Math.sqrt(9);
}
}
miObjeto= otroObjeto;
p2.setLocation(120,120);
//Aliasing
System.out.println("Valor de p:" + p.getX());
System.out.println("Valor de p2:" + p2.getX());
Point p3 = (Point)p.clone();
p3.setLocation(40,40);
System.out.println("Valor de p:" + p.getX());
System.out.println("Valor de p3:" + p3.getX());
Copia en Java
• La clase Object incluye el método
protected Object clone( ) {..} ..}
que implementa una copia superficial.
int a =1;
int b= 2*3;
Integer awrap = new Integer(a);
int x = awrap.intValue();
La clase java.lang.String
• Es una clase, pero tiene facilidades con el
constructor
• Si se quiere eficiencia en la concatenación y
manejo de cadenas usar StringBuffer.
Address
-streetAddress : String
-city : String
-state : String
-zipCode : String
Relaciones entre clases
Herencia: Es -Un
Student
GraduateStudent UndergraduateStudent
MasterStudent PhDStudent
Clientela
Una Cuenta tiene un propietario de tipo Cliente:
Class Cuenta {
private Cliente propietario;
(…) }
Un Banco tiene N cuentas:
Class Banco {
private Cuenta lista_cuentas[];
(…) }
Herencia en Java
• La clase Object
• this y super
La clase Object
protected Object clone()
Creates and returns a copy of this object.
boolean equals(Object obj)
Indicates whether some other object is "equal
to" this one.protected
void finalize()
Called by the garbage collector on an object
when garbage collection determines that there are
no more references to the object.
Class getClass()
Returns the runtime class of an object
String toString()
Returns a string representation of the object.
Object
• Todas las clases heredan de Object
– Class Cuenta [extends Object]
• Se pueden redefinir los métodos equals,
clone y toString.
• Hay que tener mucho cuidado al comparar
objetos entre si, no es igual que comparar
tipos básicos:
int x = 3; Cuenta c = new Cuenta(“pedro”);
int y = 5; Cuenta d = new Cuenta(“pepe);
if (x ==y) then (…) if (c ==d) then (…) NO !!!!
Ejemplo
Class Coche {
private String marca;
private int precio;
public Coche (String marca, int precio){
this.marca = marca;
this.precio = precio;
}
public int getPrecio(){
return precio;
}
Ejemplo
public String getMarca(){
return marca;
}
public boolean equals (Object obj){
Coche otro = (Coche) obj;
return
(otro.getPrecio()==this.precio)&&(otro.getMarca().equals(this.m
arca);
}
Ejemplo
protected Object clone(){
return new Coche (marca, precio);
}
public String toString (){
return “(“+marca+”,”+precio+”)”;
}
Ejemplo
public static void main (String args[]){
Coche micoche = new Coche (“bmw”,100);
Coche otrocoche = new Coche (“seat”,10);
if (micoche.equals(otrocoche))
System.out.println(“iguales”);
System.out.println(micoche);
}
Tipos de herencia
• Para referirse a la instancia actual usamos this y
para referirnos a nuestra clase padre usamos
super.
p
(POLIGONO)
(después)
r
p:POLIGONO; r:RECTANGULO
(RECTANGULO)
• Cuando el origen y el destino tiene tipos diferentes:
a) asignación:
p = r; -- p es una entidad polimorfa
b) paso de parámetros:
comer (Animal a ) f es una rutina polimorfa, me puedo comer
cualquier animal (perro, gato, …)
• Sólo se permite para entidades destino de tipo referencia
Polimorfismo y ligadura dinámica
• Java es un lenguaje tipado estáticamente
• La ligadura de un mensaje a un método
concreto se realiza en tiempo de ejecución
• ¿Qué versión de perímetro se ejecuta
en cada mensaje?
f= new Poligono ();
f.perimetro(); {i}
r = new Rectangulo();
r.perimetro(); {ii}
f=r;
f.perimetro(); {iii}
Ejemplo polimorfismo
Ejemplo polimorfismo (2)
Polimorfismo
Animal a = new Animal();
Perro p;
a = p;
Object x;
Perro p = new Perro();
x = p;
Perro p2 = (Perro) x;
Polimorfismo y castings
Object list [] = new Object[3];
String s = “lala”;
Perro p = new Perro();
list[0] = s;
list[1] = p;
Object x = list[0];
Perro p2 = (Perro) list[1];
Polimorfismo
Object list [] = new Object[3];
Integer i1 = new Integer(3);
int z = 74;
Integer i2 = new Integer(4);
list[0] = i1;
list[1] = i2;
Object x = list[0];
Integer r2 = (Integer) list[1];
int resul = z2.intValue();
Interfaces
• Son clases en las que todos las propiedades son estáticas y
finales y todos los métodos son abstractos.
• Permiten la herencia múltiple, y separación de
especificación e implementación.
• Se aplican las mismas reglas que la herencia de clases en
las asignaciones polimórficas
interface Persona interface Perro
{ {
public void habla(); public void ladra();
} }
Interfaces y herencia
public class Mutante implements Persona, Perro
{
public void habla()
{ System.out.println(“Soy una persona”);
}
public void ladra()
{ System.out.println(“GUAU”);
}
}
Interfaces y polimorfismo
Mutante m = new Mutante();
Persona p = m;
p.habla();
Perro p = m;
m.ladra();
Interfaces
class Prueba
{
public static void ladra (Perro p)
{ p.ladra();
{
public static void habla(Persona p)
{ p.habla()
}
Interfaces
Throwable
Error Exception
RunTimeException Comprobadas
No comprobadas
Excepciones Comprobadas
• Subclases de Exception
• Un método que lance una excepción comprobada,
debe especificarlo en su signatura.
• El código que invoca un método que puede lanzar
una excepción comprobada debe manejarla
mediante una cláusula try-catch.
• Situaciones comprobadas por el compilador
Excepciones No Comprobadas
• Subclases de RuntimeException
• Un método puede lanzar una excepción no
comprobada, sin especificarlo en su signatura.
• El código que invoca un método que puede lanzar
una excepción no comprobada no debe manejarla.
• Es recomendable listar todas las excepciones en la
signatura para facilitar su uso.
TablaHash unaTabla;
...
try { unaTabla.cambiarValor(s,v);}
catch (ClaveNoExiste e) {...} finally {...}
75
Excepciones Comprobadas
¿Qué puede hacer el cliente de un método
que lanza una excepción comprobada?
1) Capturarla y manejarla
2) Capturarla y asociarla a una de las excepciones
declaradas en el método.
3) Declararla en la cláusula throws y no manejarla, con lo
que se propaga al método que lo invocó.
Excepciones No Comprobadas
¿Qué puede hacer el cliente de un método
que lanza una excepción no comprobada?
finally{
//sentencias que se ejecutan SIEMPRE
//salte o no una excepción
}
Ejemplos
public static int factorial (int n) throws NonPositiveException
{
if (n<=0) throw new NonPositiveException (“Num.factorial”);
…
}
try { Num.factorial(y);
} catch (NonPositiveException e) { … }
Ejemplos
public static int search (int [] a, int x) throws NullPointerException
NoEncontradoException
{…}
try { …;
try { x = Arrays.search(v,7);}
catch (NullPointerException e) {
throw new NoEncontradoException(); }
} catch (NoEncontradoException e) {..}
int prev;
try { prev = a[0]; }
catch (IndexOutOfBoundsException e) { return true; }
for (int i = 1; i < a.length; i++)
if (prev <= a[i]) prev = a[i]; else return false
return true; }
Ejemplo código genérico
java.util.Collection
C o lle c tio n
S ta ck
Ejemplo: código genérico
• boolean add(Object)
• boolean addAll(Collection)
• void clear()
• boolean contains(Object)
• boolean containsAll(Collection)
• boolean isEmpty()
• Iterator iterator()
• boolean remove(Object)
• boolean removeAll(Collection)
• boolean retainAll(Collection)
• int size()
• Object[] toArray()
Iteradores
• boolean hasNext()
• Object next()
• void remove() [implementación opcional]
• Por ejemplo: