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