java

127
Curso de Java-WebObjects 10 mayo 2002 PAGINA - 46 © IGNIRE SOFTWARE EMPRESARIAL, S.L.L. Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected] INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE El lenguaje de programación Java Introducción El desarrollo de programas en Java, al igual que otros lenguajes, sigue un proceso que consta de los siguientes pasos: Edición del programa fuente. Se denomina programa fuente al programa que se escribe utilizando un lenguaje de programación. En Java es necesario guardar el programa fuente en formato texto y en un fichero o archivo con la terminación “.java” Una vez creado el código fuente es necesario compilarlo. En el proceso de compilación, el compilador comprueba que lo escrito en el archivo de texto se corresponde con las especificaciones del lenguaje. Si pasa esta comprobación, entonces se crea un nuevo archivo con terminación “.class” con el mismo nombre que la clase que se compila, próximo al lenguaje máquina que se denomina código de byte (bytecode). Por el contrario, si hay errores, el compilador avisará de los problemas detectados y dónde se han encontrado. Los códigos de byte obtenidos en la compilación del archivo fuente se interpretan usando la Máquina Virtual Java (JVM). Java es un lenguaje híbrido desde el punto de vista de la generación de productos de software, ya que es compilado e interpretado a la vez. Primero se compila el código fuente y, seguidamente, se interpreta el código de bytes resultantes. El proceso de desarrollo de un programa sigue un conjunto de pasos simplificado: § Especificaciones: Proceso donde se decide qué va hacer el programa. § Diseño: Este proceso plantea una solución a las especificaciones requeridas. § Codificación: En este proceso se implementa o escribe el código fuente mediante un lenguaje de programación. § Pruebas: En este proceso se ejecuta el programa para comprobar que efectivamente realiza las especificaciones correctamente. § Mantenimiento: Proceso para analizar e implementar nuevas especificaciones que se necesitan añadir al producto.

description

introduccion a java

Transcript of java

Page 1: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 46

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

El lenguaje de programación Java

Introducción

El desarrollo de programas en Java, al igual que otros lenguajes, sigue un proceso que consta delos siguientes pasos:

Edición del programa fuente. Se denomina programa fuente al programa que se escribeutilizando un lenguaje de programación. En Java es necesario guardar el programa fuente enformato texto y en un fichero o archivo con la terminación “.java”

Una vez creado el código fuente es necesario compilarlo. En el proceso de compilación, elcompilador comprueba que lo escrito en el archivo de texto se corresponde con lasespecificaciones del lenguaje. Si pasa esta comprobación, entonces se crea un nuevo archivo conterminación “.class” con el mismo nombre que la clase que se compila, próximo al lenguajemáquina que se denomina código de byte (bytecode). Por el contrario, si hay errores, elcompilador avisará de los problemas detectados y dónde se han encontrado.

Los códigos de byte obtenidos en la compilación del archivo fuente se interpretan usando laMáquina Virtual Java (JVM). Java es un lenguaje híbrido desde el punto de vista de lageneración de productos de software, ya que es compilado e interpretado a la vez. Primero secompila el código fuente y, seguidamente, se interpreta el código de bytes resultantes.

El proceso de desarrollo de un programa sigue un conjunto de pasos simplificado:

§ Especificaciones: Proceso donde se decide qué va hacer el programa.§ Diseño: Este proceso plantea una solución a las especificaciones requeridas.§ Codificación: En este proceso se implementa o escribe el código fuente mediante un

lenguaje de programación.§ Pruebas: En este proceso se ejecuta el programa para comprobar que efectivamente

realiza las especificaciones correctamente.§ Mantenimiento: Proceso para analizar e implementar nuevas especificaciones que se

necesitan añadir al producto.

Page 2: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 47

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Lo que hay que tener en cuenta a la hora de desarrollar un producto de software es la siguientemáxima:

legibilidad > corrección > eficiencia

§ Legibilidad: El programa ha de ser fácil de leer y entender.§ Corrección: Un programa debe hacer lo que tiene que hacer, ni más, ni menos.§ Eficiencia: Es una preocupación que en muy pocas ocasiones es relevante. Se suele

medir en tiempo o en cantidad de memoria. Si se necesita eficiencia es preferible buscarla solución en la elección de un algoritmo óptimo y dejar al compilador que realiceotras optimizaciones.

La estructura de un programa debe contener los elementos necesarios y suficientes para que elcompilador los pueda interpretar correctamente.

Identificadores

Un identificador es un nombre para asignar a una clase, una variable, etc. Así, los nombres devariables y métodos empiezan con minúscula. Si se trata de un nombre compuesto, cada palabraempieza con mayúscula. No se utiliza el subrayado para separar las palabras.

Los nombres de clases empiezan por mayúscula. Si se trata de un nombre compuesto, cadapalabra empieza con mayúscula. No se utiliza el subrayado para separar las palabras.

Los nombres de constantes se escriben en mayúsculas. Si el nombre es compuesto, se utiliza elsubrayado para separar cada una las palabras.

Ejemplo: ISControl, gestionarFacturas, MAX_VALOR

Variables

Un programa maneja valores, de hecho, los maneja para modificar su valor. Para poder manejardatos es necesario guardarlos en variables. Una variable guarda un único valor y queda definidapor:

Page 3: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 48

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

• Un nombre que permita referirse a ella.• Un tipo que permita conocer qué valores admite.• Un rango de valores que puede admitir.

Las variables se declaran del siguiente modo:

<tipo> nombreDeVariable;

Ejemplos: char c, int n, int valorEntero, String cadena

Una vez declarada la variable se puede utilizar en cualquier parte del programa poniendo sunombre.

Tipo de datos

En Java las variables se pueden declarar como pertenecientes a un tipo primitivo o como unareferencia a un objeto. Los tipos primitivos definidos en Java son:

byte Entero con signoshort Entero con signoint Entero con signolong Entero con signofloat Real, precisión simpledouble Real doble precisiónchar Carácter unicodebolean Verdadero o falso

Como referencia a objetos un caso especial es la referencia a cadenas de texto u objeto String.

Literales

Además de conocer qué tipos se pueden utilizar, también hay que saber cómo se pueden asignarvalores a esos tipos.

Page 4: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 49

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Enteros

Se pueden escribir enteros en decimal (modo habitual), en octal añadiendo el prefijo 0 u enhexadecimal añadiendo el prefijo 0x. El rango del prefijo en octal va desde 0 a 7. El rango delprefijo en hexadecimal empieza por 0x seguido de dígitos comprendidos entre 0 y 9, ‘a’ y ‘f’ o‘A’ y ‘F’.

A un número entero se le puede poner un prefijo ‘l’ o ‘L’ para indicar que es de tipo long.

Ejemplos: int x = 3, int j = 0007, int k = 0xEF78

Reales

Un real debe tener siempre un punto decimal o en su defecto un exponente indicado por laletra ‘e’ minúscula (‘e’ significa 10 elevado a 3).

Ejemplos: float x = 8.23, float potencia = 4.2345e3

Por defecto si no se especifica, los reales pertenecen al tipo double. Para que se interprete comotipo flota es necesario poner el sufijo ‘f’ o ‘F’. Si se desea taimen se puede poner el sufijo ‘d’ o‘D’ para indicar que es un double.

Boolean

Los dos únicos valores posibles para este tipo de datos son true o false.

Ejemplos: boolean visto = true, boolean comprobado = false

Caracteres

Un carácter es una letra que se escribe entre comillas simples o mediante su representaciónunicode, octal o hexadecimal.

Ejemplos: char c = ‘a’, char = 0x64

Page 5: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 50

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Textos

Un texto pertenece a la clase String definida en la API (Application Programming Interface) deJava y se expresa como un texto en una única línea, entre comillas. Para que se pueda utilizarmás de una línea es necesario aplicar el operador de concatenación +. Un texto puede estarcompuesto de cero o más caracteres.

Ejemplos: String cadena = “”, String texto = “Un momento, por favor…”

Operadores

Al igual que cada uno de los tipos tiene asociado un rango de valores, también se puedenutilizar operadores para realizar operaciones o cálculos.

• Unarios: Un signo + o un – delante de un entero o un real.• Multiplicativos: * multiplica dos valores tanto enteros como reales, / divide el primer

valor entre el segundo los cuales pueden ser enteros o reales, y % devuelve el resto dela división entera.

• Aditivos (+, -): Suma y resta enteros o reales.• Incremental (++) y decremental (--): incrementa o decrementa el valor de una

unidad a una variable.• Relación (>, >=, <, <=): Compara valores según la relación mayor, mayor o igual,

menor y menor o igual.• Igualdad (¡=, ==): Compara si dos valores son iguales o distintos.• Asignación (=, +=, -=, *=, /=, %=): establecen asignaciones a las variables.

Los operadores lógicos son:

• Negación (!): devuelve true si el operador vale false y viceversa.• Y lógico (&&): devuelve false si el primer operador vale false, sino devuelve el valor del

segundo operando. El operador & evalúa los dos operandos.• O lógico (||): devuelve true si el primer operador es true, sino devuelve lo que vale el

segundo operando. El operador | evalúa los dos operandos.

Page 6: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 51

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Expresiones

Una expresión permite realizar tanto operaciones simples como complejas utilizando distintosoperadores. El orden de prioridad de las operaciones en una expresión es:

• Operadores unarios.• Operadores multiplicativos, de izquierda a derecha.• Operadores aditivos, de izquierda a derecha.• Operadores de relación.• Operadores de asignación.

Expresiones aritmético-lógicas: Una operación aritmético-lógica es un expresión que devuelveun valor booleano donde se utilizan operadores aritméticos, de igualdad y de relación. Laprecedencia de los operadores boléanos es menor que la de los operadores relacionales y deigualdad. El orden de prioridad es: la negación, el Y lógico y el O lógico. La prioridad deasignación es la menor de todas.

Los operadores && y || se evalúan en cortocircuito, es decir, cuando se evalúa una expresiónde la forma a && b, primero se comprueba si a vale false. Los mismo ocurre con la expresión dela forma a || b donde se comprueba primero si b es true.

Conversión de tipo

A veces, es necesario hacer una conversión de un tipo a otro y esto es posible siempre que laconversión se haga de un tipo a otro tipo mayor, es decir, que pueda almacenar más valores.Esta conversión, si es necesaria, la realiza el compilador y se denomina conversión ascendente.Si se desea convertir un tipo a otro con menor número de valores, se necesita hacer unaconversión explícita. A esta conversión se le denomina conversión descendente.

Existe un tipo especial de conversión que involucra a los valores de tipo char. Un tipo charsiempre se puede utilizar en una expresión entera.

char c = ‘A’;c = (char) (c + 2); // el valor de c es ahora el carácter C…

Page 7: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 52

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Estructuras de control de flujo

Cuando se ejecuta un programa no siempre se ejecuta de la misma forma siguiendo el mismoflujo de ejecución. Al orden de ejecución de un programa se le denomina flujo de programa yhay un conjunto de estructuras llamadas de control que permiten modificarlo. Se podríanclasificar las sentencias de control en cuatro grupos principales:

• Selección: permite decidir si cierto bloque de sentencias se ejecuta o no.• Repetición: permite ejecutar un bloque de sentencias varias veces.• Salto: permite seguir ejecutando el programa en otro punto distinto según una

condición determinada.• Control de excepciones: permite gestionar errores o situaciones de excepción que

pudiesen ocurrir durante la ejecución de un programa.

Estructura IF

La estructura if se denomina estructura de selección única porque ejecuta o no una sentenciasegún se cumpla o no una determinada condición. Si la condición se cumple, se ejecuta lasentencia o el bloque de sentencias que va con la estructura.

if (condición) {bloque de sentencias;

}

La condición es una expresión que se evalúa a un valor de tipo booleano.

Estructuras IF-ELSE e IF-ELSE-IF

La estructura if-else se denomina de selección doble porque selecciona una entre dos posiblesacciones. Si se cumple una condición se ejecuta un bloque de sentencias sino se ejecuta otrobloque de sentencias diferente.

if (condición1) {bloque de sentencias;

} else (condición2) {bloque de sentencias;

Page 8: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 53

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

}

if (condición1) {bloque de sentencias;

} else if (condición2) {bloque de sentencias;

} else (condición3) {bloque de sentencias;

}

Operador condicional ?:

El operador ?: está relacionado con la estructura if-else y es el único operador que requiere tresoperandos. El primero es una expresión booleana, el segundo es el valor que tomará laexpresión si el primer operando se evalúa a true y el tercero es el valor que tomará la expresiónsi el primer operando se evalúa a false.

(a > b ? a : b );

Estructura SWITCH

La estructura switch es una estructura de selección múltiple y permite la selección de unbloque de sentencias entre múltiples casos de forma similar a la estructura if-else.

switch (expresión) {case valor1:

bloque de sentencias;break;

case valor2:case valor3:

bloque de sentencias;break;

default:bloque de sentencias;

Page 9: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 54

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

break;}

La expresión entre paréntesis es obligatoria y sólo admite tipos enteros o caracter. Delante decada sentencia case sólo pueden ir expresiones constantes, es decir, una expresión que seconoce antes de ejecutar el programa y debe ser del mismo tipo que la expresión del switch.Cada valor de los casos debe ser diferente.

Estructura WHILE

La estructura de repetición while permite que mientras se cumpla una condición se repita unbloque de sentencias.

while (condición) {bloque de sentencias;

}

La condición debe ser una expresión aritmética que devuelva un valor booleano. Los paréntesisson obligatorios. Si la condición se evalúa siempre a true, el bloque de sentencias se ejecutarásiempre. Esto se conoce como bucle infinito y si la primera vez que se evalúa el valor es false,entonces el bloque de sentencias no se ejecuta.

Estructura DO-WHILE

En la estructura de repetición do-while un bloque de sentencias se repite mientras se cumplauna determinada condición.

do {bloque de sentencias;

} while (condición);

La condición cumple las mismas características que en la estructura de while. En la estructurado-while primero se ejecuta el bloque de sentencias y luego se evalúa la condición. Si lacondición es true, se repite el bloque de sentencias y sino, se continúa con el flujo delprograma. Para que no se produzca un bucle infinito tiene que existir dentro del bloque desentencias alguna expresión que cambie la condición a false.

Page 10: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 55

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Estructura FOR

La estructura de repetición for permite repetir un bloque de sentencias un númerodeterminado de veces.

for (inicialización; condición; actualización) {bloque de sentencias;

}

La inicialización es una sentencia que permite inicializar el bucle y sólo se ejecuta una vez en laprimera ejecución del bucle.

La condición permite continuar la ejecución del bucle y se evalúa siempre antes de empezar aejecutar el bucle. Si la condición es true se ejecuta el bloque de sentencias.

Después de ejecutar el bloque de sentencias de bucle y antes de evaluar de nuevo la condiciónse ejecuta la actualización. Cualquiera de los elementos de la sentencia for son opcionales perodeben existir siempre los dos punto y coma (;) que separan las tres partes.

Uso de las estructuras de repetición

• while: El bucle se ejecuta cero o más veces.• do-while: El bucle se ejecuta al menos una vez.• for: Se sabe el número de veces de ejecución del bucle o se realiza un recorrido de una

estructura de almacenamiento.

En Java existen dos estructuras que rompen el flujo secuencial de un programa el cual produceun salto en la ejecución. Estas estructuras son break y continue.

Sentencia BREAK

La sentencia break se utiliza para terminar inmediatamente la ejecución de una estructura derepetición o una estructura switch.

Page 11: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 56

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Sentencia CONTINUE

La sentencia continue sólo puede aparecer dentro de una estructura de repetición. El efectoque produce es que deja de ejecutar el resto del bucle para volver a evaluar la condición delbucle, continuando con la siguiente iteración si el bucle lo permite.

Gestión de excepciones

En la ejecución de un programa se pueden producir situaciones en las que el comportamientono es habitual o previsible. Cuando se produce un error o una situación de excepción elprograma debería afrontar dichas situaciones del siguiente modo:

• Terminar el programa e informar del problema.• Intentar seguir o intentar gestionarla.

Las excepciones son mecanismos que proporciona Java para manejar de forma elegante estasituaciones y la estructura de manejo de excepciones es:

try {bloque de sentencias;

} catch (ClassException e1) {bloque de sentencias;

} catch (ClassException e2) {bloque de sentencias;

} finally {bloque de sentencias;

}

En la estructura try-catch-finally, la parte catch se puede repetir tantas veces comoexcepciones diferentes se deseen capturar. La parte finally es opcional.

Cuando se produce una excepción, se compara si coincide la ClassException del primercatch, si no coincide se pasa al segundo y, así, sucesivamente. Cuando se encuentra unaexcepción que coincide, se ejecuta el bloque de sentencias de ese catch.

Si no hay ningún bloque que capture la excepción lanzada, dicha excepción es lanzada fuera dela estructura try-catch-finally.

Page 12: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 57

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

El bloque finally se ejecuta tanto si try terminó normalmente como si se capturó unaexcepción, es decir, el bloque de sentencias de finally se ejecuta siempre.

Una excepción es una clase. Para crear una excepción se debe derivar de la clase Exception.

Recursividad

Un método puede invocar a cualquier otro método que esté definido, incluido él mismo. A estose le denomina recursividad.

Page 13: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 58

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Ejercicios y cuestiones

• ¿Qué diferencia hay entre los archivos .java y los archivos .class?• ¿Porqué Java es interpretado y compilado a la vez?• Cuáles de estos identificadores son correctos y cuáles no lo son:

comprobarCuentaHacerPedidobuscar_ProductosGenerarRECIBOSVERVALORESMEDIOSgenerarpedidosdeVentasVALOR_CALCULADOGestionar_Almacen

• ¿Cuántas conversiones de tipo existen?.• ¿Son correctas las siguientes conversiones?

int n;float x;

• x = (float)n;• n =(int)x;

double y;boolean a;

• a = (boolean)y;

Page 14: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 59

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Clases y Objetos

Las piezas arquitectónicas básicas de un programa orientado a objetos son las clases y losobjetos. Un programa es, en esencia, una colección de objetos que se crean, interactúan entre síy desaparecen cuando no se necesitan. Un programa puede ser muy complejo pero esacomplejidad es más manejable si se decompone en partes más sencillas, es decir, objetos. Larelación entre una clase y un objeto es que una clase es una descripción de un tipo de objeto.

La solución a un problema de software se puede enfocar de diferentes modos: Utilizandotecnologías procedimentales y estructuradas mediante lenguajes estructurales (BASIC, Pascal, C,COBOL) o utilizando la tecnología orientada a objetos mediante lenguajes orientados a objetos(C++, Objective-C, Java).

El método estructurado soluciona los problemas de software mediante estructuras de datos, porun lado, y funciones o procedimientos que tratan esos datos, por otro. Sin embargo, el métodoorientado a objetos soluciona los problemas de software mediante la definición e interacción deobjetos, los cuales tienen unos atributos internos donde se almacenan los datos y unasfunciones internas (llamadas métodos) que manipulan los atributos.

Esta sección se centrará en explicar cómo crear un programa mediante la tecnología orientada aobjetos.

Un programa utiliza una serie de objetos. La descripción (modelo) de un tipo de dichos objetoses un clase, por lo tanto, una aplicación se compone de una serie de clases que producenobjetos que interactúan entre ellos.

En su forma más sencilla, una clase se define con la palabra reservada class, seguida del nombrede la clase y un bloque de definición que se delimita por llaves.

class NombreDeClase {definición de la clase;

}

class Cliente {String nombre;int codigo;

void calcularFacturacion() {

Page 15: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 60

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

…}

}

Una vez que la clase está disponible, se pueden instanciar (crear) objetos de dicha clase–objetos e instancia de clase son sinónimos.

Para definir un tipo de objeto se pone el nombre de la clase seguido del nombre del objeto quese creará.

<NombreDeClase> nombreDeObjeto;

Ejemplo: Cliente unCliente;

Esta expresión es sólo una declaración, con ella todavía no se ha creado el objeto (en memoria),simplemente se está diciendo qué tipo de objeto se va a crear.

Para crear un objeto se debe usar el operador new seguido del nombre de la clase que crea elobjeto seguido de dos paréntesis (uno de apertura y otro de cierre).

nombreDeObjeto = new <NombreDeClase>();

Ejemplo: unCliente = new Cliente();

Ahora <nombreDeObjeto> es una referencia al objeto recién creado mediante la definición dela clase a la que pertenece –nombreDeObjeto es una referencia de un objeto de tipoNombreDeClase.

Resumiendo, una clase es una descripción de un tipo de objeto (una categoría) y los objetos sedefinen del siguiente modo:

Por una parte, se debe guardar la información del objeto (sus atributos) que tienen que serdeclarados poniendo el tipo del valor del atributo seguido del nombre que se quiere utilizar.

Por otra parte, se debe poder definir el comportamiento del objeto en sus interacciones conotros objetos. Este comportamiento se define mediante los métodos (funciones) de la clase.

Page 16: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 61

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

class Alumno {String nombre;String apellidos;int identificador;

public void setNombre(String unNombre) {this.nombre = unNombre;

}

public String getNombre() {return this.nombre;

}}

Una clase se representa gráficamente como un cuadrado con el nombre de la clase en la partesuperior, a continuación los nombres de los atributos y su tipo, separados por dos puntos y, acontinuación, los métodos y el tipo devuelto separados por dos puntos.

Alumno

nombre:Stringapellidos:Stringidentificador:int

setNombre(String):void

getNombre():String

En una clase se distinguen dos partes: su declaración (class <NombreDeClase>) y sudefinición, el bloque definido entre llaves.

Page 17: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 62

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Uso de atributos e invocación de métodos

Un objeto se compone de atributos y métodos y para poder acceder a estos atributos y métodosse usa el operador punto (.) del siguiente modo: nombre de la referencia del objeto que sequiere usar seguido de un punto y seguido el atributo o método que se quiere invocar. El accesoa un método requiere además los paréntesis de apertura y cierre y una lista de parámetrosdentro de los paréntesis separados por comas, si es necesario.

<NombreDeObjeto>.<atributo | método(lista de parámetros separados por comas)>;

Referencia null

Una referencia a un objeto puede no tener asociada instancia alguna y esto se puede dar en doscircunstancias: inmediatamente después de declarar la referencia o declarándolo explícitamente.Existe un valor especial, null, que sirve para identificar cuándo una referencia a un objeto notiene asociada ninguna instancia. No se puede acceder ni utilizar ningún atributo ni ningúnmétodo de una referencia a un objeto que sea null porque el objeto no existe.

Alumno alumno1; // Ahora el objeto ‘alumno1’ de la clase Alumno es null…

alumno1 = new Alumno(); // ahora existe la referencia a alumno1…alumno1.nombre = “David”;alumno1.setNombre(“David”);…

Referencias compartidas

Un objeto puede tener varias referencias (llamadas alias), es decir, pueden existir varios nombrede objetos que apunten al mismo objeto en la memoria. Pero se debe tener cuidado con el usode alias puesto que, si puede, modifica el valor de un atributo desde cualquier referencia.

Alumno a1; // se ha referenciado un objeto a1 de tipo Alumno…Alumno a2; // se ha referenciado un objeto a2 de tipo Alumno…

a1 = new Alumno(); // creado el objeto en memoria y apuntado por a1…a2 = a1; // la referencia a2 apunta al mismo objeto que la referencia a1…

Page 18: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 63

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

El operador = no duplica objetos, sólo valores de tipo primitivo

Ciclo de vida de un objeto

Cuando los objetos se quedan sin referencia (valor null) dejan de ser accesibles por el programay, a partir de ese momento, el sistema puede reclamar recursos (memoria ocupada por el objetosin referenciar).

Ciclo de vida de un objeto

1. Definición2. Creación3. Uso4. Destrucción

Atributos

Los atributos son los elementos que definen el estado de un objeto y se definen de la mismaforma que las variables, pero en el ámbito del bloque de una clase. Así, cualquier método quedescribe un comportamiento del objeto puede acceder a cualquiera de sus propios atributos.

Existen dos tipos de atributos: atributos de clase y atributos de instancia. Los atributos de claseexisten independientemente de los objetos y los de instancia (o de objeto) están asociados alciclo de vida del objeto al que pertenecen. Los atributos de instancia se crean cuando se crea elobjeto. Cada objeto que se crea tiene asociada una copia propia de sus atributos, declarados enla clase a la que pertenece. Estos atributos de instancia se pueden usar mientras exista el objetoy la referencia a él, y desaparecen cuando desaparece el objeto.

Un atributo se define de la siguiente forma:

<acceso> <tipo> nombreDeAtributo = valorInicial;

Page 19: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 64

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Ejemplos:

public String apellidos = “Martínez”;protected int x = 0;private unCliente;

El acceso puede ser de paquete, público, protegido o privado. El acceso de paquete norequiere ningún calificador.

El tipo puede ser, o bien el identificador de un tipo simple o bien un identificador de una clasepredefinido en Java o hecho a medida.

Opcionalmente se puede usar el operador de asignación = seguido de un valor apropiado.

Dentro de una clase se pueden utilizar atributos que sean referencia a objetos de la misma clase.

Métodos

Los métodos son funciones o procedimientos que determinan el comportamiento de un objeto.Los métodos se declaran y definen en la clase de tal modo que una referencia a un objeto deuna clase dada tiene acceso a los métodos definidos en la clase y los podrá invocar.

Los métodos se pueden agrupar del siguiente modo:

• Métodos de consulta: sirven para extraer información de un objeto.• Métodos modificadores: sirven para cambiar valores de los atributos de un objeto.• Métodos operacionales: sirven para establecer comportamientos de un objeto.

Un método tiene dos partes diferenciadas: la cabecera y el cuerpo.

Cabecera de un método

• Accesibilidad: puede ser de paquete, público, protegido o privado.• Tipo de valor devuelto: si el método devuelve un valor, se pone el tipo de valor a

devolver sino se pone la palabra reservada void.• Nombre del método: es el identificador con el que se invoca al método.

Page 20: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 65

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

• Parámetros: son los valores encerrados entre paréntesis que necesita un método parasu ejecución.

• Tipo de excepción: se debe indicar la excepción que maneja el método si éste declaraqué tipo dispara.

Los métodos se deben identificar unívocamente por una signatura o firma. La signatura es laforma de describir el método en función del tipo de valor devuelto, su nombre y los parámetrosque recibe. Una signatura es una tupla de la forma:

<tipo, nombre, (TipoDeParámetros)>

La accesibilidad del método y el tipo de excepción manejado no forman parte de la signatura.

Cuerpo de un métodoEl cuerpo de un método es el conjunto de sentencias que se ejecutan cuando se invoca y vaencerrado entre llaves “{}”.

Para invocar a un método existen tres mecanismos distintos: Fuera de la clase en la que sedefine el método. En este caso, se pone el nombre de un objeto que tenga definido el método,un punto y seguidamente el nombre del método que se desea invocar (y sus parámetrosasociados).

objeto.método(argumentos);

Ejemplos:

unCliente.calcularFacturacion();unAlumno.setNombre(“David”);

En caso de que se trate de un método de clase (un método static), se pone el nombre de la claseque define el método, un punto y el nombre del método a invocar.

clase.método(argumentos);

Ejemplos:

Math.cos(0.9567);System.out.println(“Error de cálculo.”);

Page 21: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 66

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Por último, cuando el método se utiliza de la misma clase que lo define, basta con ponerdirectamente el nombre del método.

método(argumentos);

Cuando se invoca un método, ocurre el siguiente proceso:

1. Se calculan los valores de los argumentos en el punto en el que se invoca al método.2. Se cargan los parámetros con los valores de los argumentos.3. Se ejecuta el bloque de sentencias hasta que se alcanza la palabra reservada return

o, simplemente, se acaba el bloque.4. Si el método devuelve un valor, se sustituye la invocación por el valor devuelto.5. Se continúa en el punto siguiente a la invocación del punto desde donde se llamó al

método.

Los valores con los que se invoca el método constituyen los argumentos de llamada. Estosvalores de llamada llegan al método en los parámetros que se definen en la cabecera delmétodo, y se pueden poner tantos parámetros como se desee, separados por comas.

Si un método devuelve un valor en la cabecera del método, es necesario poner qué tipo de valorse va a devolver y, una vez ejecutado el bloque de sentencias, el valor de retorno tiene quecoincidir con el tipo declarado en la cabecera.

Una excepción en un método se declara del siguiente modo:

<acceso> <tipo> nombreDeMétodo (parámetros) throws <tipoDeExcepcion>

Autorreferencia

Desde fuera de un objeto se pueden usar sus atributos y métodos mediante su referencia de laforma nombreDeObjeto.atributo, nombreDeObjeto.método(parámetros) pero tambiénse pueden usar dentro del propio método mediante la palabra reservada this. Esta palabra esopcional, aunque la establece el compilador de forma automática.

Page 22: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 67

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Variables locales

Los bloques que definen el cuerpo de un método están delimitados por llaves y estánconstituidos por sentencias válidas separadas por punto y coma “;”. El bloque se ejecuta hastaencontrar un return o hasta que no haya más sentencias para ejecutar. Dentro de un método sepueden declarar variables, las cuales son locales al método (son conocidas sólo por el métododonde han sido declaradas). Las variables locales aparecen cuando se ejecuta el método ydesaparecen cuando se acaba su ejecución. Los parámetros se comportan como variables.

El ámbito de las variables puede ser estático, si existe en la definición del cuerpo, o dinámico,cuando aparece en la ejecución del método.

El ámbito estático de un método tiene, inicialmente, todos los identificadores definidos en suclase.

El ámbito dinámico se crea al invocar un método cuando el método termina, desaparece elámbito dinámico.

Sobrecarga

Todos los métodos deben tener diferente signatura. Esto permite que existan varios métodoscon el mismo nombre, pero con diferentes parámetros o diferente tipo de retorno.

Criterios para definir métodos:

• Un método debe describir un concepto único y detallado.• Un método debe aumentar la legibilidad del programa.• Un método no debe ser demasiado largo.• Un método se debe comentar adecuadamente.• Un método debe indicar lo que hace. Para ello es norma utilizar verbos que describa el

comportamiento.• Un método no debe tener demasiados parámetros.

Page 23: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 68

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Constructores

Para crear un objeto se utiliza el operador new seguido del nombre de la clase y dos paréntesis,uno de apertura y otro de cierre. Esta sentencia invoca, por defecto y automáticamente, alconstructor del objeto. Básicamente, el constructor del objeto pide recursos al sistema paraconstruirlo, genera sus atributos y los inicializa a sus valores por defecto.

Siempre existe un constructor por defecto pero también se pueden crear constructoresespecíficos. Para definir un constructor, se pone el tipo de acceso, el nombre de la clase, losparámetros que acepta, el control de excepciones, si los utiliza, y un bloque de sentencias.

<acceso> nombreDeClase (parámetros) excepciones {bloque de sentencias}

Este bloque sustituye al proporcionado por defecto. Las posibles razones para definir unconstructor son las siguientes:

• Se necesitan parámetros para establecer el estado inicial del objeto.• Instancias que se deben crear correctamente.• Se necesita un constructor no público.

A veces, es necesario disponer de diferentes modos de construir un objeto, es decir, se necesitandiferentes constructores con distintos parámetros.

Se permite que los constructores se invoquen unos a otros, pero debe cumplirse el requisito deque la primera línea del constructor sea la palabra reservada this() como referencia, seguida delos parámetros del constructor que se desea invocar.

Estructura de un programaUn programa utiliza los elementos que proporciona un lenguaje de programación para que seejecuten órdenes (sentencias) correctamente y realicen procesos bien definidos y concretos. Unprograma hecho en Java necesita una estructura lógica que contiene un conjunto mínimo deelementos para que funcione correctamente, de hecho, todos los programas hechos en Javanecesitan una clase que contenga el método main() y es de la siguiente forma:

Page 24: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 69

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

<acceso> class NombreDeClase {

public static void main(String[] args) {bloque de sentencias;

}}

Para ver el resultado de un programa, es necesario compilarlo y ejecutarlo. Si el programa noestá correctamente escrito, al compilarlo, el compilador detectará los errores encontrados eindicará dónde se encuentran.

Elementos de Clase

Hasta ahora, todos los atributos y métodos declarados están disponibles en cuanto se crea elobjeto de una clase, pero también hay métodos que están disponibles en cualquier momento,simplemente, basta con anteponer el nombre de la clase. Otro caso particular es el métodomain() que el intérprete invoca sin tener objetos. La particularidad de estos métodos es queaparece la palabra reservada static delante del método.

Los atributos y métodos precedidos por la palabra static se denominan elementos de clase ysólo existe uno de dichos elementos para todos los objetos. Por tanto, los elementos de claseson compartidos por todas las sentencias de la clase. Si se modifica un atributo de clase, todaslas instancias de la clase se ven afectadas por la modificación.

Page 25: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 70

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Los elementos de clase son necesarios en los siguientes casos:

• Definición de constantes.• Variables únicas y comunes para todos los objetos de una clase.• Método requeridos sin objetos.• Métodos que sólo usan elementos de clase.• El método especial main(). Este método es necesario antes de construir objeto alguno.

Valor inicial de los atributos

Los atributos de la clase pueden tomar un valor inicial en la misma línea de su declaración.

class NombreDeClase {<tipo> nombreDeAtributo = valor;….

}

El valor por defecto para cualquier atributo (sin ser asignado explícitamente) es false, ‘\u0000’,0 o null, dependiendo del tipo.

Ámbito de clase

Cuando se define una clase, después de la palabra reservada class y el nombre, se escribe elbloque de sentencias. Dicho bloque es de declaración, en el que se pueden encontrar atributosy métodos. Éste genera un ámbito de declaración, en el cual aparecen los identificadores de losatributos y la signatura de los métodos. Este ámbito es visible desde los diferentes bloquesinternos que aparezcan en la clase, es decir, desde los bloques de código de los métodos. Desdeestos bloques se pueden usar elementos del ámbito superior, es decir, desde cualquier bloquede un método se pueden usar los atributos y métodos declarados en el ámbito.

La diferencia básica con el ámbito de un método es que en un método, un identificador devariable local o parámetro, puede utilizarse desde el momento de su declaración hasta el finaldel bloque del método; mientras que en una clase, un identificador de atributo o de métodopuede utilizarse en todo el bloque en el que se encuentra la declaración.

Page 26: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 71

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Derechos de acceso

Una modificación arbitraria del estado de los valores de un atributo puede dar lugar ainconsistencias semánticas o comportamientos indeseados del objeto. Por lo tanto, se hacenecesario controlar el acceso a los atributos de los objetos.

Java proporciona mecanismos de acceso a los componentes de una clase, de forma que esposible ajustarlos a las necesidades semánticas de los objetos. Estos mecanismos utilizan unapalabra reservada del tipo de acceso que se antepone a la declaración de los atributos ymétodos.

<acceso> <tipo> nombreDeAtributo;

Mecanismos de acceso:

• De paquete: no es necesario poner ninguna palabra reservada porque el acceso a loscomponentes es libre dentro del paquete en el que se definen las clases.

• Público: se antepone la palabra reservada public y el acceso no está restringido.• Protegido: se antepone la palabra reservada protected y este tipo de acceso permite

que los elementos protegidos sólo puedan ser usados dentro de la clase que los define,a las que la extienda o cualquier otra del paquete.

• Privado: se antepone la palabra reservada private y este tipo de acceso sólo lo puedenutilizar aquellos elementos dentro de la clase que los define, lo que impide suinvocación desde el exterior.

Especificación y realización

Una clase posee una parte pública, llamada interfaz, que indica lo que hace la clase y otrainterna, llamada realización, que es sólo accesible desde ella misma y define cómo se hacen lascosas.

Esta distinción entre interfaz y realización da soporte a la modificabilidad, puesto que loscambios en la realización no suponen ningún cambio en el uso de la clase o de los objetos, porlo que no se modifica el resto del código.

Page 27: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 72

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Encapsulación

La clase es la unidad de encapsulación básica y se maneja como un elemento. Se denomina claseservidora a la que define un servicio (método) y clase cliente a la que consume un servicio, esdecir, invoca un método.

Paquetes

Los paquetes son agrupaciones de clases, interfaces y otros paquetes normalmente relacionadosentre sí. Los paquetes proporcionan un mecanismo de encapsulación de mayor nivel que lasclases.

Para construir un paquete, se añade a cada fichero que forma parte del mismo una declaraciónde paquete de la forma:

package NombreDepaquete;

package java;

El nombre del Paquete sigue las mismas normas que los nombres de clases. Todos loselementos contenidos en el fichero en el que aparece la declaración package formarán parte delpaquete NombreDePaquete.

La declaración de paquete debe aparecer sólo una vez, por lo que no es posible que una clase ointerface formen parte de dos paquetes simultáneamente.

Importación y uso de paquetes

Cuando se requiere algún componente de un paquete, se añade una declaración deimportación, mediante el uso de la palabra reservada import, que puede ser de las siguientesformas:

Page 28: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 73

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Importación de un paquete completo: se escribe la palabra import seguida del nombre delpaquete que se desea importar. Para utilizar un elemento perteneciente al paquete, se debecalificar mediante el operador punto (.) de la siguiente forma:

NombreDePaquete.elemento.

java.lang

Importación de todos los elementos de un paquete sin uso cualificado: se utiliza la palabraimport seguida del nombre del paquete, un punto (.) y un asterisco(*) de la siguiente forma:

<import> NombreDePaquete.*;

import java.lang.*;

Importación de un único elemento: se escribe la palabra import seguida de del nombre delpaquete, un punto (.) y el nombre del elemento a importar.

<import> NombreDePaquete.elemento;

import java.lang;

Nombres de paquetes

Para evitar conflictos entre los distintos paquetes, se puede utilizar el nombre de la empresa dedesarrollo del paquete de la siguiente forma:

package com.ignire.<NombreDePaquete>

Los derechos de paquete no se modifican porque estén contenidos en otro paquete, es decir,agrupar paquetes no modifica los derechos de acceso.

Clases internas

Una clase interna es aquella cuya definición está dentro de otra clase. Una clase con una claseinterna se denomina clase externa o clase contenedora.

Page 29: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 74

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Existen algunas restricciones de las clases internas. Los nombres de los miembros de la clasecontenedora tiene que ser diferentes de los de la clase interna. Además, una clase interna nopuede contener ningún miembro estático. Tampoco se puede construir un objeto de la claseinterna sin tener un objeto de la clase contenedora.

Con las clases internas se introduce una nueva sintaxis en el nombrado de las clases, en eloperador new y en la autorreferencia this. Si se quiere utilizar directamente la clase interna paracrear un objeto, se debe hacer de la siguiente forma:

NombreClaseContenedora.NombreClaseInterna

Si la clase interna no se ha declarado privada, se puede crear un objeto de esa clase de la forma:

referenciaObejtoClaseContenedora.new NombreClaseInterna();

Si dentro de la clase interna se desea hacer una referencia al objeto actual, se debe hacer unareferencia al objeto actual de la clase contenedora de la siguiente forma:

NobreClaseContenedora.this;

Clases locales y anónimas

Las clases locales son aquellas que se definen dentro de un método y, por lo tanto, son visibles yutilizables en dicho método. Estas clases son muy útiles para crear clases adaptadoras.

Las clases anónimas son clases locales sin nombre y sólo puede existir una instancia, ya que notiene constructor.

Las clases locales y anónimas son habituales cuando se trabaja con archivos o interfaces gráficasde usuario (IGU).

Page 30: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 75

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Clases predefinidas

Java consta de un conjunto muy extenso de clases predefinidas que abarcan desdecomunicaciones hasta multimedia o tecnología de conexión a fuentes de datos. A continuación,se explicarán las clases que se usan habitualmente en la construcción de un programa.

• Envoltorios (Wrappers).• Clase Math.• Clase String.

EnvolventesLos tipos predefinidos en Java son tipos simples pero, por conveniencia, existen una clasespredefinidas denominadas envolventes (wrappers) que representan a los tipos simples. Estasclases envoltorios proporcionan métodos para la conversión, impresión y descripción de tipossimples, y para generar automáticamente una instancia cuando se usan tipos simples encontextos donde se esperan objetos.

Clase MathLa clase Math contiene constantes y métodos de uso común en matemáticas. Todas lasoperaciones que se llevan a cabo son de tipo double.

Clase StringLa clase String se usa para manejar cadenas de texto de cualquier longitud. Un objeto String sepuede crear a partir del un valor de cadena literal como una secuencia de caracteres entrecomillas dobles, o con el operador habitual new.

Extensión de clases

Java aporta dos mecanismos básicos para construir nuevas clases a partir de otras ya existentes:la composición y la extensión. La composición es la creación de una clase agrupando objetos deotras clases existentes.

En la extensión de clases intervienen dos conceptos importantes: la herencia y el polimorfismo.La herencia permite crear una nueva clase a partir de la definición de una clase ya existente. Elpolimorfismo permite que un objeto pueda ser usado con referencias de varias clases.

Page 31: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 76

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

El polimorfismo requiere un mecanismo de resolución de invocación de métodos, conocidocomo ligadura o enlace dinámico.

Composición

La composición es el agrupamiento de uno o varios objetos para componer una nueva clase, porlo tanto, las instancias de la nueva clase contendrán uno o varios objetos de otras clases.

La composición es una relación “tiene-un”, en la que un atributo de una clase contenedora esun objeto de otra clase denominada contenida. Un objeto de la clase contenedora puede usar laparte pública de una clase contenida.

La composición introduce la delegación como mecanismo de acceso a las clases contenidas:cuando se llama a un método de la clase contenedora, éste se puede delegar llamando a unmétodo de la clase contenida.

Herencia

La POO introduce la capacidad de extender clases produciendo nuevas definiciones de clasesque heredan todos los atributos y el comportamiento de la clase extendida. La clase original sedenomina clase base, padre o superclase. La nueva clase que se define como una extensión sedenomina clase derivada, hija o subclase. La extensión de una clase se denomina herencia, yaque la subclase hereda todos los atributos y métodos de la clase base que se extiende. Laherencia permite la reutilización

La herencia es una relación “es-un” entre clases.

Page 32: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 77

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

La sintaxis para extender una clase es del siguiente modo:

class NombreDeClaseDerivada extend NombreDeClaseBase {…

}

Compatibilidad de tipos

La extensión produce compatibilidad ascendente, es decir, una referencia de una clase basepuede contener un objeto de una clase derivada.

Jerarquía de herencia

Cualquier clase puede ser clase base para ser extendida y, a su vez, la clase extendida puede serbases para ser extendida de nuevo. Por lo tanto, la relación de herencia es transitiva y define unajerarquía. Gracias a esta propiedad, se puede hacer conversión ascendente a cualquier nivel dela jerarquía, es decir, una referencia de una clase puede referenciar una instancia de dicha claseo cualquier clase extendida a partir de ella.

La conversión descendente también es posible y una referencia se puede cargar con instanciasde clases antecesoras siempre que el objeto contenido en la clase superior provenga de unaclase en la misma línea de herencia. Es decir, la herencia descendente sólo será posible si lainstancia fue creada a partir de una clase heredada.

En Java, todas las clases están relacionadas en una única jerarquía de herencia, ya que toda claseo bien hereda explícitamente de otra, o bien hereda implícitamente de la clase Object. Estaextensión implícita ocurre cuando no se utiliza la palabra reservada extends en la definición dela clase.

Por lo tanto, cualquier objeto puede ser instancia de la clase Object, es decir, la siguienteexpresión es perfectamente válida.

Object x = new UnaClase(…);

Para cualquier referencia x, la condición x instanceof Object se evaluará a true excepto en elcaso que x sea null, en cuyo caso se evaluará a false.

Page 33: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 78

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Ámbitos y visibilidad

El ámbito de las clases derivadas es igual que el de las clases normales, a diferencia de que sehereda el ámbito de la clase base, por lo que se pueden usar los atributos y métodos de la clasebase, excepto los calificados como privados.

El derecho de acceso protegido restringe la visibilidad para la clase que la define, sus derivadas ylas clases del mismo paquete. Por lo tanto, los miembros protegidos son públicos para las clasesderivadas y las clases del mismo paquete, y privados para el resto.

Reescritura

Es posible modificar la parte que se hereda en la clase derivada. A esta modificación se ledenomina reescritura de los elementos de la clase base. Formalmente, la reescritura es lacapacidad que tiene una clase derivada para redefinir un elemento no estático de la clase base.Se puede definir tanto un atributo con el mismo nombre que uno de la clase base como unmétodo con la misma firma que uno de la clase base.

Los elementos de la clase estáticos no se pueden rescribir, puesto que no van a formar parte delas instancias de la clase, quedan inaccesibles a los objetos de las clases derivadas.

En la reescritura se puede ampliar el nivel de acceso, haciéndolo más público pero no másprivado. Es decir, un miembro privado puede pasar a ser protegido, de paquete o público, peroun miembro protegido sólo puede hacerse público, nunca privado o de paquete.

Page 34: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 79

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Derecho en la clase base Derecho en la clasederivadaprivadoprotegidopúblicopaquete

protegido protegidopúblico

público públicopaquete protegido

públicopaquete

Las ligaduras dinámicas permiten que el método invocado se determine no por la declaración dela referencia, sino por la clase real de la instancia contenida, lo que sólo puede determinarsedinámicamente en la ejecución del programa.

Es muy común que la realización de los métodos de la clase base se invoquen en métodosreescritos en la clase derivada. Para ello se dispone de la referencia super, que permite accedera los métodos y atributos de la clase base. Aunque la herencia establece una jerarquía que puedetener muchos niveles, una clase sólo dispone de sus elementos y los elementos de la clase base(no existe el concepto de supersuperclase), es decir, una clase derivada no tiene acceso directoa los elementos de la clase base de la que hereda, así un intento de acceso de la formasuper.super.elemento es ilegal. En realidad, super funciona como una referencia pero, no es tala otros efectos.

El uso de la reescritura es muy útil cuando la clase derivada quiere ampliar una determinadafuncionalidad de la clase base y se necesita añadir código sobre la misma interfaz pública de laclase padre.

Pero, a veces, es necesario disponer de un mecanismo de cierre de reescritura que impida queuna clase derivada modifique algún método o atributo. Este mecanismo consiste en anteponerla palabra reservada final a un método o atributo. Con este mecanismo, los atributos seconvierten en constantes y los métodos no pueden ser sobrecargados. El calificador final puedeser aplicado en los siguientes elementos:

Page 35: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 80

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

• Una variable que impedirá que se cambie su contenido (se convierte en constante).• Un método que impedirá que se sobrecargue.• Un parámetro de un método que impedirá que el método cambie su valor.• Una clase que impedirá que se herede de ella.

Los usos de final son seguridad y rendimiento. Por seguridad, porque un elemento final no sepuede modificar y, por rendimiento, porque el compilador puede optimizar el código deelementos declarados final.

Constructores

En Java, todas las clases provienen de la clase base Object, por lo tanto, se puede decir quetodas las clases en Java son heredadas. Al crear un objeto de una clase derivada primero seconstruye la parte de la clase base y después la parte de la clase derivada. Si la clase base esderivada a su vez, se seguirá el mismo orden, hasta llegar al constructor de Object.

Este proceso se complica cuando se añaden constructores a las clases. Así, cuando una clasecontiene un constructor, primero se construye la clase base, luego la clase derivada y después seejecuta el código del constructor. Ahora bien, una clase puede tener varios constructores, si unode ellos usa this para invocar a otro, entonces se pasa a construir el objeto con el segundoconstructor. Cuando termina este segundo constructor, se pasa a ejecutar el código del primero.

También existe la posibilidad de que la clase base tenga uno o varios constructores definidos. Sise han añadido constructores, se intentará invocar un constructor sin parámetros. Si todos losconstructores tienen parámetros, la clase derivada tendrá que invocar explícitamente a uno deellos. Esto obliga a añadir en la clase derivada un constructor en el que la primera sentencia seasuper(parámetros). Un constructor puede invocar en la primera sentencia de su cuerpo a this()o a super(), pero sólo a uno de ellos.

Resumen de la fase de construcción de un objeto:

• Se asignan el valor por defecto a los atributos.• Se invoca el constructor de la clase.• Se invoca explícitamente como primera sentencia super(parámetros).• Si no se pone nada se invoca al constructor de la clase base mediante super(), sin

parámetros excepto si se llama con this(). Si en la clase base hay constructores

Page 36: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 81

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

explícitos pero no hay un constructor sin parámetros, el compilador dará error. Elconstructor por defecto desaparece al haber uno o varios explícitos. Es decir, al añadirun constructor en una clase desaparece su constructor, por defecto, y también losconstructores, por defecto, de las clases derivadas.

• La cadena de constructores sigue hasta la clase Object.

Polimorfismo

En una jerarquía de herencia existe compatibilidad ascendente, por ello, a una referencia se lepuede asignar un objeto de la clase declarada o de cualquier clase derivada de ella. También esposible invocar un método del objeto para que se ejecute el correspondiente a la clase a la quepertenece el objeto. El polimorfismo consiste en que un objeto puede ser asignado a unareferencia declarada de la misma clase o de cualquiera de las clases base, pero sucomportamiento viene determinado por la clase que se instancia, que es independiente de lareferencia usada.

Herencia forzada

La herencia puede forzarse a través de las clases abstractas. Para declarar una clase abstracta seantepone la palabra reservada abstract antes de la palabra reservada class de la siguiente forma:

abstract class NombreDeClase {…

}

Una clase abstracta no puede ser instanciada, aunque pueden existir referencias con objetos declases derivadas por compatibilidad ascendente.

Implementaciones parciales

En una clase abstracta y, sólo en ellas, pueden aparecer métodos sin cuerpo. A estos métodos seles denomina también abstractos y deben llevar el calificativo abstract delante de la cabecera.

Page 37: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 82

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Con ello se consigue tener realizaciones parciales de objetos cuya codificación no existe, lo queobliga a que todas las clases derivadas las implemente ofreciendo una parte común en suinterfaz.

Si una clase derivada no redefine todos los métodos abstractos, se considera abstracta y debedeclararse como tal (en caso contrario, el compilador lanzará un error).

Criterios de diseño

Hay que tener en cuenta que una clase tiene tres interfaces:

• interfaz para la herencia donde se deben declarar los atributos y métodos comoprotegidos.

• interfaz de paquete donde se califican los atributos y métodos como paquetes.

• interfaz externo o público donde se califican los atributos y métodos como públicos.

Se recomienda calificar los atributos como private. Si no se requiere reutilización, serecomienda la composición con delegación en los objetos componentes. Si no hay relación “es-un”, se debe usar siempre la composición. La composición es la forma natural de agruparelementos.

En general, la extensión se usa poco. La herencia se debe usar cuando aparece una relación detipo “es-un” donde se puede tener en cuenta el principio de Liskov:

Un objeto de la clase derivada debe poder usarse donde se haya usado uno de laclase base.

Se debe tender a desarrollar pocos niveles de la jerarquía de herencia.

Respecto al polimorfismo, es útil cuando se prevé que haya extensiones futuras o se manejanobjetos de clases diferentes. Incluso en este caso se pueden utilizar las interfaces.

Page 38: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 83

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Interfaces

El polimorfismo permite manejar distintas clases de forma homogénea, es decir, que las clasesrelacionadas tengan una clase base común. Sin embargo, es muy habitual que varios objetos deun programa compartan una interfaz pública, pero sin pertenecer a la misma jerarquía deherencia, es decir, no existe una relación “es-un” entre ellos. Las interfaces son unosmecanismos que permiten relacionar clases de jerarquías de herencia distintas. Al igual que laherencia, la interfaces se pueden jerarquizar creando una jerarquía de interfaces. Aquellas clasesque implementan interfaces pueden seguir extendiéndose –heredar.

Definición de Interfaces

Una interfaz es una declaración de métodos no estáticos y atributos estáticos finales, quepueden ser implementados por varias clases, de manera que sus instancias sean polimórficas ypresenten una misma interfaz pública.

Los elementos de una interfaz son públicos por definición: ni es necesario anteponer la palabrareservada public ni se pueden cambiar sus derechos de acceso.

Los métodos de una interfaz no pueden ser estáticos porque los elementos estáticos son declase y una interfaz no es una clase. Semánticamente son diferentes.

La declaración de los métodos puede incluir el lanzamiento de excepciones. Una vez definidauna interfaz, cualquier clase puede implementarla del siguiente modo:

class NombreDeClase implements NombreDeInterface {…

}

Cuando una clase implementa una interfaz, la clase tiene que sobrecargar todos los métodoscon acceso público declarados en la interfaz. Los atributos son finales, sin necesidad delcalificativo final, y deben cargarse con un valor inicial.

Page 39: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 84

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Uso de interfaces

Una clase puede implementar varias interfaces del siguiente modo:

class NombreDeClase impements Interface1, Interface2, … {…

}

Si alguno de los métodos queda sin implementar, automáticamente la clase se convierte enabstracta y, por lo tanto, se debe añadir el calificativo abstract.

Jerarquía de interfaces

Se pueden construir nuevas interfaces como extensiones de otras interfaces y esta extensiónpuede ser de una o varias interfaces, lo que se conoce como herencia múltiple.

interfaz A …interfaz M extends A …interfaz N extends A …interfaz X extends M, N …

A diferencia de la jerarquía de clases donde todas derivan de la clase Object, las interfaces notienen una interfaz común predefinida.

Page 40: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 85

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Estructuras de almacenamiento

Arrays

En muchos programas existe la necesidad de disponer de muchas variables u objetos del mismotipo o de la misma clase. Sería pues necesario disponer de algún mecanismo que permitaasignar por un único nombre a un grupo de variables u objetos. Además, sería deseable que sepudiesen manejar de manera individual cada una de las variables u objetos de forma separada.

La estructura de almacenamiento que permite este mecanismo es el array. Un array es unaestructura de almacenamiento de un número determinado de variables primitivas o referencias,todas del mismo tipo, donde cada elemento está identificado por un índice y se declara delsiguiente modo:

<tipo>[] nombreDeArray;<tipo> nombreDeArray[];

Ambas declaraciones son equivalentes, donde nombreArray es una referencia a una estructuracon capacidad para almacenar un conjunto de valores de tipo <tipo>. Se denomina tipo basedel array al tipo de los elementos que contiene y no existen restricciones al tipo base.

El tipo base de un array declara el tipo de los elementos que pueden ser almacenados en cadauna de las posiciones del array.

En Java, los array son objetos y, si no se especifica nada, su valor inicial es null. Por lo tanto,para poder utilizar el array es necesario crear el objeto. Un array se crea cuando se indica sutamaño, es decir, cuando se indica el número de elementos que se pueden almacenar. Un arrayindica el número de elementos (tamaño) del siguiente modo:

<tipo> nombreDeArray[número de elementos];

Al igual que con la declaración de variables o de objetos, los arrays se pueden crear en elmomento de declararlos.

<tipo> nombreDeArray = new <tipo>[número de elementos];

De hecho, es posible inicializar los elementos del array a la vez que se crean.

Page 41: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 86

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

<tipo> nombreDeArray = {<elemento-1>, <elemento-2>, …, <elemento-i>};

Para referirse a cada uno de los elementos de un array se utiliza el índice (la posición delelemento), que indica su posición. El índice de un array siempre empieza por cero, por lo tanto,cuando se hace referencia a los elementos de un array de tamaño N, el primer elemento seencuentra en la posición 0, el segundo elemento en la posición 1 y el último elemento en laposición N – 1. Cualquier intento de hacer referencia a un elemento que no esté entre o y N-1generará una excepción.

Gran parte de los errores con arrays están relacionados con los límites. La primera posición es 0y la última length menos 1, donde length es un atributo del array que indica su tamaño.

Arrays multidimensionales

Un array multidimensional permite definir una matriz de elementos de un determinado tipo.Para declarar un array multidimensional se usa la forma:

<tipo>[][] nombreDeArray;

Vectores

La clase Array se utiliza cuando se necesita utilizar un conjunto finito del mismo tipo deelementos. Sin embargo, los arrays son limitados en cuanto que puedan aumentardinámicamente o que los elementos contenidos sean heterogéneos. Existen dos enfoques pararesolver este problema:

• Crear un nuevo array con el nuevo tamaño y trasladar los elementos del antiguo array.

• Utilizar un tipo de estructura que permita aumentar dinámicamente su tamaño dealmacenamiento. En este caso se podría utilizar una lista enlazada.

En el caso de querer reunir elementos heterogéneos, una solución sería considerar a todos loselementos de tipo Object.

Page 42: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 87

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Java contiene una clase, llamada Vector y que está en el paquete java.util, que permite todasestas operaciones. Algunas de las características de esta clase son:

• El tamaño de un objeto de tipo Vector aumenta o disminuye para acomodar loselementos que se deseen.

• La utilización es similar a la de un array. Si se proporciona un índice i al métodoelementAt(), éste devuelve el elemento de una posición, es decir, el contenido de laposición i del vector.

• Se puede insertar o eliminar un elemento mediante métodos.• Se puede pasar a un array.

Page 43: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 88

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Entrada y Salida

La información que necesita un programa para realizar un proceso requiere unos datos deentrada, y una vez generados los resultados, éstos se devuelven como datos de salida. En Java, laentrada de datos se realiza mediante un flujo de entrada que se debe abrir, leer sucesivamente ainformación hasta que se lea todo el contenido y, al final, se cierra. La salida de datos se realizamediante un flujo de salida. Para realizar una salida de datos se abre un flujo de salida, seescribe la información y, al final, se cierra.

Con este modelo se han generalizado e independizado las operaciones de entrada y salida deinformación.

Concepto de flujo

Un flujo representa un objeto que se puede utilizar para realizar una operación de entrada ysalida de datos. Un flujo representa un canal donde se puede leer y escribir información. En Javaexisten dos tipos de flujo: uno de bytes y otro de caracteres.

La lectura del flujo de datos se realiza de manera secuencial

• Leer y escribir en un archivoUn archivo es un soporte físico que contiene datos.

• Leer y escribir en memoriaEn Java existen clases que permiten trabajar en memoria como origen y destino dedatos.

Page 44: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 89

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

La clase File

La clase File permite manejar el concepto de archivo como un objeto perteneciente a un sistemade archivos. Una vez creado un objeto File que hace referencia a un archivo o directorio, sepueden realizar las siguientes operaciones:

• Obtener el tamaño de un archivo.• Obtener la ruta de acceso completa al archivo.• Cambiar el nombre del archivo.• Eliminar el archivo.• Comprobar si es un directorio o un archivo.• Devolver todos los archivos y subdirectorios si se trata de un directorio.• Crear un directorio.

Manejo de archivos de acceso aleatorio

Además de los archivos de acceso secuencial, se pueden manejar archivos de acceso aleatorio. Laclase para manejar archivos de acceso aleatorio es RandomAccessFile. Esta clase tiene unconstructor que permite indicar el tipo de acceso al archivo. Se permite un acceso de sólolectura o de lectura-escritura. Los métodos más utilizados para leer elementos son readIt(),readLong(), readDouble(), readLine(), etc. y los más utilizados para la escritura son writeInt(),writeLong(), writeDouble(), writeBytes(), etc. Por otro lado, los métodos más utilizados paraacceder al archivo de acceso aleatorio son:

• getFilePosition(): método que devuelve la posición actual del cursor del archivo,contado en bytes, donde se va a realizar la operación de lectura-escritura.

• seek(): método que sitúa la posición de la próxima operación de lectura-escritura en elbyte especificado.

• length(): método que devuelve el tamaño actual del archivo.

Page 45: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 90

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Lectura y escritura de objetos. Serialización

La serialización es un proceso por el que un objeto se puede convertir en una secuencia debytes. Esta secuencia de bytes puede reconstruir el objeto manteniendo el valor de sus atributosmediante un proceso inverso al de la serialización. Esto permite almacenar el objeto en archivoso distribuirlo en red.

Para que una clase pueda utilizar la serialización, debe implementar la interfaz Serializable. Lainterfaz Serializable no define ningún método.

Para leer y escribir un objeto serializable se utilizan las clases ObjectOutputStream yObjectInputStream que tiene los métodos readObject() y writeObject(). El métodoreadObject() devuelve un objeto de tipo Object y, por lo tanto, se necesita convertir el tipodevuelto en algún objeto manejable.

Al serializar un objeto, automáticamente se serializan sus variables y objetos miembro. A su vez,estos objetos miembro deben ser serializables.

Aunque el mecanismo de serialización es automático existe la posibilidad de especificar cómo serealiza el proceso.

La palabra reservada transient permite indicar que un objeto o variable miembro no seaserializado con el resto del objeto. Cuando el objeto se recupere, las variables que se hanmarcado como transient se ponen a null, cero o false.

Las variables y objetos static no se serializan.

La interfaz Externizable extiende Serializable y su principal característica es que no realizaningún proceso automático, todo es manual.

Externizable tiene dos métodos que deben ser implementados y son readExternal() ywriteExternal().

Page 46: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 91

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Concurrencia: Multihilos

Los procesos paralelos o multihilos permiten que varios procesos se ejecuten de maneraconcurrente dentro de un mismo programa. Mediante este mecanismo se utilizarán mejor losrecursos del sistema, incluyendo la unidad central de procesamiento –UCP.

Un hilo (thread) es un flujo único de control dentro de un programa que se suele denominarcontexto de ejecución porque cada hilo debe tener sus propios recursos, como el contador deprograma y la pila de ejecución.

Todos los hilos comparten los mismos y muchos recursos, como memoria o archivos abiertos,por eso se les denomina procesos ligeros.

Los términos paralelo y concurrente son diferentes. Cuando dos hilos se ejecutan en paralelo seestá ejecutando al mismo tiempo en diferentes UCP, sin embargo, dos hilos concurrentesintentan conseguir ciclos de reloj de la UCP para ejecutarse al mismo tiempo, pero nonecesariamente de manera simultánea en diferentes UCP.

Un programa puede permanecer gran parte de su tiempo de ejecución esperando –porejemplo, recursos a la espera de la finalización de un procesos de E/S, escenas de animación,etc. Para mejorar el aprovechamiento de la UCP, todas las tareas que efectúen grandes esperaspueden ser ejecutadas en hilos separados. Una vez que una tarea queda a la espera de unevento, la unidad de ejecución de la JVM puede escoger otra tarea para que se ejecute.

En la mayoría de las operaciones de E/S, la UCP está la mayor parte del tiempo en espera de unarespuesta del dispositivo periférico, lo que supone un desperdicio de ciclos de reloj.

Page 47: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 92

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Fundamentos

Para ejecutar un hilo es necesario crear una subclase derivada de la clase Thread. Los métodosde control de hilos más importantes son:

• run(): método donde se realiza la tarea.• start(): método que se emplea para iniciar la ejecución del cuerpo del hilo definido en

el método run().• stop(): método que finaliza la ejecución de un hilo independientemente de la situación

actual de ejecución.• suspend(): método que suspende momentáneamente la ejecución de un hilo.• resume(): método que continúa la ejecución de un hilo en suspensión.• sleep(): método que obliga a la unidad de ejecución a esperar durante un intervalo de

tiempo.• join(): método que espera a que el hilo desaparezca.• yield(): método que finaliza la ejecución de un hilo y lo coloca al final de la cola de

ejecución.

Cuando se necesita ejecutar una tarea concurrente, existen dos modos de hacerlo. Por un lado,se puede crear una subclase de la clase Thread que implemente su propio método run() –quees el primero que se ejecuta cuando se inicia un hilo. A continuación, se crea una instancia de lasubclase mediante la sentencia new, e, inmediatamente después, una llamada al método start()que ejecutará el método run().

Por otro lado, se puede crear un hilo declarando una clase que implemente la interfazRunnable. Esta interfaz sólo requiere que se implemente el método run(). Primero se crea unainstancia de la clase mediante la sentencia new, y seguidamente, se llama al método start() paraque comience la ejecución del hilo.

Se debe pasar una instancia de una clase con el método run() definido para que cuando sellame al método start(), la unidad de ejecución sepa qué método run() debe ejecutar.

Page 48: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 93

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Ciclo de vida de un hilo

Todo hilo, tras su creación, está en uno de cuatro posibles estados:

• Recién creado: Un hilo está en éste estado inmediatamente tras su creación, es decir,inmediatamente después de la ejecución de la sentencia new. En este estado, se hareservado espacio e inicializado los miembros de datos locales.

• Ejecución: En este estado se crea un contexto de ejecución para el hilo y al que sepuede llamar para que se ejecute en cualquier momento. Este estado está dividido endos subestados, estado de ejecución y el estado de cola. Cuando está en estado deejecución se le asignan ciclos de reloj y cuando se encuentra en estado de cola, esperahasta que llegue su turno para consumir ciclos de reloj. El planificador de tareas enejecución es el responsable de la transición entre los dos estados.

• Bloqueado: Se llega a este estado cuando se produce alguno de los siguiente casos:• El propio hilo u otro llama al método suspend().• El hilo llama al método wait() de un objeto.• El propio método llama al método sleep().• El hilo queda a la espera de que finalice alguna operación de E/S.

El planificador de tareas no llamará a un hilo en estado de bloqueo. Un hilo pasará alestado de ejecución cuando se produzcan los siguientes procesos:

• Cuando se llame al método resume().• Si el hilo está bloqueado debido a la llamada del método wait() de un objeto, al

llamar al método notify() o notifyAll() del objeto.• Si el hilo está esperando, al concluir el tiempo de espera.• Si el hilo está bloqueado a la espera de una operación de E/S, cuando ésta

concluya.

• Muerto: A este estado se llega cuando un hilo, o bien concluye su ejecución por símismo, o bien cuando otro hilo realiza una llamada a un método stop().

Para saber si un hilo está activo se utiliza el método alive(). Este método devuelve true si estáactivo o false si no lo está.

Page 49: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 94

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Grupo de hilos

Mediante la clase ThreadGroup se pueden gestionar varios hilos pertenecientes a un mismogrupo, es decir, cada instancia de un hilo sólo puede ser miembro de un único grupo de hilos.De hechos, excepto los hilos del sistema, todo hilo pertenece a un grupo de hilos.

Se definen tres métodos de clase para gestionar a su vez los hilos y los subgrupos creados bajoun grupo de hilos: stop(), suspend() y resume().

Uso avanzado de hilos

El uso avanzado de hilo incluye la sincronización, la comunicación, las prioridades, lasplanificaciones y los daemons.

La sincronización evita la corrupción de los datos debidos a accesos simultáneos. Lacomunicación entre hilos permite que los hilos se pasen datos. Las prioridades conforman elmedio de asegurar qué hilos críticos se ejecutan frecuentemente o de manera inmediata. Laplanificación es el medio de asegurar que se refuerce la prioridad y la equidad entre hilos. Losdaemons (demonios) son hilos persistentes que proporcionan servicios a otros hilos.

Sincronización

Todos los hilos comparten el mismo espacio de memoria, entonces, es posible que dos hilosaccedan a la misma variable o ejecuten un método del mismo objeto a la vez. Los problemassurgen cuando varios hilos acceden a los mismos datos de manera concurrente. Los hilospueden adelantarse unos a otros y alguno podría sobrescribir datos que otro acaba de escribir, oun hilo podría trabajar sobre el resultado inmediato de otro hilo y anular la consistencia de losdatos. Por lo tanto, se necesita algún tipo de mecanismo que bloquee el acceso de un hilo adatos críticos, si sobre esos datos está trabajando otro hilo.

Java utiliza monitores o supervisores para sincronizar el acceso a los datos. Un monitor es unazona donde los recursos están protegidos mediante cerrojos.

Existe una única llave para todos los cerrojos dentro del monitor, y sólo un hilo posee la llavepara poder acceder al monitor y a los recursos protegidos cuantas veces necesite. Los otros

Page 50: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 95

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

deberán esperar hasta que el hilo poseedor de la llave la libere. Un hilo puede tener muchasllaves de distintos monitores.

Los recursos protegidos son fragmentos de código en forma de métodos o bloques desentencias entre llaves. Para hacer que un hilo sincronice sus acciones hay que anteponer lapalabra reservada synchronized en cada uno de los recursos protegidos. Cuando se quieresincronizar un bloque de sentencias, se necesita añadir el nombre de la instancia de un objetoentre paréntesis, inmediatamente seguida de la palabra reservada synchronized, para que launidad de ejecución identifique qué monitor debe comprobar ese bloque.

La sincronización es una operación cara porque consume muchos ciclos y se debe utilizar elmínimo imprescindible, especialmente con métodos y bloques que se ejecuten frecuentemente.

Comunicación entre hilos

Existen tres maneras de que los hilos se comuniquen entre sí. La primera es a través de datoscompartidos. La segunda se efectúa mediante los métodos de control de los hilos, haciendo quese esperen unos a otros. El tercero es utilizar los métodos wait(), notify() y notifyAll() paraevitar que el hilo que posea la llave de un monitor se suspenda o quede a la espera de laterminación de otro hilo y que otro hilo esté también a la espera para entrar en el mismomonitor, permaneciendo ambos a la espera indefinidamente.

Prioridades y planificaciones

La planificación es la actividad por la que se determina el orden de ejecución de múltiples hilos.A cada hilo se le asigna un valor de prioridad y tendrá preferencia aquel hilo con mayorprioridad. Los valores de prioridad son números enteros pertenecientes al rangoMIN_PRIORITY y MAX_PRIORITY.

Cuando se crea un hilo, éste heredará el valor de prioridad del hilo que lo ha creado si estevalor no excede el límite impuesto por su grupo de hilos base.

El tipo de planificación utilizado en Java se denomina preemptive (prioridad), es decir, si unhilo con mayor prioridad que el que se encuentra en ejecución pasa a estar en disposición deejecutarse, el de mayor prioridad se ejecutará inmediatamente, forzando al otro para que vuelva

Page 51: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 96

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

a la cola y espere su turno. Un hilo puede ceder de manera voluntaria sus privilegios deejecución sobre la UCP a otros hilos que están en espera mediante una llamada al métodoyield().

En algunas aplicaciones, la ejecución de hilos se produce en fracciones de tiempo, es decir, loshilos con igual prioridad tienen la misma posibilidad de ejecución según un esquema de colacircular. Incluso los hilos de menor prioridad tienen la posibilidad de obtener pequeñasfracciones de tiempo para su ejecución. Por lo tanto, ningún hilo permanece mucho tiempo sinejecutarse. Otras implementaciones no siguen este esquema y un hilo no cederá su control hastaque finalice.

Daemons

Los hilos daemons son hilos de servicio, es decir, proporcionan servicios a otros hilos.Normalmente entran en un bucle infinito a la espera de una petición de alguno de sus servicios.Cuando todos los hilos daemons queden activos, la unidad de ejecución finalizará.

Para crear un hilo daemon se necesita llamar al método setDaemon justo después de lacreación del hilo y antes de que se inicie su ejecución. Todos los hilos heredados de un hilodaemon son daemons también.

Page 52: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 97

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Introducción a AWT y Swing

El AWT o Abstract Windows Toolkit (Kit de Ventanas Abstracto) es un marco de desarrollo(framework) que permite diseñar interfaces para aplicaciones dotadas de gráficos controladospor ratón.

Java utiliza la clase Component para visualización en pantalla y cualquier objeto que puedamostrarse en pantalla hereda de esta clase.

Los contenedores son una base para insertar elementos del interfaz del usuario y pueden ser dedos tipos: las ventanas y los paneles.

Las ventanas

Una ventana es una clase contenedora genérica y no se utiliza directamente para generarventanas de aplicación. Para ello existen tres subclases de Window que son: Frame, Dialog yFileDialog.

Los marcos son ventanas lisas, que no contienen nada, donde se pueden insertar otroscomponentes y elementos que conformen al interfaz del usuario. El contenedor Frame es elúnico al que se le pueden insertar menús.

Los cuadros de diálogo son iguales a los marcos pero con la propiedad de que no se permiteacceder a otra ventana perteneciente a la aplicación cuando el diálogo está activo. A estapropiedad se le denomina modalidad. La modalidad de un cuadro de diálogo puede estar o noactivada.

La clase FileDialog permite crear cuadros de diálogo de archivos y son modales.

Los paneles

Los paneles son contenedores genéricos que se utilizan para agrupar componentes específicos.Se pueden agrupar unos paneles dentro de otros.

Page 53: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 98

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Los componentes que se pueden insertar en los contenedores conforman el interfaz del usuarioy éstos componentes pueden ser los siguientes elementos:

• Entrada de texto: lo componen los elementos TextField y TextArea.• Botones: elemento que permite realizar una acción cuando se pulsa.• Etiquetas: elemento para mostrar texto estático.• Casillas de verificación: elemento para ofrecer la selección entre varias opciones.• Listas desplazables: elementos que muestra una lista donde se permite una selección

entre varias opciones mostradas.• Barras de desplazamiento.• Menús desplegables.• Menús de aplicación.

Gestión de eventos

Un evento es un suceso generado por una acción de repuesta por parte del usuario hacia algúncomponente del interfaz (del usuario).

El modelo de eventos está basado en que los objetos sobre los que se producen los eventosregistran los objetos que los gestionará.

El principio esencial de la gestión de eventos se basa en la delegación. Los componentesdelegan la gestión de eventos a una clase externa. Con esto se consiguen, entre otros, lossiguientes beneficios:

• Cada componentes del interfaz del usuario sólo transmite a la aplicación los eventosque espera.

• Es posible separar claramente los tratamientos funcionales de los eventos de la interfazdel usuario, permitiendo así una verdadera reutilización de los componentes gráficos,por un lado, y de las funcionalidades, por otro.

Page 54: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 99

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

La delegación se produce del siguiente modo:

• Los eventos son objetos que derivan de la clase java.util.EventObject.• Una fuente de eventos (en general, un componente gráfico) derivado de Component,

emite un evento hacia su delegado, el cual es capaz de tratarlo.• El delegado indica que está interesado en un evento en particular, implementando una

o más interfaces específicas derivadas de la clase java.utilEventListener.

Para enlazar efectivamente la fuente y el delegado, el delegado debe previamente registrarse enla fuente. Por lo tanto, la fuente tiene que definir métodos de registro de los delegados, quedeben respetar una norma de codificación de la siguiente forma:

public <evento>Listener set<evento>Listener(<evento>Listener unDelegado)public <evento>Listener add<evento>Listener(<evento>Listener unDelegado)

La primera forma permite la difusión simple, es decir, hacia un sólo delegado y, la segunda,permite la difusión múltiple o hacia varios delegados. <evento> corresponde a un tipo deevento derivado de la clase java.util.EventObject.

En la práctica, se necesitará un adaptador, es decir, una clase mediadora entre el objeto fuente yel delegado. Con este mecanismo se puede separar mejor la interfaz del usuario el código detratamiento y permite efectuar operaciones complementarias sobre los eventos -filtrados,implementación de un cola de eventos o la utilización de un solo delegado para varias fuentesde evento.

Un adaptador tiene por función mínima implementar la interfaz o interfaces de escucha de loseventos que quiere controlar.

La clase EventObject es la clase base sobre la que se derivan las demás clases de eventos. Lassubclases pertenecientes a esta jerarquía de herencia serán las encargadas de definir el tipo deevento que ha ocurrido. Existen dos grupos de eventos:

• Eventos de bajo nivel: son aquellos eventos en los que intervienen periféricos.• Eventos de alto nivel o semánticos: son aquellos eventos en los que intervienen

componentes del interfaz del usuario.

Page 55: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 100

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Los eventos de bajo nivel

Estos eventos se producen cuando se genera una entrada desde algún periférico. Las clasesasociadas a este grupo son:

• ComponentEvent: estos eventos se producen cuando se mueve o redimensiona uncomponente.

• FocusEvent: estos eventos se producen cuando se cambia el foco de un componente.• KeyEvent: estos eventos se producen cuando se pulsa una tecla.• MouseEvent: estos eventos se producen cuando se pulsa o se mueve el ratón.• ContainerEvent: estos eventos se producen cuando se añaden o eliminar componentes

de un contenedor.• WindowEvent: estos eventos se producen cuando se realiza alguna operación con una

ventana.

Los eventos de alto nivel o semánticos

Estos eventos están asociados a los elementos que componen el interfaz del usuario. Las clasesasociadas a este grupo son:

• ActionEvent: estos eventos se producen cuando se realiza alguna acción sobre elcomponente.

• AdjustmentEvent: estos eventos se producen cuando se ajusta el valor de algúncomponente.

• ItemEvent: estos eventos se producen cuando se modifica el estado actual de algúnelemento que pertenece a un componente.

• TextEvent: estos eventos se producen cuando el contenido del texto de algúncomponente ha cambiado.

Page 56: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 101

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Interfaces de escucha (Listeners)

Para poder capturar los eventos, tanto los de bajo nivel como los semánticos, se necesita elsoporte de las interfaces de escucha (interfaces Listeners). Para cada tipo de evento existe unainterfaz de escucha asociado, así que, cuando se desea controlar algún tipo de evento esnecesario implementar cada uno de los métodos de la interfaz.

Los adaptadores

Los adaptadores son clases que implementan una interfaz de escucha pero que no realizanningún tipo de operación, es decir, son clases abstractas.

public abstract class <evento>Adapter implements <evento>Listener {métodos asociados al evento;

}

La utilización de los adaptadores es práctica, ya que si se cambia la definición de la interfaz deescucha, ésta quedará reflejada en su correspondiente adaptador, de tal modo que no afectará alfuncionamiento del componente que ha implementado el adaptador.

Page 57: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 102

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Programación en red

El enfoque de Java sobre los entornos de red se centra en TCP/IP exclusivamente. TCP/IP oProtocolo de Control de Transmisión-Protocolo de Internet, son dos protocolos decomunicación de datos que actúan como pilares de toda la funcionalidad de Internet. TCP seconsidera una pila de protocolos que incluye a otros protocolos como SMTP, NNTP o HTTP.

IP es un protocolo de datagramas, es decir, no garantiza la recepción de los paquetes deinformación transmitidos. IP es un protocolo no orientado a conexión. Cada paquete o frame IPviaja por separado y está formado por campos. Cada campo de dirección consta de 32 bits. Estadirección se escribe habitualmente como cuatro bytes en forma decimal (xxxx.xxxx.xxxx.xxxx).

TCP presenta un servicio orientado a la conexión mediante un canal de datos y permite enviarcantidades arbitrarias de datos como un gran flujo de bytes. Como IP está limitado al envío de64KB por paquete, TCP resuelve este problema segmentando los datos en paquetes IPseparándolos, numerándolos y ensamblándolos de nuevo en el destino.

Los campos más importantes de la cabecera TCP son los campos puerto de origen y destino.Cada máquina que entiende TCP/IP posee 65536 puertos diferentes, a través de los cuales sepuede enviar y recibir información. Para los protocolos estándar de Internet, se reserva elintervalo 0-1023 puertos. Algunos de los puertos estándar más usados son:

Puerto Servicio21 Transferencia de archivos FTP23 Conexión Telnet25 Correo electrónico80 Transferencia de documentos HTTP

TCP es un protocolo de flujo, es decir, permite enviar y recibir cantidades arbitrarias de datos.TCP emplea dos puertos, uno en la máquina remota y otro en la máquina local. El numero depuerto local no se especifica porque no es necesario. TCP/IP asigna este puerto de maneradinámica –a estos puertos se les denomina efímeros porque sólo existen durante unatransacción cliente-servidor. Por el contrario, los puertos servidores permanecen en uso todo eltiempo, mientras se esté ejecutando el software del servidor (daemon).

El protocolo HTTP se basa en el intercambio de cabeceras de petición y respuesta multilínea. Enel ámbito cliente-servidor, el cliente inicia la comunicación enviando al servidor una cabecera de

Page 58: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 103

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

petición. El servidor responde a la petición enviando una cabecera de respuesta quenormalmente incluye los recursos pedidos por el cliente. Las cabeceras de petición del clientetienen tres partes:

• El método de petición GET.• El URL del recurso.• La versión del protocolo HTTP que se está utilizando.

Y la cabecera de respuesta incluye:

• Respuesta de estado.• Tipo de recurso entregado (campo Context-type).• Una línea vacía que separa la cabecera de los datos.

El campo Context-type devuelto por todos los servidores Web sigue un formato estándardenominado Multipurpose Internet Mail Extensions (MIME).

Java mediante el paquete java.net, permite realizar conexiones y transacciones a través de la red.Las clases más importantes del java.net son DatagramPacket, DatagramSocket, InetAddress,Socket, ServerSocket, URL, URLConnection

Java basa las comunicaciones en sockets (enchufes). Un socket puede ser de flujo o dedatagrama.

Con los sockets de flujo un proceso mantiene una comunicación continua con otro proceso.Este tipo de socket proporciona un servicio orientado a la conexión mediante el protocolo TCP.

Con los sockets de datagrama, la información se transmite mediante paquetes y se utiliza elprotocolo UDP (User Datagram Protocol). Este tipo de conexión no asegura la recepción de losdatos.

Tanto los clientes como los servidores, atienden peticiones en un puerto determinado. Si serecibe una petición para establecer una conexión, y la conexión es aceptada, se establece unintercambio de datos a través del protocolo TCP. Se dice entonces que se han creado dossockects, es decir, dos puntos de comunicación en la red. Cada socket se identifica por ladirección IP del ordenador y por un número de puerto. TCP proporciona un conjunto de

Page 59: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 104

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

mensajes de reconocimiento entre ambos sockets, así como servicios de detección yrecuperación de errores.

Internet usa mayoritariamente sockets para la comunicación entre ordenadores. Estacomunicación entre equipos se realiza mediante paquetes de datos que utilizan el protocolo IP,que consiste en una serie de cuatro números enteros comprendidos entre 0 y 255.

Localizadores de Recursos Universales (URL)

La Red utiliza los URL para proporcionar consistencia y así permitir codificar las localizacionesde los recursos. La expresión general de un dirección URL es

<protocolo>:<servidor>.<usuario-contraseña>

y se divide en tres partes.

• <protocolo>: indica el protocolo que se utiliza para el acceso a los recursos.• <servidor>: lugar donde se encuentran los recursos. Si se ponen dos barra (//) indica

que el recurso solicitado esta en un servidor de Internet y si se coloca una barra (/)indica que el recurso está en un servidor local.

• <usuario-contraseña>

Page 60: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 105

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Acceso a Bases de Datos: JDBC

Uno de los conjuntos más importantes de APIs (Applications Programming Interfaces, Interfacespara Programas de Aplicación) es la interfaz para bases de datos que permite crear, acceder,compartir y actualizar todo tipo de datos en Internet, de manera tan fiable como el acceso a lasbases de datos en una red local. Estas APIs se denominan APIs de Empresa y la componen JDBC–Java Data Base Connection, JRMI –Java Remote Method Invocation, Object Serialization y JIDL–Java Interface Data Language.

Este conjunto de APIs hacen posible el desarrollo de aplicaciones cliente-servidor dirigidas aempresa mediante objetos Java, Applets y Servlets.

Las aplicaciones cliente-servidor emplean una arquitectura lógica de múltiples niveles(estructura lógica de n-niveles), habitualmente tres, una base de datos, una capa intermedia degestión y una capa de interfaz del usuario.

Lógica multinivel

Las aplicaciones cliente-servidor comenzaron como un servidor de bases de datos y una capa derepresentación donde se incluye toda la lógica de negocio de la aplicación. La arquitectura entres niveles separa la lógica de gestión del programa en otra capa. Esta capa estabaoriginalmente en el cliente o en el servidor, pero derivó en un servidor de aplicacionesintermedio. Mediante Java, muchas de estas capas, tales como la lógica de gestión, el acceso abases de datos y la presentación se pueden reestructurar en Applets y Servlets. El concepto de“funciones distribuidas orientadas a los negocios mediante objetos” forma una lógica multinivel,donde cada Applet puede verse teóricamente como una capa de aplicación.

JDBC (Java Data Base Connection)

JDBC es el API de clases Java de acceso a bases de datos relacionales. JDBC emplea un enfoquesimilar a la empleada en el estándar ODBC (conexión y conjunto de resultados). JDBC empleamétodos sencillos y directos para operar con bases de datos, pero también es capaz de manejartareas complejas como conjunto de resultados múltiples o procedimientos almacenados conparámetros de entrada y salida -los procedimientos almacenados son funciones yprocedimientos almacenados en el servidor que el cliente utiliza, en vez de enviar sentencias.

Page 61: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 106

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

La ventaja es que el procedimiento almacenado está en el servidor, con lo que se proporcionauniformidad, seguridad y eficiencia.

Implementación

JDBC se implementa en el paquete java.sql

java.sql.DriveManager es la capa que lleva el control de los gestores JDBC disponibles.Durante la inicialización, el DriveManager carga todas las clases del sistema que haya ensql.drivers. JDBC usa la sintaxis URL de la forma jdbc:<subprotocolo>:<parámetros> paraidentificar las conexiones. Cuando se necesita establecer una conexión, el DriveManager,mediante una tabla de búsqueda interna, selecciona el gestor asociado y establece la conexión.Los gestores deben ajustarse al modelo de seguridad de Java. Una alternativa a la carga de todoslos gestores es cargar explícitamente uno específico mediante el método forName() del objetoClass haciendo:

java.sql.Driver datos = Class.forName(“base.gestor”).newInstance();

java.sql.Driver es una clase que implementa un gestor de información y configuración generalpara bases de datos. Se carga durante la inicialización de la base de datos. La clase residirá enmemoria durante toda la ejecución del programa. Los métodos incluidos son connect, paraconectarse a una base de datos, y getPropertyInfo, para obtener la información necesaria sobreuna conexión a una base de datos.

Este gestor debería llamar al método DriveManager.registerDriver() para registrarse, así, elDriveManager guardará información sobre la clase Driver, incluyendo la fuente de datos paraverificación de seguridad y acceso.

java.sql.Connection es un puntero a una base de datos y crea un contexto de trabajo paraobjetos Stament y ResultSet. El objeto Connection soporta propiedades de transacción ymétodos para crear objetos Statement.

connection.createStatement();connection.prepareStatement(<cadena SQL>);

Una transacción en una base de datos consiste en múltiples órdenes SQL que se gestionan comouna única unidad de trabajo mediante los métodos commit y rollback, es decir, es un conjunto

Page 62: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 107

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

de operaciones que son vistas como una sola operación. Desde el punto de vista funcional, unatransacción es una unidad lógica de trabajo sobre una base de datos. Una transacción debe serimplementada por el usuario. Una transacción, o se realiza o no se realiza (propiedad deatomicidad). Por lo tanto, se dice que una transacción se puede encontrar en dos estados:incompleta o terminada.

Existen dos operaciones, una para efectuar la leer y escribir, y otra para revertir operaciones:

• commit: operación que permite establecer un fin de la operación.• rolback: operación que realiza el proceso inverso a commit, es decir, deshace las

operaciones que se han hecho hasta el último commit.

Existen dos formas de procesar o actualizar transacciones:

• Actualización diferida: esta actualización inserta en un fichero (diario de operaciones)todas las operaciones realizadas sin modificar la base de datos. Cuando se finaliza latransacción, mediante un commit, se ejecutan todas las operaciones de la transacciónque se encuentran en el diario de operaciones y, seguidamente, se borran de éste.

• Actualización inmediata: esta actualización realiza todas las modificacionesdirectamente en la base de datos y, a la vez, en el diario de operaciones. En el caso deuna transacción errónea, el sistema realiza un rollback deshaciendo las operaciones enla base de datos.

El acceso a las bases de datos por varios usuarios se denomina acceso concurrente y elmecanismo que permite la concurrencia se denomina control de concurrencia. El control deconcurrencia impide inconsistencias en la base de datos y el interbloqueo entre transacciones.

Para controlar el acceso de varias transacciones se utiliza un mecanismo que las aisla. Existendiferentes niveles que permiten especificar el nivel de aislamiento para efectuar transacciones deforma concurrente.

Page 63: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 108

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Los conflictos de lectura son los problemas que surgen cuando varias transacciones acceden alos mismos recursos, y son tres:

• Lectura sucia: conflicto que se produce cuando una transacción T1 intenta leer undato que otra transacción T0 ha modificado y que, a su vez, T0 no ha hecho efectivo elcambio en la base de datos.

• Lectura fantasma: conflicto que se produce cuando una transacción T1 lee un datoque ha escrito o modificado otra transacción T0 pero que todavía no se ha modificado.Por lo tanto, es posible que T0 realice un rollback y que el valor leído por T1 no existaen la base de datos.

• Lectura no repetible: conflicto que se produce cuando una transacción T1 calcula undato que no ha sido actualizado todavía por otra transacción T0 pero que seráposteriormente actualizado.

Hay hasta cinco niveles de aislamiento que intentan evitar los conflictos de lectura:

• TRANSACTION_NONE: no se permite ejecutar transacciones concurrentes.• TRANSACTION_READ_COMMITED: no se permite lectura sucia pero pueden suceder

lecturas fantasmas y lectura no repetible.• TRANSACTION_READ_UNCOMMITED: permite las lecturas sucias, fantasmas y no

repetibles, es decir, no permite que una transacción lea un dato cuya actualización estépendiente.

• TRANSACTION_REPEATABLE_READ: se evita la lectura sucia y la lectura fantasma,pero no la lectura no repetible.

• TRANSACTION_SERIALIZABLE: se evitan todas las lecturas.

java.sql.Statement contiene el método executeQuery() que ejecuta sentencias SQL y quedevuelven datos desde la base de datos en forma de objeto ResultSet. El métodoexecuteUpdate() se utiliza con sentencias de inserción, borrado y actualización de datos y nodevuelve ningún objeto ResultSet.

java.sql.PreparedStatement es una clase que extiende la clase base Statement, que permiteañadir la capacidad de sentencias precompiladas SQL y soporta parámetro de entradas.

java.sql.CallableStatement extiende PreparedStatement para soportar procedimientosalmacenados. Devuelve parámetros de salida y necesita ser registrado explícitamente con elmétodo registerOutParameter().

Page 64: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 109

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

java.sql.ResultSet contiene los datos resultantes de una sentencia SQL. Los datos se recuperansecuencialmente, en filas. En una fila, se puede acceder a los datos de las columnas usando uníndice de posición o el nombre.

MetaData ofrece información sobre los objetos subyacentes para poder acceder a variascaracterísticas del gestor de bases de datos. ResultSet es un tipo especial de canal de flujo dedatos que contiene, además de los datos en sí, otros datos descriptivos. Esta información extrase puede obtener mediante el método getMetaData() que devuelve un objeto de tipoResultSetMetaData, el cual contiene métodos como getColumnCount(),getColumnDisplaySize(), getColumnLabel() y getColumnName().

Tipo de controladores

Para que un programa en Java pueda acceder a una base de datos es necesario posee un drivero controlador JDBC apropiado. Existen cuatro tipos de controladores:

• Puente JDBC-ODBC: controlador que convierte todas las llamadas de JDBC en ODBC.Este controlador tiene como inconveniente la velocidad de acceso.

• 100% Java nativo: controlador que utiliza librerías nativas y, por lo tanto, depende dela plataforma.

• 100% Java nativo-Protocolo nativo: controlador independiente de la plataforma, perocrea dependencia con el tipo de servidor del sistema de bases de datos.

• 100% Java nativo-Protocolo independiente: controlador independiente de laplataforma en todos los aspectos.

Ejemplo 1

Creación de una base de datos de clientes.

import java.awt.*;import java.sql.*:

public class AccesoDatos extends Frame {TextField txtSql = new TextFiels(80);TextArea areaResultados = new TextArea(15, 80);Button btnConsulta = new Button(“Ejecutar SQL”);

Page 65: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 110

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

public static void main(String arg[]) {AccesoDatos app = new AccesoDatos();

}

public AccesoDatos(){super(“AccesoDatos”):setSize(450, 350);setLayout(null);btnConsulta.addActionListener(new GestionarBotones());txtSql.setBounds(10, 30, 300, 25);areaResultador.setBounds(10, 100, 400, 200);btnConsulta.setBounds(10, 60, 150, 25);

add(txtSql);add(areaResultados);add(btnSql);addWindowListener(new WindowEventHandler());show();

}

void verBaseDatos(){try {

Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);Connection conexion =

DriveManager.getConnection(“jdbc:odbc:Clientes”);Statement sentencia = conexion.createStatement();boolean tieneResulados = sentencia.execute(txtSql.getText());

if (tieneResultados) {ResultSet resultado = sentencia.getResultSet();

if (resultado ¡= null) {mostrarResultados(resultado);

} else {arearesultado.setText(“”);

}conexion.close();

} catch (ClassNotFoundException e) {

Page 66: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 111

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

System.out.println(“Controlador no encontrado: “ + e);} catch (Exception e) {

System.out.println(“Error de conexión: “ + e);}

}

void mostrarResultados(ResultSet r) throws SQLException {ResultMetaData res = r.getMetaData();int numCampos = res.getColumnCount();String texto = “”;

for (int i = 1; i < numCampos; ++i) {if (i < numCampos) {

texto += res.getColumnName(i) + “ “;} else {

texto += res.getColumnName(i);}

}

texto += “\n”;

for (int i = 0; i < 80; i++) {texto += “-“;texto += “\n”;

while (r.next()) {for (int i = 1; i < numCampos; ++i) {

if (i < numCampos) {texto += r.getString(i) + “ “;

} else {texto += r.getString(i).trim();

}}texto += “\n”;

}areaResultados.setText(texto);

}}

Page 67: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 112

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

class GestionarBotones implements ActionListener {public void actionPerformed(ActionEvent evento) {

String texto = evento.getActionCommand();

if (texto == “Ejecutar SQL”) {verbaseDatos();

}}

}

class WindowEventHandler extends WindowsAdapter {public void windowClosing(WindowEvent e) {

System.exit(0);}

}

Page 68: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 113

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Ejemplo 2

Creación de una agenda de teléfonos.____________________________________________________________________

import java.awt.*;import java.sql.*:

public class Agenda extends Frame implements ActionListener {Button btnInsertar, btnVer, btnCerrar, btnCrear;TextField txtInfo;Panel wPrincipal;Connection conexión;

public static void main(String arg[]) {new Agenda();

}

public Agenda(){super(“Agenda”);// Creación y dimensión del contenedor…setSize(200, 120);wPrincipal = new Panel();

// Instanciación de cada uno de los elementos…btnCrear = new Button(“Crear”);btnCrear.addActionListener(this);

btnVer = new Button(“Ver”);btnVer.addActionListener(this);

btnInsertar = new Button(“Insertar”);btnInsertar.addActionListener(this);

btnCerrar = new Button(“Cerrar”);btnCerrar.addActionListener(this);

txtInfo = ewn textField(20);

Page 69: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 114

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

// Inserción de los elementos en el contenedor…wPrincipal.add(txtInfo);wPrincipal.add(btnCrear);wPrincipal.add(btnInsertar);wPrincipal.add(btnVer);wPrincipal.add(btnCerrar);

wPrincipal.setBackground(SystemColor.control);add(wPrincipal);setVisible(true);

try {Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);

} catch (ClassNotFoundException e) {txtInfo.setText(“No se puede cargar el controlador.”);

}

/** * A continuación se crea una tabla para * guardar los datos de la agenda… */private void crearTabla() {

Statement sentencia;

try {conexion =

DriverManager.getConnection(“jdbc:odbc:agenda”);sentencia = conexion.createStatement();

try {sentencia.executeUpdate(“DROP TABLE AGENDA”);

} catch (SQLException e) {txtInfo.setText(“Error al crear la tabla AGENDA.”);System.out.println(e);

}

Page 70: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 115

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

sentencia.createUpdate(“CREATE TABLEAGENDA(”+”NOMBRE CHAR(20) NOT NULL, “+”APELLIDOS CHAR(20), “+”TELEFONOCHAR(10))”);

txtInfo.setText(“Tabla AGENDA creada con éxito.”);conexion.close();

} catch (SQLException e) {

}}

// Gestión de los eventos…public void actionPerformed(ActionEvent e) {

Strinf com = e.getActionCommand();

if (“Crear”.equals(com)) {txtInfo.setText(“”);crearTabla();

} else if (“Insertar”.equals(com)) {new Insertar(this);

} else if (“Ver”.equals(com)) {new Ver(this);

} else {dispose();System.exit(0);

}}

}}

Page 71: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 116

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

//========================================================// Implementación de la clase Insertar…//========================================================class Insertar extend Dialog implements ActionListener {

private Connection conexion;private Button btnInsertar, btnTerminar;private textField txtNombre, txtApellidos, txtTelefono;

public Insertar(Frame f) {super(f, “Inserción de datos”, true);setSize(300, 200);txtNombre = new TextField(20);txtApellidos = new textField(20);txtTelefono = new textField(10);

btnInsertar = new Button(“Insertar”);btnInsertar.addActionListener(this);

btnTermnar = new Button(“terminar”);btnTerminar.addActionListener(this);

Panel datos = new Panel();datos.add(new Label(“Nombre: “));datos.add(txtNombre);datos.add(new Label(“Apellidos: “));datos.add(txtApellidos);datos.add(new Label(“Teléfono: “));datos.add(txtTelefono);datos.add(btnInsertar);datos.add(btnTerminar);

txtNombre.setEditable(true);txtApellidos.setEditable(true);txttelefono.setEditable(true);

add(datos);setVisible(true);

}

Page 72: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 117

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

private void insertarFila(){Statement sentencia;

try {conexion = DriverManager.getConnection(“jdbc:odbc:agenda”);sentencia = conexion.createStatement();sentencia.exexuteUpdate(“INSERT INTO AGENDA ” + “VALUES

(´”+txtNombre.getText() +”’,”+”’”txtApellidos.getText()+”´,”+”´”+txtTelefono.getText()+”’)”);

} catch (SQLException e) {

}}

public void actionPerformed(ActionEvent e) {String com = e.getActionCommand();

if (“Insertar”.equals(com)) {insertarFila();txtNombre.setText(“”);txtApellidos.settext(“”);txtTelefono.setText(“”);

} else {if (conexion ı= null) {

try {conexion.close();

} catch (SQLException e) {

}}

}dispose();

}}

Page 73: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 118

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

//========================================================// Implementación de la clase Ver…//========================================================public class Ver extend Dialog implements ActionListener {

private Connetion conexion;private ResultSet resultado;private Button siguiente, terminar;private TextField nombre, apellidos, telefono;

Ver(Frame f) {super(f, “Ver datos”, true);setSize(310, 160);nombre = new TextField(20);apellidos = new TextField(20);telefono = new TextField(10);

siguiente = new Button(“Siguiente”);siguiente.addActionListener(this);

terminar = new Button(“Terminar”);terminar.addActionListener(this);Panel pDatos = new Panel();pDatos.add(new Label(“Nombre: ”));pDatos.add(nombre);pDatos.add(new Label(“Apellidos: ”));pDatos.add(apellidos);pDatos.add(new Label(“Teléfono: ”));pDatos.add(telefono);pDatos.add(siguiente);pDatos.add(terminar);

add(pDatos);nombre.setEditable(false);apellidos.setEditable(false);telefono.setEditable(false);

mostrar();setVisible(true);

}

Page 74: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 119

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

public void actionPerformed(actionEvent e) {String com = e.getActionCommand();

if (“Siguiente”.equals(com)) {siguiente();

} else {if (conexion ¡= null) {

try {conexion.close();

} catch (SQLException ex) {

}dispose();

}}

}

private void mostrar() {Statement sentencia;

try {conexion = DriverManager.getConnection(“JDBC:odbc:agenda”);sentencia = conexion.createStatement();resultado = sentencia.executeQuery(“SELECT * FROM agenda”);siguiente();

} catch (SQLException ex) {

}}

private void verDatos() {try {

nombre.setText(resultado.getString(“NOMBRE”));apellidos.setText(resultado.getString(“APELLIDOS”));telefono.setText(resultado.getString(“TELEFONO”));

} catch (SQLException ex) {

Page 75: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 120

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

}}private void siguiente() {

try {if (resultado.next()) {

verDatos();}

} catch (SQLException ex) {

} catch (Exception e ) {

}}

}

Page 76: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 121

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Page 77: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 122

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Anexos

A. La Máquina Virtual Java

El lenguaje Java pertenece a una arquitectura denominada plataforma Java. La plataforma Javaestá formada por un conjunto de tecnologías que incluye: un lenguaje de desarrollo, un sistemabasado en red, una máquina virtual que permite conexiones a sistemas heterogéneos. laplataforma Java extiende los sistemas orientados a objetos a los sistemas en red. La máquinavirtual Java(MVJ) es el núcleo de esta plataforma, y es, en su forma más simple, una UCP(Unidad central de Proceso) por software que tiene bytecodes como juego de instrucciones.

Un programa escrito en Java (con exrtensión .java) se compila para ser convertido en un archivocompilado con extensión .class. Este archivo .class es un conjunto de códigos de bytes obytecode, los cuales son un repertorio de instrucciones para la MVJ. Los bytecodes son de lasiguiente forma

<opcode><…parámetros>

opcode es es código de instrucción y tiene un byte de tamaño.

Desde un punto de vista conceptual, cada fichero .class se corresponde con un objeto –noexiste un ejecutable monolítico que se cargue con todo el código. Un fichero .class se puedereferir a otros ficheros .class mediante import, implements o extends. La MVJ carga los ficheros.class (denominados clases) de la red o del sistema local, según los necesita la clase enejecución.

Esta arquitectura de carga y enlace dinámico permite a la MVJ actualizar los ficheros .class de losservidores proporcionando al cliente la última versión de software. La administración nula, elsoftware sin versión y la arquitectura JIT (Just-In-Time, ahora en su versión HotSpot) hacen de laplataforma Java muy elegante y flexible.

Los ficheros .class sirven para cualquier plataforma y son independientes de la arquitectura.Cualquier equipo que tenga una implementación de la MVJ podrá ejecutar cualquier fichero.class. La MVJ implementa una máquina de pila, lo que significa que las instrucciones obtienenlos parámetros de la pila de openandos y devuelve el resultado a la pila. Esta pila se encuentraen la memoria principal.

Page 78: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 123

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Plataforma Java simplificada: Un programa escrito con la API de Java se ejecuta sobre una MáquinaVirtual. La JVM aísla al programa del hardware.

Page 79: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 124

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Funcionamiento de un compilador: Un compilador clásico traduce las sentencias escritas en unlenguaje de alto nivel a un archivo con otro tipo de instrucciones (.obj). El mismo proceso sobre unconjunto de funciones genera los archivos de bibliotecas (.lib). Luego el enlazador utiliza los archivosobjeto y las bibliotecas para generar un archivo ejecutable.

Page 80: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 125

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Funcionamiento de un intérprete: Básicamente un intérprete funciona como un bucle que leeinstrucciones del programa fuente una a una, las analiza, la separa y la ejecuta. Este proceso se repitehasta que se terminan las instrucciones o hay alguna que detenga el programa.

Page 81: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 126

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Funcionamiento del intérprete de bytecodes: Sistema desarrollado por la Universidad de Californiapara el lenguaje Pascal, que mejora el rendimiento de un intérprete clásico. En este caso el intérpretetrabaja sobre instrucciones que previamente ya han sido traducidas a un código intermedio. Con estesistema se elimina la necesidad de cada una de las instrucciones que componen el programa fuentepor que ya han sido analizadas.

Page 82: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 127

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Compilador Just-In-Time (JIT): Un compilador JIT compila el código fuente convirtiéndolo en códigomáquina antes de ejecutarlo. Es decir, traduce los bytecodes a código nativo, realizando cierto gradode optimización.

Page 83: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 128

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Compilador HotSpot: El compilador HotSpot es una mejora sobre el JIT. Cuando se cargan losbytodes producidor por el compilador javac, éstos son interpretados por la Máquina Virtual. Cuando seejecutan, el perfilador (profiler) mantiene información sobre el rendimiento y selecciona el métodosobre el que se va a realizar la compilación. Los métodos compilados se almacenan en la caché, en elcódigo máquina nativo. Cuando se vuelve a invocar al método, se utiliza ésta versión. Control permiteseleccionar cuándo se debe ejecutar el método interpretado o el nativo.

Page 84: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 129

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Plataforma Java: La plataforma Java es un conjunto de bibliotecas de clases, APIs, adaptadores,Máquina Virtual JVM abierto y extensible.

Page 85: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 130

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

B. Convenios de programación en Java

Los convenios de programación son un conjunto de reglas para definir un estilo uniforme yhomogéneo en la implementación del código fuente de un programa.

Estructura de un archivo fuente

Todo archivo fuente tiene la siguiente estructura:

• Comentario inicial, que sirve para escribir el objetivo del archivo.• Sentencia de paquete, si existe• Importación de las clases e interfaces, que deben aparecer en el siguiente orden:§ Comentarios de documentación de la clase o interfaz.§ Sentencia de declaración de la clase o interfaz.§ Atributos estáticos, primero los públicos, después los protegidos, después los de

paquete y finalmente los privados.• Resto de los atributos, primero los públicos, después los protegidos, después los de

paquete y finalmente los privados.• Constructores.• Resto de los métodos.

Sangrado y tamaña de líneas

El sangrado se aplica a toda estructura lógica que esté contenida en otra. El sangrado es untabulador y suele ser de 2 a 4. Las líneas no deben ser demasiado largas, sobre unos 70caracteres (una línea de pantalla), incluyendo los espacios de sangrado. Si la línea es demasiadolarga se dividirá según los siguientes principios:

§ Tras una coma.§ Antes de un operador, que pasará a la línea siguiente.§ Una construcción de alto nivel, por ejemplo, una expresión con paréntesis.§ La nueva línea deberá alinearse con un sangrado lógico respecto al punto de ruptura.

Page 86: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 131

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Ejemplos:

Dividir tras una coma.

funcion (expresion1, expresion2, expresion3);

Dividir tras una coma, alineando la siguiente línea de forma lógica.

funcion1 (expresion1, funcion2 (expresion2,

expresion3));

Mantener la expresión entre paréntesis en la misma línea.

nombre1 = nombre2 * (nombre3 + nombre4 – nombre5) + 4 * nombre6;

Comentarios

Los comentarios miden la calidad del código fuente. Deben ser claros y concisos (concontenido). Se debe poner un comentario en las siguientes circunstancias:

§ Al principio de cada archivo con la descripción y el objetivo del mismo.§ Antes de cada método, explicando para qué sirve.§ Antes de cada algoritmo, explicando qué hace.§ Antes de cada definición de estructuras de datos, incluyendo cuál es su objetivo.§ Antes de cada parte significativa del programa.

Los comentarios deben ir precedidos por una línea en blanco, para separarlos lógicamente.Existe varias formas de escribir comentarios.

Comentarios multilínea: Cada línea debe ir precedida por el carácter ‘*’, excepto la primera yla última, que contendrán los símbolos de principio y fin de comentario.

Page 87: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 132

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Ejemplo:

/* * Esto es un comentario multilínea… */

Comentarios en una línea: Estos comentarios deben ir sangrados al mismo nivel que elcódigo que comentan.

Ejemplo:

/* Comentario en línea…*/if (funcion(variable) == 0) {

sentencias1;} else {

sentencias2;}

Comentarios a final de línea: Deben estar suficientemente separadas del código para que sealegible.

Ejemplo:

if (funcion(variable) == 0) {sentencias1; /* comentario al final de línea…*/

} else {sentencias2;

}

Page 88: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 133

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Comentario hasta final de línea: Se antepone el símbolo ‘//’ y no se recomienda usarlo paracomentarios multilínea.

Ejemplo:

if (funcion(variable) == 0) {// comentario hasta final de línea…sentencias1;

} else {sentencias2;

}

Declaraciones

Las declaraciones de atributos y métodos deberían hacerse en una única línea. Si se alinea losnombres a la izquierda, resultará un código más legible.

Ejemplo:

int nombre1:Objeto objeto1;String cadena1:

Hay excepciones en las cláusulas de inicialización de una sentencia for y la declaración devariables auxiliares.

int x, y, z;for (int i = 0, j = 1, k = 100; …

En ningún caso se deben mezclar, en la misma líneas, declaraciones de distintos tipos.

Ejemplo:

int numeroDeElementos, unArray[]; // ERRORint numeroDe Elementos; // ERROR

Page 89: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 134

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Es recomendable declarar las variables al principio del bloque de código y evitar declarar unavariable en un bloque interno que oculte una declaración de un bloque exterior.

Ejemplo:

public funcion(int a) {int var1;

if (a > 2) {int var1;

}}

Espacios en blanco

El espacio en blanco separa unos elementos de otros para hacer más legible y claro el código.Se pueden aplicar líneas o espacios en blanco. Se deben aplicar líneas en blanco en lossiguientes casos:

§ Separando dos métodos dentro de una clase.§ Entre la declaración de variables de atributos de una clase y sus constructores y

métodos.§ Entre la declaración de variables locales de un método y la parte de ejecución.§ Antes de un comentario dentro del código.

Ejemplos:

if (condicion) {sentencias;

}

// un comentario…while (nuevaCondicion) {

sentencias;}

Page 90: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 135

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Para separar código en trozos funcionales.

Ejemplo:

if (n > 0) {sentencias;

}

// un algoritmo…for (int i = 0; …

Los espacios en blanco se utilizan para separar operaciones y partes de sentencias.

Ejemplos:

a = b + c – 1;for (int i = 0; i < 100, i ++) {

sentencias;}

Instrucciones

Cada instrucción debe ir en una única línea. Ejemplo:

i++;j++;

Sentencia IF:

if (condicion) {sentencias;

}

if (condicion) {sentencias;

Page 91: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 136

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

} elsesentencias;

}

if (condicion) {sentencias;

} else if (condicion) {sentencias;

} else {sentencias;

}

Las sentencias dentro del if deben ir siempre entre llaves, aunque sólo contenga una.

Sentencia SWITCH

Separa los casos unos de otros lo suficiente como para que queden claros. Poner siempre lasentencia default aunque no se utilice y break después de default aunque sea redundante.

switch (condicion) {case x:

sentencias;break;

case y:case z:

sentencias;break;

default:sentencias;break;

}

Page 92: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 137

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Sentencia FOR

Poner siempre llaves aunque sólo tenga una sentencia.

for (inicio; condición; incremento) {sentencias;

}

Si la estructura for no contiene sentencias se debe poner el punto y coma (;) en una nuevalínea.

for (inicio; condición; incremento);

Sentencia WHILE

Poner siempre llaves aunque solo contenga una sentencia.

while (condición) {sentencias;

}

Si no se repiten sentencias, poner el punto y coma (;) en una nueva línea.

while (condición);

Sentencia DO-WHILE

do {sentecias;

} while (condición);

Page 93: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 138

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Sentencia TRY-CATCH-FINALLY

try {sentencias;

} catch (excepcion1) {sentencias;

} catch (excepcion2) {sentencias;

} finallysentencias;

}

La sentencia return no debe pasar el valor que devuelve entre paréntesis, para diferenciarlo deuna llamada a un método.

Elección de nombres

Reglas para asignar nombre a los distintos elementos de un programa:

Clases: Utilizar sustantivos, simples y descriptivos. La primera letra debe estar en mayúscula y,si la palabra es compuesta, cada palabra debe empezar por mayúscula. No se deben utilizarabreviaturas ni acrónimos.

Ejemplos:

clase ISobjetoX;clase DefincionDeClase;

Interfaces: Utilizar adjetivos –habitualmente terminados en ‘able’, ‘ible’. La primera letra debeestar en mayúscula y, si la palabra es compuesta, cada palabra debe empezar por mayúscula. Nose deben utilizar abreviaturas ni acrónimos.

Ejemplos:

interface Dibujable;interface Serializable;

Page 94: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 139

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Métodos: Utilizar verbos descriptivos, en infinitivo. La primera letra debe estar en minúscula y,si la palabra es compuesta, cada palabra debe empezar por mayúscula –excepto la primera. Nose deben utilizar abreviaturas ni acrónimos.

Ejemplos:

calcularIva();gestionarEventos();manejarVentana();

Atributos: Utilizar nombre descriptivos. La primera letra debe estar en minúscula y, si lapalabra es compuesta, cada palabra debe empezar por mayúscula –excepto la primera. No sedeben utilizar abreviaturas ni acrónimos.

Ejemplos:

int valorCalculado;Lista elementosDeLista;

Constantes: Utilizar nombres en mayúscula. Si la palabra es compuesta, separar cada una deellas mediante un guión bajo ‘_’.

Ejemplos:

final int CAMBIO_MONEDA = 168;final int VALOR_INICIAL = 0;

Page 95: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 140

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Prácticas de diseño

§ Minimizar la parte pública de una clase.

§ Todos los atributos deben declararse como protegidos o privados. Para el acceso y paramodificar sus valores, se deben de utilizar métodos de acceso.

§ Los métodos de acceso a los atributos deberían ser la única forma de acceder a losatributos de una clase, incluso dentro de la propia clase. Para identificar los métodosde acceso se utiliza el prefijo get, para acceder al valor de un atributo de una clase, yset, para establecer el valor de un atributo de una clase. Si el tipo de atributo esboolean, se puede poner el prefijo is.

Ejemplos:

nombre = getNombre();setNombre(“David”);isCompleto();

§ Si un atributo contiene múltiples valores, añadir métodos para acceder, insertar yeliminar valores de dichos atributo de manera individual.

§ Mantener la visibilidad de los métodos lo más reducida posible. Lo mejor es que seancalificados como protected, para que las clases derivadas puedan acceder a ellos. Eshabitual que los métodos, para obtener un valor, sean públicos y los métodos, parafijar un valor sean protected.

§ Los atributos calificados como static deben inicializarse siempre.

Page 96: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 141

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

C. Rendimiento

Una de las características que se le achacan a la plataforma Java es su bajo rendimiento. Sinembargo, existen técnicas que mejoran sustancialmente el rendimiento de un programa. Segúnuno de los pioneros de la ciencia de la computación Donald Knuth, “la optimización prematuraes la raíz de todos los males”. La optimización se debe aplicar de manera razonable, no sólo hayque optimizar por optimizar.

Si el código funciona, la optimización seguramente introducirá nuevos e insidiosos errores.La optimización tiende a hacer el código menos legible y más difícil de mantener.

Algunas de las técnicas utilizadas hacen el código más rápido, pero reducen su extensibilidad.

Optimizar código para una plataforma puede hacer que no funcione en otra.

Se puede estar ofuscado, invirtiendo demasiado tiempo en la optimización, sólo para ganar unpoco de rendimiento.

Antes de optimizar, se debe considerar qué es lo que hay que optimizar. La utilización de unalgoritmo mejor probablemente sea la mejor solución en la mayoría de los casos –optimizaciónde alto nivel.

Regla 1: Se debe considerar las optimizaciones de alto nivel antes que las de bajo nivel.Regla 2: El 90% del tiempo de ejecución de un programa utiliza el 10% del código. Laoptimización de ese 90% del programa no tiene efectos notables en el rendimiento, tal vez unincremento del 5%. La primera tarea que hay que hacer es identificar ese 10% de código quehace que el programa consuma la mayoría del tiempo de ejecución.

Técnicas generales de optimización

Reducción intensa: La reducción intensa consiste en sustituir una operación por otraequivalente. El ejemplo más común es el uso de los operadores de desplazamiento de bits paramultiplicar y dividir enteros.

Page 97: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 142

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Ejemplos:

x >> 2 en sustitución de x / 4x << 1 en sustitución de x * 2

Eliminación de subexpresiones comunes: Consiste en eliminar cálculos redundantes

Ejemplo:

Las expresiones

double x = d * (lim / max) * sx;double y = d * (lim / max) * sy;

se sustituyen por

doubles tam = lim / max;double x = d * tam * sx;double y = d * tam * sy;

Movimiento de código: Consiste en convertir una operación o una expresión de cálculo eninvariante. El código se mueve si sólo se ejecuta cuando hay algún cambio. Se utilizahabitualmente en bucles.

Ejemplo:

La expresión

for (int i = 0; i < x.length(); i++) {x[i] *= Math.PI * Math.cos(y);

}

se sustituye por

double coseno = Math.PI * Math.cos(y);for (int i = 0; i < x.length(); i++) {

x[i] *= coseno;}

Page 98: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 143

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Balanceo de bucles: El balanceo de bucles reduce la sobrecarga del control del bucle, es decir,reduce las iteraciones.

Ejemplo: Si se sabe que la longitud del array x[] es siempre un múltiplo de 2, el bucle se puederescribir del siguiente modo.

double coseno = Math.PI * Math.cos(y);for (int i = 0; i < x.length(); i += 2) {

x[i] *= coseno;x[i + 1] *= coseno;

}

El compilador

Los compiladores modernos de C y Fortran producen código muy optimizado. Loscompiladores de C++ producen código eficiente, y sin embargo, no pueden producir códigoóptimo. Estos compiladores usan las técnicas generales de optimización.

javac, JIT y compiladores de código nativo.

EL nivel de optimización que proporciona javac cuando genera código compilado es mínimo.

Por defecto, realiza las siguientes operaciones de optimización:

§ Plegamiento de constantes: el compilador resuelve cualquier expresión constante, porejemplo, i = (10 * 10) lo convierte en i = 100.

§ Plegamiento de saltos: el compilador evita saltos innecesarios.

§ Eliminación de código muerto: no se produce código en sentencias como if (false) i =1.

javac tiene la opción –o que convierte la llamada a ciertos métodos en métodos en línea(inline).

Page 99: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 144

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Los compiladores JIT (actualmente, los compiladores HotSpot) convierte en ejecución losbytecodes de Java en código nativo. Estos compiladores aumentan drásticamente el rendimientode un programa. Un compilador JIT tiene que ver más con la generación rápida de código quecon la generación de código rápido.

Los compiladores nativos compilan directamente en el código nativo, aumentandoenormemente el rendimiento, pero sacrificando la portabilidad.

Principios de rendimiento

Medir primero, medir mucho: No se puede gestionar eficazmente si no se conoce la fuente delos problemas. Este principio es equivalente a la regla 90/10.

Evitar la instanciación excesiva de objetos: La MVJ reduce mucho su rendimiento cuando seestán creando muchos objetos pequeños. Por ejemplo, la clase String es uno de los que masimpacto provoca en el rendimiento. Cada vez que se modifica un String, se están creando uno ovarios objetos nuevos.

Page 100: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 145

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

D. j-UML

UML (Unified Modeling Languaje) es un entorno estándar para el Diseño Orientado a Objetos /Análisis Orientado a Objetos (DOO/AOO). UML es un lenguaje gráfico para visualizar,especificar, construir y documentar los componentes de un sistema con gran cantidad desoftware. UML proporciona una forma estándar para describir los planos de un sistema, tanto lascosas conceptuales (procesos de negocio, funciones del sistema) como las cosas concretas(código de las clases, esquemas de bases de datos, componentes de software reutilizables).

UML describe un modelo. Todos los sistemas tienen una tendencia natural a hacerse máscomplejos con el paso del tiempo, por lo tanto, modelarlo es una decisión acertada.

La elección de qué modelos crear tiene un fuerte impacto sobre cómo se acomete un problemay cómo se da forma a una solución.

Principios básicos de modelado:

• Un modelo es una simplificación de la realidad.• Todo modelo puede ser expresado a diferentes niveles de precisión.• Los mejores modelos están ligados a la realidad.• Un único modelo no es suficiente. Cualquier sistema no trivial se aborda mejor a través

de un pequeño conjunto de modelos casi independientes.

En el software, hay varias formas de enfocar un modelo. Las dos formas más comunes son laperspectiva orientada a objetos y la perspectiva algorítmica.

UML es un lenguaje y es tan sólo una parte de un método de desarrollo de software. Un procesoes un conjunto ordenado de pasos para alcanzar un objetivo. En la ingeniería de software, elobjetivo es entregar un producto que satisfaga las necesidades del usuario de forma eficiente ypredecible.

UML es independiente del proceso, lo que significa que se puede utilizar con diferentesprocesos de ingeniería de software.

Sin embargo, UML no es un lenguaje muy utilizado por los programadores. J-UML no intentasustituir a UML. Al contrario, intenta adaptar ambas tecnologías (Java y UML), es decir, J-UMLdefine la forma de transferir los modelos UML en la implementación de Java.

Page 101: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 146

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

En su mayor parte, J-UML es una extensión de UML y puede considerarse un subconjunto de él.J-UML es un extensión de Diseño Orientado a Objetos específico para Java.

Page 102: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 147

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Page 103: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 148

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

E. Proceso de desarrollo de software

PROCESO UNIFICADO

El Proceso Unificado (PU) es un proceso iterativo. Un enfoque iterativo propone unacompresión incremental del problema a través de refinamientos sucesivos. Una parte delenfoque iterativo es la flexibilidad para acomodarse a nuevos requisitos o cambios en elobjetivo. También permite identificar y resolver riesgos lo antes posible.

Fases e iteraciones

Una fase es el intervalo de tiempo entre dos hitos importantes del proceso, durante la cual secumple un conjunto bien definido de objetivos. EL PU identifica cuatro fases:

§ Iniciación: establece la planificación del proyecto.§ Elaboración: Establece un plan para el proyecto y una arquitectura correcta.§ Construcción: desarrolla el sistema.§ Transición: proporciona el sistema a los usuarios finales.

Las fases de iniciación y elaboración incluyen las actividades de diseño del ciclo de vida deldesarrollo. Las fases de construcción y transición constituyen su producción. Dentro de cadafase hay varias iteraciones.

Una iteración representa un ciclo de desarrollo completo, desde la captura de requisitos hasta laimplementación y pruebas. Cada iteración se centra en disminuir algún riesgo y concluye conun hito bien definido.

Page 104: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 149

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Actividades y Productos resultantes de cada Fase

(T)ransición

100%100%100%100%100%

<10%20-40%40-80%≥ 80%casi 100%

0-5%5%10%50%50-70%

Conjunto de C.U. diseñados para implementar y probar

Conjunto de C. U. analizados

Casos de Uso Desarrollados

Casos de Uso Identificados

Modelo de Negocio

(C)onstrucción

(E)laboración

(I)nicio

Diagramas UML

Clases/Objetos

Despliegue

Componentes

Actividades

Estado

DesplieguePruebasImplementaciónAnálisis/DiseñoRequerimientos

Colaboración

Secuencia

Casos de Uso

Page 105: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 150

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Diagramas de clases: Un diagrama que muestra un conjunto de clases, interfaces,colaboraciones y sus relaciones.Diagramas de objetos: Un diagrama estructural que muestra un conjunto de objetos y susrelaciones.Diagramas de casos de uso: Un diagrama de comportamiento que muestra un conjunto decasos de uso, actores y sus relaciones.Diagramas de secuencia: Un diagrama de comportamiento que muestra una interacción,destacando la ordenación temporal de los mensajes.Diagramas de colaboración: Un diagrama de comportamiento que muestra una interacción,destacando la organización estructural de los objetos que envían y reciben mensajes.Diagramas de estado: Un diagrama de comportamiento que muestra una máquina de estados,destacando el comportamiento dirigido por eventos de un objeto.Diagramas de actividades: Un diagrama de coportamiento que muestra una máquina deestados, destacando el flujo de control a través de actividades.Diagramas de componentes: Un diagrama estructural que muestra un conjunto decomponentes y sus relaciones.Diagramas de despliegue: Un diagrama estructural que muestra un conjunto de nodos y susrelaciones.

Page 106: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 151

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

En la fase de INICIO

Identificar todas las entidades externas que interactuan con el sistema (actores) y definir lanaturaleza de estas interacciones a alto nivel. Esto significa identificar todos los casos de uso(c.u.) y describir los más importantes. El modelo de negocio incluye criterios de éxito,valoración de los riesgos, estimación de los recursos y un plan de las fases del proyecto con loshitos más relevantes.

Para soluciones Web, es necesario enfocar la fase de inicio más en la realización de prototiposque en la arquitectura. Una vez establecidos los requerimientos del sistema se hace una brevedescripción de del diesño creativo. A continuación, se hace un mapa donde se identifican laspantallas principales (pantallas lógicas), representándolas como diagramas de clases.

Procesos

• Modelado del negocio• Requerimientos• Análisis y diseño• Implementación• Pruebas• Despliegue

Productos

• Una lista de características. Un glosario.• Una primera versión del modelo de negocio de describe el contexto del sistema.• Un esbozo de los modelos que representan una primera versión del modelo de casos de

uso, el modelo de análisis y el modelo de diseño. Respecto al modelo de implementación ypruebas puede haber un modelo rudimentario. también se genera una primera versión delos requisitos adicionales.

• Un primer esquema de la descripción de una arquitectura candidata, que perfila la vista delos modelos de casos de uso, análisis, diseño e implementación.

• Posiblemente, un prototipo exploratorio que muestra el uso del nuevo sistema. En el casode proyectos Web, un mapa con las pantallas más importantes identificadas.

• Una lista inicial de riesgos y una clasificación de casos de uso.• Los rudimentos de un plan para el proyecto en su totalidad, incluyendo el plan general de

Page 107: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 152

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

las fases.• Un primer borrador del análisis de negocio, que incluye: contexto del negocio y criterios de

éxito (estimación de beneficios, reconocimiento del mercado, estimaciones del proyecto)

Criteris de evaluación

• Credibilidad de las estimaciones coste/tiempo, prioridades, riesgos y prodeso de desarrollo• Profundidad y expansión del prototipo de la arquitectura desarrollada• Gastos reales frente a gastos planeados

Page 108: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 153

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

En la fase de ELABORACIÓN

Analizar el dominio del problema, establecer bases sólidas para la arquitectura, desarrollar elplan del proyecto y eliminar los elementos de riesgo más importantes. Dependiendo de lascaracterísticas de la arquitectura (tamaño, riesgo, novedad, y ámbito), éste se desarrollará en unao más interacciones.

Procesos

• Modelado del negocio• Requerimientos• Análisis y diseño• Implementación• Pruebas• Despliegue

Productos

• Preferiblemente, un modelo completo de negocio que describe el contexto del sistema.• Una nueva versión de todos los modelos: casos de uso, análisis, diseño, implementación y

despliegue .• Al final de la fase de elaboración, estos modelos estará completos en menos de un 10%,

exceptuando los modelos de caso de uso y de análisis que pueden incluir más (en algunoscasos hasta el 80%) casos de uso para tener la certeza de que se han comprendido losrequisitos.

• Una línea base de la arquitectura.• Una descripción de la arquitectura, incluyendo vistas de modelos de casos de uso, análisis,

diseño, despliegue e implementación.• Una lista de riesgos actualizada.• El plan de proyecto para las fases de construcción y transición.• Un manual del usuario o preliminar.• El análisis de negocio completo, incluyendo la apuesta económica.

Criterios de evaluación

• ¿Es estable la versión del producto?

Page 109: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 154

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

• ¿Es estable la arquitectura?• ¿Se han resuelto los riesgos más importantes ?• ¿Está el plan de construcción sufucientemente detallado?• ¿Son aceptables las asignaciones de recursos reales frente a las planificadas?

Page 110: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 155

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

En la fase de CONSTRUCCIÓN

Integrar y probar en el producto todos los componentes y características.

Procesos

• Modelado del negocio• Requerimientos• Análisis y diseño• Implementación• Pruebas• Despliegue

Productos

• El plan de proyecto para la fase de transición.• El sistema software ejecutable -la versión con capacidad operativa inicial o beta-. Ésta es la

construcción final de la fase.• Todos los artefactos, incluyendo los modelos del sistema.• El mapa Web completo, relacionando todas las pantallas.• La descripción de la arquitectura mínimamente modificada y actualizada.• Una versión preliminar del manual del usuario, lo suficientemente detallado como para

guiar a los usuarios de la beta.• El análisis de negocio, que refleja la situación al final de la fase.

Criterios de evaluación

• ¿Está el producto lo sufucientemente maduro para despleguarlo y ser usado por lacomunidad de usuarios?

• ¿Están todos los hitos de transición preparados para ser usados por los usuarios?• ¿Son aceptables las asignaciones de recursos reales frente a las planificadas?

Page 111: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 156

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

En la fase de TRANSICIÓN

El propósito de esta fase es la transición del producto de software a la comunidad de usuarios.Una vez que el producto se ha puesto a disposición del usuario final, se corrigen algunosproblemas o se finaliza el proceso.

Procesos

• Modelado del negocio• Requerimientos• Análisis y diseño• Implementación• Pruebas• Despliegue

Productos

• El software ejecutable, incluyendo el software de instalación.• Documentos legales como contratos, licencias, renuncias de derechos y garantías.• La versión competa y corregida de línea base de la versión del producto, incluyendo los

modelos del sistema.• La descripción completa y detallada de la arquitectura.• Manuales y material de formación del usuario final, del operador y del administrador del

sistema.• Referencias (incluyendo la Web) para la ayuda del cliente acerca de dónde encontrar más

información, cómo informar de defectos o dónde encontrar información sobre defectos yactualizaciones.

Objetivos primarios

• Lograr el soporte al usuario.• Lograr que se lleve a cabo la línea de despliegue de manera consistente, con los criterior de

evaluación.• Lograr que sea practico el coste y la eficacia del producto.

Page 112: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 157

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Criterios de evaluación

• ¿Está satisfecho el usuario?• ¿Son aceptables las asignaciones de recursos reales, frente a las planificadas?

Page 113: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 158

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

G. Introducción al lenguaje SQL

SQL es una herramienta (un lenguaje informático) para organizar, gestionar y recuperar datosalmacenados en una base de datos relacional. El nombre SQL es una abreviación de StructuredQuery Language (Lenguaje Estructurado de Consultas).

La notación de las sentencias genéricas puede contener los siguientes símbolos:

Cochetes [] : indican que lo contenido es opcional.Barra vertical |: indica que se debe elegir una opción entre varias.Puntos suspensivos … : indica la posibilidad de repetición de elementos.

Las sentencias más comunes son:

ALTER TABLE

Permite añadir una o más columnas a una tabla ya existente. Las columnas nuevas se rellenancon nulos.

Sintaxis:

ALTER TABLE <nombreTabla> ADD <nombreColumna tipo>ALTER TABLE <nombreTabla> (ADD nombreColumna tipoDato [, ADDnombreColumna tipoDato, …];

Ejemplo:

ALTER TABLE cliente ADD (nombre INT);

Page 114: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 159

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

CREATE INDEX

Crea un índice en una o más columnas de una tabla, mediante las palabras clave ASC y DESC seespecifica si la columna se va a indexar de forma ascendente o descendente. En caso de usar lapalabra UNIQUE, se especifica que si se produce alguna coincidencia de un valor en la tabla segenerará un error.

Sintaxis:

CREATE [UNIQUE] INDEX <indice> ON <nombreTabla> (nombreColumna [ASC | DESC][, nombreColumna [ASC | DESC], …];

Page 115: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 160

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

CREATE TABLE

Crea una tabla.

Sintaxis:

CREATE TABLE <nombreTabla> (elementoColumna [, elementoColumna, …]);

El elementoColumna puede ser una definición de columna o una definición de restricción detabla.

nombreColumna tipoDato [DEFAULT expresion] [restriccionColumna [,restriccionColumna, …]] UNIQUE (nombreColumna [, nombreColumna, …]) | PRIMARYKEY (nombreColumna [, nombreColumna, …]) | CHECK (condicionDeBusqueda) |FOREING KEY (lista de columnas de referencia) REFERENCES tablaReferida (lista decolumnas referidas);

DEFAULT especifica el valor, por defecto, que se introduce en la columna.Las restricciones de la columna pueden ser una de las siguientes palabras:

NOT NULL: la columna no puede contener valores nulos.UNIQUE: dos filas no pueden tener el mismo valor en una columna.PRIMARY KEY: la columna representa la clave primaria para la tabla.REFERENCES tablaReferida (lista de columnas referidas): especifica la clave externa.CHECK condicionDeBusqueda: restringe valores que se insertan en las columnas.

Ejemplo:

CREATE TABLE cliente (clienteID INTEGER PRIMARY KEY, nombre CARÁCTER(40));

Page 116: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 161

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

DELETE

Borra las filas de una tabla que cumplan una condición. Si no se específica la condición, seborrará todo en contenido de la tabla.

Sintaxis:

DELETE FROM <nombretabla> [WHERE condicionDeBusqueda];

Ejemplo:

DELETE FROM cliente WHERE clienteID = 12734;

DROP INDEX

Elimina un índice.

Sintaxis:

DROP INDEX <nombreIndice> ON <nombreTabla>:

DROP TABLE

Elimina una tabla.

Sintaxis:

DROP TABLE <nombreTabla>;

Page 117: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 162

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

INSERT

Inserta una fila en una tabla.

Sintaxis:

INSERT INTO [(nombreColumna1, [nombreColumna2, …])] VALUES(expresionColumna1 [, expresionColumna2, …]);

Ejemplo:

INSERT INTO cliente (clienteID, nombre) VALUES (34928, ‘David Martínez’);

Page 118: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 163

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

SELECT

Realiza consultas sobre las tablas de una base de datos.

Sintaxis:

SELECT [ALL | DISTINCT] listaDeSeleccion FROM tabla1, … [WHERE condicion[subconsulta]] [GROUP BY nombreColumna [HAVING condicion]] [UNIÓN | UNIÓNALL | INTERSECT | MINUS] selección] [ORDER BY columa [ASC | DESC]]:La palabra clave ALL es el valor por defecto y devuelve todos los valores de las filas que cumplanla condición de la sentencia SELECT.

La palabra clave DISTINCT elimina aquellas filas que se encuentran repetidas en la tabla.

La palabra clave WHERE establece una condición de búsqueda y permite condiciones conencadenamientos de tipo lógico mediante las palabras clave AND y OR.

Ejemplo:

SELECT DISTINT clienteID FROM cliente WHERE nombre LIKE “E%” OR nombre LIKE“D%”;

Se devolverán sólo aquellas filas cuyo campo “nombre” comience por E o D.

La condición de búsqueda puede tener las siguientes formas:

1 expresión OPERADOR expresión| expresión LIKE patron| nombreColumna IS [NOT] NULL

Los patrones que admite LIKE son:

% significa ninguno o más caracteres._ significa sólo un carácter.

2 expresion BETWEEN expresión AND expresión| EXISTS (subconsulta)| expresión [NOT] IN (subconsulta)

Page 119: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 164

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

| expresión OPERADOR (ALL | ANY) subconsulta

La palabra clave BETWEEN permite especificar un intervalo de valores. La palabra EXISTSseleccionará la tupla de la consulta principal, si la subconsulta devuelve algún valor.El tipo IN se emplea para seleccionar todas las filas para las que el valor de una columna seencuentra (o no) en el resultado de la subconsulta.

Mediante ALL se seleccionarán todas las tuplas que cumplan el comparador para todos losvalores de la subconsulta asociada y, mediante ANY, se seleccionarán sólo algunos.

Ejemplo:

SELECT * FROM cliente WHERE nombre= ‘David’ ORDER BY nombre;

El símbolo * es un comodín que selecciona todos los campos de las tablas,

UPDATE

Actualiza los valores de las columnas de una tabla.

Sintaxis:

UPDATE <nombreTabla> SET nombreColumna = {Extresion | NULL} [,nombreColumna = {Expresión | NULL}, …] WHERE condicion;

Ejemplo:

UPDATE cliente SET nombre = ‘Isaac Martínez’ WHERE nombre = ‘David Martínez’;

Page 120: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 165

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

H. Diseño de Interfaz del Usuario

Para la mayoría de los usuarios el interfaz de un programa es el software. Por lo tanto, el diseñodel interfaz es importante ya que, un interfaz intuitivo es fácil de utilizar. Si es fácil de utilizarpor el usuario entonces resulta fácil de aprender, lo que significa una menor ayuda para elusuario y eso repercute en una mayor satisfacción.

Estilo en aplicaciones estándar

Las aplicaciones y utilidades que desarrolla la Empresa están hechas para que sean básicamentefáciles de usar. Todas las aplicaciones que se desarrollan como estándares están hechas para losSistemas Operativos más populares (Windows, Mac OS) que poseen sus propio manual deestilo, es decir, en este documento no se describirán qué apariencias tomará los objetos en unaaplicación o en una parte de ella, como por ejemplo, definir una pantalla modal, o un botón ouna caja de selección (estos son implícitos a propio Sistema Operativo y a la herramienta dedesarrollo). Lo que si se describirá son las distancias entre esos objetos, los colores usados, lostipos de letra o el diseño integral de la aplicación.

Estructuras

Basándose el la documentación aportada por “Human Interface Guidelines. Developer Notes byApple Computer, Inc, 1997”, se han resumido las siguientes reglas aplicables a todos losprogramas.

En principio existen tres tipos de ventanas: normales, modeless y modales. Debido a lanaturaleza de las aplicaciones de gestión y de empresa se procurará siempre hacer ventanas tipomodeless (es decir, que permitan interactividad entre ellas y no bloqueen a otras).Las ventanas normales son las usadas para crear documentos y son usadas habitualmente poraplicaciones de procesamiento de texto, de diseño gráfico y similares. En el caso de aplicacionesde gestión es muy raro usar este tipo de ventanas.

Las ventanas modales se usan para pedir información relevante al usuario, de tal modo que seanecesario que el usuario controle el proceso, es decir, acepte o cancele los datos pedidos por laaplicación antes de continuar. Las ventanas modales pueden ser de posición fija o movibles. Lasfijas no poseen barra de título y generalmente piden datos necesarios para continuar con un

Page 121: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 166

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

proceso. Las movibles poseen título y suelen ser usadas para aportar información que podríautilizar tanto para continuar con un proceso una vez establecidas las opciones (por ejemplo laselección de un subconjunto de informes antes de imprimir) o en cualquier otro momento paraun proceso dado (por ejemplo la ventana de preferencias). Las ventanas modales se usantambién para enviar mensajes de aviso, notificaciones o errores (estas últimas suelen aportarlaslos Sistemas Operativos).

Las ventanas modeless son similares a las modales en el uso pero se diferencias de éstas en quelas modeless siempre están disponibles y pueden ser intercambiadas con otras. Estas son lasventanas más usadas por las aplicaciones de gestión. Servirán para crear todo tipo de fichas dedatos (pacientes, proveedores, productos, etc.) y documentos de empresa (facturas, pedidos,etc.).

Espacios

A continuación se describirán los espacios estándar entre los distintos controles de una ventana(sea modeless o modal).

General

§ Dejar un mínimo de 4 pixels entre ítems interactivos. Si es posible dejar un espacio de6 pixels.

§ Dejar un mínimo de 4 pixels entre cualquier ítem y los márgenes de la ventana.§ Dejar 16 pixels entre grupos de controles. Si el tipo de letra es de 10 puntos se podrían

dejar 14 pixels.§ La distancia entre el icono de una ventana de alerta y el texto es de 20 pixels.

Botones

§ Dejar un espacio de 12 pixels entre botones cuando estén puestos horizontalmente.§ Dejar un espacio de 10 pixels entre botones cuando estén puestos verticalmente.§ El alto estándar de un botón es de 20 pixels.§ El ancho estándar de un botón es de 58 pixels.§ La distancia entre el texto interno de un botón y su margen es de 8 pixels*.§ La distancia entre el texto situado debajo de un botón es de 6 pixels.

Page 122: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 167

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

§ El botón de aceptar está situado abajo a la derecha a una distancia de 12 pixels desdelos márgenes de la ventana que lo contiene.

§ El botón de cancelar está situado abajo a la derecha a una distancia de 12 pixelsrespecto al de aceptar si están dispuestos horizontalmente.

* Esta distancia debe implementarla la herramienta de desarrollo.

Cajas de verificación

§ El ancho de una caja de verificación es de 18 pixels.§ La distancia entre una caja de verificación y un icono es de 5 pixels (desde el final de la

frase más larga que tenga una caja de verificación).§ Botones de radio§ La distancia entre el texto y los botones de radio es de 5 pixels y entre los propios

botones de 12 cuando estén dispuesto horizontalmente.§ La distancia entre un botón de radio situado debajo de un icono es de 4 pixels.§ Menús emergentes (Popups)§ La distancia entre popups dispuestos verticalmente es de 6 pixels.§ La distancia entre popups dispuestos horizontalmente es de 4 pixels.§ La distancia entre un item y un popup dispuestos horizontalmente es de 4 pixels.§ El alto de un popup es de 20 pixels*

* Esta distancia debe implementarla la herramienta de desarrollo.

Grupos

Un grupo compuesto por una caja de verificación que contiene un grupo de botones de radiotiene las siguientes distancias:

§ Entre el margen de la caja contenedora y los botones de radio de 10 pixels.§ Entre el último botón de radio y el margen inferior de la caja contenedora de 10 pixels.§ Entre la caja de verificación y el primer botón de radio de 12 pixels.

Page 123: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 168

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Un grupo compuesto por una etiqueta que contiene a su vez a otro contenedor:

§ La distancia entre los márgenes del contenedor principal e interior es de 10 pixels.§ La distancia entre los márgenes del contenedor interior y sus controles una distancia de

11 pixels.

Un grupo que contiene sólo cajas de verificación o botones de radio:

§ La distancia entre grupos del mismo estilo es de 10 pixels.§ La distancia entre los controles contenidos y el margen es de 10 pixels.

Texto estático

§ El justificado entre texto estático y controles es siempre a la derecha.§ El espacio entre textos estáticos e ítems de una ventana de diálogo es de 6 pixels.§ El espacio entre textos estáticos y listas es de 6 pixels.

Campos de texto

§ El alto de un campo de texto es de 20 pixels*.§ La distancia entre campos de texto es de 6 pixels.

* Esta distancia debe implementarla la herramienta de desarrollo.

Barras de progreso

§ El alto estándar de la barra de progreso es de 12 pixels.

Tipos de letra

Para WindowsUsar como fuente estándar Arial 10 y Arial 8 para fuentes pequeñas.

Para Mac OSUsar como fuente estándar Chicago 12 y Geneva 10 para fuentes pequeñas.

Page 124: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 169

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

El menú de la aplicación

El menú es el conjunto de comandos que puede ejecutar una aplicación y, por consiguiente, nodebería hacer ningún comando fuera de él. Todas las aplicaciones deberían llevar un menúaunque esta norma se puede dejar de aplicar en casos muy particulares (aplicaciones parapantallas táctiles, etc.). Todos los menús deben llevar los ítem Archivo, Edición y Ayuda con lossiguientes comandos básicos:

ArchivoNuevoAbrirCerrarAjusta PáginaImprimirSalir.

EdiciónDeshacerCortarCopiarPegar.

Ayuda:Contenido,Acerca de... (en el caso Windows).

Y deben llevar un orden: De izquierda a derecha Archivo, Edición, ..., y por último Ayuda.Habitualmente las preferencias de una aplicación se edita para cambiar valorespredeterminados. Este hecho implica que se ponga en comando “Preferencias” (u opciones) enel menú “Edición”, generalmente como el último comando.

Page 125: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 170

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Estilo en la Web

Comunicación eficaz

§ Hacer las páginas pequeñas.§ Usar el formateo con juicio.§ Resumir la información.§ Usar los enlaces con referencias específicas.§ Definir un estilo de lenguaje.§ Usar terminologías familiares.§ Usar las etiquetas claras en los elementos del interfaz humano.§ Usar el estilo de capitalización como en los títulos de libros

para elementos del interfaz humano.§ Escribir claro y sin errores.

Ayudar al usuario a encontrar lo que busca

§ Usar el mismo estilo en los títulos de las páginas.§ Proporcionar un directorio de la sede Web.§ Mostrar dónde está en cada momento el usuario.§ Minimizar el uso del scroll y tamaño de ventana.§ Usar títulos descriptivos.§ Seleccionar una profundidad apropiada de la sede frente a

una sede horizontal.§ Usar una barra de botones de navegación apropiada.§ Evitar zonas muertas.§ Incluir enlaces internos en páginas largas.§ Incluir enlaces a las zonas de localización en la sede Web.§ Duplicar los ítems de navegación al final de la página.§ Ser consistente en la colocación de los enlaces de navegación.§ Usar referencias cruzadas.§ Proporcionar mecanismos de búsqueda.

Page 126: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 171

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Diseño eficaz

§ No esconder información.§ Minimizar los tamaños de los archivos.§ Usar imágenes pequeñas.§ Usar galerías de imágenes.§ Repetir la imagen siempre que sea posible.§ Especificar el ancho y el alto por cada imagen.§ Usar imágenes ínter enlazadas.§ Conocer la diferencia entre archivos GIF y JPEG.

Diferencias

§ Proporcionar textos alternativos para las imágenes.§ Proporcionar textos en formato multiplataforma.§ Hacer decidir al usuario.

Estilo agradable

§ Usar un formateo apropiado.§ Asumir una pantalla de 640 x 480 píxel.§ Diseñar para orientaciones de páginas diferentes.§ No cambiar caprichosamente la forma de los enlaces.§ Usar Mayúsculas / minúsculas para las cabeceras.§ Usar espacios en blanco.§ Establecer una plantilla para la Web.§ Usar un diseño de lenguaje visual consistente.

Page 127: java

Curso de Java-WebObjects10 mayo 2002

PAGINA - 172

© IGNIRE SOFTWARE EMPRESARIAL, S.L.L.

Internet: www.ignire.com | teléfono (902) 157 779 | email: [email protected]

INGENIERÍA, DESARROLLO Y DESPLIEGUE DE SOFTWARE

Animar el diálogo

§ Proporcionar elementos de comunicación entre usuarios.§ Proporcionar elementos de comunicación entre usuarios y

otras gentes.§ Proporcionar contacto por correo electrónico.§ Proporcionar elementos para que la gente pida información

específica.§ Hacer la interacción en vivo si es posible.

Pensar globalmente

§ Proporcionar la manera de poder elegir un idioma.§ Conocer la región para la cual se desarrolla la sede Web.§ Seleccionar los gráficos sensatamente.§ Conocer el formato de la fecha.§ Considerar diferencias de lenguaje.§ Evitar suposiciones en el texto.§ Considerar alineaciones diferentes.

Mantenimiento de la sede Web

§ Probar la sede Web.§ No poner signos de “en construcción”.§ Probar si los enlaces no están rotos.§ Actualizar la sede regularmente.§ Dar información habitualmente.§ Proporciona acceso a información archivada.