java 1.4 dr. diego lz. de ipiña gz. de artaza [email protected]

114
Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza http://paginaspersonales.deusto.e s/dipina [email protected]

Upload: rufino-ballesteros

Post on 15-Jan-2015

5 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Java 1.4

Dr. Diego Lz. de Ipiña Gz. de Artazahttp://paginaspersonales.deusto.es/dipina

[email protected]

Page 2: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Introducción a la plataforma Java (I) Evolución de la programación

¿Qué es programar? Fases de un proyecto informático

Análisis. Diseño. Codificación + compilación. Depuración + pruebas. Documentación.

Page 3: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Introducción a la plataforma Java (II)

Evolución de los lenguajes. Lenguajes máquina. Lenguajes ensamblador. Lenguajes de alto nivel.

Programación estructurada. Instrucciones secuenciales. Instrucciones condicionales. Instrucciones repetitivas.

Un programa en ejecución: proceso. La relación con la máquina.

Los orígenes del lenguaje Java. 1991 Sun Microsystems intenta crear un lenguaje

para programar dispositivos eléctricos.

Page 4: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Introducción a la plataforma Java (III)

Primera versión se llamó OAK. No tuvo éxito. Nueva orientación: Internet. En 1996 surge la primera versión.

Características principales del lenguaje Java. Multiplataforma.

Compilación -> ByteCode -> JVM (Java Virtual Machine).

Ventajas: Multiplataforma. Entorno controlado.

Page 5: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Introducción a la plataforma Java (IV)

Desventajas Menor rendimiento. Pérdida de características específicas.

Orientación a Objetos. Applets. Programación distribuida RMI (Remote

Method Invocation) Multiproceso / Multihilo (MultiThreading) Programación móvil J2ME (Micro Edition) Programación aplicaciones web JSP (Java

Server Pages)

Page 6: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Introducción a la plataforma Java (V) La evolución del lenguaje Java.

La orientación actual es la de ofrecer multitud de utilidades para facilitar el desarrollo de aplicaciones.

Servidores de aplicaciones. Transparencia en el acceso a datos. Desarrollo basado en componentes

(beans).

Page 7: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java (I) ¿Qué es la Programación Orientada a

Objetos? Paradigma de programación que permite

modelar de forma sencilla conceptos del mundo real a nivel de programación.

¿Por qué es útil la POO? Ofrece un conjunto de herramientas que

una vez interiorizadas permiten gran flexibilidad en el diseño de una solución.

Page 8: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java (II) Palabras reservadas en Java.

abstract default goto operator synchronized

boolean do if outer this

break double implements package threadsafe

byte else import private throw

byvalue extends inner protected throws

case false instanceof public transient

cast final int rest true

catch finally interface return try

char float long short var

class for native static void

const future new super volatille

continue generic null switch while

Page 9: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java (III)

Herramientas de la POO. La clase como elemento mínimo.

Una clase es una representación de un concepto del mundo real.

Contiene dos componentes / miembros: Datos = Atributos. Acciones = Métodos.

Se usa el operador punto ‘.’ para acceder a los miembros. Una clase se define con la palabra reservada “class”.

Clase Vs Objeto Clase = Concepto = Definición [= Receta]. Objeto = Instancia = Elemento “real” [= Pastel].

Page 10: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java (IV)

Paquetes. Concepto que permite englobar en una misma

idea varias clases. Semejanza con estructura de directorios. Puede

haber una jerarquía. En compilación, se generan directorios físicos.

Se usa el operador punto ‘.’ para poder acceder a las clases de un paquete o a los subpaquetes.

Visibilidad de paquete. Pública: Se permite usar esa clase desde otro paquete. No pública: Sólo se puede usar esa clase desde ese

paquete.

Page 11: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java (V)

Estructura básica de un fichero fuente Java. Definición de paquete (opcional): “package” Importación de clase (opcional): “import”

Se pueden importar todas las clases usando “*” Definición de clases.

Sólo una con visibilidad pública de paquete. El fichero debe llamarse igual que esta clase.

package paquete;import otroPaquete.OtraClase;public class ClaseConVisibilidadPublica{}class ClaseConVisibilidadNoPublica{}

Page 12: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java (VI)

Reglas de estilo básicas. Los nombres de paquete en minúsculas.

paquete Los nombres de clase en mayúscula la primera letra y en

mayúscula la primera letra de cada cambio de concepto.NombreDeClase

Los nombres de miembros en minúsculas y en mayúscula la primera letra de cada cambio de concepto.

nombreDeMiembroDeClase Los nombres de constantes en mayúsculas todas las

letras y cada cambio de concepto con un guión bajo ‘_’.NOMBRE_DE_CONSTANTE

Page 13: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java (VII)

Comentarios. Hay 3 tipos. De Bloque: Comienzan por “/*” y terminan por “*/”.

No se permiten anidaciones. De Línea: Definidos por “//”. De Documentación: Permiten insertar texto en las

páginas web generadas con la herramienta “javadoc” del JDK. Comienzan por “/**” y terminan por “*/”. Se suelen poner en ciertos puntos:

Antes de una clase. Antes de un atributo. Antes de un método.

@param id @return @throws Exception

Page 14: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java (VIII)

Encapsulación. Control de acceso a los miembros. 2 tipos de encapsulación:

Pública: Un miembro accesible desde cualquier punto. Se usa la palabra reservada “public” antes de definir el miembro.

Privada: Un miembro accesible únicamente desde la propia clase. Se usa la palabra reservada “private” antes de definir el miembro.

Los datos públicos pueden cambiar en cualquier momento. Mediante encapsulación privada, sólo pueden cambiar desde métodos = control.

Page 15: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java (IX)

Tipos de datos en Java. Primitivos.

Enteros. byte: 8 bits positivos y negativos (-128 < 0 < 127) char: 16 bits positivos (0 < 65535) short: 16 bits positivos y negativos (-32768 < 0 <

32767) int: 32 bits positivos y negativos long: 64 bits positivos y negativos

Decimales. float: 32 bits double: 64 bits

Lógicos. boolean: true o false

No primitivos: Clases.

Page 16: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java (X)

Variables.tipo + identificativo + [=VALOR_INICIAL] + ; El concepto de ámbito.

Define la visibilidad, accesibilidad, duración de una variable.

Se representa mediante ‘{‘ y ‘}’. Existen 2 tipos:

De clase: Las variables de clase (estáticas) y de instancia.

De método: Las variables locales a un método. Diferencia entre variables de tipo primitivo y

objetos.

Page 17: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java (XI)

Miembros estáticos. Definidos con la palabra reservada “static” Un miembro estático (o de clase) es único para todos los

objetos que se creen. Se puede decir que siempre está creado. Se puede acceder a él sin necesidad de un objeto.

Un miembro no estático (o de instancia) pertenece a cada objeto individual. Se puede decir que se crea junto con el objeto.

Desde un método estático no se puede acceder a miembros no estáticos.

Creación de objetos. Cuando se declara una variable de tipo no primitivo, realmente

representa una referencia a un posible objeto. Para poder crear el objeto al que referenciar se usa el operador “new”.

Page 18: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java (XII)

Contantes. Enteras.

12345 (int, por defecto)12345L (long)0123 (octal)0xF0A (hexadecimal)

Decimales.123.45 (double, por defecto)123.45f (float)

Carácter.‘a’

Cadena.“cadena”

Page 19: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java (XIII)

Existen constantes con nombre declarándolas igual que las variables con la palabra reservada “final”.

final int CONSTANTE = 5; Conversión de tipos.

No perder información / precisión. Implícita.

Explícita. Operador cast (tipo)

Page 20: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java (XIV)

Edición, Compilación y Ejecución en Java. Software: http://www.java.sun.com

JDK: Java Development Kit. Compilador + JVM. JRE: Java Runtime Enviroment. JVM.

Edición en cualquier editor. El directorio “bin” del JDK contiene los

comandos. Compilación. Comando “javac”.

-d: Indica el directorio donde generar los .class. -classpath: Indica las rutas a los .class a usar.

javac –d RUTA –classpath RUTA fichero.javaEl fichero .java puede ser *.java.

Page 21: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java (XV)

Ejecución. Comando “java”. -cp: Indica las rutas de los .class a usar.

java –cp RUTA fichero

No se indica la extensión dado que se interpretaría como paquete.subpaquete...clase

Documentación. Comando “javadoc”. -d: Indica el directorio donde generar la

documentación.javadoc –d RUTA fichero.java

El fichero.java puede ser *.java.

Page 22: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java (XVI)

public class PrimerPrograma{

public static void main(String[] args){

System.out.println(“El primer programa en Java.”);}

} Editar, compilar y ejecutar este programa. Realizar varios cambios en el programa.

Modificar la cadena a presentar. Añadir el paquete “cursojava.primero”. ¿Qué

implicaciones tiene? Documentar el código fuente. Generar documentación.

Page 23: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java (XVII)

package cursojava.tipos;public class TiposPrimitivos{

public static void main(String[] args){

byte b = 127;char c = 65; // Representa el carácter ‘A’short s = 32767;// Conversiones implícitasint i = b;long l = s;float f = i;double d = f;

}}

Realizar varios cambios en el programa. Asignar valores fuera de rango a cada tipo. Intentar realizar conversiones inadecuadas. ¿Cómo se forzarían?

Page 24: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java (XVIII)

Expresiones. 2 elementos.

Operadores. Operandos.

2 tipos de operadores. Binarios: 2 operandos. Unarios: 1 operando.

Asignación ‘=‘

variable = valor;variable1 = variable2 = variable3 = valor;

Page 25: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java (XIX)

Aritméticas. Suma ‘+’: Binario. Enteros y decimales. Más ‘+’: Unario. Enteros y decimales. Resta ‘-’: Binario. Enteros y decimales. Menos ‘-’: Unario. Enteros y decimales. Multiplicación ‘*’: Binario. Enteros y

decimales. División ‘/’: Binario. Enteros y decimales. Resto ‘%’: Binario. Enteros.Operador Operación Nivel de Precedencia

+, - (unitarios) +25 1

-6.725

*, /, % 5 * 5 es 25 2

25 / 6 es 4

25 % 6 es 1

+, - 2 + 3 es 5 3

2 – 3 es -1

Page 26: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java (XX)

Incremento ‘++’ y Decremento ‘--’ Pre: Se incrementa/decrementa y

después se evalúa la expresión.++variable;

--variable; Post: Se evalúa la expresión y luego se

incrementa/decrementa.variable++;

variable--;

Page 27: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java (XXI)package cursojava.incdec;public class IncrementoDecremento{

public static void main(String[] args){

int variable = 5;System.out.println(variable); System.out.println(++variable); System.out.println(variable++); System.out.println(variable--); System.out.println(--variable); System.out.println(variable);}

} Indicar la salida por pantalla de cada instrucción.

Page 28: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java (XXII)

Operadores aritméticos en conjunción con el operador de asignación

variable += expresion; // variable = variable + expresion

variable -= expresion; // variable = variable – expresion

variable /= expresion; // variable = variable / expresion

variable *= expresion; // variable = variable * expresion

variable %= expresion; // variable = variable % expresion

Page 29: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java (XXIII)

Operadores relacionales. Operadores que consiguen uno de los dos valores lógicos: true o false.

Operador Significado Ejemplo

== Igual a a == b

!= No igual a a != b

> Mayor que a > b

< Menor que a < b

>= Mayor o igual que a >= b

<= Menor o igual que a <= b

Page 30: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java (XXIV)

Operadores lógicos:Operador Significado Tabla de verdad Ejemplo

! No lógica, negación a !a !(x < y)true falsefalse true

|| O lógica a b a || b x < n || y > 9true true truetrue false true

false true true

false false false

&& Y lógica a b a && b x < n && y > 9

true true true

true false false

false true false

false false false

^ O exclusiva a b a ^ b x < n ^ y > 9true true falsetrue false true

false true true

false false false

Page 31: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java (XXV)

Operan sobre operandos booleanos y generan resultados booleanos.

Se evalúan de izquierda a derecha. El máximo exponente son las

operaciones OR y AND. OR: Si el operando de la izquierda es true, no se evalúa el de la derecha.

AND: Si el operando de la izquierda es false, no se evalúa el de la derecha.

Para obligar a evaluar ambos: ‘|’ y ‘&’

Page 32: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java (XXVI)

Instrucciones condicionales. Simple:

if (CONDICION){INSTRUCCIONES

} Doble:

if (CONDICION){INSTRUCCIONES

}else{INSTRUCCIONES

}

Page 33: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java (XXVII)

Múltiple:switch(VARIABLE){case VALOR1:

break;case VALOR2:

break;...case VALORn:

break;default:

break;}

Page 34: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java (XVIII)

Instrucciones repetitivas: Hay de dos tipos:

De 0 a N: for y while

for (INICIALIZACION; CONDICION; PASO)

{INSTRUCCIONES}

while(CONDICION){INSTRUCCIONES}

De 1 a N: do ... whiledo{

INSTRUCCIONES}while(CONDICION);

Page 35: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java (XXIX)

Métodos. La signatura de un método es lo que lo define.

tipo_retorno + identificativo + ( + [parámetro(s)] + ) Los parámetros son definiciones de variables con ámbito

local (de método) pero que reciben un valor inicial cuando se haga la llamada el método.tipo + identificativo

Java soporta sobrecarga: definición de dos métodos en la misma clase con el mismo identificativo pero con número o tipo de parámetros diferentes.

Si no se quiere devolver nada se usa el tipo “void”. Tipos primitivos Vs tipos no primitivos (clases) en

métodos.

Page 36: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java (XXX)

Constructores Métodos especiales que se ejecutan en el

momento de creación de un objeto (new). No devuelven valor (ni void). Se llaman igual que la clase. Puede haber sobrecarga. Por defecto siempre hay un constructor que no

recibe parámetros. Preguntas:

¿Qué pasa si ponemos un único constructor con parámetros?

¿Qué pasa si ponemos un constructor con encapsulación privada?

Page 37: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java (XXXI)

El tipo de datos String Es un tipo de datos abstracto (clase) que está definido en el

paquete java.lang. Es el único tipo abstracto de Java que tiene su propia constante

literal conocida dentro de la sintaxis del lenguaje (la gramática). Por ello, una asignación como

String s = “cadena”;Implica directamente la creación (new) de un objeto. Es similar a:

String s = new String(“cadena”); Tiene multitud de funcionalidades útiles para control de

subcadenas. Para poder concatenar cadena se usa el operador ‘+’ que

permite incluso convertir tipos de datos no String a cadenas.

Page 38: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java (XXXII)

Ejemplo: Desarrollar un programa para aclarar el concepto de variable estática (de clase) y no estática (de instancia).package cursojava.estatic;

public class DeClaseDeInstancia{public static void main(String[] args){Ayuda a1 = new Ayuda();Ayuda a2 = new Ayuda();Ayuda a3 = new Ayuda();System.out.println(a1.deClase);System.out.println(a1.deInstancia);}}class Ayuda{public static int deClase;public int deInstancia;public Ayuda(){deClase++;deInstancia++;}}

Page 39: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java (XXXIII)

Ejemplo: Desarrollar un programa para aclarar el paso de parámetros por valor y por referencia.

package cursojava.valref;public class ValorYReferencia{

public static void metodo(int valor){

valor++;}public static void metodo(Ayuda valor){

valor.valor++;}public static void main(String[] args){

int valor = 5;metodo(valor);System.out.println(valor);

Ayuda objeto = new Ayuda();objeto.valor = 5;metodo(objeto);System.out.println(objeto.valor);

}}class Ayuda{

public int valor = 0;}

Page 40: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java (XXXIV)

Arrays en Java Un array es un conjunto de datos del mismo tipo

situados de forma consecutiva. Las variables array en Java son referencias. Por tanto,

los arrays son objetos y hay que crearlos.

tipo + [] + id + = + new + tipo + [ + cantidad + ] + ;

El new ha creado el objeto del array. 2 casos: Tipos primitivos: Los datos del array se habrán creado

también (ya que los tipos primitivos se crean directamente). Tipos no primitivos (clases): Los datos son referencias a null y por tanto deben crearse a parte.

Page 41: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java (XXXV)

En la declaración se pueden poner los corchetes “[]”:

Después del tipo: Indica que TODOS los identificativos que se definan serán arrays.

tipo + [] + id ... Después del identificativo: Indica que ese identificativo

será el único que es array.tipo + id + [] + ...

En Java no se permite indicar en la declaración del array el número de elementos del mismo.tipo + [] + id + = + new + tipo + [ + cantidad + ] + ;

Los arrays en Java tienen índices entre 0 y cantidad – 1.

¿Qué pasa si me salgo de rango?

Page 42: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java (XXXVI)

La inicialización de los elementos de un array puede ser: Elemento a elemento:tipo[] id = new tipo[2];id[0] = valor;id[1] = valor;

Inicialización en declaración: Se usan llaves.tipo[] id = {valor, valor};

La copia entre arrays no se puede realizar mediante la asignación (¿por qué?).

Existe un método java.lang.System.arrayCopy que ofrece el mayor rendimiento.

El tamaño de un array se puede conocer haciendo uso de un atributo llamado length que todo array en Java posee.

Page 43: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java (XXXVII)

Los arrays multidimensionales se declaran mediante el uso de [] consecutivos.

Realmente son referencias que contienen referencias (arrays dentro de arrays).tipo[][] id = new tipo[cantidad1][cantidad2];tipo[][] id = {{valor, valor}, {valor, valor}};

Para acceder a conocer el número de elementos de cada dimensión se usa el mismo atributo length pero desde referencias distintas.id.length // Indica la cantidad1id[indice].length // Indica la cantidad2

Page 44: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java (XXXVIII)

Entrada/Salida estándar. java.lang.System.out es de tipo java.io.PrintStream

que tiene los métodos necesarios para mostrar información por la salida estándar.java.io.PrintStream.print()

java.io.PrintStream.println() java.lang.System.in es de tipo java.io.InputStream

que tiene métodos muy básicos de lectura de información desde la entrada estándar. Para leer información más elaborada (cadenas de caracteres) se suelen usar objetos del tipo java.io.BufferedReader.

new BufferedReader(new InputStreamReader(System.in))

Page 45: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java (XXXIX)

Excepciones (básico). Las excepciones son una forma de control de

flujo. Se usan para indicar situaciones concretas en

la ejecución del programa (errores, avisos, etc.)

Lanzamiento de excepciones: Uso de la instrucción “throw” acompañando a un

objeto (que es el que se lanza).

Page 46: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java (XXXX)

Gestión de excepciones Bloque de código entre las instrucciones

try{}catch(PARAMETRO){}

Relanzamiento: El método puede indicar que no será él el encargado de capturar la excepción y transmite su gestión sucesivamente a los método que le llamaron. Se usa la palabra reservada “throws” acompañando al tipo de datos de la excepción al final de la definición del método.

tipo_retorno + identificativo + ( + [parámetro(s)] + ) + throws tipo_excepcion

Page 47: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java () Existen dos tipos de excepciones.

Excepciones en tiempo de ejecución (Runtime): Como son excepciones que pueden surgir en cualquier momento por errores en tiempo de ejecución, no es obligatoria su captura ni su relanzamiento.

Las demás excepciones: Se determina que el desarrollador querrá tener control (capturar o relanzar) este tipo de situaciones, por lo que son obligatorias.

Page 48: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java ()

Mapeo de tipos primitivos en tipos abstractos. Java ofrece dentro del paquete java.lang un

mapeo de lo tipos primitivos de datos en tipos abstractos (clases).

byte <-> Byte char <-> Character short <-> Short int <-> Integer float <-> Float double <-> Double

Esta característica tiene multitud de utilidades. Una de las más peculiares es la posibilidad de construir valores primitivos desde valores de tipo cadena.

Page 49: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java () Ejercicio Propuesto: Desarrollar un

programa (cursojava.param.Parametros) que presente por pantalla todos los parámetros que se le hayan pasado por línea de comandos.

Page 50: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java ()

Ejercicio Propuesto: Crear una clase llamada EntradaDatos dentro del paquete cursojava.util que permita leer de teclado valores de tipos de datos primitivos:

int: leerEntero double: leerReal char: leerCaracter String: leerCadena

Realizar el control correspondiente mediante iteraciones sucesivas.

Page 51: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java () Ejercicio Propuesto: Desarrollar un

programa (cursojava.euros.DesgloseCantidad) que pida al usuario que introduzca un valor entero en euros por teclado y desglose dicha cantidad en:

Billetes: 500є, 200є, 100є, 50є, 20є, 10є Monedas: 2є, 1є

Visualizar cada cantidad por pantalla.

Page 52: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java ()

Ejercicio Propuesto: Desarrollar un programa (cursojava.aritmetica.MenuAritmetico) que visualice repetidamente un menú por pantalla donde se puedan seleccionar distintas operaciones a realizar:

1.- Suma 2.- Resta 3.- Multiplicación 4.- División 5.- Resto 6.- ¿Es primo? 7.- Salir.

Realizar modularmente la programación necesaria para resolver los cálculos.

Page 53: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java ()

Ejercicio Propuesto: Desarrollar un programa (cursojava.rect.RectanguloRelleno) que pida al usuario que introduzca la base y la altura (enteras de no más de 15) de un rectángulo para dibujarlo usando asteriscos:

******************

Modificarlo para que el usuario introduzca el carácter a usar en el dibujado.

Modificarlo para que dibuje un rectángulo sin rellenar. (cursojava.rect.RectanguloHueco)

Page 54: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java () Ejercicio Propuesto: Desarrollar un

programa (cursojava.adivina.AdivinaNumero) que calcule un número aleatorio entre 1 y 100 y pida sucesivamente al usuario que intente adivinarlo indicándole si el número aleatorio es mayor o menor al número que haya introducido.

Modificarlo para que el usuario pueda decidir si quiere o no jugar una vez acertado el número.

Page 55: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java ()

El objeto this. La referencia para poder usar EL objeto

desde el código de una clase. Siempre accesible en entornos no estáticos. No es obligatorio más que en algunas

ocasiones: Para poder llamar a un constructor desde otro

constructor. Debe ser la primera instrucción del constructor.

En casos de ambigüedad entre datos miembro y variables locales de un método.

Page 56: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java ()

Relaciones entre objetos. Las clases no son conceptos independientes. La POO permite modelar en dominio del problema a nivel de

programación de forma casi directa. Hay dos tipos de relaciones.

Inclusión: Define la relación “... tiene un ...”. Se materializa mediante un atributo de una clase en otra. Un atributo de la clase es un objeto de otra clase

Herencia: Define la relación “... es un ...”. Se materializa mediante la generalización de una clase sobre otra.

Page 57: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java ()

Herencia. Herramienta que permite generalizar conceptos. Se crea una jerarquía. Los conceptos “padre”

definen características comunes que los conceptos “hijo” heredan como propias.

Java no permite la herencia múltiple. Se usa la palabra reservada “extends” para

relacionar las dos clases.class ClaseDerivada extends

ClaseBase

Page 58: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java ()

Con esta nueva forma de relacionar conceptos surge un nuevo tipo de encapsulación: protegida.

Se usa la palabra reservada “protected”. Define miembros que son accesibles desde la

propia clase y desde las clases derivadas. Además, es equivalente a la encapsulación

pública para clases del mismo paquete.

Page 59: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java () Encapsulación.

Encapsulación

Desde la clase

Desde clase derivada

Desde clase del paquete

Desde clase de otro paquete

private X

en blanco X X

protected X X X

public X X X X

Page 60: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java ()

Gracias a la herencia se permite poder referenciar a un objeto de tipo derivado como tipo base.TipoBase objBase = new TipoDerivado();

Esta utilidad permite poder tratar de la misma forma a todos los elementos derivados (estén en el punto en el que estén dentro de la jerarquía).TipoBase[] array = new TipoBase[cantidad];

array[indice0] = new TipoDerivado1();

array[indice1] = new TipoDerivado2();

Page 61: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java ()

Los objetos derivados se construyen en cascada, empezando desde la clase “más base” hacia abajo. Así puede observarse realmente que cuando se crea un objeto derivado, realmente se crean los objetos base también.

Este comportamiento tiene sus implicaciones cuando se pierde el constructor por defecto: Hay que llamar explícitamente al constructor base.

Existe el objeto “super” que representa la referencia al objeto base que también se creó. Este objeto se puede utilizar para:

Explicitar el uso de un miembro base. Llamar a constructores base desde constructores derivados. Debe

ser la primera instrucción del constructor. Toda clase en Java hereda siempre de la clase java.lang.Object.

¿Qué utilidad puede tener esto?

Page 62: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java ()

Polimorfismo. Una característica de la POO aplicable a

los métodos. Permite ejecutar un código de método

distinto según el objeto que se haya instanciado y al que se referencie.

Necesidades para que se dé en Java: Relación de herencia. Exactamente la misma signatura de método en

ambas clases (padre e hija).

Page 63: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java ()

Clases abstractas. Son clases declaradas con la palabra reservada

“abstract”.public abstract class ClaseDeclaradaAbstracta{ ...

No se pueden instanciar (no se puede hacer new ClaseDeclaradaAbstracta).

Su única finalidad es que otras clases hereden de ellas.

Sirven para poder implementar conceptos que no deban existir físicamente.

Page 64: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java ()

Los métodos puede declararse con la palabra reservada “abstract”public abstract void metodo();

Estos métodos no pueden tener cuerpo (se pone un ‘;’ al final directamente).

Una clase con al menos un método abstracto, debe declararse abstracta.

La característica de la abstracción se propaga por la jerarquía. Los métodos abstractos deberán ser implementados gracias al polimorfismo en clases derivadas.

Page 65: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java ()

Interfaces. El máximo exponente del polimorfismo. Son equivalentes a una clase

completamente abstracta: todos sus métodos son abstractos (sin cuerpo).

Se declaran con la palabra reservada (“interface”).public interface NombreInterfaz{// datos// métodos (sólo signatura)

} Puede tener datos. Los métodos se declaran de forma normal (sin “abstract”) y definen la

signatura a implementar en las clases que implementen la interfaz. Las clases pueden implementar todas las interfaces que quieran. Se

usa la palabra reservada “implements”.public class ClaseConInterfaz implements NombreInterfaz

Page 66: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java ()

La abstracción permite definir interfaces (signaturas de métodos) que gracias al polimorfismo, implementarán las clases derivadas/implementadoras.

Gracias a que un objeto creado como derivado puede referenciarse desde un tipo de datos base (clase abstracta o interfaz), se puede ejecutar código distinto según el objeto derivado sin tener que conocerlo.ClaseAbstracta[] objAbs = new ClaseAbstracta[cantidad];objAbs[indice0] = new ClaseImplementadora1();objAbs[indice1] = new ClaseImplementadora2();

Page 67: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java ()

Métodos y clases “final”. Si se indica en un método, no se podrá “polimorfear”

ese método en clases derivadas.class MiClase{

public final void metodoNoPolimorfeable(){ ...

Si se indica en una clase, no se podrá heredar de dicha clase.final class ClaseNoHeredable{ ...

Por ejemplo, los tipos de datos básicos mapeados en clases son de tipo final.

Page 68: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java ()

Mediante el operador “instanceof” se pueden conocer los tipos abstractos de un objeto que se creó con el operador “new”.boolean b = (objeto instanceof TipoClase);

Page 69: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java ()

Ejemplos de uso de herencia/polimorfismo: Empresa – Empleados. Lectura / Escritura de datos. (XML, PrintWriter

(System.out o en Servlets), etc.) Editor gráfico. Profesor – Conexión – Alumnos. Interfaz humano computador (texto, ventana,

web, ...). Desarrollo de componentes (java.util.*)

java.lang.Object equals, finalize, toString, toString, clone, hashCode

Page 70: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java ()

Consecuencias del polimorfismo: Ampliable: Permite poder añadir nuevos tipos

de datos completamente nuevos. Plug-ins. Reusable: Permite definir elementos que usan

una interfaz y que pueden compilarse una sola vez y durarán para “siempre”.

Flexible: Se puede cambiar el comportamiento de forma muy sencilla (un simple new).

Independencia: Los módulos se independizan. Se podrían incluso desarrollar en paralelo.

Page 71: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java ()

Excepciones (Avanzado) Las excepciones poseen una estructura jerárquica. Para que

un objeto pueda ser lanzado (throw) necesita heredar de la clase java.lang.Throwable.

De esta clase heredan los errores (java.lang.Error) y las excepciones (java.lang.Exception). Los desarrolladores deben capturar las excepciones.

A partir de Exception heredan muchas excepciones pero las java.lang.RuntimeException no hay obligatoriamente que capturarlas.

Las instrucciones catch se ven afectadas por la jerarquía y deben ponerse en orden ascendente, desde las más bajas en la jerarquía a las más altas.

¿Qué pasaría si se pusiese un catch de java.lang.Throwable?

Page 72: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Programación Orientada a Objetos en Java ()

Bloque finally Esta palabra reservada permite indicar un bloque de código que

se ejecutará siempre tanto si se lanza una excepción como si no. Su uso está muy ligado a la liberación correcta de recursos. Por

ejemplo, cerrar un fichero, indicar valores en caso de error etc.public static void main(String[] args){...try{

...}... // catches, pero es opcionalfinally{}

}

Page 73: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Jar Permite conseguir en un fichero englobar distintos

ficheros objeto. Se encuentra en el directorio bin del JDK. Tiene diversas opciones

c: crear un fichero .jar. v: Crear una salida con información más detallada del

proceso. f: Indicar el nombre del fichero. x: extraer ficheros.jar cvf FICHERO.jar FICHEROS_O_RUTAS_CON_.class

En el classpath se pueden indicar o rutas (directorios) o ficheros .jar.

Page 74: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Patrones de diseño Diseños establecidos para poder dar

soluciones a problemas comunes. Usan las herramientas de la

orientación a objetos como base pero pueden ser implementados en cualquier lenguaje orientado a objetos (java, C++, Smalltalk, C#, ...)

Page 75: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Patrones de diseño Singleton

Planteamiento: ¿Cómo puedo conseguir controlar el número de instancias que se van a crear de una clase?

Solución: Control = Encapsulación. Creación = Constructores. Combinación = Constructores privados.

¿Cómo conseguir que se pueda construir desde dentro si no puedo construir? Acceso mediante un método estático. Control mediante variables estáticas (únicas).

Page 76: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Patrones de diseñopublic class Singleton{

private static Singleton instance = null;private Singleton(){}public static Singleton getInstance(){

if (instance == null)instance = new Singleton();

return instance;}

}

Page 77: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Patrones de diseño Observer

Planteamiento: ¿Cómo puedo avisar de cierto comportamiento de una clase a todos aquellos que quieran conocerlo independientemente de quién quiera conocerlo?

Solución: Independencia = abstracción = interfaz. Hay dos elementos:

Generador = Observable. Escuchador = Observer.

Page 78: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Patrones de diseño

Page 79: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Patrones de diseño El patrón Observer en la API de Java.

Page 80: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Acceso a Bases de Datos en Java (I) Uso de la API JDBC (Java Data Base

Control) Se trata de una API que define

interfaces de acceso a datos completamente independientes de la implementación real de dichos datos.

La API engloba a distintos conceptos definidos en el paquete java.sql.

Page 81: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Acceso a Bases de Datos en Java (II)

El acceso a la implementación de datos lo realiza un driver concreto.

Esta carga se realiza usando la API de reflection de Java.Class.forName(“NOMBRE_CON_PAQUETES_DE_LA_CLASE_DRIVER”); Los drivers no son más que clases Java.

El acceso real se realiza a través de conexiones a los datos.

La clase DriverManager se encarga de crear la conexión a partir del driver que se necesite.

DriverManager.getConnection(“URL_DE_CONEXIÓN_SEGÚN_DRIVER”);

El objeto que se crea implementa la interfaz Connection.

Page 82: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Acceso a Bases de Datos en Java (III)

Consultas con JDBC De la conexión a datos se pueden crear

sentencias (statement). Las sentencias se crean con los métodos:Statement createStatement()

PreparedStatement prepareStatement(String)

de Connection.

Page 83: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Acceso a Bases de Datos en Java (IV)

La interfaz Statement permite controlar las sentencias. En su uso más sencillo permite:

Actualización: DELETE, UPDATE, INSERT

int executeUpdate(String) // Devuelve el nº de elementos actualizados

Consulta: SELECT

ResultSet executeQuery(String) // Devuelve una vista

La interfaz PreparedStatement extiende a Statement por lo que permite lo mismo. En su cadena de especificación se usa el carácter ‘?’ para identificar los valores variables. Posee métodos específicos para asignarlos posteriormente (setXXX(int indice, XXX)) en orden 1 a N.

Page 84: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Acceso a Bases de Datos en Java (V)

El recorrido de un objeto que implemente la interfaz ResultSet:

ResultSet rs = XXXXX;while(rs.next()){}

Ahora se pueden ir extrayendo los datos usando los métodos getXXX() con dos posibles parámetros:

Nombre de la columna. Índice de la columna de 1 a N.

Page 85: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Acceso a Bases de Datos en Java (VI)

Acceso a MetaDatos Permite conocer la estructura de la base de datos

(no su contenido). Se usan las interfaces:

DataBaseMetaData: Aporta toda la información acerca del acceso a datos (nombres de tablas, columnas de una tabla, primary keys, foreign keys, ...). Se extrae de la interfaz Connection.DataBaseMetaData getMetaData()

ResultSetMetaData: Aporta información sobre la vista. Se extrae de la interfaz ResultSet.ResultSetMetaData getMetaData()

Page 86: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Swing (I) API que define un extenso conjunto

de clases para manejar componentes visuales a nivel de ventana en el paquete javax.swing y subpaquetes.

Se basa en una API llamada AWT (Abstract Window Toolkit) definida en java.awt.

Gracias a la herencia se puede extender la funcionalidad básica.

Page 87: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Swing (II) Todo componente visual hereda de java.awt.Component.

Define lo básico: Tamaño. Posición. Dibujado. Visibilidad/Habilitación. Eventos:

Teclado Ratón Redimensionado Jerarquía.

Page 88: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Swing (III) Además de haber una jerarquía de clases, AWT, y

por tanto Swing, define una jerarquía de componentes mediante inclusión.

Page 89: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Swing (IV) La clase Container, además de ser un Component, permite almacenar Components. Container tiene un Component. De esta forma se puede hacer que algunos

componentes contengan a otros, que a su vez pueden ser contenedores de otros etc...

Esta relación se crea usando el método add.

Page 90: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Swing (V) Aunque se puede usar AWT, Swing es

todavía más independiente de plataforma. Swing añade nuevas funcionalidades

avanzadas. AWT y Swing poseen inmensidad de

funcionamiento interno, desde control de hilos independientes hasta comunicación nativa con el Sistema Operativo.

Page 91: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Swing (VI) Ventana:

En AWT: java.awt.Frame En Swing: javax.swing.Jframe Realmente la de Swing extiende a la de AWT. Se suele extender de ellas para ampliar su

funcionalidad. Crean un hilo de ejecución paralelo al de la

aplicación. Es un Container por lo que puede contener

a otros componentes.

Page 92: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Swing (VII) Métodos principales:

void setVisible(boolean): Permite visualizar o no un componente.

void dispose(): Cierra la ventana. void setSize(int, int): Asigna un tamaño a

un componente. Width = ancho Height = alto.

java.awt.Dimension getSize(): Permite conocer el tamaño de un componente.

void setEnabled(boolean): Permite habilitar/Deshabilitar un componente.

Page 93: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Swing (VIII) Panel:

En AWT: java.awt.Panel. En Swing: javax.swing.JPanel. En este caso no hay relación herencia. Es el contenedor más sencillo. Su utilidad suele ser la de poder manejar

los componentes que engloba desde un único punto.

Ayuda a organizar los componentes.

Page 94: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Swing (IX) Label:

En AWT: java.awt.Label. En Swing: javax.swing.JLabel. En este caso no hay relación de herencia. Permite visualizar un texto simple. Métodos principales:

void setText(String): Asigna el texto. String getText(): Recoge el texto. void setHorizontalAlignment(int): Sólo en Swing. Asigna el tipo de

alineación horizontal del texto. Los valores están definidos en SwingConstants.

int getHorizontalAlignment(): Sólo en Swing. Recoge el tipo de alineación horizontal del texto.

void setAlignment(int): Sólo en AWT. Los valores están definidos en Label.

int getAlignment(): Sólo en AWT.

Page 95: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Swing (X) Cuadros de texto:

En AWT: java.awt.TextField. En Swing: javax.swing.JTextField. En este caso no hay relación de herencia. Permite introducir un texto de una línea. Métodos principales:

void setText(String): Asigna el texto. String getText(): Recoge el texto. void setHorizontalAlignment(int): Sólo en Swing. Asigna el tipo de

alineación horizontal del texto. Los valores están definidos en SwingConstants.

int getHorizontalAlignment(): Sólo en Swing. Recoge el tipo de alineación horizontal del texto.

void setAlignment(int): Sólo en AWT. Los valores están definidos en Label.

int getAlignment(): Sólo en AWT.

Page 96: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Swing (XI) Áreas de texto:

En AWT: java.awt.TextArea. En Swing: javax.swing.JTextArea. En este caso no hay relación de herencia. Permite introducir un texto de una línea. Métodos principales:

void setText(String): Asigna el texto. String getText(): Recoge el texto. void append(String): Añade texto al final. void insert(String, int): Inserta texto en una

posición.

Page 97: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Swing (XII) Botones:

Los hay de muchos tipos. El tipo básico:

En AWT: java.awt.Button. En Swing: javax.swing.JButton.

En este caso no hay relación de herencia. Métodos principales:

void setLabel(String): Asigan el texto (Deprecated en Swing).

void setText(String): Asigna el texto. String getLabel(): Recoge el texto (Deprecated en Swing). String getText(): Recoge el texto.

Page 98: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Swing (XIII) Botones con estado:

En AWT: java.awt.CheckBox. En Swing: javax.swing.JCheckBox. En este caso no hay relación de herencia. Métodos principales:

void setLabel(String): Asigan el texto (Deprecated en Swing).

void setText(String): Asigna el texto. String getLabel(): Recoge el texto (Deprecated en

Swing). String getText(): Recoge el texto. boolean getState(): Recoge el estado (sólo en AWT).

Page 99: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Swing (XIV) Contenedores de items:

Listas: En AWT: java.awt.List Métodos:

void add(String): Añade un elemento. void remove(String): Elimina un elemento. void remove(int): Elimina un elemento según su posición. int getItemCount(): Indica el nº de elementos que contiene. String getItem(int): Recoge un elemento según su posición. String[] getItems(): Recoge todos los elementos. int getSelectedIndex(): Recoge el índice del elemento seleccionado. void select(int): Indica cúal debe ser el elemento seleccionado. void setMultipleMode(boolean): Permite aplicar la selección múltiple. boolean isMultipleMode(): Indica si permite selección múltiple. String[] getSelectedItems(): Recoge los elementos seleccionados.

Page 100: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Swing (XV) En Swing: javax.swing.JList Para modificar su contenido se le asocia un concepto que implemente

la interfaz javax.swing.ListModel. Existe una implementación por defecto javax.swing.DefaultListModel.

Métodos de DefaultListModel: void add(int, Object): Añade un elemento en una posición. void addElement(Object): Añade un elemento al final. Object get(int): Recoge un elemento de una posición. int getSize(): Indica el nº de elementos. void remove(): Elimina elemento. Recibe o un int o un Object.

Métodos de JList: void setModel(ListModel): Asigna un modelo. int getSelectedIndex(): Indica el elemento seleccionado. int[] getSelectedIndices(): Indica los elementos seleccionados. int getSelectionMode(): Un valor definido en ListSelectionModel.

Page 101: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Swing (XVI) Combo boxes:

Sólo en Swing: javax.swing.JComboBox Para modificar su contenido se le asocia un concepto que implemente la

interfaz javax.swing.ComboBoxModel. Existe una implementación por defecto javax.swing.DefaultComboBoxModel.

Métodos de DefaultComboBoxModel: void addElement(Object): Añade un elemento en una posición. Object getElementAt(int): Recoge un elemento de una posición. int getSize(): Indica el nº de elementos. void removeElement(Object): Elimina un elemento.

Métodos de JComboBox: void setModel(ComboBoxModel): Asigna un modelo. int getSelectedIndex(): Indica el elemento seleccionado. int[] getSelectedIndices(): Indica los elementos seleccionados. int getSelectionMode(): Un valor definido en ListSelectionModel.

Page 102: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Swing (XVII) Layouts: Se definen ciertos conceptos para

poder organizar los componentes dentro de un Container.

Los Layouts definen la interfaz LayoutManager y se relacionan con el Container mediante el métodovoid setLayout(LayoutManager)

El uso del Layout se especifica al añadir el componente al Container mediante las sobrecargas del método add().

Page 103: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Swing (XVIII) java.awt.BorderLayout

Permite ordenar componentes de un Container usando los puntos cardinales:

NORTH, SOUTH, EAST, WEST y CENTER. Estas constantes están definidas en la propia clase

BorderLayout.contenedor.add(componente, BorderLayout.NORTH)

java.awt.FlowLayout Ordena los componentes de un Container de

izquierda a derecha secuencialmente según el orden de inclusión usando el método add().

Page 104: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Swing (XIX) java.awt.GridLayout

Permite ordenar los componentes de un Container en forma de matriz bidimensional.

La propia clase tiene métodos para poder especificar las dimensiones de la matriz.

Los componentes se van asignandoa la matriz de izquierda a derecha yde arriba abajo al utilizar el métodoadd().

Page 105: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Swing (XX) Gestión de Eventos:

Se utiliza el patrón observer pero con implementaciones particulares según el componente y los eventos.

Se define una interfaz XXXListener que se asocia con el generador mediante métodos del addXXXListener o removeXXXListener.

Para cada XXXListener con más de un método, existe una implementación vacía XXXAdapter para facilitar ciertos casos de uso.

Page 106: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Swing (XXI) Eventos comunes (Interfaces asociadas):

java.awt.Component java.awt.event.ComponentListener: Eventos relacionados con lo

general en un componente. java.awt.event.KeyListener: Eventos de teclado. Sólo son activos

cuando el componente tiene el foco. java.awt.event.MouseListener: Eventos de ratón. Sólo referentes al

componente. java.awt.event.MouseMotionListener: Evntos de ratón en

movimiento y drag-and-drop. java.awt.Container

java.awt.event.ContainerListener: Eventos relacionados con la jerarquía de componentes.

java.awt.Window java.awt.event.WindowListener: Eventos relacionados con una

ventana.

Page 107: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Swing (XXII)

java.awt.Button, java.awt.List, java.awt.TextField, javax.swing.JAbstractButton, javax.swing.JComboBox,

java.awt.event.ActionListener: Evento que se lanza cuando se actúa sobre el componente.

java.awt.CheckBox, java.awt.List java.awt.event.ItemListener: Evento que se lanza cuando hay

un cambio de selección. java.awt.TextComponent

java.awt.event.TextListener: Evento relacionado con el cambio del texto.

javax.swing.JList javax.swing.event.ListSelectionListener: Evento

relacionado con el cambio de selección de un elemento.

Page 108: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Ant Herramienta para definir tareas a realizar. El software se puede conseguir en

www.ant.apache.org Simplemente basta con descomprimir. Hay que añadir algunas variables del sistema:

ANT_HOME: El directorio base donde está instalado Ant.

No es mala idea añadir el directorio bin de la instalación de Ant a la variable PATH.

Page 109: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Ant Elementos de un fichero BuildFile de

Ant: Proyecto: Un conjunto de objetivos. project

Atributos: name: El nombre del proyecto. No es obligatorio. default: El objetivo por defecto que se ejecutará. Es

obligatorio. basedir: La ruta sobre la que trabajar. No es

obligatorio.

Page 110: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Ant Objetivo: Es un conjunto de tareas. target

Atributos: name: El nombre del objetivo. Es obligatorio. depends: Permite indicar que un objetivo depende de la

ejecución de otro(s). Los distintos objetivos se indican separados por comas. No es obligatorio.

if: Permite condicionar la ejecución de un objetivo a la existencia de una propiedad. No es obligatorio.

<target name=“objetivo” if=“propiedad”/> unless: Lo mismo que if pero al contrario, se ejecuta a

menos que exista una propiedad. No es obligatorio.<target name=“objetivo”

unless=“propiedad”/> description: Una descripción del objetivo. No es obligatorio.

Page 111: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Ant Tareas: task

<name attrib2=“value1” attrib2=“value2” .../> En los valores se puede hacer referencia a

propiedades definidas con anterioridad. Existen tareas ya creadas, otras opcionales y

es muy sencillo crear nuevas tareas. A cualquier tarea se le puede asignar un

atributo id para poder identificarla/usarla en otros puntos.

Page 112: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Ant Propiedades: Se definen mediante la tarea property

o fuera de Ant. Se les asigna un nombre con el atributo name. Para poder tener acceso a ellas se pueden usar indicando el

nombre entre ‘${‘ y ‘}’. Ant permite acceso a las variables del sistema. Un listado de

las mismas se puede obtener en la documentación de la API de java en el método java.lang.System.getProperties.

Además Ant posee otras propiedades.basedirant.fileant.versionant.project.nameant.java.version

Page 113: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Ant<project name="MyProject" default="dist" basedir=".">

<description> simple example build file

</description> <property name="src" location="src"/> <property name="build" location="build"/> <property name="dist" location="dist"/> <target name="init">

<tstamp/> <mkdir dir="${build}"/>

</target> <target name="compile" depends="init" description="compile the source">

<javac srcdir="${src}" destdir="${build}"/> </target> <target name="dist" depends="compile" description="generate the distribution">

<mkdir dir="${dist}/lib"/><jar jarfile="${dist}/lib/MyProject-${DSTAMP}.jar" basedir="${build}"/>

</target><target name="clean" description="clean up" >

<delete dir="${build}"/> <delete dir="${dist}"/>

</target> </project>

Page 114: Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza  dipina@eside.deusto.es

Ant Las tareas <property>, <typedef> y <taskdef> son especiales y se permite definirlas fuera de un objetivo.

Cuando se añade el atributo description a un objetivo, es como si se declarase público.