33
Programación avanzada en Java Miguel Ángel Corella 16 de Septiembre de 2005

Programación avanzada en Java Miguel Ángel Corella 16 de Septiembre de 2005

Embed Size (px)

Citation preview

Page 1: Programación avanzada en Java Miguel Ángel Corella 16 de Septiembre de 2005

Programación avanzadaen Java

Miguel Ángel Corella16 de Septiembre de 2005

Page 2: Programación avanzada en Java Miguel Ángel Corella 16 de Septiembre de 2005

Información general (I)

• Profesores:– Miguel Ángel Corella, José María Fuentes y

Francisco Saíz.

• Índice del curso:– Introducción.

• El lenguaje Java.• Programación orientada a objetos en Java.

– Jerarquías de clases.– Excepciones.– Applets.– Interfaces de usuario.

Miguel Ángel Corella

José María Fuentes

Francisco Saíz

Page 3: Programación avanzada en Java Miguel Ángel Corella 16 de Septiembre de 2005

Información general (y II)

• Bibliografía:– Core Java 1.2, Volúmenes I – II. C.S.

Horstmann, Gary Cornell, Prentice Hall, 1999.– Tutorial de Java en http://java.sun.com

Page 4: Programación avanzada en Java Miguel Ángel Corella 16 de Septiembre de 2005

El lenguaje Java

Page 5: Programación avanzada en Java Miguel Ángel Corella 16 de Septiembre de 2005

Características principales (I)

• Lenguaje interpretado.• Fuertemente tipado.• Sintaxis similar a C/C++.• Sin punteros: Garbage collection.• 100% portable.• Integra librearías estándar para:

– Interfaces de usuario.– Objetos distribuidos.– Threads.

Page 6: Programación avanzada en Java Miguel Ángel Corella 16 de Septiembre de 2005

Características principales (y II)

• Ejecutable desde navegadores web.

• Origen: Aumento de HTML para conseguir páginas Web dinámicas.

• Versiones:– 1995 – JDK 1.0– 1997 – JDK 1.1– …– 2004 – JDK 1.5

Page 7: Programación avanzada en Java Miguel Ángel Corella 16 de Septiembre de 2005

Desarrollo en Java

• Java Development Kit (JDK):– Java Runtime Environment (JRE):

• Java Virtual Machine.• Java API: lenguaje básico y librerías estándar.

– Compilador a bytecode.– Otras herramientas:

• Debuggers.• Applet viewer.• Compiladores RMI• …

Page 8: Programación avanzada en Java Miguel Ángel Corella 16 de Septiembre de 2005

Compilación e interpretación

class Ejemplo { ...}

class Aux { ...}

Ejemplo.java

Compilador Java

Ejemplo.class Aux.class

Java Virtual Machine

JVM

Page 9: Programación avanzada en Java Miguel Ángel Corella 16 de Septiembre de 2005

Comparativa: Java vs. C++ (I)

• Interpretado

• Portable

• Todo memoria dinámica• Garbage collection• No existen punteros

• Todos los métodos virtuales

• No hay herencia múltiple

• Información sobre clases en tiempo de ejecución.

• Tratamiento genérico de tipos (wrappers).

Java C++

• Compilado

• Aspectos no portables

• Memoria automática y dinámica• Gestión del programador• Existen punteros

• No todos los métodos virtuales

• Hay herencia múltiple

• Información muy escasa(dynamic_cast).

• Punteros a void.

Page 10: Programación avanzada en Java Miguel Ángel Corella 16 de Septiembre de 2005

Comparativa: Java vs. C++ (y II)

• Soporte estándar para interfaces: AWT, SWING

• Soporte estándar para concurrencia

• Soporte estándar para objetosdistribuidos

• Ejecutable en navegadores web

• Homogeneidad del lenguaje

• Lenguaje bien diseñado

Java C++

• No incluido en el lenguaje: Microsoft MFC, Borland OWL…

• No incluido en el lenguaje

• No incluido en el lenguaje: CORBA, ActiveX

• No ejecutable por navegadores

• Múltiples sintaxis

• Compatibilidad con C

Page 11: Programación avanzada en Java Miguel Ángel Corella 16 de Septiembre de 2005

Elementos del lenguaje

Page 12: Programación avanzada en Java Miguel Ángel Corella 16 de Septiembre de 2005

Aspectos léxicos

• Ignora múltiples espacios en blanco• Sentencias separadas por “;”.• Comentarios:

– /* … */ Múltiples líneas de comentario– // Una única línea de comentario

• Case – sensitive.• Convenios de nomenclatura:

– Clases con mayúscula.– Métodos y variables con minúscula.– etc…

Page 13: Programación avanzada en Java Miguel Ángel Corella 16 de Septiembre de 2005

Valores y variables

• Tipos básicos:

• Variables y literales:– Declaración y utilización de variables y

literales similar a C/C++.

byte 1 bytechar 2 bytes (sin signo, caracteres Unicode, incluyen los ASCII)short 2 bytesint 4 byteslong 8 bytesfloat 4 bytesdouble 8 bytesboolean 1 bit (true ó false, no compatible con tipos numéricos)

Page 14: Programación avanzada en Java Miguel Ángel Corella 16 de Septiembre de 2005

Compatibilidad entre tipos

byte b = 42;

char c = 'a'; // también válido: c = 97;

short s = 1024;

int i = 50000;

long l = 120000;

float f = 5.67f;

double d = .1234;

double result = (f*b) + (i/c) - (d*s);

Ensanchar: automáticof = c;

d = s;

f = l;

Estrechar: cast explícitoc = (char) i;

b = (byte) d;

f = (float) d;

char: cast explícitos = (short) c;

c = (char) s;

c = (char) b;

Page 15: Programación avanzada en Java Miguel Ángel Corella 16 de Septiembre de 2005

Operadores

• En total hay 46 operadores.– Numéricos:

+, -, *, /, %, +=, -=, *=, /=, %=, --, ++

– Lógicos:&&, ||, !

– Operadores de bit:&, |, ^, ~, >>, <<

– Relacionales:>, <, >=, <=, ==, !=

– Condicional:If-then-else: (condicion) ? acción1 : acción2

Page 16: Programación avanzada en Java Miguel Ángel Corella 16 de Septiembre de 2005

Precedencia de operadores

( ) [ ] .

++ -- ~ !

new

* / %

+ -

>> >>> <<

> >= < <=instanceof

== !=

&

^

|

&&

||

? :

= += *= -= /=

Ord

en d

e ej

ecuc

ión

de o

pera

dore

s

Igualdad de precedencia

Page 17: Programación avanzada en Java Miguel Ángel Corella 16 de Septiembre de 2005

Arrays

• Declaración:int a[];

a = new int[3];int b[] = {1, 2, 3, 4};

• Reserva de tamaño:

• Asignación de valores:a[1] = 7;b = a;

• Errores:a[6] = 7; // Fuera del rangoa = {1, 2, 3}; // Sólo válido en la inicializaciónint c[5]; // La dimensión sólo al hacer newchar str[] = “hola”; // Los Strings no son arrays en Java

Page 18: Programación avanzada en Java Miguel Ángel Corella 16 de Septiembre de 2005

Arrays multidimensionales

float a[][] = new float [4][3];

float m[][] = new float [4][];

m[0] = new float [2];

m[1] = new float [5];

m[2] = new float [m[1].length];

float x[] = {4.5, 8/3, m[2][1]};

m[3] = x; // O cualquier expresión que devuelva un float[]

a[0] = m[1]; // Las variables de array no son constantes

a[2, 1] = 7.3 // Error de sintaxis: a[2][1]

Page 19: Programación avanzada en Java Miguel Ángel Corella 16 de Septiembre de 2005

Expresiones condicionales

• Dos tipos de condicionales.

if (condición1) acción1 [else acción2] [else if (condición2)…

switch (expresión) { case valor1: … break;

case valor2: … break;

default: …}

byte, char, short o int

Tienen que ser literales

Page 20: Programación avanzada en Java Miguel Ángel Corella 16 de Septiembre de 2005

Iteraciones

• Tres tipos de iteraciones.

while (condición1) { …}

do { …} while (condición1)

for (inicialización; condición; iteración) { …}

Page 21: Programación avanzada en Java Miguel Ángel Corella 16 de Septiembre de 2005

Clases y objetosen Java

Page 22: Programación avanzada en Java Miguel Ángel Corella 16 de Septiembre de 2005

Clases

• Estructura de datos + funciones.class CuentaBancaria {

long numero;

String titular;

long saldo;

void ingresar (long cantidad) {

saldo += cantidad;

}

void retirar (long cantidad) {

if (cantidad > saldo)

System.out.println ("Saldo insuficiente");

else saldo -= cantidad;

}

}

Variables(datos)

Funciones

Page 23: Programación avanzada en Java Miguel Ángel Corella 16 de Septiembre de 2005

Variables de una clase

• Definen una estructura de datos (similar al struct de C)

• Pueden almacenar objetos de otras clases

• Por defecto, se inicializan a 0, false y/o null.

class CuentaBancaria {

long numero;

String titular;

long saldo;

}

struct CuentaBancaria {

long numero;

char *titular;

long saldo;

};

class CuentaBancaria {

long numero;

Cliente titular;

long saldo = 0;

}

class Cliente {

String nombre;

long dni;

}

Page 24: Programación avanzada en Java Miguel Ángel Corella 16 de Septiembre de 2005

Creación de objetos

• Una clase define un tipo de dato que se puede utilizar para declarar variables.

• Declarar un objeto es declarar una referencia al objeto.• Los objetos se crean mediante el operador new.

• Crear un objeto es reservar memoria para sus variables.• El operador new reserva memoria y devuelve una referencia.

CuentaBancaria cuenta1, cuenta2;

cuenta1 = new CuentaBancaria();

CuentaBancaria

0

null

0

numero

titular

saldo

Page 25: Programación avanzada en Java Miguel Ángel Corella 16 de Septiembre de 2005

Acceso a variables

• El acceso a las variables de un objeto se lleva a cabo mediante la notación “.”

CuentaBancaria cuenta1, cuenta2;

cuenta1 = new CuentaBancaria ();

cuenta2 = cuenta1;

Cliente cliente1 = new Cliente ();

cliente1.nombre = "Luis Gomez";

cliente1.dni = 25672046;

cuenta1.numero = 6831531;

cuenta1.titular = cliente1;

cuenta1.saldo = 100000;

cuenta2.saldo = 200000;

cuenta2.titular.nombre = "Pilar Garcia";

Page 26: Programación avanzada en Java Miguel Ángel Corella 16 de Septiembre de 2005

Métodos

• Los métodos son funciones definidas dentro de un clase.

• Son similares a un puntero a función dentro de un struct de C.

• Los métodos de una clase pueden referenciar directamente las variables de la misma.

• Los métodos se invocan sobre un objeto de la clase a la que pertenecen mediante la notación “.”.

• Al ejecutar un método sobre un objeto de la clase X, las variables de dicha clase X toman los valores que tiene el objeto.

cuenta2.ingresar(1000);

Page 27: Programación avanzada en Java Miguel Ángel Corella 16 de Septiembre de 2005

Llamadas desde métodos• Los métodos pueden invocar directamente otros

métodos de la misma clase (sin “.”).• Al ejecutar un método invocado sobre un objeto de clase

A, las llamadas a otros métodos de la clase A se ejecutan sobre el mismo objeto a menos que se invoquen sobre otro objeto

cuenta3 = new CuentaBancaria ();

cuenta2.transferencia (cuenta3, 1000);

class CuentaBancaria { ... void transferencia (CuentaBancaria destino, long cantidad) { if (cantidad <= saldo ) { retirar (cantidad); destino.ingresar (cantidad); } }}

Page 28: Programación avanzada en Java Miguel Ángel Corella 16 de Septiembre de 2005

Acceso a objetos

class X { String nombre; }

class Y { int i; }

class Z { String nombre; }

class A {

int num;

X obj4;

void f (int n, Y obj3) {

Z obj2 = new Z ();

obj4.nombre = obj2.nombre

num = obj3.i + n;

}

}2.

1. 3.

4.

1. Variable del objeto de la invocación

2. Objeto definido en variable local

3. Objeto pasado como argumento

4. Objeto almacenado en variable de clase

Page 29: Programación avanzada en Java Miguel Ángel Corella 16 de Septiembre de 2005

Constructores

• Métodos ejecutados automáticamente al crear un objeto de una clase (“new”).

• Se usan para llevar a cabo labores de inicialización.• Simplifican la sintaxis y apoyan el encapsulamiento de

los datos.• Los métodos constructores de una clase tienen que

tener el mismo nombre que la clase.

class Cliente {

// Constructor de la clase Cliente Cliente (String str, long num) { ...; }}

Page 30: Programación avanzada en Java Miguel Ángel Corella 16 de Septiembre de 2005

Ejemplos de constructores

class Cliente {

String nombre;

long dni;

Cliente (String str, long num) {

nombre = str;

dni = num;

}

}

class CuentaBancaria {

long numero;

Cliente titular;

long saldo;

CuentaBancaria (long num, Cliente clt, long s) {

numero = num; titular = clt; saldo = s;

}}

Page 31: Programación avanzada en Java Miguel Ángel Corella 16 de Septiembre de 2005

Ejemplos de invocación

• Automáticamente al crear objetos.

Cliente cliente1 = new Cliente ("Luis Gomez", 25672046);

CuentaBancaria cuenta1 = new CuentaBancaria (6831531, cliente1, 100000);

CuentaBancaria cuenta2 =

new CuentaBancaria (8350284,

new Cliente ("Pilar Garcia", 15165442),

200000);

Page 32: Programación avanzada en Java Miguel Ángel Corella 16 de Septiembre de 2005

Constructor por defecto

• Si no se definen constructores, Java proporciona uno por defecto.– Sin parámetros: Llamadas del tipo new X();– Sin funcionalidad: Variables inicializadas por defecto.

• Pero si se define un constructor (o más) el constructor por defecto no es definido.

Page 33: Programación avanzada en Java Miguel Ángel Corella 16 de Septiembre de 2005

Programación avanzadaen Java

Miguel Ángel Corella16 de Septiembre de 2005