programar java

Post on 21-Jul-2015

384 Views

Category:

Education

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Programación avanzadaen Java

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

El lenguaje Java

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.

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

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• …

Compilación e interpretación

class Ejemplo { ...}

class Aux { ...}

Ejemplo.java

Compilador Java

Ejemplo.class Aux.class

Java Virtual Machine

JVM

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.

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

Elementos del lenguaje

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…

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)

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;

Operadores

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

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

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

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

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

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

Precedencia de operadores

( ) [ ] .

++ -- ~ !

new

* / %

+ -

>> >>> <<

> >= < <= instanceof

== !=

&

^

|

&&

||

? :

= += *= -= /=

Ord

en d

e ej

ecuc

ión

de o

pera

dore

s

Igualdad de precedencia

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

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]

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

Iteraciones

• Tres tipos de iteraciones.

while (condición1) { …}

do { …} while (condición1)

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

Clases y objetosen 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)

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

}

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

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

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

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

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

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) { ...; }}

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

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.

top related