Está en la página 1de 33

Programacin avanzada en Java

Miguel ngel Corella 16 de Septiembre de 2005

Informacin general (I)


Profesores:
Miguel ngel Corella, Jos Mara Fuentes y Francisco Saz.

ndice del curso:


Introduccin.
El lenguaje Java. Programacin orientada a objetos en Java.
Miguel ngel Corella

Jerarquas de clases. Excepciones. Applets. Interfaces de usuario.

Jos Mara Fuentes

Francisco Saz

Informacin general (y II)

Bibliografa:
Core Java 1.2, Volmenes I II. C.S. Horstmann, Gary Cornell, Prentice Hall, 1999. Tutorial de Java en http://java.sun.com

El lenguaje Java

Caractersticas principales (I)


Lenguaje interpretado. Fuertemente tipado. Sintaxis similar a C/C++. Sin punteros: Garbage collection. 100% portable. Integra librearas estndar para:
Interfaces de usuario. Objetos distribuidos. Threads.

Caractersticas principales (y II)


Ejecutable desde navegadores web. Origen: Aumento de HTML para conseguir pginas Web dinmicas. Versiones:
1995 JDK 1.0 1997 JDK 1.1 2004 JDK 1.5

Desarrollo en Java
Java Development Kit (JDK):
Java Runtime Environment (JRE):
Java Virtual Machine. Java API: lenguaje bsico y libreras estndar.

Compilador a bytecode. Otras herramientas:


Debuggers. Applet viewer. Compiladores RMI

Compilacin e interpretacin
Ejemplo.java class Ejemplo { ... } class Aux { ... }

Java Virtual Machine JVM Compilador Java


Ejemplo.class Aux.class

Comparativa: Java vs. C++ (I)


Java C++

Interpretado
Portable Todo memoria dinmica Garbage collection No existen punteros Todos los mtodos virtuales No hay herencia mltiple Informacin sobre clases en tiempo de ejecucin. Tratamiento genrico de tipos (wrappers).

Compilado
Aspectos no portables Memoria automtica y dinmica Gestin del programador Existen punteros No todos los mtodos virtuales Hay herencia mltiple Informacin muy escasa (dynamic_cast). Punteros a void.

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


Java C++

Soporte estndar para interfaces: AWT, SWING Soporte estndar para concurrencia Soporte estndar para objetos distribuidos Ejecutable en navegadores web

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 Mltiples sintaxis Compatibilidad con C

Homogeneidad del lenguaje


Lenguaje bien diseado

Elementos del lenguaje

Aspectos lxicos
Ignora mltiples espacios en blanco Sentencias separadas por ;. Comentarios:
/* */ Mltiples lneas de comentario // Una nica lnea de comentario

Case sensitive. Convenios de nomenclatura:


Clases con mayscula. Mtodos y variables con minscula. etc

Valores y variables
Tipos bsicos:
byte char short int long float double boolean 1 byte 2 bytes (sin signo, caracteres Unicode, incluyen los ASCII) 2 bytes 4 bytes 8 bytes 4 bytes 8 bytes 1 bit (true false, no compatible con tipos numricos)

Variables y literales:
Declaracin y utilizacin de variables y literales similar a C/C++.

Compatibilidad entre tipos


byte b = 42; char c = 'a'; // tambin vlido: 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: automtico
f = c; d = s; f = l;

Estrechar: cast explcito


c = (char) i; b = (byte) d; f = (float) d;

char: cast explcito


s = (short) c; c = (char) s; c = (char) b;

Operadores
En total hay 46 operadores.
Numricos:
+, -, *, /, %, +=, -=, *=, /=, %=, --, ++

Lgicos:
&&, ||, !

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

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

Condicional:
If-then-else: (condicion)
? accin1 : accin2

Precedencia de operadores
( ) ++ new * + >> > == & ^ | && || ? =

Orden de ejecucin de operadores

[ ] -/ >>> >= !=

. ~ % << <

<=

instanceof

: +=

*=

-=

/=

Igualdad de precedencia

Arrays
Declaracin:
int a[];

Reserva de tamao:
a = new int[3]; int b[] = {1, 2, 3, 4};

Asignacin de valores:
a[1] = 7; b = a;

Errores:
a[6] = 7; a = {1, 2, 3}; int c[5]; char str[] = hola; // // // // Fuera del rango Slo vlido en la inicializacin La dimensin slo al hacer new Los Strings no son arrays en Java

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; a[0] = m[1]; // O cualquier expresin que devuelva un float[] // Las variables de array no son constantes

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

Expresiones condicionales
Dos tipos de condicionales.
if (condicin1) accin1 [else accin2] [else if (condicin2)

switch (expresin) { case valor1: break; case valor2: break; default: }

byte, char, short o int


Tienen que ser literales

Iteraciones
Tres tipos de iteraciones.
while (condicin1) { }

do { } while (condicin1)

for (inicializacin; condicin; iteracin) { }

Clases y objetos en Java

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

Variables de una clase


Definen una estructura de datos (similar al struct de C)
class CuentaBancaria { long numero; String titular; long saldo; }
struct CuentaBancaria { long numero; char *titular; long saldo; };

Pueden almacenar objetos de otras clases


class CuentaBancaria { long numero; Cliente titular; long saldo = 0; } class Cliente { String nombre; long dni; }

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

Creacin de objetos
Una clase define un tipo de dato que se puede utilizar para declarar variables.
CuentaBancaria cuenta1, cuenta2;

Declarar un objeto es declarar una referencia al objeto. Los objetos se crean mediante el operador new.
CuentaBancaria cuenta1 = new CuentaBancaria(); numero titular 0 null 0

saldo

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

Acceso a variables
El acceso a las variables de un objeto se lleva a cabo mediante la notacin .
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";

Mtodos
Los mtodos son funciones definidas dentro de un clase.
Son similares a un puntero a funcin dentro de un struct de C. Los mtodos de una clase pueden referenciar directamente las variables de la misma.

Los mtodos se invocan sobre un objeto de la clase a la que pertenecen mediante la notacin ..
cuenta2.ingresar(1000);

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

Llamadas desde mtodos


Los mtodos pueden invocar directamente otros mtodos de la misma clase (sin .). Al ejecutar un mtodo invocado sobre un objeto de clase A, las llamadas a otros mtodos 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); } } }

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. 1. 2. 3. 4. Variable del objeto de la invocacin Objeto definido en variable local Objeto pasado como argumento Objeto almacenado en variable de clase

4.

Constructores
Mtodos ejecutados automticamente al crear un objeto de una clase (new). Se usan para llevar a cabo labores de inicializacin. Simplifican la sintaxis y apoyan el encapsulamiento de los datos. Los mtodos 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) { ...; } }

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

Ejemplos de invocacin
Automticamente 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);

Constructor por defecto


Si no se definen constructores, Java proporciona uno por defecto.
Sin parmetros: Llamadas del tipo new X();

Sin funcionalidad: Variables inicializadas por defecto.

Pero si se define un constructor (o ms) el constructor por defecto no es definido.

Programacin avanzada en Java

Miguel ngel Corella 16 de Septiembre de 2005