Curso Java - Vol. 1
Curso Java - Vol. 1
V Volme 1 en
El desarrollo de la Sociedad de la Informacin y Convergencia con Europa y entre Comunidades Autnomas (Plan Avanza), es una nueva iniciativa para el desarrollo de la sociedad de la Informacin en Espaa durante el ao 2010 2011. El Plan Avanza se orienta a conseguir la adecuada utilizacin de las Tecnologas de la Informacin y las Comunicaciones, para contribuir al xito de un modelo de crecimiento econmico basado en el incremento de la competitividad y la productividad.
INTRODUCCIN
MODALIDAD
Presencial
TOTAL DAS
4
DA
1 2 3 4
CONTENIDOS TERICOS
Introduccin del curso y sistemas de evaluacin. Explicacin de los contenidos tericos Explicacin de los contenidos tericos Explicacin de los contenidos tericos
MODALIDAD
TELEFORMACION
TOTAL DAS 38
CONTENIDOS TERICOS
2. INTRODUCCIN A LA PROGRAMACIN. 2.1. Concepto de algoritmo y de programa. 2.2. Ciclo de vida: Fases clsicas de diseo de aplicaciones informticas. 2.3. Estructura de un centro de proceso de datos. Roles habituales. 2.4. Lenguajes de programacin. Lenguajes de bajo, medio y alto nivel. 2.5. Ensambladores, intrpretes y compiladores. 2.6. Cdigo fuente, cdigo objeto y cdigo ejecutable. 2.7. Estructura de un programa. Datos e instrucciones. 2.8. Flujogramas: organigramas, ordinogramas. 2.9. Flujogramas versus pseudocdigos. 2.10. Elementos bsicos de programacin.
3. ESTRUCTURAS BSICAS DE LA PROGRAMACIN ESTRUCTURADA. PSEUDOCDIGOS. 3.1. 3.2. 3.3. 3.4. Mtodos de diseos deductivos e inductivos. Diseo TOP DOWN. Instrucciones secuenciales. Instrucciones alternativas (bifurcaciones). Instrucciones repetitivas (bucles).
4. ARRAYS Y TABLAS UNIDIMENSIONALES, BIDIMENSIONALES Y TRIDIMENSIONALES. 4.1. Diseo y creacin de Tablas o Arrays. 4.2. Inicializar o preparar tablas. 4.3. Cargar una tabla desde el teclado. 4.4. Recorrer secuencialmente una tabla. 4.5. Buscar un contenido determinado dentro de uno de los elementos. 4.6. En una tabla que est ordenada. 4.7. Si la tabla no est ordenada. 4.8. Ordenar una tabla por cualquier mtodo. 4.9. Insertar un elemento en uno libre del final. 4.10. Insertar un elemento en uno de los elemento intermedios desplazando el resto hacia el final (debe haber elementos vacos al final). 4.11. Borrar un elemento de una tabla. 5. FUNCIONES Y PROCEDIMIENTOS. 5.1. Introduccin al concepto de rutinas, funciones y procedimientos. 5.2. Datos en los procedimientos. 5.3. Parmetros formales y actuales. 5.4. Variables globales y locales. 5.5. Funciones y mbito de las variables. 5.6. Funciones y procedimientos: Representacin grfica. 5.7. Esquema bsico de llamadas a rutinas y procedimientos. 5.8. Esquema bsico de llamadas a funciones. 5.9. Ejemplo de llamada a procedimientos en lenguaje C, C++ y JAVA. 5.10. Ejemplo de llamada a procedimientos en lenguaje Visual .NET. 5.11. Ejemplo de llamada a procedimientos en lenguaje COBOL. 6. INTRODUCCIN AL TRATAMIENTO DE FICHEROS. 6.1. Estructura de un archivo o fichero 6.2. Programas de Creacin de ficheros secuenciales. 6.3. Programas de consulta de ficheros secuenciales.
7. CLASES DE TIPO JAVABEANS. 8. TIPOS GENRICOS. 8.1. 8.2. 8.3. 8.4. La clase Object y las conversiones de tipos. Definicin de tipos genricos. Ventajas. Comodines y restricciones de tipos. Mtodos genricos.
3. MANIPULACIN Y FORMATO DE FECHAS. 3.1. La clase Calendar. 3.2. La clase DateFormat. 4. OPERACIONES DE ENTRADA-SALIDA. 4.1. 4.2. 4.3. 4.4. La clase PrintStream para salida de datos. Lectura de caracteres con InputStream. Lectura de cadenas con BufferedReader. Lectura de datos con la clase Scanner.
5. GESTIN DE COLECCIONES. 5.1. Las clases de coleccin Java.util.ArrayList y Java.util.Hashtable. 5.2. Enumeraciones e iteraciones.
10
10
11
11
MDULO 6. EXCEPCIONES
1. CLASES DE EXCEPCIN. 2. EXCEPCIONES MARCADAS Y NO MARCADAS. 3. CONTROL DE EXCEPCIONES. 3.1. Utilizacin de los bloques try, catch, finally. 3.2. Declaracin de una excepcin. 3.3. Lanzamiento de excepciones. 4. EXCEPCIONES PERSONALIZADAS.
12
12
13
13
4. XML COMO ALMACENAMIENTO DE DATOS. 4.1. Caractersticas del lenguaje XML. 4.2. Manipulacin de documentos XML desde una aplicacin Java. 5. ACCESO A FICHEROS. 5.1. Lectura y escritura en ficheros de texto. 5.2. Serializacin y des-serializacin de objetos.
14
14
TUTORA
MODALIDAD
Presencial
TOTAL DAS
2
DA
42 43
CONTENIDOS TERICOS
Resolucin de dudas Resolucin de dudas
15
15
MODALIDAD
TELEFORMACION
TOTAL DAS 20
CONTENIDOS TERICOS
16
16
17
17
2. LA ARQUITECTURA J2EE. 2.1. Capa Web y capa de negocio. 2.2. Componentes y servicios Java EE. 2.3. Contenedores Java EE. 3. ESTRUCTURA DE UNA APLICACIN WEB JAVA EE. 4. EL DESCRIPTOR DE DESPLIEGUE WEB.XML.
18
18
6. INCLUSIN DE SCRIPTS EN UNA PGINA WEB. 7. SINTAXIS BSICA DE JAVASCRIPT. 7.1. 7.2. 7.3. 7.4. 7.5. Variables Operadores. Instrucciones de control. Funciones del lenguaje. Principales Objetos Java Script.
19
19
3. GENERACIN DINMICA DE PGINAS DESDE UN SERVLET. 4. ENVO DE DATOS A UN SERVLET. 5. REDIRECCIONAMIENTO Y REENVO DE PETICIONES. 6. MANTENIMIENTO DEL ESTADO EN APLICACIONES WEB JAVA EE. 6.1. Insercin de datos en URL. 6.2. Variables de peticin, sesin y aplicacin. 6.3. Cookies. 7. ESCUCHADORES. 8. OPCIONES DE CONFIGURACIN DEL ARCHIVO WEB.XML. 9. ACCESO A DATOS DESDE UN SERVLET.
20
20
21
21
22
22
23
23
TUTORA
MODALIDAD
Presencial
TOTAL DAS
1
DA
64
CONTENIDOS TERICOS
Resolucin de dudas
24
24
25
25
26
27
NDICE
LA INFORMTICA Y EL MANEJO DE LA INFORMACIN
1. Procesamiento de la informacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 2. Tipos de datos bsicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10 3. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16
28
1. Procesamiento de la informacin
Almacenamiento de la Informacin El almacenamiento de la informacin es una de las actividades o capacidades ms importantes que tiene un ordenador. A travs de esta propiedad el sistema puede recordar la informacin guardada en la seccin o proceso anterior. Esta informacin suele ser almacenada en estructuras de informacin denominadas archivos.
i
3
29
i
4
30
Direccionamiento de la informacin El direccionamiento de la informacin es posible a travs de 3 tipos de memorias: - Memoria de localizacin direccionable - Memoria de contenido direccionable - Memoria de sistema de archivos En la memoria de localizacin direccionable, cada unidad de informacin accesible individualmente en la memoria se selecciona con su direccin de memoria numrica. En los ordenadores modernos, la memoria de localizacin direccionable se suele limitar a memorias primarias, que se leen internamente por programas de ordenador ya que la localizacin direccionable es muy eficiente, pero difcil de usar para los humanos. Unidades de medida de almacenamiento El ser humano, siempre ha sentido la necesidad de medir todo lo que tiene a su alcance, como por ejemplo la distancia, el tiempo, el volumen y la velocidad, entre otros. La informacin, no podra ser la excepcin,
i
5
31
Informacin en el ordenador La tcnica de informtica no es algo natural, si una mquina, como es el ordenador, es capaz de guardar y representar datos, es porque alguien se ha inventado un procedimiento artificial para poder conseguir eso. El principio de funcionamiento de los ordenadores se basa en la facilidad que tienen los dispositivos electrnicos para manejar informaciones binarias. En cualquier caso, para el ordenador todas esas informaciones siempre se resumen en lo mismo, tensin o no tensin, 0 o 1. Sistema Binario Cuando un ordenador guarda su informacin en algn perifrico, sustituye el estado de tensin / no tensin por estado como campo magntico/no magntico (discos magnticos) o reflexin de la luz/no reflexin de la luz (discos pticos), pero en cualquier caso siempre podemos interpretar que estamos tratando
i
6
32
Cmo opera la memoria del ordenador Para comprender mejor lo anteriormente expuesto, veamos el siguiente ejemplo. Imagina que cada una de las celditas de la tabla inferior es una posicin de memoria y que la memoria es como cada uno de los cuadritos de una hoja de papel cuadriculada, con 160 posiciones de memoria. Cada una de estas posiciones esta identificada perfectamente por sus coordenadas.
i
7
33
En el ejemplo anterior, si la hoja cuadriculada fuera un diskette, entonces podramos decir que ese diskette tiene un espacio total de 160 BYTES, que 99 BYTES han sido utilizados y que hay un espacio disponible en disco de uno 60 BYTES (sin considerar los blancos intercalados).
i
8
34
En la conversin de las medidas se utiliza una aproximacin haciendo siempre los clculos de 1000 en 1000, aunque la unidad BYTE no va de 1000 en 1000, sino de 1024 en 1024. Ej: 7 Kilobytes son realmente 7168 bytes (7 x 1024 = 7168), sin embargo, generalmente se calcula multiplicando (7 * 1000 =7000). Desde 1998, existen unidades especialmente orientadas a base 2 y no a base 10, destinadas al campo de la informtica. El KB es 210, el MB es 220, el GB es 230, el TB es 240 y as sucesivamente.
i
9
35
Los datos Un dato se define como la expresin general que describe los objetos con que opera un ordenador. Los datos de entrada se transforman, despus de las etapas intermedias, en datos de salida.
i
10
36
Datos numricos Los datos numricos son aquellos que representan una cantidad o valor determinado. Son todos aquellos datos creados con posibilidades de realizar operaciones numricas con ellos. Su representacin se lleva a cabo en los formatos ya conocidos en las matemticas (enteros, punto y fracciones decimales si stas existen). A partir de estos Tipos de datos bsicos el programador definir en sus programas constantes y variables para dar solucin a determinadas funcionalidades que deber desarrollar y comprobar Los datos numericos pueden representarse de dos formas distintas: - Tipo numrico ENTERO - Tipo numrico REAL Datos alfanumricos o cadena de caracteres Las cadenas de caracteres son los datos que representan informacin textual (palabras, frases, smbolos, etc.) es decir, datos alfanumricos.
i
11
37
i
12
38
i
13
39
i
14
40
Los datos definidos y usados por el programa, quedaran representados de la siguiente manera en la memoria RAM del ordenador.
i
15
41
i
16
42
43
NDICE
SISTEMAS DE NUMERACIN Y CODIFICACIN DE LA INFORMACIN
44
Introduccin a los sistema de numeracin Tanto el hombre como el ordenador trabajan con sistemas de numeracin. El hombre en su vida cotidiana trabaja desde el punto de vista numrico con el sistema decimal y desde el punto de vista alfabtico con un determinado idioma. 0123456789
i
3
45
Sistemas de numeracin del ordenador Tanto el sistema decimal como el binario estn basados en los mismos principios. En ambos, la representacin de un nmero se efecta por medio de cadenas de smbolos, los cuales representan una determinada cantidad dependiendo del propio smbolo y de la posicin que ocupa dentro de la cadena. Los sistemas de numeracin que utiliza la computadora son: el Sistema Binario, el Decimal, el Octal y el Hexadecimal:
i
4
46
i
5
47
A partir de esta formula podemos saber cul es el valor relativo de cualquier dgito dentro de una cifra en funcin de la posicin que ocupa. Imaginmonos una cifra constituida por 12 cincos, sus valores relativos seran:
Por ello, la cifra 5902 es igual a: 5 * 10 + 9 * 10 + 0 * 10 + 2 * 10 Teorema Fundamental de la Numeracin (TFN) El Teorema Fundamental relaciona una cantidad expresada en cualquier sistema de numeracin con la misma cantidad expresada en el sistema decimal: El valor en el sistema decimal de una cantidad expresada en otro sistema cualquiera de numeracin, viene dado por la frmula
i
6
48
Origen del Sistema Numrico del ordenador El sistema numrico binario fue el escogido por los ingenieros informticos para el funcionamiento de los ordenadores, porque era ms fcil para el sistema electrnico de la mquina distinguir y manejar solamente dos dgitos, o sea, el "0" y el "1" que componen el sistema numrico binario, en lugar de los diez dgitos (del 0 al 9), que constituyen el sistema numrico decimal.
i
7
49
Los ordenadores son digitales, esto quiere decir que la informacin se guarda como cadenas de unos y ceros, s o no (dgitos). Ya que el hardware por el momento slo reconoce estos dos estados, se cre el Sistema Binario, cuya base por lo tanto es 2 (nmero de dgitos del sistema).Cada dgito de un nmero representado en este sistema se denomina bit (binary digit) Ejemplo: 1 00010011101111000000111000011110
i
8
50
9
51
Ejemplo
10
52
Cambiamos el sustraendo por su complemento a 2. El complemento a 2 de un nmero binario es el complemento a 1 ms 1. Para este nmero nos quedara as: 0 1 0 0 1 0 1 La resta se convierte en la siguiente suma:
i
11
53
i
12
54
i
13
55
Cuadro de conversiones directas Como recordars, el Teorema Fundamental de la Numeracin afirma qu cantidad expresada en cualquier sistema de numeracin se puede convertir a cualquier otro sistema de numeracin obtenindose valores perfectamente equivalentes. Para convertir un numero en b1 a otra base cualquiera b2, hay que pasarlo primero a base 10 y luego a la base deseada. A continuacin se muestra un recuadro con las conversiones ms directas:
14
56
Conversin Decimal-Hexadecimal Para la conversin de decimales enteros a hexadecimal, recurrimos al mtodo de las divisiones sucesivas por 16.
i
15
57
Conversin Binario-Hexadecimal La conversin de nmeros binarios a hexadecimales se realiza "expandiendo" o "contrayendo" cada dgito hexadecimal a cuatro dgitos binarios. Por ejemplo, para expresar en hexadecimal el nmero binario 1010011100112 bastar con tomar grupos de cuatro bits, empezando por la derecha, y reemplazarlos por su equivalente hexadecimal:
i
16
58
Conversin Hexadecimal-Binario La conversin de nmeros hexadecimales a binarios se hace del mismo modo, reemplazando cada dgito hexadecimal por los cuatro bits equivalentes de la tabla. Para convertir a binario, por ejemplo, el nmero hexadecimal 1F616 hallaremos en la tabla las siguientes equivalencias
i
17
59
Otro ejemplo de transformacin directa apoyndonos en la tabla de equivalencias de arriba, 4 bits por cada hexadecimal.
i
18
60
Cdigo es el trmino genrico para nombrar las instrucciones del programa, utilizadas en dos sentidos generales: cdigo fuente y cdigo mquina ejecutable. El ordenador no fue el primer dispositivo en utilizar este recurso. En la dcada de los aos 50, las grandes empresas utilizaron ampliamente las mquinas tabuladoras IBM para realizar listados y clculos de contabilidad, hasta que fueron sustituidas por los ordenadores personales de mesa o PCs. Esas mquinas empleaban tarjetas perforadas para tabular los datos.
i
19
61
Fue creado en 1963 por el Comit Estadounidense de Estndares (ASA, conocido desde 1969 como el Instituto Estadounidense de Estndares Nacionales, o ANSI) como una refundicin o evolucin de los conjuntos de cdigos utilizados entonces en telegrafa. Ms tarde, en 1967, se incluyeron las minsculas, y se redefinieron algunos cdigos de control para formar el cdigo conocido como US-ASCII.
i
20
62
Para formar cada carcter alfanumrico, es decir una letra, nmero o signo, los ingenieros informticos, despus de realizar muchas pruebas, optaron por combinar ocho bits o cadena de ceros y unos para formar un octeto al que denominaron byte. A cada carcter alfanumrico le asignaron un byte de informacin y estructuraron 256 valores binarios distintos en un cdigo que llamaron ASCII.
i
21
63
22
64
El cdigo ASCII comprende slo hasta el nmero decimal 255, porque a partir de ah, el nmero 256 en binario pasa a ser 1 0000 0000, sobrepasando los ocho dgitos requeridos para completar un byte de informacin.
i
23
65
i
24
66
25
67
Cmo se traduce la informacin en Cdigos ASCII y EBCDIC A continuacin veamos cmo se traduce la informacin en los diferentes cdigos que acabamos de ver. La siguiente tabla nos muestra cmo est subdividido un OCTETO de cara a la construccin de los distintos valores de los distintos cdigos existentes:
i
26
68
i
27
69
Orden de datos en funcin del cdigo En cualquier circuito electrnico digital, como el que posee el ordenador, el bit 0 puede estar en ocasiones cercano a 0 volt y el bit 1 cercano a 3 5 volt, de forma tal que la tensin o voltaje que pueda llegar a tener el dgito 0 nunca llegar a alcanzar un valor alto, ni el dgito 1 un valor muy bajo.
i
28
70
i
29
71
2. FORMATO ZONA para valores numricos El signo +, - o absoluto se localiza en los 4 primeros bits del ltimo octeto de la cifra, de esta forma:
C D F
i
30
72
El signo: +, -, o absoluto, se localiza en los 4 ltimos bits del ltimo octeto de la cifra, con las mismas configuraciones de bits que en FORMATO ZONA (C, D o F).
i
31
73
El signo: + o - , se localiza en este tipo de campos en el primer bit del primer octeto de la izquierda. Vase el ejemplo:
i
32
74
i
33
75
INTRODUCCIN A LA PROGRAMACIN
76
NDICE
INTRODUCCIN A LA PROGRAMACIN
1. Estructura de un Programa: Datos e Instrucciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 2. Flujogramas y Pseudocdigos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 3. Elementos bsicos de programacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15 4. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .29
77
Introduccin a la programacin
1. Estructura de un Programa: Datos e Instrucciones
Objetivos
A lo largo de ste te mostraremos qu es un programa y sus caractersticas. Programas del ordenador Un ordenador, bsicamente es capaz de realizar solo tres cosas: operaciones aritmticas muy bsicas, operaciones de tipo lgico (comparar dos valores) y almacenar o recuperar (copiar) informacin. Estas tres operaciones convenientemente ligadas entre s forman lo que llamamos programas.
i
3
78
Introduccin a la programacin
Un programa en definitiva es un conjunto de rdenes que ejecuta el ordenador para conseguir un objetivo. Las rdenes se dan a travs de un lenguaje de programacin (cdigos). Esencialmente un programa es un conjunto de instrucciones destinadas a realizar una tarea. De forma general este conjunto de instrucciones toma unos datos de entrada y devuelve unos datos de salida, unos resultados. Un ordenador funciona bajo control de un programa que debe estar almacenado en la unidad de memoria masiva, como puede ser un disco duro, un disquete, un disco ptico, etc. Este software, o parte de l, es cargado en la memoria electrnica del ordenador para su posterior ejecucin. Fases del diseo y creacin de programas Puesto que el objetivo de un programa es realizar una tarea, sta debe ser hecha en un tiempo finito. Adems es razonable pensar que dados unos mismos datos de entrada al programa siempre se obtengan unos mismos datos de salida, ya que el programa est destinado a realizar una tarea definida explcitamente. As pues, para nuestros propsitos, un programa debe cumplir con el algoritmo a partir del cual se diseo. Cualquier conjunto de instrucciones que no cumpla esto ser considerado como un programa incorrecto o simplemente no ser considerado como tal.
i
4
79
Introduccin a la programacin
Especificaciones de los programas El programador debe establecer el conjunto de especificaciones que debe contener el programa y las entradas, salidas y algoritmos de resolucin que incluirn las tcnicas para obtener las salidas a partir de las entradas. Se debe establecer de dnde provienen las entradas al programa, es decir, los dispositivos de entrada como el teclado, disco, etc. Las salidas de datos se deben presentar en dispositivos de salida como impresora, monitor o disco.
i
5
80
Introduccin a la programacin
Instrucciones de los programas El proceso de algoritmo o de codificacin del programa consiste en definir las acciones o instrucciones que resolvern el problema. Las instrucciones se deben escribir y almacenar en memoria en el mismo orden en el que han de ejecutarse es decir en secuencia. Un programa puede ser lineal o no lineal, el lineal es el que las instrucciones se den en secuencia sin bifurcacin, no lineal es si tienen bifurcacin. Tipos de instrucciones Las instrucciones son las acciones bsicas que se pueden implementar de manera general en un algoritmo y que esencialmente soportan todos los lenguajes (son independientes del lenguaje de codificacin). Instrucciones Instrucciones Instrucciones Instrucciones de de de de inicio/fin asignacin lectura escritura
Para disear o crear nuestros programas podemos recurrir a dos herramientas bsicas, los diagramas de flujo y los pseudocdigos que veremos a continuacin.
i
6
81
Introduccin a la programacin
2. Flujogramas y Pseudocdigos
Diagrama de flujo: Ordinograma Uno de los procedimientos ms conocidos y utilizados para resolver problemas se llama Diagrama de Flujo o Flujogramas. Hasta la dcada de los 90 era uno de las ms usados y an cuando en la actualidad esta tcnica no es la ms adecuada, debido a su sencillez es una de las ms utilizadas. Uno de los diagramas de flujos ms utilizado es el ordinograma.
Ordinograma es un diagrama de flujos que muestra la secuencia lgica y detallada de las operaciones que necesitamos para la realizacin de un programa.
En programacin, antes de escribir un programa en un lenguaje de programacin especfico (C, Pascal, COBOL, etc.), es conveniente disear un algoritmo para definir los pasos o acciones que debe llevar a cabo el programa en cuestin. Pues bien, dicho algoritmo se suele disear utilizando pseudocdigo o, tambin, un ordinograma. Mediante un ordinograma se puede representar el mismo algoritmo, pero, de manera grfica. Como suele decirse una imagen vale ms que mil palabras.
i
7
82
Introduccin a la programacin
Caractersticas de un Ordinograma El Ordinograma es independiente del lenguaje de programacin que usemos y debe estar compuesto por:
Los elementos bsicos para crear Ordinogramas, son bastante intuitivos y se entienden con bastante facilidad. Observa el resumen de los smbolos ms importantes.
i
8
83
Introduccin a la programacin
Reglas de un Ordinograma A la hora de hacer un Ordinograma, se deben respetar ciertas reglas: - Todos los smbolos utilizados deben estar unidos por lneas de flujo solo horizontales y/o verticales. - No se pueden cruzar las lneas de flujo. Evitar los cruces. - No deben quedar lneas de flujo sin conectar. - A un smbolo de proceso pueden llegarle varias lneas de flujo pero slo puede salir una de l. - Al smbolo de inicio no puede llegarle ninguna lnea de flujo - De un smbolo de fin no puede salir ninguna lnea de flujo pero s le pueden llegar varias. - Se deben trazar los smbolos de manera que se pueda leer de arriba abajo y de izquierda a derecha.
i
9
84
Introduccin a la programacin
Ejemplo de un Ordinograma Veamos otro ejemplo de diseo utilizando diagramas de flujo para dar solucin al algoritmo de calcular reas de tringulos. En este ejemplo, suponemos que a partir de un fichero con informacin de Identificacin del tringulo adems de la base y la altura de distintos tringulos, se irn leyendo los distintos registros con esta informacin y se ir grabando en el dispositivo de salida el rea de cada uno de esos tringulos. El proceso continuar hasta que se terminen de leer todos los registros del fichero.
i
10
85
Introduccin a la programacin
Veamos cmo quedara el mismo algoritmo diseado con un algoritmo rudimentario:
Tipos de instrucciones usando Ordinogramas A continuacin se muestran los tres tipos de instrucciones que usaremos para disear todos nuestros programas utilizando los ordinogramas.
i
11
86
Introduccin a la programacin
Y aqu tenemos dos formatos de instrucciones repetitivas:
Flujograma v/s Pseudocdigo Cuando logremos habilidad para desarrollar programas, es posible que no recurramos a los diagramas de flujo y que en su lugar prefiramos hacer directamente el pseudocdigo del programa. Flujograma Cuando sabemos cmo resolver un problema podemos planificar y dibujar grficamente la lgica de la alternativa seleccionada que da solucin al problema. Eso es precisamente un diagrama de flujo: la representacin grfica de una secuencia lgica de pasos a cumplir por el ordenador para producir un resultado esperado. Pseudocdigo La experiencia nos ha demostrado que resulta muy til trasladar esos pasos lgicos planteados en el diagrama a frases que indiquen lo mismo, es decir, hacer una codificacin del programa pero utilizando instrucciones en espaol, como si le estuviramos hablando al ordenador, ordenndole qu es lo que tiene que hacer. Esto es lo que denominamos Pseudocdigo. El pseudocdigo utiliza palabras que nos indicarn el proceso a realizar.
i
12
87
Introduccin a la programacin
Ventajas del Pseudocdigo y Flujograma En la programacin estructurada, la tcnica desarrollada para la resolucin de problemas es el pseudocdigo y es la herramienta base de diseo en la programacin actual. Ventajas del uso de un Pseudocdigo en un diagrama de flujo No se requieren smbolos ni lneas de flujo. Cada instruccin es expresada en lenguaje cotidiano. Ocupa menos espacio en una hoja de papel. Las alteraciones en la secuencia del algoritmo son reflejadas por medio de palabras reservadas. Permite representar en forma fcil operaciones repetitivas complejas. - Es muy fcil pasar el pseudocdigo a un programa en alguno de los lenguajes de programacin actuales. - Fcil comprensin, fcil seguimiento y fcil correccin y modificacin. Si se siguen las reglas se puede observar claramente los niveles que tiene cada operacin. Ventajas del uso de un Flujograma en un Pseudocdigo - Cuando se tiene poca experiencia en programacin, es mucho ms claro y ms intuitivo. - Una imagen vale ms que mil palabras. Son ms fciles de entender. Ejemplo comparativo Veamos un ejemplo para clarificar esta comparativa entre flujograma y pseudocdigo:
i
13
88
Introduccin a la programacin
Diseo del algoritmo Pseudocdigo 1. 2. 3. 4. 5. 6. 7. Flujograma Inicio Escribir rea de un triangulo Leer a, b, c Calcular s=(a+b+c)/2 Calcular A= (s(s-a)(s-b)(s-c)) Escribir A Fin
i
14
89
Introduccin a la programacin
3. Elementos bsicos de programacin
En ste recordaremos los elementos tpicos de los lenguajes de programacin y los tipos de operadores, entre otros. Como hemos visto a lo largo de este curso, para el diseo de programas son necesarios una serie de elementos. Recordemos cules son stos:
i
15
90
Introduccin a la programacin
Palabras claves e identificadores Recordemos en qu consisten las palabras claves e identificadores. Las palabras claves son caractersticas de cada lenguaje de programacin, aunque muchas son comunes a muchos lenguajes. Todos los lenguajes tienen palabras reservadas y su utilizacin tiene un misin previamente establecida. Veamos como ejemplo las 32 palabras reservadas que utiliza el lenguaje C, muchas de las cuales son comunes a JAVA. Palabras claves:
Identificadores:
i
16
91
Introduccin a la programacin
Identificadores son palabras escogidas por el programador para nombrar elementos particulares del programa. Podemos considerar que son sinnimos de los datos. Todos los lenguajes tienen unas reglas para dar nombres vlidos a los datos. Suelen ser combinaciones de letras y nmeros que comienzan por una letra. Pueden usarse guiones para aportar claridad. Veamos algunos ejemplos tanto vlidos como invlidos para la mayora de los lenguajes. Datos Los datos constituyen la informacin que procesar el programa. Podemos nombrar datos de cualquier lenguaje de programacin: numricos, alfanumricos o de carcter y lgicos (booleano), y estn identificados gracias a: - LUGAR DE ALOJAMIENTO: Nombre, longitud del campo. - CARACTERISTICAS: Clase o tipo, formato y uso del dato. - Y PERTENENCIA: A qu familia de datos pertenece para datos compuestos. Los datos se pueden subdividir en los siguientes campos: - Simples -Compuestos o registros
i
17
92
Introduccin a la programacin
Constantes y variables Constantes Las constantes son datos que no modifican su valor a lo largo del programa. Todas las constantes tienen un nombre y un valor asociado.
i
18
93
Introduccin a la programacin
Variables Las Variables son datos cuyo valor se va modificando a lo largo del programa. Su valor cambia o vara durante los procesos del algoritmo. Toda variable tiene un nombre y un valor asociado.
Las variables dentro de un programa pueden tener muchas utilidades. Por ello, en funcin de qu uso les demos pueden clasificarse como: - Variables de trabajo. - Contadores. - Acumuladores. - ndices o indicadores. - Switch o interruptores. Operadores Los Operadores son smbolos que representan las distintas operaciones que se pueden realizar con los datos: aritmticas, alfanumricas, de asignacin, relacionales, lgicos, etc.
i
19
94
Introduccin a la programacin
Orden de prioridad de todos los operadores Los operadores no los utilizamos aisladamente, sino que solemos utilizar ms de uno en una misma expresin compleja. En este caso tendremos que tener en cuenta las normas de preferencia para no encontrarnos con resultados no deseados. Estas normas dependen del lenguaje utilizado, pero de forma general se puede establecer de mayor a menor prioridad de la siguiente forma: 1. 2. 3. 4. 5. Parntesis (comenzando por los ms internos) Signo Potencia Producto, divisin y mdulo Suma y resta 6. Concatenacin 7. Relacionales 8. Negacin NOT 9. Conjuncin AND 10. Disyuncin OR
20
95
Introduccin a la programacin
Instruccin o sentencia Las instrucciones o sentencias, son elementos que realizan alguna accin en concreto, es decir, son expresiones que por s solas llevan a cabo una tarea. Sern instrucciones secuenciales, alternativas o bucles. Las expresiones son una combinacin de palabras claves, datos y operadores. Una expresin en cualquier lenguaje de programacin es cualquier combinacin de operadores, constantes y variables. Existen distintos tipos de expresiones: - Aritmticas - Relacionales - Lgicas Expresiones aritmticas En el mundo real tenemos que trabajar con las matemticas, y por ello debemos saber cmo las distintas proposiciones y formulas matemticas se introducen en el ordenador para que las ejecute correctamente. Los operadores son expresiones que nos permiten manipular los datos que les pasamos, cada uno de los datos que se le pasa a un operador se llama operando, y segn el nmero de operandos de que disponga un operador estaremos hablando de un operador unario (un operando), binario (dos operandos), ternario... A continuacin se muestran los operadores matemticos ms normales:
i
21
96
Introduccin a la programacin
Expresiones aritmticas algortmicas Observa la siguiente expresin algebraica, en ella se pretende obtener la solucin de una ecuacin de segundo grado.
Veamos otro ejemplo. La expresin algortmica correcta a partir de la siguiente expresin algebraica:
Expresiones relacionales En ocasiones en los programas se necesitan realizar comparaciones entre distintos valores. Esto se realiza utilizando los operadores relacionales.
i
22
97
Introduccin a la programacin
Los operadores de comparacin son operadores en su mayora binarios que nos permiten comparar variables devolviendo un valor booleano a 1 (TRUE), si se cumple la condicin que expresan y a 0 (FALSE), en el caso contrario. Estos operadores se usan mayormente como condicin para las estructuras de control (instrucciones alternativas o repetitivas. Pulsa sobre los botones para ver algunos ejemplos. Ejemplo 1 Ejemplo 2
i
23
98
Introduccin a la programacin
Expresiones y operadores lgicos Los operadores lgicos permiten combinar los resultados de los operadores relacionales, y as ver si se cumplen varias condiciones simultneamente o slo alguna de ellas. Las funciones lgicas son aquellas que nos van a permitir dar a conocer la relacin entre dos condiciones, y en funcin de si el resultado es verdadero o falso se pueden realizar acciones diferentes. Estas expresiones devuelven siempre un valor 1 (true) o 0 (false). Los operadores lgicos son: i, NOT, no: Negacin (lo contrario) (1) (2)
&&, AND, y: Conjuncin: todas las relaciones han de ser verdad. II, OR, o: Disyuncin: alguna relacin ha de ser cierta.
Los operadores lgicos se fundamentan en conceptos electrnicos. Recordemos que los ordenadores estn construidos por chips o puertas lgicas las cuales dan lugar a poder construir fcilmente los operadores lgicos. 1. Operador AND (&&): Operador lgico o funtor PRODUCTO. REGLA: todas las condiciones simples han de ser verdaderas para que la compuesta tambin lo sea. Slo en tal caso se ejecuta la parte THEN del IF. 1*1*1*1=1 1*0*1*1=0
i
24
99
Introduccin a la programacin
2. Operados OR (||): Operador lgico o funtor SUMA. REGLA: basta con que una condicin sea cierta para que la condicin compuesta tambin lo sea. En tal caso se ejecutarn las declaraciones de la parte THEN. 0+0+1+0=1 Roll over Operadores lgicos 0+0+0+0=0
i
25
100
Introduccin a la programacin
Expresiones y operadores lgicos: condiciones Las condiciones pueden ser simples o compuestas. Son compuestas si aparecen varios operadores lgicos relacionados y su formato simplificado es el siguiente:
Orden de evaluacin de condiciones 1 PARENTESIS (si hay varios niveles, de dentro hacia fuera) 2 Operadores de RELACION 3 Operador lgico NOT 4 Operador lgico AND 5 Operador lgico OR 6 A IGUALDAD de operadores, de izquierda a derecha Ejemplo en JAVA: if ( (b > c) && (c > d) ) || (c == e) || (e == b) Ejemplo en COBOL: IF ( (b > c) AND (c > d) ) OR (c == e) OR (e == b)
i
26
101
Introduccin a la programacin
Codificacin de condiciones y Leyes Morgan El operador lgico NOT, se usa para negar una condicin simple (de relacin, de clase o de nombre de condicin), o una condicin compuesta y se puede codificar delante de la condicin completa encerrada entre parntesis. As pues: A OR B es lo contrario de NOT (A OR B) y viceversa. C AND D es lo contrario de NOT (C AND D) y viceversa NOT A AND NOT B es lo contrario de NOT (NOT A AND NOT B) NOT C OR D es lo contrario de NOT (NOT C OR D)
Una condicin compuesta puede simplificarse o si se prefiere negarse directamente, aplicando las LEYES DE MORGAN. Veamos cmo quedara la parte de la derecha del ejemplo de arriba, simplificando o negando estas condiciones: Simplificando las condiciones NOT NOT NOT NOT (A OR B) (C AND D) (NOT A AND (NOT C OR es igual que NOT A AND NOT B es igual que NOT C OR NOT D NOT B) es igual que A OR B D) es igual que C AND NOT D
Negando las condiciones A OR B es lo contrario de NOT A AND C AND D es lo contrario de NOT C OR NOT A AND NOT B es lo contrario de A NOT C OR D es lo contrario de C AND NOT B NOT D OR B NOT D
27
102
Introduccin a la programacin
Asignacin de valores a las variables En programacin una de las instrucciones ms comunes es la de asignacin de valores a las variables y constantes. Veamos algunos ejemplos de asignacin sin centrarnos en ningn lenguaje en particular. Ejemplos: A = 50 A <= 50 MOVER 50 => A Queremos decir que el valor 50 se va a copiar a la variable A. A= B+C A := B + C Calcular A = B + C El valor de la suma de a B y C copiar a la variable A perdindose el valor anterior que pudiera tener la variable A. Frase = Soy programador Mover Soy programador a Frase.
i
28
103
Introduccin a la programacin
4. Resumen
Has llegado al final de esta leccin de formacin que denominamos Introduccin a la programacin. A continuacin te invitamos a realizar un repaso de los contenidos estudiados a lo largo de la misma.
i
29
104
ARRAYS Y TABLAS
105
NDICE
ARRAYS Y TABLAS
1. Aspectos Generales de Tablas o Arrays. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 2. Operaciones Tpicas con Tablas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8 3. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .23
106
Arrays y Tablas
1. Aspectos Generales de Tablas o Arrays.
Conceptos Bsicos
Antes de comenzar, revisemos algunos conceptos bsicos que necesitas conocer, para el posterior diseo de Tablas o Arrays.
Estructura de datos constituida por un nmero fijo de elementos, todos ellos del mismo tipo y ubicados en direcciones de memoria fsicamente contiguas.
i
3
107
Arrays y Tablas
Clasificacin de las Tablas Las Tablas pueden clasificarse segn su estructura, dimensin, valores y nmero de elementos.
i
4
108
Arrays y Tablas
Representacin Grfica de Tablas Unidimensionales Las Tablas Unidimensionales tambin son conocidas como vectores. Representacin Grfica Los elementos se almacenan en posiciones contiguas adyacentes en la memoria principal de un ordenador.
Acceso Individual a los Elementos de Tablas Unidimensionales En las Tablas Unidimensionales, los elementos se almacenan en posiciones contiguas adyacentes en la memoria principal de un ordenador. Es suficiente su nombre seguido de 1 ndice: - Nombre_tabla(ndice) - Nombre_Elemento(ndice) NOTA: Algunos lenguajes consideran que el primer elemento se direcciona con valor de ndice 0 (cero) y otros con valor de ndice 1.
i
5
109
Arrays y Tablas
Ejemplo Tabla Nmeros: Nombre de la Tabla: Nmeros Tipo: Numrico entero Tamao: 6 Elementos de la tabla: Numros (1) 2 Numros (2) 4 Numros (3) 6 Numros (4) 8 Numros (5) 10 Numros (6) 12 Numros (1) 2 Dimensin: 1 Representacin Grfica de Tablas BIidimensionales Las Tablas Bidimensionales tambin son conocidas como matrices. Cada elemento o alguno se sus campos es, a su vez, una tabla. Representacin Grfica
i
6
110
Arrays y Tablas
Acceso Individual a los Elementos de Tablas Biidimensionales En las Tablas Bidimensionales, los elementos se almacenan en posiciones contiguas adyacentes en la memoria principal de un ordenador. Para acceder a uno de los elementos de una tabla es necesario utilizar 2 ndices: el 1 marca la fila, el 2 la columna: Nombre_tabla(ndice_fila, ndice_columna) Ejemplo:
Tabla Notas:Alumnos del 1 al 10: Nombre de la Tabla: Notas Tipo: Numrico entero Elementos de la tabla: Notas (4,1) Nota del alumno 1 en Filosofa Notas (1,3) Nota del alumno 3 en Matemticas Notas (1,9) Nota del alumno 9 en Matemticas Dimensin: 2 ASIGNATURAS (Matemticas, Fsica, historia y Filosofa)
i
7
111
Arrays y Tablas
2. Operaciones Tpicas con Tablas
A partir de aqu, veremos un ejercicio de programacin a partir de un Array de una dimensin (vector) de 7 elementos que contendr los gastos de cada uno de los 7 das de la semana. Para esto, desarrollaremos algunas de las tareas habituales que se suele necesitar realizar en la mayora de los programas con este tipo de datos. - Inicializar o preparar Tablas - Cargar una Tabla - Recorrido o acceso secuencial a una Tabla. - Bsqueda de un contenido dentro de uno de los elementos: - En tablas ordenadas - En tablas desordenadas - Ordenar una tabla por cualquier mtodo. - Insertar elementos en una tabla: - Al final de la tabla - En una tabla ordenada en su sitio en funcin del orden. - Borrar elementos de una tabla.
i
8
112
Arrays y Tablas
Inicializar o Preparar Tablas A partir de dicha TABLA de una dimensin (vector) de 7 elementos que contendr los gastos de cada uno de los 7 das de la semana. Inicializar con el valor cero en cada uno de los elementos. PROGRAMA DE INICIALIZAR TABLAS Inicio Definicin de Datos TablaGastosDia(7) Dia=1 creacin sin inicializar TablaGastosDia(7)= 1,2,3,4,5,6,7 creacin con contenido Indice para apuntar a cada uno de los dias
i
9
113
Arrays y Tablas
2 forma con DO WHILE y test despus
i
10
114
Arrays y Tablas
4 forma con DO UNTIL y test antes
i
11
115
Arrays y Tablas
Programas de Cargar/Rellenar Tablas Una tabla se puede cargar/rellenar/inicializar en el momento de su definicin, para ello, lgicamente, se deben conocer los datos con los que se quiere rellenar la tabla en el momento de su creacin: TablaGastosDia(7) = 40, 29, 90, 71, 28, 93, 100
Cargar una Tabla desde el Teclado (terminal) A partir de dicho array de una dimensin (vector) de 7 elementos que contendr los gastos de cada uno de los 7 das de la semana.
CARGAR UNA TABLA DESDE EL TECLADO Inicio Definicin de Datos TablaGastosDia(7)= 40, 29, 90, 0, 0, 0, 0 Dia= 1 Indice para apuntar a cada elemento CantidadTecleada= 0 ContinuarSiNo= S
i
12
116
Arrays y Tablas
1 forma con DO WHILE y test antes
i
13
117
Arrays y Tablas
Cargar una Tabla desde un Fichero En una tabla de una dimensin (vector) de 7 elementos que contendr los gastos de cada uno de los 7 das de la semana. Definicion de Datos TablaGastosDia(7)= 40, 29, 90, 0, 0, 0, 0 Dia integer, Reg_E String, FinFichero=NO Pseudocodigos Abrir FICHERO c:\gastos.txt LEER_FICHERO( ) rellena el registro Reg_E desde fichero Dia=1 , (HAYA ELEMENTOS VACIOS EN TABLA) y (HAYA REGISTROS QUE CARGAR DESDE EL FICHERO) DO WHILE ( Dia <= 7 AND FinFichero <> NO ) TablaGastosDia(Dia) = Reg_E Dia = Dia + 1 LEER_FICHERO( ) LOOP IF ( Dia = 8 AND FinFichero=SI ) Then Imprimir (OK) LA TABLA est totalmente LLENA Imprimir (OK) Fichero cargado completamente ELSEIF ( Dia = 8 AND FinFichero=NO ) Then Imprimir ERROR Tabla pequea, quedan regs. en fichero ELSEIF ((((( Dia < 7 AND FinFichero = SI )))) Imprimir OK Fich.cargado y quedan elementos vacios END IF Cerrar FICHERO c:\gastos.txt fin
i
14
118
Arrays y Tablas
Recorrer Secuencialmente una Tabla A partir de dicho array de una dimensin (vector) de 7 elementos que contendr los gastos de cada uno de los 7 das de la semana. Una vez cargado con los gastos de cada uno de los das de la semana, imprimir el contenido de cada uno de los elementos y la suma total de todos ellos.
RECORRER SECUENCIALMENTE UNA TABLA Inicio Definicin de Datos 1 2 Dia= 1 3 4 5 6 7 TablaGastosDia(7)= 40, 29, 90, 71, 28, 93, 100 Indice para apuntar a cada elemento TotalSemana= 0
i
15
119
Arrays y Tablas
2 forma con FOR
Recorrer Secuencialmente una Tabla de Izquierda a Derecha De izquierda a derecha, mostrando/imprimiendo el valor de cada elemento. Suponemos que la tabla puede no estar completa.
i
16
120
Arrays y Tablas
Suponemos que la tabla est completa.
Recorrer Secuencialmente una Tabla de Derecha a Izquierda Suponemos que la tabla esta completa, si no tendremos que averiguar previamente cul es el ltimo elemento con contenido Suponemos que la tabla est completa.
Buscar un Contenido Determinado Buscar un contenido determinado dentro de uno de los elementos, a partir de dicha TABLA de una dimensin (vector) de 7 elementos que contendr los gastos de cada uno de los 7 das de la semana.
i
17
121
Arrays y Tablas
Una vez cargado con los gastos de la semana, BUSCAR secuencialmente o dicotmicamente un determinado valor introducido desde el terminal por el usuario, sabiendo que el contenido de la tabla puede no estar ordenado en ascendente o descendente o que el contenido de la tabla si que est con toda seguridad ordenado. En ambos casos se imprimir la posicin (el ndice) donde se encuentra el valor que se desea buscar, as como su contenido para comprobar que la bsqueda ha sido efectiva. A continuacin buscaremos un contenido en: En Tablas Desordenadas: - Recorrido Secuencial hasta encontrar lo que buscamos En Tablas Ordenadas: - Recorrido Secuencial hasta encontrar lo que buscamos - Recorrido Secuencial hasta encontrar lo que buscamos o hasta encontrar un valor Mayor que el que buscamos. - Bsqueda Binaria o Dicotmica.
i
18
122
Arrays y Tablas
Buscar un Contenido Determinado en una Tabla Desordenada Veamos como buscar un contenido determinado dentro de uno de los elementos en la Tabla que puede estar desordenada.
RECORRER SECUENCIALMENTE UNA TABLA Definicion de Datos 1 2 3 4 5 6 7 TablaGastosDia(7)= 40, 29, 90, 71, 28, 93, 100 Dia=1 Indice para apuntar a cada elemento ValorBuscado= 0
i
19
123
Arrays y Tablas
2 forma con FOR
Buscar un Contenido Determinado en una Tabla Ordenada Veamos como buscar un contenido determinado dentro de uno de los elementos en la Tabla que puede estar desordenada.
RECORRER SECUENCIALMENTE UNA TABLA Definicion de Datos 1 2 3 4 5 6 7 TablaGastosDia(7)= 29, 48, 90, 98, 156, 3769, 32767 Dia=1 ValorBuscado= 0
i
20
124
Arrays y Tablas
1 forma con DO WHILE
( con
> solo )
(El IF de abajo se podra meter aqui dentro antes del EXIT FOR sin el ELSE)
i
21
125
Arrays y Tablas
Bsqueda Binaria o Dicotmica de Tablas Veamos como realizar una bsqueda binaria o dicotmica de Tablas, slo para Tablas Ordenadas.
RECORRER SECUENCIALMENTE UNA TABLA Definicion de Datos 1 2 3 4 5 6 7 TablaGastosDia(7)= 29, 48, 90, 98, 156, 3769, 32767 Centro=0 Izqda=1 Decha=7 ((el ltimo elemento)) ValorBuscado= 0 Encontrado=NO ((esto es un swtich))
Pseudocodigo
i
22
126
Arrays y Tablas
3. Resumen
Enhorabuena! Has llegado al final de esta leccin de formacin que denominamos Arrays y Tablas. En esta leccin hemos estudiado los siguientes contenidos:
i
23
127
FUNCIONES Y PROCEDIMIENTOS
128
NDICE
FUNCIONES Y PROCEDIMIENTOS
1. Teora y Funciones con Funciones y Procedimientos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 2. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20
129
Funciones y Procedimientos
1. Teora y Funciones con Funciones y Procedimientos
Funciones y Procedimientos
A lo largo ste te mostraremos diferentes clculos que puedes realizar con los distintos lenguajes de programacin
- Funcin de cada mdulo - Realizar una operacin independiente de los restantes desde el punto de vista funcional, pero este puede estar relacionado con otros procedimientos y funciones para el intercambio de valores de variables. - Cualquier algoritmo se puede transformar en un procedimiento para ser utilizado dentro de otro algoritmo mayor.
i
3
130
Funciones y Procedimientos
Parmetros Formales y Actuales
Entre los procedimientos, funciones y su entorno se producen una relacin en base a un intercambio de valores de las variables. Variables Globales y Locales La Variable global es aquella que puede ser utilizada (leda, modificada, etc.) a lo largo de todo el algoritmo principal y tambin por cualquiera de los sub-algoritmos (entindase funciones y procedimientos) que componen el algoritmo en s.
Variable local Aquella que slo puede ser referenciada dentro del sub-algoritmo en el cual ha sido declarada
i
4
131
Funciones y Procedimientos
Funciones y mbitos de las Variables Para ver las funciones y el mbito de las variables presiona cada botn FUNCIONES
i
5
132
Funciones y Procedimientos
Funciones y Procedimientos. Representacin Grafica Analice la representacin grafica de las Funciones y Procedimientos.
i
6
133
Funciones y Procedimientos
Llamadas a Procedimientos A travs del esquema siguiente podr ver como se realizan las llamadas a procedimientos.
i
7
134
Funciones y Procedimientos
Esquema Bsico de llamadas a Procedimientos Ahora veremos el esquema bsico de llamadas a procedimientos.
i
8
135
Funciones y Procedimientos
Formato de Funciones en Visual Basic Analizaremos en este punto el formato de funciones en visual basic.
i
9
136
Funciones y Procedimientos
Formatos de Funciones en JAVA , C y C++ En esta pantalla se presenta el esquema de FORMATOS DE FUNCIONES EN JAVA , C y C++
i
10
137
Funciones y Procedimientos
Suma de dos nmeros. Mtodos
METODO 1) Sin necesidad de procedimientos. Todo en el programa principal
i
11
138
Funciones y Procedimientos
METODO 2) Usando variables GLOBALES dentro del procedimiento.
i
12
139
Funciones y Procedimientos
METODO 3) Usando variables LOCALES dentro del procedimiento..
i
13
140
Funciones y Procedimientos
METODO 4) Pasndole los valores de las variables GLOBALES al procedimiento y ejecutndose dentro del mismo con variables LOCALES.
i
14
141
Funciones y Procedimientos
METODO 5) Pasndole los valores de las variables GLOBALES a la Funcin y ejecutndose el proceso dentro de la misma con variables LOCALES y una vez ejecutado se devuelve el resultado al mdulo principal .
i
15
142
Funciones y Procedimientos
METODO 6) Pasndole los valores de las variables GLOBALES a la Funcin y ejecutndose el proceso dentro de la misma con variables LOCALES y una vez ejecutado se devuelve el resultado al mdulo principal .
i
16
143
Funciones y Procedimientos
Anexo Tablas y Procedimiento Versin 1 Estudia el siguiente pseudocdigo y elige las salidas correctas del procedimiento:
POSIBLES SOLUCIONES: a)2, 4, b)4, 6, c)1, 2, d)10, 9, 6, 8, 10, 12, 14, 16, 18, 20 12, 16, 21, 27, 34, 42, 51, 61 3, 4, 5, 6, 7, 8, 9, 10 8, 7, 6, 5, 4, 3, 2, 1
i
17
144
Funciones y Procedimientos
Anexo Tablas y Procedimiento Versin 2 Estudia el siguiente pseudocdigo y elige las salidas correctas del procedimiento:
POSIBLES SOLUCIONES: e) 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 f) 4, 6, 12, 16, 21, 27, 34, 42, 51, 61 g) 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 h) 10, 9, 8, 7, 6, 5, 4, 3, 2, 1
i
18
145
Funciones y Procedimientos
Anexo Tablas y Procedimiento Versin 3 Estudia el siguiente pseudocdigo y elige las salidas correctas del procedimiento:
POSIBLES SOLUCIONES: i) 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 j) 4, 6, 12, 16, 21, 27, 34, 42, 51, 61 k) 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 l) 10, 9, 8, 7, 6, 5, 4, 3, 2, 1
i
19
146
Funciones y Procedimientos
2. Resumen
Enhorabuena! Has llegado al final de esta leccin de formacin que denominamos Arrays y Tablas. En esta leccin hemos estudiado los siguientes contenidos:
i
20
147
148
NDICE
LA INFORMTICA Y EL MANEJO DE LA INFORMACIN
1. LA INFORMTICA Y EL MANEJO DE LA INFORMACIN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3
149
150
Las primeras maquinas de calculo fueron los bacos. Luego los cientficos estaban interesados en crear una maquina calculadora que pudiera realizar clculos matemticos. En 1642 el filsofo y cientfico francs Blaise Pascal invento la primera maquina calculadora, ella poda sumar y restar. En 1843 apareci la maquina analtica diseada por Charles Babbage. Esta mquina era mecnica, luego en 1940 aparecieron las primeras computadoras electrnicas. En los inicios del procesado de informacin, con la informtica slo se facilitaba los trabajos repetitivos y montonos del rea administrativa, gracias a la automatizacin de esos procesos, ello trajo como consecuencia directa una disminucin de los costes y un incremento en la produccin.
151
La aparicin del ordenador y con l de la informtica en la dcada de los aos 50 estableci nuevas bases en el tratamiento y manipulacin de la informacin. Lo que ha permitido avances tecnolgicos jams soados por el hombre hasta la fecha.
152
Un ordenador, bsicamente es capaz de realizar solo tres cosas: operaciones aritmticas muy bsicas, operaciones de tipo lgico (comparar dos valores) y almacenar o recuperar (copiar) informacin. Estas tres operaciones convenientemente ligadas entre s forman lo que llamamos programas. Debemos entender que el ordenador es una mquina tonta solo sabe hacer lo que le ordenemos los humanos, pero tiene la ventaja que lo hace a una velocidad increble.
153
El ordenador esta integrado por un conjunto de componentes relacionados y que interactan para realizar una tarea determinada. Sus componentes se subdividen en dos tipos de elementos. Los consabidos elementos HARDWARE (componentes fsicos) y los elementos lgicos blandos los conocidos como SOFTWARE: - Elementos Hardware (CPU, dispositivos perifricos) - Elementos Software (sistema operativo y los programas). Vemos una comparacin entre los trabajos que se hacen en la vida real, por ejemplo en una panadera tpica y los que se realizan dentro del ordenador para transformar la informacin que le llega a sus componentes de entrada:
154
155
b) Ratn Mouse: Es un dispositivo electrnico que nos permite dar instrucciones a nuestra computadora a travs de un cursor que aparece en la pantalla y haciendo clic para que se lleve a cabo una accin determinada; a medida que el Mouse rueda sobre el escritorio, el cursor (Puntero) en la pantalla hace lo mismo. Tal procedimiento permitir controlar, apuntar, sostener y manipular varios objetos grficos (Y de texto) en un programa.
156
d) Scanner: Es una unidad de ingreso de informacin. Permite la introduccin de imgenes grficas al computador mediante un sistema de matrices de puntos, como resultado de un barrido ptico del documento. La informacin se almacena en archivos en forma de mapas de bits (bit maps), o en otros formatos ms eficientes como Jpeg o Gif.
e) Cmara Digital. Webcam: se conecta al ordenador y le transmite las imgenes que capta, pudiendo ser modificada y retocada, o volverla a tomar en caso de que este mal. Puede haber varios tipos. Webcam: Es una cmara de pequeas dimensiones. Slo es la cmara, no tiene LCD. Tiene que estar conectada al PC para poder funcionar, y esta transmite las imgenes al ordenador. Su uso es generalmente para videoconferencias por Internet, pero mediante el software adecuado, se pueden grabar videos como una cmara normal y tomar fotos estticas.
10
157
g) Impresora: es el perifrico que el ordenador utiliza para presentar informacin impresa en papel. Las primeras impresoras nacieron muchos aos antes que el PC e incluso antes que los monitores, siendo el mtodo ms usual para presentar los resultados de los clculos en aquellos primitivos ordenadores. En nada se parecen las impresoras a sus antepasadas de aquellos tiempos, no hay duda de que igual que hubo impresoras antes que PCs, las habr despus de stos, aunque se basen en tecnologas que an no han sido siquiera inventadas.
h) Los discos magneticos: Se considera un dispositivo de almacenamiento de informacin magntico todo aquel que se base en las propiedades magnticas de algunos materiales. Un disco magntico esta constituido por un superficie metlica, en el caso de los hard disks o plstica en el caso de los floppy disks, recubierta por un capa de un material magnetizable, los datos se almacenan cambiando el sentido del campo magntico de dicha sustancia, y una cabeza de lectura y grabacin por cada superficie de disco (actualmente los discos duros vienen en paquetes de varios platos), esta cabeza esta conformada por un electroimn que puede inducir un campo magntico o detectar el sentido del cambio magntico. La cabeza se mueve radialmente
11
158
Dentro de los discos magnticos existen varios tipos diferentes: Discos flexibles, Discos intercambiables, Discos fijos, Discos con tecnologa Winchester, discos externos conectables va USB.
i) Pen Drive, Memorias FLASH, Memorias USB: Una memoria USB (de Universal Serial Bus, en ingls pendrive o USB flash drive) es un pequeo dispositivo de almacenamiento que utiliza memoria flash para guardar la informacin que puede requerir o no bateras (pilas), en los ltimos modelos la batera no es requerida, la batera era utilizada por los primeros modelos. Estas memorias son resistentes a los rasguos (externos) y al polvo que han afectado a las formas previas de almacenamiento porttil, como los DVD y los CDs.
12
159
Estas memorias se han convertido en el sistema de almacenamiento y transporte personal de datos ms utilizado, desplazando en este uso a los tradicionales disquetes, y a los CDs. Se pueden encontrar en el mercado fcilmente memorias de 1, 2, 4, 8, 16, 32 GB o ms (esto supone, como mnimo, el equivalente a miles de los antiguos disquetes). j) El disco compacto (conocido popularmente como CD, por las siglas en ingls de Compact Disc) es un soporte digital ptico utilizado para almacenar cualquier tipo de informacin (audio, vdeo, documentos y otros datos). En espaol o castellano, se puede escribir ced, aunque en gran parte de Latinoamrica (no en Espaa) se pronucia sid (en ingls). En un CD la informacin se almacena en formato digital, es decir, utiliza un sistema binario para guardar los datos. Estos datos se graban en una nica espiral que comienza desde el interior del disco (prximo al centro), y finaliza en la parte externa. Los datos binarios se almacenan en forma de llanuras y salientes (cada una de ellas es casi del tamao de una bacteria), de tal forma que al incidir el haz del lser, el ngulo de reflexin es distinto en funcin de si se trata de una saliente o de una llanura.
13
160
14
161
15
162
Diseo interno de un microprocesador La Unidad de control (UC). Es el centro nervioso de la computadora; desde ella se controla y gobiernan todas las operaciones (bsqueda, decodificacin, y ejecucin de la instruccin). Las funciones principales de la Unidad de Control: 1234Identificar cual es la instruccin y la operacin que conlleva la Localizar los datos u operandos. Desencadenar la ejecucin de la instruccin. Desencadenar el almacenamiento del resultado. instruccin.
Funcionamiento de la unidad de control: El secuenciador interpreta la operacin que est en el registro de instruccin y activa circuitos para ejecutar la instruccin. Enva los operandos a la unidad aritmetico-lgica. Recoge el resultado de esta y lo enva a la unidad de memoria. Despus se almacena la siguiente instruccin en el registro de instruccin y realiza de nuevo el proceso.
16
163
17
164
165
NDICE
TIPOS DE ARCHIVOS DE INFORMACIN
1. FICHEROS Y BASES DE DATOS Y OPERACIONES TPICAS DE ENTRADA/SALIDA . . . . . . . . . . . . . . . .3 2. CONCEPTO DE ORGANIZACIN DE FICHEROS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5 3. CONCEPTO DE METODO DE ACCESO A LA INFORMACION DE LOS FICHEROS . . . . . . . . . . . . . . . . .7 4. OPERACIONES TIPICAS QUE SE HACEN CON LOS FICHEROS . . . . . . . . . . . . . . . . . . . . . . . . . . .10 5. LAS BASES DE DATOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12
166
167
168
169
170
171
172
173
- Creacin: Para poder realizar cualquier operacin sobre un fichero es necesario que haya sido creado previamente, almacenando sobre el soporte seleccionado la informacin requerida para su posterior tratamiento, como por ejemplo el nombre del dispositivo, el nombre del fichero, etc. Con anterioridad a la creacin de un archivo se requiere disear la estructura del mismo mediante los campos del registro, longitud y tipo de los mismos. - Apertura: Para poder trabajar con la informacin almacenada en un fichero, ste debe estar abierto, permitiendo as el acceso a los datos, dando la posibilidad de realizar sobre ellos las operaciones de lectura y escritura necesarias. - Cierre: Una vez finalizadas las operaciones efectuadas sobre el fichero, ste debe permanecer cerrado para limitar el acceso a los datos y evitar as un posible deterioro o prdida de informacin. Para cerrar un fichero previamente debe estar abierto. - Actualizacin: Esta operacin permite la puesta al da de los datos del fichero mediante la escritura de nuevos registros (alta) y la eliminacin (baja) o modificacin de los ya existentes. La actualizacin puede afectar a parte o la totalidad de los registros del fichero. Cuando se escribe un nuevo registro en el fichero se debe comprobar que no existe previamente. La baja de un registro puede ser lgica o fsica. Una baja lgica supone el no borrado del registro en el archivo. Esta baja lgica se manifiesta en un determinado campo del registro con una bandera, indicador o flag, o bien con la escritura o rellenado de espacios en blanco en el registro especfico. Una baja fsica implica el borrado y desaparicin del registro, de modo que se crea un nuevo archivo que no incluye al registro dado de baja. - Consulta: Tiene como fin visualizar la informacin contenida en el fichero, bien de un modo completo, bien de modo parcial. - Borrado o destruccin: Es la operacin inversa a la creacin de un fichero. Consiste en la supresin de un fichero del soporte o dispositivo de almacenamiento. El espacio utilizado por el archivo borrado puede ser utilizado por otros archivos. Para borrar un fichero tiene que estar cerrado.
10
174
11
175
12
176
13
177
INTRODUCCIN A LA PROGRAMACIN
178
NDICE
INTRODUCCIN A LA PROGRAMACIN
1. Concepto de algoritmo y de programa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 2. Ciclo de vida: Fases clsicas de diseo de aplicaciones informticas. . . . . . . . . . . . . . . . . . . . .4 3. Estructura de un Centro de Proceso de Datos. Roles habituales . . . . . . . . . . . . . . . . . . . . . . .7 4. Lenguajes de Programacin. Lenguajes de bajo, medio y alto nivel . . . . . . . . . . . . . . . . . . . . .9 5. Ensambladores, Interpretes y Compiladores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15 6. Cdigo fuente, cdigo objeto y cdigo ejecutable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19
179
INTRODUCCIN A LA PROGRAMACIN
1. Concepto de algoritmo y de programa.
Un algoritmo es un mtodo de resolucin de problemas en un nmero finito de pasos. Un algoritmo es la descripcin exacta y sin ambigedades de la secuencia de pasos elementales a aplicar a un proceso para, que a partir de unos datos iniciales se obtenga la solucin buscada a un problema determinado. Un programa es la expresin de un algoritmo en un lenguaje de programacin entendible por el ordenador. Cualquier programa por muy complejo que sea, consta de: datos de entrada, instrucciones para tranformar estos datos y obtener los resultados que se mostrarn en la salida.
Un programa en definitiva es un conjunto de rdenes que ejecuta el ordenador para conseguir un objetivo. Las rdenes se dan a travs de un lenguaje de programacin (cdigos).
180
INTRODUCCIN A LA PROGRAMACIN
2. Ciclo de vida: Fases clsicas de diseo de aplicaciones informticas.
Se conoce como ciclo de vida de un sistema informtico, al conjunto de actividades a realizar desde que se concibe la realizacin de un producto software hasta la retirada de de la explotacin del mismo. Anlisis.En esta fase se establece cul es el producto a desarrollar, siendo necesario especificar los procesos y estructuras de datos que se van a emplear, para satisfacer las necesidades y restricciones en el desarrollo de la aplicacin. Suele ser misin del analista funcional. Su principal objetivo es establecer QU debe hacer el software a desarrollar (y no CMO). - Recoger las ideas expuestas poe el cliente, y transformarlas en especificaciones vlidas para el diseador. - Validar con el cliente que las especificaciones realizadas por l, se ajustan a los deseos que cliente le transmiti.
Diseo.En esta fase, partiendo de la informacin recogida en el anlisis el diseador establece CMO se llevan a cabo los objetivos presentados en el Anlisis. Suele ser sta, la misin del analista orgnico. - Todo gasto de tiempo en diseo se convierte en ahorro cuando se escriba y depura el programa.
181
INTRODUCCIN A LA PROGRAMACIN
En esta fase se alcanza una solucin ptima, detallada y con la mayor precisin posible para el desarrollo de la aplicacin. Para esta fase se utilizan principalmente dos tipos de herramientas de diseo para dar solucin a los algoritmos definidos en fases anteriores:: Pseudocdigo: El algoritmo se expresa con palabras del lenguaje comn y de la forma ms detallada posible. Diagrama de flujo: Se definen como la representacin grfica que mediante el uso de smbolos estndar conectados o unidos mediante lneas de flujo, muestran la secuencia lgica de las operaciones o acciones que debe de realizar u ordenador, as como la corriente o flujo de datos en la resolucin de un problema. Los diseos deben de ser normalizados para facilitar el intercambio de documentacin entre el personal informtico. Los diagramas de flujo se pueden clasificar en dos grandes grupos: - a) Organigramas - b) Ordinogramas Una de las principales diferencias entre ambos, es que pertenecen a diferentes fases o etapas de la resolucin de un programa. Mientras que los organigramas corresponden a la fase de anlisis, los ordinogramas corresponden a la fase de diseo. Pese a estas diferencias, en muchos mbitos, se suele llamar indistintamente a los dos generalizando ambos con el nombre de organigramas. El grfico de debajo, muestra otro esquema clsico del ciclo de vida de las aplicaciones informticas:
182
INTRODUCCIN A LA PROGRAMACIN
Las otras fases del ciclo de vida de las aplicaciones informticas son:
183
INTRODUCCIN A LA PROGRAMACIN
3. Estructura de un Centro de Proceso de Datos. Roles habituales.
Un Centro de procesos de Datos CPD (tambien conocido como un sistema de informacin (SI) es un conjunto organizado de elementos, estos elementos son de 4 tipos: - Personas. - Datos. - Actividades o tcnicas de trabajo. - Recursos materiales en general (tpicamente recursos informticos y de comunicacin, aunque no tienen por qu ser de este tipo obligatoriamente).
Todo ese conjunto de elementos interactan entre si para procesar los datos y la informacin (incluyendo procesos manuales y automticos) y distribuirla de la manera ms adecuada posible en una determinada organizacin en funcin de sus objetivos. Normalmente el trmino es usado de manera errnea como sinnimo de sistema de informacin informtico, estos son el campo de estudio de la tecnologa de la informacin (IT), y aunque puedan formar parte de un sistema de informacin (como recurso material), por s solos no se pueden considerar como sistemas de informacin, este concepto es ms amplio que el de sistema de informacin informtico.
184
INTRODUCCIN A LA PROGRAMACIN
Los sistemas de informacin tratan el desarrollo, uso y administracin de la infraestructura de la tecnologa de la informacin en una organizacin.
El mayor de los activos de una compaa hoy en da es su informacin, representada en su personal, experiencia, conocimiento, innovaciones (patentes, derechos de autor, secreto comercial). Para poder competir, las organizaciones deben poseer una fuerte infraestructura de informacin, en cuyo corazn se sita la infraestructura de la tecnologa de informacin. De tal manera que el sistema de informacin se centre en estudiar las formas para mejorar el uso de la tecnologa que soporta el flujo de informacin dentro de la organizacin. LOS ROLES de las personas implicadas en un CPD son muchos y muy variados, pudiendo estos variar en funcin de la organizacin en que desempeen su trabajo. Los ms habituales son: - Director del departamento - Gerente de cuentas claves - Jefe de Proyectos - Analista Funcional - Analista Orgnico - Analista-Programador - Programador Senior - Programador Junior - Usuarios - Tcnico de sistemas de redes - Tcnico de seguridad - Tcnico de calidad software - Jefe de explotacin - Operadores - Administrador de Bases de Datos - Administrador se Seguridad - Otros
185
INTRODUCCIN A LA PROGRAMACIN
4. Lenguajes de Programacin. Lenguajes de bajo, medio y alto nivel.
La codificacin de programas. Consiste en la traduccin de la solucin obtenida a un determinado lenguaje de programacin, basndonos en las especificaciones de diseo expresadas en el cuaderno de carga, dando como resultado unas instrucciones ejecutables por el ordenador. Asimismo, se debern realizar las pruebas necesarias para depurar errores y verificar la calidad de los programas. Lenguajes de Programacin. Los lenguajes de programacin son una notacin para escribir programas, a travs de los cuales podemos comunicarnos con el hardware y dar as las rdenes adecuadas para la realizacin de un determinado proceso. Lgicamente, para escribir los programas, aplicaciones o softwares que el ordenador emplea para trabajar, el programador utiliza un lenguaje de programacin denominado de alto nivel, que le permite crearlos escribiendo lneas de texto codificadas. Esas lneas de texto u rdenes el programador las puede escribir, leer y entender, no as el ordenador mientras se mantengan escritas de esa forma. Para que el ordenador pueda entender las ordenes contenidas en un programa cualquiera escrito por el programador en lenguaje de alto nivel, es necesario que otro programa denominado compilador las traduzca y convierta a cdigo mquina de bajo nivel. Este cdigo, compuesto solamente de unos y ceros, es el nico que entiende el ordenador y es el que le permite interpretar las rdenes contenidas en los programas para que las pueda ejecutar.
186
INTRODUCCIN A LA PROGRAMACIN
Los lenguajes de programacin a lo largo de la historia. Periodo 1950 - 1955 Influencias Ordenadores primitivos Lenguajes Lenguajes ensamblador. Lenguajes experimentales de alto nivel FORTRAN ALGOL 58 y 60 COBOL LISP FORTRAN IV COBOL 61 Extendido ALGOL 60 Revisado APL (como notacin slo) PL/I FORTRAN 66 (estndar) COBOL 65 (estndar) ALGOL 68 SIMULA 67 BASI C APL/360
1956 - 1960
Ordenadores pequeos, caros y lentos Cintas magnticas. Compiladores e intrpretes Optimizacin del cdigo. Ordenadores grandes y caros Discos magnticos Sistemas operativos Lenguajes de propsito general. Ordenadores de diferentes tamaos, velocidades, y costes. Sistemas caros de almacenamiento masivo de datos. Sistemas operativos multitarea e interactivos. Compiladores con optimizacin. Lenguajes estndar, flexibles y generales. Micro ordenadores. Sistemas pequeos y baratos de almacenamiento masivo de datos. Programacin estructurada. Ingeniera del software. Lenguajes sencillos.
1961 - 1965
1966 - 1970
1971 - 1975
10
187
INTRODUCCIN A LA PROGRAMACIN
Periodo 1976 - 1980 Influencias Ordenadores baratos y potentes. Sistemas distribuidos. Programacin interactiva. Abstraccin de datos. Programacin con fiabifidad y fcil mantenimiento. Ordenadores ms baratos y potentes. Mayor abstraccin de datos. Menor costo de memorias Programacin Orientada o Objetos Lenguajes ADA FORTRAN 77 PROLOG COBOL II
1980 -1990
SmallTalk OOCOBOL C++ Objective C Object Pascal (Delphi) Visual Basic JAVA HTML,XM JAVASCRIPT C# Visual Basic .NET y muchos ms, ,
1990 - 2008
Tipos de lenguajes de programacin. Un lenguaje de programacin es un conjunto de smbolos y caracteres combinados entre s de acuerdo con una sintaxis ya definida para posibilitar la transmisin de instrucciones al ordenador. Estos smbolos son traducidos a un conjunto de seales elctricas representadas en cdigo binario porque es el nico lenguaje que entienden los microprocesadores. El nico lenguaje que realmente maneja una computadora es el lenguaje Mquina, este lenguaje esta formado exclusivamente de nmeros binarios. Adems un programa en lenguaje mquina debe especificar todos los detalles referentes al hardware, lo que hace que adems de muy largo, sea dependiente de la mquina en que se trabaje. Por su parte un programa escrito en un lenguaje de alto nivel, esta compuesto de sentencias en un lenguaje ms cercano al lenguaje natural con respecto al primero. Un lenguaje de alto nivel es por tanto mas fcil de entender y aprender, permite a los programadores olvidarse de los detalles del hardware y concentrarse en
11
188
INTRODUCCIN A LA PROGRAMACIN
la lgica del programa; adems produce programas que se pueden ejecutar en diferentes equipos de computo con pocos o ningn cambio.
Tipos de lenguajes de programacin: Bajo nivel (Lenguaje mquina) Intermedios (Lenguaje ensamblador), C Alto nivel Gestin Cientficos Propsito general y especficos
Lenguajes mquina. Lenguajes de Bajo Nivel.Fue el primer lenguaje utilizado en la programacin de computadoras. Son tambin llamados de bajo nivel por que el lenguaje que utilizan unos y ceros (sistema binario) para dar rdenes al ordenador. Son los que ms bajan al nivel hardware de la maquina, los ceros y unos son en realidad niveles de tensin elctrica ms o menos elevada. Es el nico que entiende directamente la computadora. Utiliza el alfabeto binario que como vimos ms arriba, que consta de los dos nicos smbolos 0 y 1, denominados bits (abreviatura inglesa de dgitos binarios).
EJEMPLO: 0000 1000 0011 0111 1110 0001 1001 1010 0100 1001 1010 1001 1001 0111 0010 0001 1010 1100 0000 0000 01 A1 89 9A 3A 9C 74 70 E9 20
12
189
INTRODUCCIN A LA PROGRAMACIN
Lenguaje de ensambladores.Es el primer intento de sustituir el lenguaje mquina por otro ms similar a los utilizados por las personas. Cada instruccin equivale a una instruccin en lenguaje mquina, utilizando para su escritura palabras nemotcnicas en lugar de cadenas de bits. Formado por nemotcnicos es decir, palabras abreviadas procedentes del ingls formadas por letras y nmeros (Ejemplo: MOV A, B). La programacin en lenguaje ensamblador precisa de un amplio conocimiento sobre la constitucin, estructura y funcionamiento interno de un ordenador, as como un hbil manejo de los cdigos y sistemas de numeracin, en especial el binario y el hexadecimal.
FIN :
Este lenguaje presenta la mayora de los inconvenientes del lenguaje mquina: Cada modelo de computadora tiene un lenguaje ensamblador propio diferente del de los dems, por lo cual un programa slo puede utilizarse en la mquina para la cual se program. El programador ha de conocer perfectamente el hardware del equipo, ya que maneja directamente las posiciones de memoria, registros del procesador y dems elementos fsicos. Todas las instrucciones son elementales, es decir, en el programa se deben describir con el mximo detalle todas las operaciones que se han de llevar a cabo en la mquina para la realizacin de cualquier proceso. Mnima ocupacin de memoria y mnimo tiempo de ejecucin en comparacin con el resultado de la compilacin del programa equivalente escrito en otros lenguajes.
13
190
INTRODUCCIN A LA PROGRAMACIN
Lenguajes de Alto Nivel.Se llaman lenguajes de alto nivel cuando el conjunto de rdenes que utilizan son fciles de entender y aprender. Adems no hay incompatibilidades entre un microprocesador y otro. Como inconveniente destacable, es la necesidad de traducir los programas escritos en un lenguaje de alto nivel a un lenguaje de programacin tan primitivo como el lenguaje mquina para que pueda ser interpretado y ejecutado por la unidad central de proceso, lo que significa disponer necesariamente de un traductor (ensamblador, compilador o intrprete) para cada tipo de ordenador utilizado. Las caractersticas de los lenguajes de alto nivel son: - Lograr independencia de la mquina, pudiendo utilizar un mismo programa en diferentes equipos con la nica condicin de disponer de un programa traductor o compilador, que lo suministra el fabricante, para obtener el programa ejecutable en lenguaje binario de la mquina que se trate. Adems, no se necesita conocer el hardware especfico de dicha mquina. - Aproximarse al lenguaje natural, para que el programa se pueda escribir y leer de una forma ms sencilla, eliminando muchas de las posibilidades de cometer errores que se daban en el lenguaje mquina, ya que se utilizan palabras (en ingls) en lugar de cadenas de smbolos sin ningn significado aparente. - Incluir rutinas de uso frecuente como son las de entrada/salida, funciones matemticas, manejo de tablas, etc, que figuran en una especie de librera del lenguaje, de tal manera que se pueden utilizar siempre que se quieran sin necesidad de programarlas cada vez.
14
191
INTRODUCCIN A LA PROGRAMACIN
5. Ensambladores, Interpretes y Compiladores.
Cuando programamos en un lenguaje distinto al lenguaje mquina, los programas diseados deben ser traducidos a cdigo binario, para que as las instrucciones en ellos especificadas puedan ser entendidas y ejecutadas. El sistema o software encargado de traducir estos programas (denominados programas fuentes) puede ser un ensamblador, intrprete o compilador. Representacin grafica de los 3 modelos de traduccin a ejecutable.
Programas Ensambladores.Son los encargados de transformar o traducir directamente (lo que aporta al ordenador mayor velocidad de operacin) los programas escritos en ensamblador a su correspondiente en cdigo mquina o cdigo binario para que puedan ser ejecutados por la CPU. Programas Intrpretes.Analiza el programa fuente y lo ejecuta directamente, sin generar ningn cdigo equivalente. Suele generar programas ms rpidos y eficientes, ya que el anlisis del lenguaje fuente se hace una sola vez, durante la generacin del programa equivalente. Un intrprete es un programa de software encargado de procesar y traducir cada instruccin o sentencia de un programa escrito en un lenguaje de alto nivel a cdigo mquina y despus ejecutarla; es decir, que el microprocesador ejecuta la orden o instruccin una vez traducida y despus de comprobar que no existe error alguno de sintaxis. La traduccin o interpretacin y la ejecucin no se realizan como procesos independientes, sino en una misma operacin e instruccin por instruccin, respetando rigurosamente el orden establecido en ellas.
15
192
INTRODUCCIN A LA PROGRAMACIN
Programas Compiladores.Son los traductores a lenguaje mquina de los lenguajes de alto nivel. Un compilador es un programa de software escrito en algn lenguaje de programacin cuyo objetivo es traducir el correspondiente programa fuente (fichero constituido por un conjunto de instrucciones desarrolladas en un lenguaje de alto nivel) a su equivalente en cdigo mquina, tambin denominado programa objeto. Su misin, con otras palabras es, analizar el programa fuente y traducirlo a otro equivalente escrito en otro lenguaje (por ejemplo, en el lenguaje de la mquina). La diferencia ms destacable entre un compilador y un intrprete radica en que, mientras que un intrprete acepta un programa fuente que traduce y ejecuta simultneamente analizando cada sentencia o instruccin por separado, un compilador efecta dicha operacin en fases independientes, primero traduce completamente el programa fuente a cdigo mquina y seguidamente ejecuta el programa. Otra de las funciones del compilador adems de la DEPURACIN SINTCTICA del programa FUENTE es producir un listado indicando la lnea donde se ha detectado y la regla sintctica que se ha infringido. Pasos para la creacin de un programa ejecutable escrito en un lenguaje de alto nivel: 1. - Escribir el cdigo fuente (editor de texto). 2. - Compilar y Linkeditar el cdigo 3. - Ejecutar el cdigo que produce la compilacin. Como se ha enumerado ms arriba, las Fases de creacin de ejecutables son: 1. Edicin: El programador con un editor de textos genera el cdigo fuente, en un archivo o en varios. 2. Compilacin: Cada archivo de cdigo fuente se compila y se obtiene un archivo de cdigo objeto. La compilacin tiene las siguientes fases: - Anlisis lxico - Anlisis sintctico - Anlisis semntico - Optimizacin - Generacin de cdigo.
16
193
INTRODUCCIN A LA PROGRAMACIN
Linkaje: Se montan, enlazan y vinculan todos los cdigos objeto y se genera un archivo en cdigo mquina, capaz de ser ejecutado en el ordenador. Ejecucin: El sistema operativo monta en memoria el programa ejecutable y lo ejecuta. Visto secuencialmente :
17
194
INTRODUCCIN A LA PROGRAMACIN
Y este mismo proceso de compilacin en los lenguajes de alto nivel se ve secuencialmente y con un poco ms de profundidad en el esquema siguiente:
El analizador lxico: Detecta las palabras reservadas, signos de puntuacin, variables etc. El analizador sintctico: Comprueba que las sentencias son correctas desde el punto de vista sintctico. El analizador semntico: Comprueba que las sentencias son correctas desde el punto de vista semntico. El operador de cdigo intermedio: Realiza la primera traduccin del cdigo fuente. El optimizador de cdigo: Realiza mejoras en la eficiencia del programa. El operador de cdigo final: Realiza la ltima traduccin dando lugar al cdigo objeto, que es el cdigo escrito en lenguaje ensamblador.
18
195
INTRODUCCIN A LA PROGRAMACIN
6. Cdigo fuente, cdigo objeto y cdigo ejecutable.
Definicin de conceptos de Compilacin:
PROGRAMA FUENTE:
PROGRAMA OBJETO:
COMPILAR:
COMPILADOR:
Un programa FUENTE que ha sido compilado y por tanto traducido a lenguaje mquina, es decir, convertido en programa OBJETO, es un programa que todava no es EJECUTABLE. No es EJECUTABLE, porque est incompleto. Cada una de las instrucciones de un programa FUENTE, al ser traducido a OBJETO, se EXPANDEN en varias INSTRUCCIONES MAQUINA. Estas instrucciones, adems, son ordenadas y direccionadas secuencialmente. Existen, sin embargo, en el programa ya compilado algunas instrucciones que necesitan un nmero de instrucciones complejas para poderse EJECUTAR. Estos conjuntos de INSTRUCCIONES MAQUINA se almacenan en unas LIBRERIAS, formando MODULOS localizables mediante unos nombres que el compilador asocia a determinadas instrucciones especiales. Por tanto, en el programa OBJETO no estn todava las instrucciones de esos MODULOS, aunque estos s estn definidos y direccionados. Adems, existen instrucciones del lenguaje de alto nivel que piden la ayuda de otros programas. Por ejemplo, el verbo CALL. El compilador direcciona la instruccin, pero no incorpora el programa LLAMADO.
19
196
INTRODUCCIN A LA PROGRAMACIN
El programa LINKEDITADOR, tiene como funcin bsica incorporar (ENLAZAR), tanto los mdulos OBJETO definidos por el compilador, como los programas o subprogramas tambin llamados funciones o procedimientos. Con el conjunto formado por el programa OBJETO, ms los mdulos o librerias incorporados, ms los subprogramas aadidos, genera lo que se denomina programa EJECUTABLE. Definicin de conceptos de Linkeditacin y enlace:
MODULO COBOL:
Conjunto de instrucciones mquina, que son capaces de realizar la accin pedida por un verbo COBOL. Nombre predefinido que asocia el compilador a un verbo COBOL y el LINKEDITOR a un conjunto de instrucciones residentes en una librera. Programa generado por el linkeditor a partir del programa OBJETO generado por el compilador, los mdulos COBOL Y LOS POSIBLES PROGRAMAS LLAMADOS. El programa EJECUTABLE, como dice la palabra, est dispuesto para realizar el proceso. Programa, en nuestro caso COBOL, que contiene una o n veces el verbo CALL para solicitar que se le incorpore una copia del programa indicado como operando de dicho verbo.
NOMBRE MODULO:
PROGRAMA EJECUTABLE:
PROGRAMA LLAMANTE:
Ejecucin y Puesta a Punto de Programas. Una vez que el programa ha sido LINKEDITADO, ya SI se puede ejecutar. Los PROGRAMAS que de forma automtica desarrollan los Sistemas de la Compaa (nminas, control de produccin, etc..) son, como es lgico, PROGRAMAS EJECUTABLES, que residen permanentemente en LIBRERIAS. Para que se ejecuten, basta con llamarlos o referenciarlos adecuadamente. Sin embargo, hasta que un PROGRAMA pasa a SER EJECUTABLE, ha de recorrer un camino que podemos definir como de PUESTA a PUNTO.
20
197
INTRODUCCIN A LA PROGRAMACIN
Este camino a recorrer tiene como objetivo garantizar que el PROGRAMA funciona y funciona bien. Slo a partir de este momento el programa podr pasar a residir en la librera de PROGRAMAS EJECUTABLES (programas en explotacin). Durante la PUESTA a PUNTO el programa se har EJECUTABLE solamente el tiempo necesario para probarlo y conseguir unos resultados. Si es necesario, se corregirn instrucciones y de nuevo se probar el Programa. El circuito de la PUESTA a PUNTO ser COMPILAR, LINKEDITAR y EJECUTAR tantas veces como se considere necesario. Lgicamente en esta Fase intervienen tambin los DATOS de ENTRADA as como los RESULTADOS. Definicin de conceptos de Ejecucin y puesta apunto de programas: PROGRAMA EJECUTABLE TEMPORAL: Programa en situacin de prueba que permanece en un disco durante el tiempo imprescindible para que pueda ser probado. PROGRAMA EJECUTABLE CATALOGADO: Programa Puesto a Punto que reside permanentemente en una LIBRERIA dispuesto para SER EJECUTADO cuando sea llamado. CIRCUITO DE PRUEBA: Ciclo normalmente repetitivo en el que intervienen: EL PROGRAMA FUENTE recin corregido, que pasa a ser PROGRAMA OBJETO, a continuacin PROGRAMA EJECUTABLE (provisional) que da unos resultados revisables. JUEGO DE FICHEROS DE PRUEBAS ENSAYO: FICHEROS que simulan a FICHEROS REALES, como entrada de datos al programa, para conseguir probar todas las instrucciones y todas las situaciones y caminos del Programa.
21
198
199
NDICE
LA PROGRAMACIN ESTRUCTURADA. PSEUDOCDIGOS Y ESTRUCTURAS BSICAS
1. Introduccin a la Programacin Estructurada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 2. Instrucciones secuenciales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6 3. Instrucciones alternativas (bifurcaciones) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 4. Instrucciones repetitivas (bucles) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11
200
201
202
203
204
Siempre en las instrucciones o bifurcaciones condicionales, tendremos la posibilidad de bifurcar el orden secuencial tpico de los ordenadores gracias al anlisis de una condicin. En funcin de que la condicin se cumpla, (sea verdadera trae) o que la condicin asociada al IF no se cumpla (sea falsa) se pueden realizar las instrucciones que coloquemos en dos o ms caminos alternativos. Veamos a continuacin todos los formatos conocidos de alternativas condicionales y su representacin en pseudocdigo y su equivalente en ordinagrama.
205
206
207
10
208
11
209
12
210
13
211
14
212
15
213
16
214
17
215
18
216
Un programa secuencial es un programa que: - Arranca - Lee los datos que necesita - Realiza los clculos - Imprime o guarda en el disco los resultados. Mientras un programa secuencial est ejecutndose no necesita ninguna intervencin del usuario. A este tipo de programas se les llama tambin programas basados u orientados a procedimientos o a algoritmos (procedural languages). Este tipo de programas siguen utilizndose ampliamente en la actualidad, pero la difusin de los PCs y los GUIs (Interfaces Grficos de Usuario) ha puesto de actualidad otros tipos de programacin.
19
217
Los programas interactivos exigen la intervencin del usuario en tiempo de ejecucin: - Para suministrar datos - Para indicar al programa lo que debe hacer por medio de mens. Los programas interactivos limitan y orientan la accin del usuario. Como en los programas secuenciales tambin se les llama programas basados u orientados a procedimientos o a algoritmos (procedural languages). Este tipo de programas siguen utilizndose ampliamente en la actualidad, pero la difusin de los PCs y los GUIs (Interfaces Grficos de Usuario) ha puesto de actualidad otros tipos de programacin.
20
218
Los programas orientados a eventos son los programas tpicos de Windows, tales como Explorer, Word, Excel, PowerPoint, Access y otros. Cuando uno de estos programas se ha iniciado, se queda en espera de las acciones del usuario o del sistema, dichas acciones se denominan eventos. El usuario decide, interactuando con el interfaz, si quiere abrir y modificar un fichero existente, o bien comenzar a crear un fichero desde el principio, o cualquier otra accin que el programa ofrezca al usuario mediante el interfaz. El tipo de programacin que ejecuta cdigo cuando se producen determinados eventos es la denominada programacin orientada a eventos. Un evento se produce sobre un elemento del interfaz, y esto hace que se ejecute el cdigo asociado a ese elemento para ese evento. Los elementos del interfaz se denominan controles y los cdigos que un control ejecuta como reaccin a un evento se llaman mtodos. Los controles tienen caracterizado su comportamiento segn el estado de sus propiedades.
21
219
22
220
221
NDICE
TCNICAS DE PROGRAMACIN ESTRUCTURADA
1. TIPOS DE DATOS MS UTILIZADOS EN LA MAYORA DE LOS LENGUAJES DE PROGRAMACIN (Revisin de Conceptos) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 2. EJERCICIOS DE TEORA Y TCNICASDE PROGRAMACIN ESTRUCTURADA . . . . . . . . . . . . . . . . .8
222
Nmero decimales o reales (coma flotante): Coma flotante. Simple Precisin Single/Float (4 bytes) -3,40E+38 a 3,40E+38 Coma flotante. Doble Precisin Double (8 bytes) -1,79D+308 a 1,79D+308
Coma fija con 4 decimales Currency (8 bytes) +/- 922.337.203.685.477,5807 Datos Alfanumricos Cadena de caracteres alfanum. Datos Boleanos (verdadero/falso) Booleano/Switch Datos tipo Fechas Fecha y Hora
Boolean (2 bytes)
True o False
RESUMEN:
Tipologa y Tamao de los datos 0 a 255 -32.768 a 32.767 -2.147.483.648 a 2.147.483.647 BOOLEAN FLOAT STRING True / False Decimales Alfanumricos
223
Prioridad de los Operadores Aritmticos - Todas las expresiones entre parntesis se evalan primero. Las expresiones con parntesis anidados se evalan de dentro a fuera, el parntesis mas interno se evala primero. - Dentro de una misma expresin los operadores se evalan en el siguiente orden . 1.- ^ Exponenciacin 2.- *, /, mod. (Multiplic., divisin, resto). 3- +, -(Suma ,resta). - Los operadores en una misma expresin con igual nivel de prioridad se evalan de izqui. a dcha. - Los operadores aritmticos permiten la realizacin de operaciones matemticas con los valores (variables y constantes). - Los operadores aritmticos pueden ser utilizados con tipos de datos enteros o reales. Si ambos son enteros, el resultado es entero; si alguno de ellos es real, el resultado es real.
224
Se utilizan para establecer una relacin entre dos valores. Compara estos valores entre si y esta comparacin produce un resultado de verdadero o falso. Los operadores relacinales comparan valores del mismo tipo (numricos o cadenas). Tienen el mismo nivel de prioridad en su evaluacin. Los operadores relacinales tiene menor prioridad que los aritmticos.
225
226
227
228
229
10
230
11
231
12
232
13
233
14
234
15
235
16
236
17
237
18
238
19
239
20
240
21
241
22
242
NOTA: Esta es una solucin vlida, muy eficaz ya que no se tienen que analizar condiciones antes de hacer la multiplicacin de cada nmero, pero menos prctica que usar repetitivas. Si tuviesemos que hacer la tabla de multiplicar de hasta el 1000 de un numero tecleado entre el 1 y el 9, nos veramos obligados a repetir mil veces esa linea en el programa, con lo que el programa fuente sera muy grande. Veamos a continuacin, otras opciones de codificacin ms estandarizadas.
23
243
24
244
25
245
26
246
27
247
28
248
249
250
251
252
253
254
255
256
257
10
258
259
NDICE
ARRAYS Y TABLAS UNIDIMENSIONALES, BIDIMENSIONALES, TRIDIMENSIONALES Y MULTIDIMENSIONALES.
- Ordenar una tabla por cualquier mtodo - Insertar un elemento en uno libre del final - Insertar un elemento en uno de los elemento intermedios desplazando el resto hacia el final (debe haber elem. vacios al final). - Borrar un elemento de una tabla.
260
- ORDENAR UNA TABLA POR CUALQUIER MTODO - INSERTAR UN ELEMENTO EN UNO LIBRE DEL FINAL - INSERTAR UN ELEMENTO EN UNO DE LOS ELEMENTO INTERMEDIOS DESPLAZANDO EL RESTO HACIA EL FINAL (DEBE HABER ELEM. VACIOS AL FINAL). - BORRAR UN ELEMENTO DE UNA TABLA.
261
Con este mtodo en la primera pasada se compara el primer elemento con todos los dems y, al final de sta el valor ms pequeo queda en el primer elemento. En la segunda pasada se compara el segundo elemento con todos los dems y al final de esta el siguiente valor ms pequeo queda ordenado en el segundo elemento y as sucesivamente.
262
263
264
Con este segundo mtodo de ordenacin, se van comparando parejas de elementos, siempre juntos. Todos los elementos que van quedndose detrs, van quedando ordenados. Conforme se avanza, cada vez que se encuentran dos elementos que no estn ordenados se ordenan y se va retrocediendo hasta dejar el valor ms pequeo colocado en su lugar. Una vez ordenado se continua a partir del elemento desde el que se comenz a retroceder. Y as sucesivamente hasta dejar todos los elementos ordenados en su lugar.
265
266
267
10
268
11
269
12
270
13
271
14
272
15
273
16
274
275
276
277
278
279
280
281
282
B: Hallar tambin la media obtenida por los alumnos en cada una de las 10 asignaturas.
OTRA VERSION PODRIA SER CREAR UNA NUEVA TABLA CON UNA FILA MAS Y UNA COLUMNA MS PARA GUARDAR EN ELLAS LA MEDIA DE LAS ASIGNATURAS Y LA MEDIA DE LOS ALUMNOS CONFORME SE VAN OBTENIENDO Y SE VAN IMPRIMIENDO.
283
10
284
11
285
12
286
13
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
(10-19)(10-21)(11-21)(10-20)
304
305
10
306
11
307
308
309
310
RESPUESTAS: Cuntas veces se ejecutan las 2 repetitivas? a.b.b.d.OPCIN CORRECTA: El Bucle 1 INFINITAS Veces y el Bucle 2 TAMBIN. El Bucle 1 INFINITAS Veces y el Bucle 2 NUNCA. El Bucle 2 se realiza 3 Veces por cada 10 del Bucle 1. Ninguna de las anteriores respuestas es vlida.
311
312
313
314
8. Para que una vez finalizado el programa, el valor impreso de X sea igual a 10. Qu valor inicial se debera haber dado a P ?.
315
316
10
317
11
318
12
319
RESPUESTAS: Qu afirmacin es la vlida? a.- En el Punto-1 debera poner Imprimir Tabla(I) y en el Punto-2 J<I . b.- En el Punto-1 debera poner Leer Otro Registro y en el Punto-2 J<I . c.- En el Punto-1 debera poner Leer Otro Registro y en el Punto-2 J<=I . d.- En el Punto-1 debera poner Imprimir Tabla(I) y en el Punto-2 J<=I . OPCIN CORRECTA:
13
320
14
321
322
323
NDICE
CARACTERSTICAS DE LA TECNOLOGA JAVA
1. Caractersticas del lenguaje Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 2. La Mquina Virtual de Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9 3. Soporte de Fabricantes de Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13 4. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14
324
Creacin y usos de Java Los inicios de Java se remontan a finales de los aos 80 aunque no es hasta 1990 cuando el equipo de James Gosling, en su afn de crear un lenguaje tal que los programas desarrollados con l pudieran ejecutarse sobre cualquier arquitectura, desarrolla el Oak. En principio se desarroll para pequeos electrodomsticos de mano pero en 1993 y mientras este equipo continuaba desarrollando el proyecto, la World Wide Web alcanz su mximo auge.
i
3
325
Es as como nace el primer paquete de desarrollo que, con la experiencia y prctica de programadores, se ira depurando poco a poco. El programa evoluciona y da lugar al primer kit completo de programacin: el Java Developers Kit ver. 1.0, que despus va a evolucionar hasta la actual versin. Netscape primeramente, en su versin 2.0 del Netscape Navigator y Microsoft ms tarde en su Internet Explorer 3.0, incorporaron en sus navegadores la posibilidad de interpretar la Applets Java.
i
4
326
Ventajas de Java Java es un moderno lenguaje de programacin orientada a objetos desarrollado por SUN MICROSYSTEMS, empresa de reconocido prestigio por sus estaciones de trabajo UNIX de alta calidad y cuya sede est en California. Cmo ejecutar un programa Java? Primeramente se compila el cdigo fuente, proceso que genera un fichero llamado bytecodes que ser interpretado por un software llamado JVM o Mquina Virtual de Java que habr que instalar previamente en nuestro ordenador.
i
5
327
i
6
328
i
7
329
i
8
330
El cdigo binario de Java no es un lenguaje de alto nivel, sino un verdadero cdigo mquina de bajo nivel, viable incluso como lenguaje de entrada para un microprocesador fsico. La JVM es una de las piezas fundamentales de la plataforma Java. Bsicamente se sita en un nivel superior al hardware del sistema sobre el que se pretende ejecutar la aplicacin, y ste acta como un puente que entiende tanto el bytecode, como el sistema sobre el que se pretende ejecutar. Ventaja de JVM La gran ventaja de la Mquina Virtual de Java es aportar portabilidad al lenguaje de manera que desde Sun Microsystems se han creado diferentes Mquinas Virtuales de Java para diferentes arquitecturas
i
9
331
Especificaciones JVM La JVM tiene especificaciones para un conjunto de instrucciones, un conjunto de registros, un formato para archivos de clases, la pila, un heap con recolector de basura y un rea de memoria. Cualquier implementacin de la JVM que sea aprobada por SUN debe ser capaz de ejecutar cualquier clase que cumpla con la especificacin. Para ello, cuenta con el departamento de software denominado JAVASOFT que en este caso sera el encargado de validar cualquier JVM para que se ajuste a la normativa de SUN.
i
10
332
Existen los compiladores JIT (Just In Time) que lo que hacen es optimizar el bytecode que se crea haciendo como una segunda compilacin del mismo, acorde a la plataforma en la que vamos a ejecutar el programa Java, de este modo vamos a ganar en velocidad de ejecucin.
La verificacin de cdigo tambin asegura que los patrones de bits arbitrarios no pueden usarse como direcciones. La proteccin de memoria se consigue sin necesidad de una unidad de Gestin de Memoria (MMU). As, JVM es una forma eficiente de obtener proteccin de memoria en chips que no tienen MMU.
i
11
333
12
334
Actualmente en el mercado Java, existen diversos entornos de desarrollo ms conocidos como IDE, que nos permiten simplificar las tareas a la hora de compilar y ejecutar nuestra clase o clases Java. Entre los ms populares y utilizados por las empresas se encuentran NJbuilder etBeans Eclipse JDeveloper
La mayora de estos entornos disponen de plug-ins adicionales a la hora de desarrollar partes ms especficas del extenso API de Java as como J2EE. Muchos de ellos incluyen servidores de aplicaciones de prueba al estilo Tomcat.
i
13
335
i
14
336
EDICIONES JAVA
337
NDICE
EDICIONES JAVA
1. Java Standar Edition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 2. Java Enterprise Edition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5 3. Java Micro Edition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10 4. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15
338
Ediciones Java
1. Java Standar Edition
En ste te mostraremos los grandes bloques en que se divide la tecnologa Java Ediciones de la Tecnologa Java Actualmente podramos decir que la Versin 2 de Java de Sun Microsystem contiene 3 ediciones distintas: Java Estndar Edition (J2SE), Java Enterprise Edition (J2EE) y Java Micro Edition (J2ME).
i
3
339
Ediciones Java
Java Standar Edition Java Estndar Edition sera lo que normalmente entendemos como aplicaciones cliente, todo lo que sera el desarrollo de la parte del cliente, lo que va a manejar en su puesto de trabajo. En esta parte se suele incluir todo lo que son los fundamentos del lenguaje, la sintaxis con todo lo que abarca, tipos de datos, etc. Tambin lo que es el tratamiento de errores, todos los bucles de control de flujo, arrays, colecciones. La edicin J2SE se emplea para programar en dispositivos personales tales como desktops y laptops. A un nivel un poco ms avanzado, permite el desarrollo de applets para Internet y el desarrollo de interfaces grficas de usuario mediante las APIS AWT y Swing que nos proporciona el lenguaje Java.
i
4
340
Ediciones Java
2. Java Enterprise Edition
Funciones de J2EE Internet y la World Wide Web representan el fundamento sobre los cuales se est construyendo la economa de la informacin. Transacciones bancarias, ventas por Internet, comercio electrnico etc. La meta de J2EE es definir un estndar que ayude a suplir los retos tecnolgicos en esta nueva era. 1. Soporta aplicaciones distribuidas que toman las ventajas de las tecnologas existentes y en desarrollo, simplificando el proceso a travs de un modelo de aplicaciones basados en componentes (unidades de software reutilizables). 2. Soporta aplicaciones desde las propias corporativas hasta e-commerce con Web en Internet. 3. Provee soporte tanto para el lado del servidor como para el lado del cliente, para aplicaciones corporativas multi-capa (multi-tier) Contenedor De la mano de un modelo basado en componentes se encuentra la nocin de contenedor. Un contenedor es un entorno estandarizado de ejecucin que provee servicios especficos a componentes. Por ejemplo todos los contenedores Web proveen soporte para requerimientos de clientes, realizar un procesamiento y retornar los resultados (como cuando rellenamos un formulario y enviamos los resultados a un servidor para ser procesados).
5
341
Ediciones Java
Componentes J2EE tiene perfectamente especificada la API para que un desarrollador pueda hacer: componentes, servicios y comunicaciones.
i
6
342
Ediciones Java
Componentes: contenedor Todos los componentes dependen de una entidad de nivel de sistema llamada contenedor. Los contenedores proveen a los componentes, servicios como ciclo de vida, seguridad, multithreading, etc.
Contenedores Servlets Los componentes Web son hospedados por contenedores Servlets, JSP y Web.
i
7
343
Ediciones Java
Enterprise Java Beans La arquitectura Enterprise Java Beans (EJB) es una tecnologa del lado del servidor para desarrollo y ejecucin de componentes para lgica de negocio de una aplicacin empresarial. EJB son escalables, transaccionales y multiusuario. Bsicamente son lo que llamamos las reglas de negocio o dicho de otro modo los algoritmos que resuelven los problemas de la empresa. Hay tres tipos de EJB: - Session Bean - Entity Bean -Message Beans Servicios de la Plataforma J2EE La plataforma J2EE provee los Servicio de Nombres, Servicios Deployment, Servicios Transaccionales y Servicios de Seguridad Servicio de Nombres Ofrece a los clientes de aplicacin , EJB y componentes Web acceso a ambiente de nombres JNDI, lo que significa poder localizar un objeto o servicio dentro de una red ( por ejemplo una Intranet) a travs de un nico nombre.
i
8
344
Ediciones Java
Comunicaciones Las comunicaciones se refieren a las tecnologas de mensajera: envo y recepcin de mensajes asincrnicos, Java Message Service (JMS) y Java Mail. Pulsa en las imgenes y podrs conocer ms detalles de estas tecnologas.
Java Mail
i
9
345
Ediciones Java
3. Java Micro Edition
Java Micro Edition (J2ME) es la versin de Java orientada a los dispositivos mviles.
Debido a que los dispositivos mviles tienen una potencia de clculo baja e interfaces de usuario pobres, es necesaria una versin especfica de Java destinada a estos dispositivos, ya que el resto de versiones de Java, J2SE o J2EE, no encajan dentro de este esquema. J2ME es por tanto, una versin reducida de J2SE. La configuracin es un mnimo grupo de APIs (Application Program Interface), tiles para desarrollar las aplicaciones destinadas a un amplio rango de dispositivos. La configuracin estndar para los dispositivos inalmbricos es conocida como CLDC (Connected Limited Device Configuration). CLDC (Connected Limited Device Configuration) El CLDC proporciona un nivel mnimo de funcionalidades para desarrollar aplicaciones para un determinado conjunto de dispositivos inalmbricos.
i
10
346
Ediciones Java
Se puede decir que CLDC es el conjunto de clases esenciales para construir aplicaciones. Hoy por hoy, slo tenemos una configuracin, pero es de esperar que en el futuro aparezcan distintas configuraciones orientadas a determinados grupos de dispositivos. Encontramos requisitos en los CLDC tanto de hardware como de memoria. - Requisito de hardware - Requisito de memoria Limitaciones CLDC Es complicado definir una serie de clases de error estndar, que se ajuste a todos los dispositivos contemplados dentro de CLDC. La solucin es soportar un grupo limitado de clases de error y permitir que el API especfico de cada dispositivo defina su propio conjunto de errores y excepciones. Limitaciones impuestas por CLDC - Operaciones en coma flotante. CLDC no proporciona soporte para matemtica en coma flotante. - Eliminacin del mtodo Object.finalize. Este mtodo es invocado cuando un objeto es eliminado de la memoria, para optimizar los recursos. - Se limita el manejo de las excepciones. La seguridad dentro de CLDC es sencilla, sigue el famoso modelo sandbox. Las lneas bsicas del modelo de seguridad sandbox enC LDC son: Los ficheros de clases deben ser verificados como aplicaciones vlidas. Slo las APIs predefinidas dentro de CLDC estn disponibles. No se permiten cargadores de clases definidos por el usuario. Slo las capacidades nativas proporcionadas por CLDC son accesibles.
i
11
347
Ediciones Java
Arquitectura de J2ME En la arquitectura de J2ME, por encima de la configuracin, tenemos el perfil (profile). El perfil es un grupo ms especifico de APIs, desde el punto de vista del dispositivo. Es decir, la configuracin se ajusta a una familia de dispositivos, y el perfil se orienta hacia un grupo determinado de dispositivos dentro de dicha familia. El perfil, aade funcionalidades adicionales a las proporcionadas por la configuracin. La especificacin MIDP (Mobile Information Device Profile), describe un dispositivo MIDP como un dispositivo pequeo, de recursos limitados, mvil y con una conexin inalmbrica
MIDLet Las aplicaciones J2ME desarrolladas bajo la especificacin MIDP, se denominan MIDLets. - Las clases de un MIDLet, son almacenadas en bytecodes java, dentro de un fichero .class. - Estas clases, deben ser verificadas antes de su puesta en marcha, para garantizar que no realizan ninguna operacin no permitida. - Este preverificacin, se debe hacer debido a las limitaciones de la mquina virtual usada en estos dispositivos. - Esta mquina virtual se denomina KVM. Para mantener esta mquina virtual lo ms sencilla y pequea posible, se elimina esta verificacin, y se realiza antes de la entrada en produccin. - La preverificacin se realiza despus de la compilacin, y el resultado es una nueva clase, lista para ser puesta en produccin.
12
348
Ediciones Java
Ficheros Jar Los MIDLets, son empaquetados en ficheros .jar. Se requiere alguna informacin extra, para la puesta en marcha de las aplicaciones. Esta informacin se almacena en el fichero de manifiesto, que va incluido en el fichero .jar y en un fichero descriptor, con extensin .jad. Un fichero .jar tpico, por tanto, se compondr de: - Clases de soporte - Recursos (imgenes, sonidos...) - Manifiesto (fichero .mf) - Descriptor (fichero .jad) Un fichero .jar puede contener varios MIDLets. Esta coleccin de MIDLets, se suele llamar MIDLet Suite. Esta unin de varios MIDLets en una distribucin, permite compartir recursos (imgenes, sonidos...), y por tanto optimizar los recursos del dispositivo. MIDP Api Los elementos principales involucrados en el proceso de desarrollo con Java, son el lenguaje Java propiamente dicho y el grupo de APIs (Application Programming Interface) que proporcionan el soporte para el software desarrollado.
i
13
349
Ediciones Java
Como ya se ha mencionado, los MIDlets son aplicaciones especiales, diseadas bajo los requerimientos de la especificacin MIDP. Esta especificacin es una serie de normas que indican las capacidades y restricciones de Java respecto a los dispositivos mviles. Un aspecto importante de estas capacidades y limitaciones, es el conjunto de clases e interfaces disponibles para afrontar el desarrollo de aplicaciones. La especificacin MIDP provee una descripcin detallada del API disponible para el desarrollo de MIDlets. El CLDC proporciona un API adicional. De hecho, el API de MIDP, se basa en el API de CLDC, para construir clases e interfaces ms especficos.
i
14
350
Ediciones Java
4. Resumen
Has llegado al final de este recurso formativo que denominamos Ediciones Java. En esta leccin hemos estudiado los siguientes contenidos:
i
15
351
352
NDICE
PRIMEROS PASOS EN JAVA
1. Java Development Kit JDK 6.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 2. Configuracin de variables de entorno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6 3. Nociones bsicas de sintaxis Java. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8 4. Creacin del primer programa Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9 5. Utilizacin de un entorno de desarrollo IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11 6. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18
353
Compilado de lenguaje Java Bsicamente un programa Java tiene primeramente un proceso de compilacin con un compilador de lenguaje Java. Al ser compilado se genera un fichero de bytecodes Java (este fichero tendr la extensin .class). Posteriormente dicho programa compilado ya sin errores ser interpretado por la JVM o Java Vitual Machine. Cada fabricante implementa su propia Mquina Virtual de Java pero siempre siguiendo las directrices de JAVA SOFT COMPANY que es la delegacin de SUN MICROSYSTEMS encargada de regir todas las especificaciones software de Java.
i
3
354
i
4
355
i
5
356
Si se ha instalado el JDK en la ubicacin por defecto, las clases de Java se encuentran en la carpeta lib dentro del directorio jdk1.6.0 que es el que se crea por defecto en la instalacin o jdk1.6.0_xx en funcin de la versin, donde xx seran nmeros para indicar una versin ms moderna.
Para crear la variable CLASSPATH hay que editar las variables de entorno de Windows y crear una nueva variable a la que llamaremos classpath con el siguiente valor: c:\jdk1.6.0\lib;.; Donde jdk1.6.0 es el directorio donde se instala el JDK. El punto que aadimos al final es para poder ejecutar las clases desde el directorio actual, normalmente nuestro directorio de trabajo.
i
6
357
i
7
358
La definicin del mtodo main es tal y como aparece obligatoriamente (ms adelante indicaremos lo que significa cada palabra reservada que lo acompaa). En relacin a la sintaxis Java, al final de cada sentencia es obligatorio el punto y coma ( ; ) , adems el lenguaje java es case sensitive, es decir, diferencia entre maysculas y minsculas.
i
8
359
Una vez escrito el cdigo en el bloc de notas lo vamos a guardar en un directorio conocido (por ejemplo c:/cursojava>) y con el mismo nombre con el que hemos creado la clase, respetando maysculas y minsculas y con la extensin .java , en nuestro caso, el fichero se guarda como ImprimirFrase.java
i
9
360
Se habr generar el fichero ImprimirFrase.class que es nuestro fichero de bytecodes. Volveremos a MSDOS y ejecutaremos nuestro fichero .class de la siguiente forma:
El resultado ser :
i
10
361
Lo primero ser crearnos un proyecto, todos los ficheros que vayamos a utilizar han de estar dentro de un proyecto, si no, el propio Jcreator los ubicar en su propia ruta por defecto y despus nos ser complicado poder localizar los archivos. A continuacin veremos cmo hacerlo.
i
11
362
En sta seleccionaremos Basic Java Application y pulsaremos a continuacin el botn de Next. Se nos abrir una nueva ventana que te mostramos en la siguiente pantalla.
i
12
363
i
13
364
i
14
365
i
15
366
i
16
367
Como puedes ver este editor es sencillo de manejar y la gran ventaja que tiene es que no consume muchos recursos de mquina y es bastante intuitivo.
i
17
368
i
18
369
INTRODUCCIN A JAVA
370
INTRODUCCIN A JAVA
INTRODUCCIN A JAVA
Plataforma JAVA. Operadores especiales. Prototipos, paso por referencia y recursividad. Caractersticas principales - Gran parecido con el lenguaje C++. - Es independiente de la plataforma (Maquina Virtual de JAVA- JVM Java Virtual Machine). - Lenguaje Interpretado. - Lenguaje Orientado a Objetos. - Es un lenguaje concurrente, ya que ejecuta mltiples lneas de cdigo simultneamente (Hilos). - Applets (Programas dentro de la Web) Entorno de desarrollo JDK (Java Development Kit) incluye el JRE (Java Runtime Environment)
CLASSPATH > Variable de entorno que le indica al sistema dnde localizar las libreras de JAVA PATH > Utilidades de Java. Pasos en el desarrollo de aplicaciones Java - Editor de texto (cdigo fuente). Se archiva con la extensin .java. - Compilacin: javac.exe. Se genera el archivo con extensin .class. A este archivo se le denomina BYTECODE - Intrprete de Java: java.exe (ejecucin del Bytecode) - Visor de Applets: appleviewer.exe (ejecucin del Bytecode). - Depurador: jdb.exe. - Generador de documentacin javadoc.exe. Analiza el cdigo fuente y genera documentacin en cdigo HTML.
2
371
INTRODUCCIN A JAVA
Estructura del JDK 1.5 stndar edition ( J2SE)
3
372
INTRODUCCIN A JAVA
Operadores condicional y de bits 1. Operador condicional: <condicin> ? <valor cierto> : <valor falso> c = b!= 0 ? b : 0; 2. Operadores & | ~ ^ & 1& 1& 0& 0& | 1 1 0 0 | | | | 1 0 1 0 > > > > 1 1 1 0 a = 30; b = 12; c= a | b; //c = 30 a 00011110 b 00001100 c 00011110 a = 30; b = 12; c= a | b; //c = 30 a b c ~ ~1>0 ~0>1 ^ 1 1 0 1 ^ ^ ^ ^ 1 0 1 1 > > > > 0 1 1 0 a = 30; b = 12; c= a ^ b; //c = 18 a 00011110 b 00001100 c 00010010 a = ~a; a ~a 00011110 11100001 00011110 00001100 -----------------00011110 a nivel de bits: (AND Binario) (OR Binario) (NOT Binario) (XOR Binario)
1 0 1 0
1 0 0 0
4
373
INTRODUCCIN A JAVA
Las funciones o mtodos estticos 1. Introduccin Funcin se considera un conjunto de sentencias recogidas bajo un nombre: class Mensaje { public static void main (String [] args) { salidaCliente(); // Llamada a funcin. ... // Mis Operaciones. ... despideCliente() // Llamada a funcin. } static void salidaCliente () { System.out.println (Buenos das.); } static void despideCliente () { System.out.println (Adios.); } }
5
374
INTRODUCCIN A JAVA
2. El prototipo, la implementacin y la llamada a la funcin. Implementar la funcin consiste en disear el interior de la funcin. La llamada a la funcin se considera el hecho de ejecutar las instrucciones implementadas dentro de la funcin. Una funcin slo se la puede implementar una vez pero se la puede llamar muchas veces. Las funciones pueden estar parametrizadas, es decir, la ejecucin depende de las variables que se pasan en la funcin. Estas variables que se pasan se las denomina parmetros. Adems opcionalmente la funcin puede devolver una solucin. A esta solucin se le denomina retorno de la funcin. static <tipo de dato> <nombre de funcin> (<parmetros>) { cuerpo de la funcin [return <valor de retorno>] } parmetros
static void saludaCliente (String Usuario) { System.out.println (Buenos das+Usuario); } Retorno parmetro
static int suma (int a, int b) { return (a+b); } Ejecucin del Retorno String usuario; saludoCliente(usuario); int z, x=8, y=7; z = suma(x,y); System.out.println(Resultado +suma(x,y)); if (suma(x,y) > 13)
6
375
INTRODUCCIN A JAVA
Todos los programas que se ejecutan en la misma Mquina Virtual de Java (JVM) utilizan el HEAP (espacio de memoria) en tiempo de ejecucin: - Segmento Cdigo, contiene el programa (bytecode) que se ejecuta. - Segmento Datos, contiene las variables de clases. - Segmento Pila, sirve para almacenar las variables locales. Para recoger espacio de memoria del Heap se utiliza el operador new. El Heap tambin es llamado memoria dinmica. Los arrays se almacenan en el Heap. La referencia del array se almacena en el segmento de datos como variable de clase o en el segmento de pila cuando es una variable local. El tamao del array se genera en el Heap (new). Paso por valor y paso por referencia - Parmetros formales, variables donde recogen los parmetros la implementacin de la funcin. - Parmetros reales, valores que se pasan a la funcin durante la llamada. Los parmetros reales pueden tener los mismos nombres que los parmetros formales.
7
376
INTRODUCCIN A JAVA
static int suma (int a, int b) { return (a + b); } public static void main (String [] args) { int c = suma (3,4); int x = 3, y = 5; int z = suma(x,y); int a = 1, b = 8; int z = suma (a,b); }
PARMETROS FORMALES
PARMETROS REALES
- Paso de parmetros por valor, consiste en hacer una copia de los parmetros y pasarlos a la funcin para que la funcin no modifique las variables originales. - Paso de parmetros por referencia, consiste en pasar la variable original a la funcin. En Java los tipos de datos fundamentales se pasan por valor y no hay forma de pasarlos por referencia. Los arrays y los objetos se pasan por referencia y no hay forma por pasarlos por valor. static void intercambia(int a, int b) { int x = a; PASO POR VALOR a = b; b = x; } public static void main (String [] args) { int a = 2, b = 5; intercambia (a, b); System.out.println(a: +a+ b: +b); // Visualiza a: 2 b: 5. } static void intercambia(int [] numeros) { int z = numeros[0]; PASO POR REFERENCIA numeros[0] = numeros[1]; numeros[1] = z; } public static void main (String [] args) { int [] numeros {2,5}; intercambia (numeros); System.out.println(a: +numeros[0]+ b: +numero[1]s); // Visualiza a: 5 b: 2. }
8
377
INTRODUCCIN A JAVA
Recursividad Una funcin para resolver un problema, en vez de llamar a otra funcin, se llama a s misma pero con unos valores en los parmetros ms cercanos a la solucin. La idea de recursividad va ligada a la de repeticin. Son recursivos aquellos programas que, estando encapsulados dentro de una funcin, son llamados desde ella misma una y otra vez, en contraposicin a los algoritmos iterativos, que hacen uso de bucles while, do-while, for, etc. Ejemplo: Calcular el factorial de un nmero: n != n * (n 1) * (n 2) . * 1 static int factorial (int n) { if (n == 1) return 1; return n * factorial (n 1); } Calcular la sucesin de Fibonacci para los primeros 20 nmeros: static int fibonacci (int n) { if (n == 1 | n == 2) return 1; return fibonacci (n 1) + fibonacci (n - 2); } public static void main (String [] args) { for (int i=0; i < 20); i++) System.out.print (fibonacci(i)+ ); System.out.println(); }
9
378
379
380
381
382
NDICE
TIPOS DE DATOS Y CADENAS DE CARACTERES
1. Variables, constantes y tipos de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 2. Cadena de caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9 3. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11
383
Ejemplo: int x=2; Declaramos la variable numrica x y le damos el valor 2 con el que se guarda en memoria. x=4; Posteriormente variamos su valor asignndole un valor de 4.
Tipos de variables en Java - Variables de instancia: algo similar a variables globales, van dentro de la clase y fuera de cualquier mtodo. - Variables de clase: van dentro de la clase y fuera de cualquier mtodo. Llevan el modificador static (lo veremos ms adelante). - Variables locales: van siempre dentro de los mtodos.
i
3
384
Ejemplo: int numero; Variable de tipo entero String nombre; Variable de tipo cadena boolean verdadero; Variable de tipo booleano
Las variables se suelen declarar al comienzo de una clase o de un mtodo. Las variables locales han de tener un valor asignado antes de su utilizacin. Las variables de clase y las de instancia tienen valores por defecto y al crearse se inicializan automticamente a uno de los siguientes valores segn el tipo de almacenamiento: Variables Variables Variables Variables de cadena: null numricas enteras: 0 , reales: 0.0 de carcter: \u0000 booleanas: false
Nombrar variables Al nombrar variables no se puede comenzar por nmeros. Podemos utilizar los caracteres que queramos, pero cuidado con usar operadores. Java es case-sensitive y por ello diferencia las maysculas de las minsculas.
i
4
385
Tipos primitivos de datos o tipos de datos bsicos Los tipos bsicos (primitivos) en Java son: enteros, nmeros en coma flotante, caracteres y booleanos. Enteros:
i
5
386
i
6
387
Caracteres de escape Los caracteres de escape, como en la mayora de los lenguajes, representan secuencias de escape que se pueden representar dentro de un programa Java.
7
388
i
8
389
Aunque en otros lenguajes sera un tipo bsico, en Java se considerar un objeto de la clase String con lo que tendr propiedades y mtodos. Dentro de una clase Java, lo que vamos a tener siempre son propiedades y mtodos nicamente, solo en algunos casos que veremos ms adelante, se pueden incluir otras clases tambin. En Java no sucede como en C, no podemos apuntar a cada posicin dentro de un String, solamente a la cadena entera. Para poder manipular cada posicin de un String tendramos la clase StringBuffer que nos permite acceder igual que en C a cada una de las posiciones como si se tratara de un array .
i
9
390
i
10
391
i
11
392
393
NDICE
OPERADORES Y SENTENCIAS DE CONTROL DE FLUJO
1. Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 2. Sentencias de control de flujo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 3. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15
394
Asignaciones
i
3
395
Comparaciones
Operadores lgicos
i
4
396
Precedencia y Jerarqua de Operadores Los operadores se organizan de acuerdo al nivel de precedencia de cada uno. Primeramente preceden incrementos y decrementos, luego los aritmticos, despus las comparaciones, detrs vienen los booleanos u operaciones lgicas y por ltimo las operaciones de asignacin. Los operadores de lneas superiores tienen prioridad sobre los que estn por debajo y en una misma lnea se evaluaran de izquierda a derecha segn aparecieran en la expresin.
5
397
Ejemplo int x=3; System.out.println(valor de x es: + x ); La salida que se obtiene es valor de x es: 3
i
6
398
i
7
399
Ejemplo int radio = (x<y)? a : b; Que equivale a las sentencias con if: if (x<y) { r adio= a; } else { radio = b; }
El condicional Switch El condicional switch, es usado para evaluar el valor de una variable y actuar de una forma u otra segn sea su valor.
i
8
400
i
9
401
La variable i que sirve para llevar la cuenta del nmero de repeticiones del bucle, se puede declarar dentro o fuera del propio bucle. En el ejemplo, la hemos declarado dentro. Bucle While El bucle while se utiliza en la repeticin condicional, un nmero de veces no determinado a priori. El bloque de sentencias puede no ejecutarse ninguna vez.
i
10
402
Ejemplo x=1; while(x<5) { x=x+1; System.out.println(x); } Se imprimir por pantalla: 2, 3, 4. Cuando x valga 5 se romper el bucle y el flujo del programa saldr de ste pasando a la siguiente instruccin al bucle while
Bucles Do/While El bucle do/while se utiliza en la repeticin condicional un nmero de veces no determinado a priori. El bloque de sentencias se ejecuta al menos una vez.
i
11
403
Ejemplo x=1; do{ System.out.println(x); x=x+1; } while(x<5) Se imprimir por pantalla: 1, 2, 3, 4. Cuando x valga 5 se romper el bucle y el flujo del programa saldr de ste pasando a la siguiente instruccin al bucle while
Rotura de bucles Consiste en usar la palabra reservada break para salirse de los bucles for/while/do por cumplirse cierta condicin de break. Simplemente colocaramos la palabra en aquel sitio donde debe terminar el bucle en caso de llegar all. Esta tcnica no es muy recomendada en programacin. Lo normal es usarlo solamente en el Swicth.
i
12
404
Ejemplo for(int i =0;i<10;i++) { if (i==3) continue; System.out.println(i); } } Imprimira por pantalla : 0,1,2,4,5,6,7,8,9 Se saltara la iteracin correspondiente a i=3
i
13
405
Ejemplo salir: for (int i=0; i<10; i++) { while (x<50) { if (i*x == 400) break salir; sentencia2; ... sentencian; } sentencia2; ... sentencian; }
i
14
406
i
15
407
408
NDICE
CLASES Y OBJETOS. LAS CLASES JAVABEANS
1. Definicin formal de clase y objeto. Creacin de objetos a partir de clases. . . . . . . . . . . . . . .3 2. Implementacin de mtodos y atributos de una clase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 3. Modificadores de acceso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13 4. Clases de Tipo JavaBeans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16 5. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20
409
Ejemplo class Coche { String color; int numeroRuedas; String tipoMotor; public void acelerar(){} public void frenar() }
i
3
410
i
4
411
Dentro de los parntesis del constructor de la clase pueden ir parmetros de inicializacin de las variables de la clase, o pueden ir en blanco. Esto va a depender de cada clase en concreto. As una misma clase puede tener varios constructores y a cada uno de ellos se le pasaran unos parmetros determinados. Constructor Constructor es un mtodo propio de cada clase que nos permite crear un nuevo objeto de esa clase. Este mtodo se llama exactamente igual que la clase, no retorna ningn valor.
i
5
412
Sobrecarga de mtodos El tener varios mtodos con el mismo nombre (identificativo), pero conteniendo diferentes tipos de parmetros, que realizan diferentes funciones segn estos parmetros de entrada, se denomina sobrecarga de mtodos (es lo que definamos como polimorfismo). Al contrario de lo que ocurra en C++, en Java no esta permitida la sobrecarga de los operadores (+,-,*,/,...). Ejemplo class Numeros { int x; Numeros(){ x=2; } } En este ejemplo la clase Numeros tiene un constructor que se llama igual que la clase y lo que hace es inicializa la variable de instancia x a 2.
La liberacin de memoria, cuando hemos terminado con un objeto, la hace Java dinmica y automticamente. Es lo que se denomina garbage collection (recoleccin de basura). Es un proceso que va eliminando de memoria todos aquellos objetos que ya no se utilizan por parte del programa.
i
6
413
Para acceder a las variables y mtodos de una clase hay que hacerlo a travs de un objeto de esa clase.
El objeto siempre ser necesario para poder acceder a las variables y mtodos del objeto, esto es una regla en Java, que tendr una excepcin que tambin veremos. Ejemplo class Ejemplo{ int numero; public static void main(String args[]) { ejemplo e = new Ejemplo(); e.numero=7; } }
7
414
i
8
415
Ejemplo class Ejemplo{ static void pintar() { System.out.println(Java); } public static void main(String ags[]) { pintar(); //No hace falta crear un objeto para acceder al mtodo pintar } }
i
9
416
[Modificador] tipo_devuelto Nombre_mtodo ( [parmetros formales ]) { [return valor;] } Todo lo que va entre corchetes es opcional. [Modificador]: aplicable a mtodos, se vern ms adelante los posibles modificadores.` tipo_devuelto: palabra reservada. Sirve para declarar el tipo de dato que devuelve el mtodo: Si se pone void significa que el mtodo no devuelve ningn valor. Nombre_mtodo: es el nombre que le damos al mtodo . [parmetros formales]: son los parmetros que recibe el mtodo. Hay que declarar tambin su tipo. [return valor;]: si el mtodo no es void, debe de devolver un valor .
i
10
417
i
11
418
Punto pt1, pt2; pt1 = new Punto(100,100); // el constructorrecibe dos valores //enteros para inicializar las // variables x e y de instancia a 100 pt2 = pt1; pt1.x = 200; //modificamos valor de x Ahora pt1.x vale 200, pero pt2.x tambin vale 200.
i
12
419
i
13
420
En los atributos: propiedades de la clase y mtodos Los modificadores de acceso son palabras reservadas del lenguaje que nos permiten restringir la visibilidad y acceso a los elementos de nuestra solucin de software. Existen 4 tipos de modificadores: Cualquier elemento declarado, sin asignarle un modificador de acceso especifico, toma el nivel de acceso por defecto, este nivel es llamado el nivel amistoso o con visibilidad de paquete porque estos elementos se comportan como elementos pblicos (cualquiera los puede ver) para la clase y todas las clases definidas dentro del paquete; pero se comportan como privados (nadie los puede ver) por fuera del paquete. default: Texto es el que aparece en pantalla. En este cuadro adems hay un roll over en la palabra paquete (al final del texto en negrita), abre roll over: Un paquete o package es una subcarpeta que creamos para guardar clases y de esa forma poder organizarla en libreras.
i
14
421
i
15
422
La principal ventaja de los JavaBeans es que son independientes de la plataforma, definicin tpica del lenguaje Java.
i
16
423
Hay compaas que se dedican a la comercializacin de componentes Java beans, como por ejemplo The Theary Center que disea componentes para otras empresas.
i
17
424
18
425
Ejemplo private String nombre; //mtodos set y get de la propiedad denominada nombre public void setNombre(String nuevoNombre){ nombre=nuevoNombre; } public String getNombre(){ return nombre; }
i
19
426
i
20
427
428
NDICE
OPERADORES Y SENTENCIAS DE CONTROL DE FLUJO
1. Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 2. La clase Object y las conversiones de tipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8 3. Definicin de tipos genricos. Ventajas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13 4. Comodines y restricciones de tipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16 5. Mtodos genricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19 6. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .21
429
Declaracin del Array Existen dos formas: 1. Tipo_Array NombreArray [ ]; 2. Tipo Array [ ] NombreArray; En la definicin de un Array observamos que nunca se indica el nmero de elementos de que consta. Ejemplo String Palabras[ ]; int numeros[ ]; String[ ] Palabras; int[ ] numeros;
i
3
430
Ejemplo int numeros=new int [10]; // Array de enteros que va desde la //posicin 0 a la 9
2. La segunda forma de crear un Array es crendolo y dndole valores iniciales: Tipo_Array[ ] NombreArray = {valor1,valor2, ...}; Los valores entre llaves deben ser del mismo tipo; del tipo Tipo_Array.
i
4
431
Ejemplo int numeros[]=new int[3]; numeros [0]=1; numeros [1]=3 numeros [2]=6
Arrays multidimensionales Java no soporta Arrays mutidimensionales, pero s podemos declarar un Array de Arrays consiguiendo el mismo efecto: Int coordenadas[ ] [ ] = new int [2][2]; coordenadas [0][0] = 1; coordenadas [0][1] = 2; coordenadas [1][0] = 3; coordenadas [1][1] = 4 Si la dimensin es 2 al Array se le denomina matriz.
i
5
432
En este caso se hace uso de la variable length para obtener el nmero de elementos del Array, lo cual es siempre ms seguro.
Comprobacin de los lmites del Array A diferencia de C++ en Java, los accesos no permitidos al Array se comprueban por el sistema en tiempo de ejecucin y cualquier intento de emplear un ndice fuera del rango permitido provocara una excepcin. Una excepcin es un error en tiempo de ejecucin que puede ser controlada desde el propio cdigo. Cada excepcin o error en tiempo de ejecucin es representada por una clase Java siendo el error un objeto de dicha clase. En caso de tratar de acceder a una posicin que excede el lmite del Array, la clase que representa este error se llama ArrayIndexOutOfBoundException, estamos por ejemplo accediendo a la posicin 7 de un Array que solo tiene 5 posiciones.
i
6
433
i
7
434
La clase Object, es por decirlo de alguna manera, la madre de todas las clases, la superclase de la cual derivan todas las dems en Java. Comparacin de objetos Al comparar objetos slo podemos saber si son o no iguales.
i
8
435
Ejemplo String nombre1=Juan; String nombre2=Luis; if(nombre1.equals(nombre2)) // para comparar si son iguales ambas cadenas { } ...
Determinando la clase de un objeto Para saber de qu clase es un objeto determinado, haremos uso de funciones predefinidas que pertenecen a la clase madre de todas, la clase Object. Dado el objeto obj haramos: String nombre = obj.getClass().getName();
i
9
436
Ejemplo if(a instanceof Applet) // preguntamos si el objeto a pertenece a la clase Applet { ... }
La clase Object define una serie de funciones miembro que heredan todas las clases. public class Object { public boolean equals(Object obj) { return (this == obj); } protected native Object clone() throws CloneNotSupportedException; public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } protected void finalize() throws Throwable { } //otras funciones }
i
10
437
Casting entre tipos de objetos: para realizar la conversin de objetos de una clase a otra, ambas clases deben estar relacionadas mediante la herencia. De este modo, si convertimos de una clase a una subclase de sta, como sta hereda toda la informacin, no perdemos informacin. La conversin de una clase a otra se hace: ObjetoNuevo = (NombreClase) objeto;
11
438
i
12
439
i
13
440
Ejemplo Vamos a declarar una lista de objetos de tipo Object en la que introducimos un nmero de enteros obteniendo lo que ha sido introducido posteriormente: List listaenteros = new LinkedList(); listaenteros.add( new Integer(5)); listaenteros.add( new Integer(9)); Iterator listIterator = listaenteros.iterator(); while(listIterator.hasNext()) { Integer elemento = (Integer) listIterator.next(); }
Problemtica v/s Ventaja de los tipos genricos Revisa el siguiente cuadro comparativo con las problemticas y ventajas de los tipos genricos.
i
14
441
i
15
442
Con el comodn de tipo se logra que el mtodo invierta el orden en las listas parametrizadas con cualquier tipo. Cuando definimos dichos mtodos, el uso del comodn de tipo tiene dos connotaciones importantes que debemos observar, debidas al desconocimiento del tipo: 1. Los mtodos del tipo genrico (List<Tipo_uno>) que estn declarados para devolver un valor del mismo tipo que el parmetro de tipo (Tipo_uno), en la situacin de desconocer el tipo devuelven un Object.
i
16
443
Comodn de tipo limitado El concepto de comodn de tipo lo vamos a usar pero limitndolo a determinadas clases, aquellas que derivan o son superclases de una clase dada. Vamos a crear un mtodo que sume una lista de nmeros de cualquier tipo: - La clase Number es superclase de todas las que representan los nmeros. - Hasta ahora no podamos utilizar como parmetro Java.util.List<Number> ya que nos limitara demasiado. No sera posible sumar listas de tipos derivados de Number, por ejemplo, Java.util.List<Integer>. - La otra opcin sera usar List<?>, pero en este caso los elementos seran tratados como Object por lo que no se podran operar matemticamente.
i
17
444
public static double sumaLaLista(List<? extends Number> listaDeNumeros){ double total = 0.0; for (int i= 0; i < listaDeNumeros.size(); i++){ total += listaDeNumeros.get(i).doubleValue(); } return total; }
De este modo slo se permiten listas de parmetros con clases derivadas de Number incluida la propia Number. En este ejemplo hay una limitacin superior (<? extends Superclase>) pero tambin es posible limitar inferiormente (<? super Subclase>), en este caso las clases posibles sern superclases de la dada. En cuanto a los dos efectos derivados del uso de comodn de tipo, seran: 1. Se devuelve el tipo Object. 2. Es seguro llamar a los mtodos pasando como argumento el tipo especificado como subclase
i
18
445
Caractersticas de los mtodos genricos I Los mtodos genricos se podran utilizar para limitar los tipos pasados por parmetro del tipo genrico. Este concepto se puede aplicar a una estructura de pila. Se podra aadir a la clase Pila, un mtodo esttico que devolviera la suma de los elementos de la pila, con lo que hay que limitar como argumentos pilas con parmetros de tipos derivados de Number: public static <N extends Number> double sumaPila(Pila<N> p){ double total= 0; for (int i = 0; i < p.pila.size(); i++) total+= p.pila.get(i).doubleValue(); return total; }
19
446
public static double sumaPila(Pila<? extends Number> p){ double total= 0; for (int i = 0; i < p.pila.size(); i++) total+= p.pila.get(i).doubleValue(); return total; }
Caractersticas de los mtodos genricos II Una mejor utilidad de estos mtodos, es establecer relaciones entre los tipos de los parmetros o entre tipos de parmetros y el tipo de retorno en un mtodo. Siguiendo con el mismo ejemplo de la pila de la pantalla anterior, podramos pensar en un mtodo que nos devolviera la pila la suma ms alta de sus elementos:
public static <N extends Number> Pila<N> sumaAlta(Pila<N> p1, Pila<N> p2) { Pila<N> resultado= null; if (sumatorio(p1) > sumatorio(p2)) pilaResultado= p1; else if (sumatorio(p1) < sumatorio(p2)) pilaResultado= p2; return resultado; }
En el mtodo anterior adems de limitar el tipo por parmetro a derivado de Number, relaciona los tipos de los dos argumentos y del retorno. La relacin en este caso es de igualdad. De este modo este mtodo slo permitir comparar pilas de enteros pero no una pila de enteros parametrizada con tipo Double, aunque sea derivada de Number. Y claro est, el resultado sera una pila de enteros.
20
447
i
21
448
449
450
451
452
NDICE
IMPORTAR CLASES: EL PAQUETE JAVA.LANG
1. Importar clases y paquetes externos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 2. Manipulacin de cadenas con la clase String . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8 3. Operaciones matemticas con la clase Math . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14 4. Clases de envoltorio y Clases runtime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19 5. Autoboxing y Autounboxing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .22 6. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .24
453
En Java, los paquetes se realizan de forma jerrquica. Esta jerarqua de paquetes debe ser igual a una jerarqua en directorios donde introduciremos los ficheros ejecutables de Java con extensin .class package <nombre_paquete>; Ejemplo package ajedrez; class Alfil { // Cuerpo de la clase. }
i
3
454
El carcter * importa todas las libreras de ese paquete, es como si fuese un comodn.
i
4
455
i
5
456
i
6
457
i
7
458
i
8
459
Como se ha sealado anteriormente, en Java no se puede apuntar a cada posicin de una cadena con un objeto de la clase String, se modificara la referencia pero no el contenido del objeto. Por esto usamos la clase StringBuffer, que s nos permite manipular el contenido de cada posicin. void void void void void <StringBuffer>.insert (int index, char c); > insertar. <StringBuffer>.append (char c); > aadir. <StringBuffer>.append (int i); > aadir. <StringBuffer>.append (String s); > aadir. <StringBuffer>.append (Object o); > aadir.
i
9
460
i
10
461
i
11
462
Ejemplo public class cadenas { public static void main(String args[]){ String cadena="En Un lUgar de lA mAncha"; //Declaramos //cadena como String int mayusculas=0,minusculas=0,cont=0; // Declaramos las variables la variable
i
12
463
cadena=cadena.toLowerCase(); // Recorremos nuevamente la cadena preguntando si el carcter que se extrae es vocal // a,e,i,o,u // como ya hemos pasado toda lacadena aminscula no habr que preguntar por las //mismas vocales en maysculas for (int i=0; i<cadena.length(); i++){ if (cadena.charAt(i)=='a'||cadena.charAt(i)=='e'||cadena.charAt(i)=='i'||cadena.charAt(i)=='o'||ca dena.charAt(i)=='u') cont++; } // Imprimiremos todos los contadores System.out.println("Las a's son: "+minusculas); System.out.println("Las A's son: "+mayusculas); System.out.println("Las vocales son: "+cont); } } La salida sera: Las a's son: 2 Las A's son: 2 Las vocales son: 8
i
13
464
i
14
465
Para hallar el valor absoluto de los siguientes nmeros int y = -13; double z = 0.4145; System.out.println("|" + y + "| es " + Math.abs(y)); System.out.println("|" + z + "| es " + Math.abs(z)); Math.abs(y), llama a la primera versin, y Math.abs(z) llama a la ltima versin. Mtodos trigonomtricos En las funciones trigonomtricas los argumentos se expresan en radianes. Si tuvisemos un ngulo de 90, se pasara a radianes y luego se calculara el seno, el coseno y la tangente: double angulo = 90.0 * Math.PI/180.0; System.out.println("cos(" + angulo + ") es " + Math.cos(angulo)); System.out.println("sin(" + angulo + ") es " + Math.sin(angulo)); System.out.println("tan(" + angulo + ") es " + Math.tan(angulo));
i
15
466
i
16
467
i
17
468
18
469
Todas estas clases tienen un constructor a partir de un tipo de dato fundamental. Double (double d) Float (float f) ... Char (char c) Para realizar la creacin del objeto: double d = 3.14; Double D = new Double(d); Float F = new Float (3.1f) Para sacar el contenido de una Clase Wrapper se realizar con el siguiente mtodo: double <Double>.doubleValue(); float <Float>.floatValue(); int <Integer>.intValue();
i
19
470
Ejemplo public class Suma { public static void main (String [] args) { try { //para capturar posibles errores en tiempo de ejecucin, se ver en otro captulo int acumulador = 0; for (int i = 0; i < args.length(); i++) acumulador += Integer.pasrseInt(args[i]); System.out.println (Total de valor: +acumulador), } catch(NumberFormatException ex)) { //para capturar posibles errores en tiempo de //ejecucin, se ver en otro captulo System.out.println(Valor no valido); } } // fin de main. } // fin de clase.
i
20
471
21
472
Ejemplo Integer num = new Integer(2); // declaramos un objeto de la clase Integer, equivalente a decir //int num=2; Map map = new HashMap(); // creamos una coleccin Map map.put("resultado", num +1); En el ejemplo, vemos que el tipo Integer es convertido a int para la suma, y despus se vuelve a convertir a Integer cuando se introduce al Map.
Uso de Autoboxing y Unboxing Cuando hay una incompatibilidad entre los tipos de referencia y los tipos de datos primitivos es cuando debemos usar el autoboxing, a pesar de que esto no es conveniente para clculos cientficos. Un Integer no es un sustituto para un int. El autoboxing y unboxing simplemente ocultan las diferencias entre los wrappers y los datos primitivos.
i
22
473
Sin autoboxing //Sin autoboxing boolean v=false;Boolean verdad=new Boolean(v);//boxing boolean v2=verdad.booleanValue();//unboxing Con autoboxing A partir de la versin de jdk 1.5: //Con autoboxingboolean v=false; Boolean verdad=v;//autoboxing boolean v2=verdad;//autounboxing Est claro, an as, que esto puede tener un efecto rebote en el rendimiento de la aplicacin, si mezclamos tipos primitivos y objetos Wrapper en expresiones aritmticas. De hecho Sun Microsystem nos advierte de este detalle en su documentacin. Tendremos que tener un cierto cuidado a la hora de usar estas tcnicas.
i
23
474
i
24
475
476
i
2
477
i
3
478
Los interfaces slo pueden tener mtodos abstractos (abstract) y atributos o variables finales de clase. Los mtodos son por defecto abstract en el interface. Un interface puede estar implementado por varias clases y tambin una clase puede implementar varios interfaces.
i
4
479
i
5
480
Cuadrado
i
6
481
i
7
482
i
8
483
i
9
484
i
10
485
int
int
int
int
int
String concat(String str) Concatenates the specified string to the end of this string. boolean contains(CharSequence s) Returns true if and only if this string contains the specified sequence of char values. boolean contentEquals(CharSequence cs) Returns true if and only if this String represents the same sequence of char values as the specified sequence.
i
11
486
i
12
487
byte[] getBytes(String charsetName) Encodes this String into a sequence of bytes using the named charset, storing the result into a new byte array. void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) Copies characters from this string into the destination character array. hashCode() Returns a hash code for this string. indexOf(int ch) Returns the index within this string of the first occurrence of the specified character. indexOf(int ch, int fromIndex) Returns the index within this string of the first occurrence of the specified character, starting the search at the specified index. indexOf(String str) Returns the index within this string of the first occurrence of the specified substring. indexOf(String str, int fromIndex) Returns the index within this string of the first occurrence of the specified substring, starting at the specified index.
int
int
int
int
int
i
13
488
int
int
int
int
boolean matches(String regex) Tells whether or not this string matches the given regular expression int offsetByCodePoints(int index, int codePointOffset) Returns the index within this String that is offset from the given index by codePointOffset code points.
boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len) Tests if two string regions are equal.
i
14
489
i
15
490
i
16
491
i
17
492
i
18
493
i
19
494
i
20
495
i
21
496
i
22
497
498
NDICE
MANIPULACIN Y FORMATO DE FECHAS
1. La clase Calendar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 2. La clase DateFormat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9 3. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12
499
Utilizacin de la clase Calendar La clase java.util.Date tiene mtodos que permiten obtener el ao, mes y da, sin embargo, estos mtodos estn obsoletos precisamente porque para eso existe Calendar y de hecho cuando usamos el mtodo getYear() de la clase java.util.Date, sta recurre a las funcionalidades que posee la clase Calendar.
i
3
500
El mtodo getInstance() de la clase nos devuelve una subclase de Calendar con el tiempo ajustado a la hora actual, y utilizaremos el mtodo set (argumentos) para ajustar la fecha deseada. Calendar cal = Calendar.getInstance(); // Devuelve una instancia de GregorianCalendar con //la fecha y hora actual System.out.println(cal.getClass()); cal.set(2008,9,10); // el mtodo set ajusta la fecha al "10 de Octubre de 2008 System.out.println(cal.getTime()); // el mtodo getTime() retorna un objeto de tipo //java.util.Date que se muestra en consola cal.set(2008,1,5,5,0,0);// ajustamos la misma fecha pero esta vez ajustando tambin la hora, //minutos y seg qundos, comoueda: "5 de la madrugada del 5 de Febrero de 2008". System.out.println(call.getTime()); Salida: class java.util.GregorianCalendar Fri Oct 10 13:05:52 CEST 2008 Tue Feb 05 05:00:00 CET 2008
i
4
501
i
5
502
Ejemplo Para obtener el ao, mes, da y hora, usaramos el siguiente cdigo: System.out.println(cal.getTime()); System.out.println("AO: "+cal.get(Calendar.YEAR)); System.out.println("MES: "+cal.get(Calendar.MONTH)); System.out.println("DIA: "+cal.get(Calendar.DATE)); System.out.println("HORA:"+cal.get(Calendar.HOUR)); If(cal.get(Calendar.MONTH)==Calendar.OCTOBER){ System.out.println("ES OCTUBRE"); }else{ System.out.println("NO ES OCTUBRE"); } AO: 2008 MES: 10 DIA: 1 HORA: 3 NO ES OCTUBRE
i
6
503
i
7
504
i
8
505
Importar la clase DateFormat Dateformat ofrece algunos mtodos para obtener la fecha y la hora formateada por defecto o formateada a un determinado valor local y ofrece tambin un nmero de estilos de formato. Para poder utilizar esta clase debemos de importarla de la siguiente manera: import java.text.SimpleDateFormat;
i
9
506
i
10
507
i
11
508
i
12
509
OPERACIONES DE ENTRADA-SALIDA
510
NDICE
OPERACIONES DE ENTRADA-SALIDA
1. La clase PrintStream para salida de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 2. Lectura de caracteres con InputStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5 3. Lectura de cadenas con BufferedReader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10 4. Lectura de datos con la clase Scanner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13 5. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15
511
Operaciones de entrada-salida
1. La clase PrintStream para salida de datos
Clase PrintStream La clase PrintStream tiene mtodos para la representacin textual de todos los datos primitivos de Java: write y println().
Debido a que bsicamente esta clase solamente contiene 2 mtodos sobrecargados (redefinidos) para poder imprimir cualquier tipo primitivo de dato, te mostraremos un extracto de resumen de dichos mtodos sacado de la pgina oficial de SUN Microsystems.
i
3
512
Operaciones de entrada-salida
4
513
Operaciones de entrada-salida
2. Lectura de caracteres con InputStream
Streams Un "Stream" es un nombre genrico otorgado a un flujo de caracteres. Puede estar compuesto por los valores residentes en un archivo de texto, datos introducidos interactivamente por un usuario o datos que deseen ser colocados en un determinado archivo. Stream es una secuencia de bytes que viajan desde un origen (source) hasta un destino (target). El concepto de Stream se aplica a multitud de dispositivos de entrada/salida. Para encapsular los Streams de Java se tienen dos clases: 1. InputStream (entran en la memoria). 2. OutputStream (salen de memoria a otro dispositivo). Por convenio para las operaciones de entrada/salida se toma como punto inicial la memoria RAM del sistema, todo lo que llega a la RAM es in. InputStream Las clases InputStream y OutputStream, tienen lo comn de toda la jerarqua existente para Streams. InputStream es una clase abstracta (no se instancia).
i
5
514
Operaciones de entrada-salida
Sus mtodos son los siguientes. Pulsa sobre cada uno de ellos: abstract int <InputStream>.read() throws IOException: Lee un solo byte del Stream, retorna un entero con valor comprendido entre 0255 1 para el final del Stream. El mtodo es abstracto ya que no se sabe a priori cual es la entrada. Las derivadas de InputStream redefinirn el mtodo para utilizarlo. Es un mtodo sncrono o bloqueante, es decir, es un mtodo que cuando el hilo lo ejecuta se queda ah hasta que vuelve con el dato. int <InputStream>.read(byte[]b) int <InputStream>.read(byte []b, int offset, int length): Ambos mtodos realizan la lectura de una serie de bytes. En el primer prototipo se realiza la lectura del array de bytes y en el segundo se realiza la lectura de un array desde la posicin indicada en offset y el nmero de bytes indicado en length. Ambos mtodos no son abstractos ya que llaman al primer prototipo tantas veces como sea necesario. Las clases derivadas podrn redefinir el mtodo para optimizar los rendimientos. int <InputStream>.available Devuelve el nmero de bytes que se puede leer del Stream sin quedar bloqueado. Dependiendo del Stream de donde se est leyendo, en el caso de ficheros representa el nmero de bytes que queda por leer. void <InputStream>.close() Cierra el Stream. Dicho mtodo est vaco para que cada clase derivada lo pueda redefinir ya que no todos los dispositivos deben cerrarse. boolean <InputStream>.markSupported() Devuelve true si el Stream soporta marcas. Por defecto, devuelve false. La derivada que utiliza el mtodo lo redefine para que de valor true.
i
6
515
Operaciones de entrada-salida
void <InputStream>.mark (int readlimit) Pone una marca en el Stream para poder situarse en este punto tras haberse movido hacia adelante. El parmetro readlimit indica el nmero mximo de bytes que la marca es vlida, esto se debe al consumo de memoria que hay que reservar. void <InputStream>.reset() Vuelve a la marca. long <InputStream>.skip (long n) throws IOException Avanza hacia delante el nmero de bytes que se le indique en n. Como retorno devuelve el nmero de bytes que se ha avanzado. OutputStream OutputStream es una clase tambin abstracta que representa los Streams de salida. Sus mtodos son los siguientes. Pulsa sobre cada uno de ellos: abstract void <OutputStream> write (int b): Escribe un solo byte representado por b. Es abstracta para que las redefina las derivadas, tambin es bloqueante. void <OutputStream> write (byte []b) void <OutputStream> write (byte []b, int offset, int length): Reciben un array para escribir varios bytes y no slo uno. void <OutputStream>.flush() Se utilizan en los Streams con buffer (trozo de memoria de la RAM) para sacar lo almacenado en el buffer.
i
7
516
Operaciones de entrada-salida
void <OutputStream>.close() Se cierra el Stream. FileInputStream La clase FileInputStream sirve para acceder al contenido de los ficheros. Se crea a partir del nombre del fichero que se va a tratar. Realiza la lectura del fichero. Los constructores son los siguientes: FileInputStream (String Filename) FileInputStream (File Filename) int <InputStream>.read() Realiza la lectura del fichero. Protected <FileInputStream>.finalize() Redefine este mtodo que procede la clase Object. Este mtodo realiza una llamada a close() antes de hacer la recogida de basura. De todas formas es mejor utilizar close() cuando se ha terminando de trabajar con el fichero. FileOutputStream La clase FileOutputStream tambin sirve para acceder al contenido de los ficheros. Realiza la escritura de los datos del fichero.
i
8
517
Operaciones de entrada-salida
Los constructores son los siguientes: FileOutputStream (String Filename) throws IOException Con este constructor se empieza desde el principio en el fichero, aunque el fichero tenga datos. FileOutputStream(String Filename, boolean append) Con este constructor se aadir informacin en el fichero. Para ello se pondr a true la variable append. Si se pone false funcionar como el anterior constructor. import java.io.*; public class AccesoFichero { public static void main (String [] args) throws IOException { // se crea el fichero de salida. FileOutputStream fos = new FileOutputStream("c:\\vem\\text.txt"); // Cadena a escribir en el fichero. String str = "Texto de prueba"; //Proceso de escritura. for (int i = 0; i < str.length(); i ++) fos.write(str.charAt((i))); fos.close(); // Se cierra el fichero de salida. // se crea el fichero de entrada. FileInputStream fis = new FileInputStream("c:\\vem\\text.txt"); int tamano = fis.available();/Longitud del fichero. System.out.println("Hay un tamao de "+tamano+"bytes disponibles"); byte [] B = new byte [tamano]; fis.read(B); // Lectura del fichero. System.out.println ("Se ley el texto: "+new String(B)); fis.close(); // Se cierra el fichero de entrada. } // fin de main. } // fin de clase.
i
9
518
Operaciones de entrada-salida
3. Lectura de cadenas con BufferedReader
InputStreamReader La clase InputStreamReader permite la conversin de cdigo ASCII a UNICODE, actuando como filtro para la traduccin.
El problema surge en cmo traducir de ASCII a UNICODE, los caracteres nacionales (0..127 Mundiales / 128..255 Nacionales). Este problema se resuelve con el siguiente constructor: InputStreamReader (InputStream is, String encode) El segundo parmetro representa el cdigo ISO que se quiere utilizar. En el caso de Espaa es 8859-1. La InputStreamReader lee caracteres desde teclado, pero procesa carcter a carcter, no sirve para leer de golpe una lnea. Esto es poco ptimo y si slo tuvisemos la clase ImputStreamReader sera un trozo de cdigo que tendramos que repetir por muchos sitios. Para el caso concreto de leer de teclado, sera ideal si hubiese una clase en Java que nos lea de una vez todo lo que ha escrito el usuario de nuestro programa y nos lo diera de esta forma.
i
10
519
Operaciones de entrada-salida
System.in.read Para leer caracteres desde teclado, tambin usamos la clase System.in.read(); Esta funcin nos devuelve el ASCII del carcter pulsado desde el teclado, y lo hace como tipo int. Esta instruccin al igual que otras en Java, el propio compilador obliga a capturar un posible error en tiempo de ejecucin de E/S, con lo que aunque no hayamos visto an ese captulo, lo encerraremos en un bloque try {} que es lo que nos sirve para prever errores. Si adems lo que queremos es asignar la lectura a un tipo char, haremos un casting a este tipo. Todo quedara de la siguiente forma:
char letra=a; System.out.println ( Introduce una letra ); try{ letra=(char) System.in.read(); }catch (Exception ex){ } // Tratamiento del posible error, de momento lo dejamos en //blanco System.out.println ( La letra pulsada es : + letra) ;
BufferedReader La clases BufferedReader nos sirven para leer por teclado, sin procesar carcter a carcter. La manera de crear un objeto de BufferedReader a partir de otro Reader cualquiera, como por ejemplo, InputStreamReader, es el siguiente: BufferedReader br = new BufferedReader (new InputStreamReader(System.in));
i
11
520
Operaciones de entrada-salida
El funcionamiento de esta clase es igual que el InputStreamReader, solamente que nos va a devolver la cadena leda completa hasta que pulsamos > ( intro) Para obtener el String leido se usa el mtodo readLine(). Este mtodo lee todos los caracteres tecleados (recibidos si fuera otro dispositivo de entrada) hasta que encuentra la pulsacin de la tecla <INTRO> > String cadena = br.readLine(); Lee desde el teclado un String completo y lo guarda en la variable "cadena".
i
12
521
Operaciones de entrada-salida
4. Lectura de datos con la clase Scanner
Clase Scanner La lectura de datos con la clase Scanner, es la nueva forma que nos proporciona Java para poder leer desde el teclado, ahorrndonos un poco de cdigo.
Ejemplo import java.io.*; import java.util.Scanner; public class Leer{ public static void main ( String args[ ]) throws IOException { Scanner leer=new Scanner(System.in); //Creamos el objeto de Scanner String cadena=leer.next(); // Leemos el texto con su mtodo next() System.out.println (Texto leido : + cadena ); //Lo imprimimos } }
Configurar clase Scanner Se puede configurar la clase Scanner para que utilice cualquier otro tipo de separador de tokens.
i
13
522
Operaciones de entrada-salida
Adems tiene una serie de mtodos que tras leer un token lo intentan interpretar como algn tipo primitivo de Java:
Cuando analizamos valores numricos se emplean los convenios locales de puntuacin. Scanner se usa a menudo para la entrada de datos por consola: Scanner scanner = new Scanner(System.in); System.out.print("Escribe dos nmeros: "); double x = scanner.nextDouble(); double y = scanner.nextDouble(); System.out.println("producto: " + (x * y));
i
14
523
Operaciones de entrada-salida
5. Resumen
Has llegado al final de este recurso formativo que denominamos Operaciones de entrada-salida En esta leccin hemos estudiado los siguientes contenidos:
i
15
524
525
i
2
526
Manejo de Ficheros - File La clase que define los ficheros es File. File representa un fichero o directorio dentro del sistema de ficheros. Los constructores de File son los siguientes: File (String filename) File (String dir, String filename) File (File dir, String filename) File f1 = new File (c:\\windows\\win.exe); File dir = new File (c:\\windows); File f2 = new File (dir,win.exe); Tiene las siguientes constantes a nivel de clase y contiene respectivamente los smbolos que se utilizan para separar los paths dependiendo de la plataforma que se utilice.
i
3
527
i
4
528
int <InputStream>.read() throws IOException Realiza la lectura del fichero. Protected <FileInputStream>.finalize() throws IOException
i
5
529
6
530
i
7
531
Estas clases no trabajan con dispositivos finales sino que trabajan sobre Streams ya creados. En el constructor de cada una de las clases se recibe un Stream de la clase base (InputStream / OutputStream).
i
8
532
i
9
533
i
10
534
i
11
535
i
12
536
13
537
i
14
538
i
15
539
i
16
540
i
17
541
i
18
542
i
19
543
i
20
544
i
21
545
El problema surge en cmo traducir de ASCII a UNICODE los caracteres nacionales (0..127 Mundiales / 128..255 Nacionales). Este problema se resuelve con el siguiente constructor. InputStreamReader (InputStream is, String encode) El segundo parmetro representa el cdigo ISO que se quiere utilizar. En el caso de Espaa es 8859-1. En el primer constructor como se recibe el encode se utiliza la propiedad fileencoding. System.out.println (System.getProperty(fileencoding);
i
22
546
i
23
547
InputStream:
void
void
boolean markSupported() Tests if this input stream supports the mark and reset methods.
i
24
548
int
void
long
Clase OutputStream:
MTODOS void close() Closes this output stream and releases any system resources associated with this stream. flush() Flushes this output stream and forces any buffered output bytes to be written out. write(byte[] b) Writes b.length bytes from the specified byte array to this output stream.
void
void
i
25
549
abstract void write(int b) Writes the specified byte to this output stream.
La clase File:
MTODOS boolean canRead() Tests whether the application can read the file denoted by this abstract pathname. boolean canWrite() Tests whether the application can modify to the file denoted by this abstract pathname. int compareTo(File pathname) Compares two abstract pathnames lexicographically. compareTo(Object o) Compares this abstract pathname to another object.
int
boolean createNewFile() Atomically creates a new, empty file named by this abstract pathname if and only if a file with this name does not yet exist. static File createTempFile(String prefix, String suffix) Creates an empty file in the default temporary-file directory, using the given prefix and suffix to generate its name.
i
26
550
boolean equals(Object obj) Tests this abstract pathname for equality with the given object. boolean exists() Tests whether the file denoted by this abstract pathname exists. File getAbsoluteFile() Returns the absolute form of this abstract pathname.
String getAbsolutePath() Returns the absolute pathname string of this abstract pathname. File getCanonicalFile() Returns the canonical form of this abstract pathname.
String getCanonicalPath() Returns the canonical pathname string of this abstract pathname.
i
27
551
String getPath() Converts this abstract pathname into a pathname string. int hashCode() Computes a hash code for this abstract pathname.
boolean isAbsolute() Tests whether this abstract pathname is absolute. boolean isDirectory() Tests whether the file denoted by this abstract pathname is a directory. boolean isFile() Tests whether the file denoted by this abstract pathname is a normal file. boolean isHidden() Tests whether the file named by this abstract pathname is a hidden file.
i
28
552
long
String[] list() Returns an array of strings naming the files and directories in the directory denoted by this abstract pathname. String[] list(FilenameFilter filter) Returns an array of strings naming the files and directories in the directory denoted by this abstract pathname that satisfy the specified filter. File [] listFiles() Returns an array of abstract pathnames denoting the files in the directory denoted by this abstract pathname. File [] ListFiles (FileFilter filter) Returns an array of abstract pathnames denoting the files and directories in the directory denoted by this abstract pathname that satisfy the specified filter. File[] ListFiles (FilenameFilter filter) Returns an array of abstract pathnames denoting the files and directories in the directory denoted by this abstract pathname that satisfy the specified filter. static File[] listRoots() List the available filesystem roots.
i
29
553
i
30
554
GESTIN DE COLECCIONES
555
NDICE
GESTIN DE COLECCIONES
1. Las clases de coleccin java.util.ArrayList y java.util.Hashtable . . . . . . . . . . . . . . . . . . . . . . .3 2. Enumeraciones e iteraciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8 3. Colecciones de tipos genricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10 4. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13
556
Gestin de colecciones
1. Las clases de coleccin java.util.ArrayList y java.util.Hashtable
Interface List (Listas) La Interface List aade nuevos mtodos para trabajar con listas. Las listas tambin tienen dos posibles implementaciones: ArrayList, da un mayor tiempo de acceso a los elementos individuales. LinkedList, permite aadir al final elementos
Mtodos Interface List Veamos a continuacin los mtodos que podemos utilizar. Pulsa sobre cada uno de ellos: Object <List>.get (int index): saca un elemento de la lista en la posicin indicada por index. Object <List>.set (int index, Object element): inserta en la posicin indicada por index sobreescribiendo el elemento que hubiese en dicha posicin. Devuelve el elemento que haba antes en dicha posicin.
i
3
557
Gestin de colecciones
void <List>.add (int index, Object element): aade un elemento en la posicin indicada por index desplazando hacia la derecha el resto de los elementos existentes en el contenedor. int <List>.indexOf (Object element) o en int <List>.lastIndexOf (Object element): ambos mtodos realizan la bsqueda de un elemento dentro de la lista devolviendo en qu posicin se encuentra. Mtodos Interface ListL istcIterator <List> listIterator() Permite recorrer la lista utilizando un interface Iterator especial que permite el recorrido hacia adelante y hacia atrs: 1. ListIterator 2. Iterator 3. public interface ListIterator extends Iterator { boolean hasNext(); Object next(); Boolean hasPrevious(); Object previous(); }
Otros Mtodos Interface List Otros mtodos de la Interface list serian los siguientes. Pulsa sobre cada uno de ellos: boolean addAll( Collection ): aade todos los elementos que se pasan en el argumento. Devuelve true si es capaz de aadir a la coleccin cualquiera de los elementos del argumento.
i
4
558
Gestin de colecciones
void clear(): elimina todos los elementos que componen la coleccin. boolean contains( Object ): true si la coleccin contiene el argumento que se le pasa como parmetro. boolean isEmpty(): true si la coleccin est vaca, no contiene ningn elemento. Iterator iterator(): devuelve un Iterator que se puede utilizar para el desplazamientos a travs de los elementos que componen la coleccin. boolean remove( Object ): si el argumento est en la coleccin, se elimina una instancia de ese elemento y se devuelve true si se ha conseguido. boolean removeAll( Collection ): elimina todos los elementos que estn contenidos en el argumento. Devuelve true si consigue eliminar cualquiera de ellos. boolean retainAll( Collection ): mantiene slo los elementos que estn contenidos en el argumento, es lo que sera una interseccin en la teora de conjuntos. Devuelve verdadero en caso de que se produzca algn cambio. int size(): devuelve el nmero de elementos que componen la coleccin. Object[] toArray() : devuelve un array conteniendo todos los elementos que forman parte de la coleccin.
i
5
559
Gestin de colecciones
Hashtable Hashtable, es un objeto que implementa la correspondencia entre claves y valores a partir de Dictionary. La funcin hash() hace corresponder a un tem de mayor tamao un cdigo nico.
Clase Object que devuelve un cdigo hash Mtodo de la clase Object que devuelve un cdigo hash, que se corresponde con la posicin de memoria donde est situado el objeto. Conceptualmente es similar a un vector, pero en lugar de acceder a los objetos a travs de un nmero, en realidad se utiliza otro objeto. Esto nos lleva a usar claves y al tratamiento de las claves dentro del programa.
i
6
560
Gestin de colecciones
Constructores: Hashtable(int initial_capacity): recibe el tamao inicial de la tabla hash. Hashtable(int initial_capacity, double loadfactor): recibe el tamao inicial y adems permite personalizar qu porcentaje de la tabla que tiene que estar llena para que la tabla se redimensione. No se espera que la tabla est al 100%. El factor de carga va de 0 a 1 y por defecto su valor es 0.75. Mtodos boolean <Hashtable>.containsKey (Object Key): devuelve true si existe la clave. boolean <Hashtable>.containsValue (Object Value): devuelve true si existe el valor. Enumeration <Hashtable>.keys (): devuelve las claves contenidas en Hastable Enumeration <Hashtable>.elements (): devuelve las valores contenidos en Hash
i
7
561
Gestin de colecciones
2. Enumeraciones e iteraciones
Coleccin Para cualquier tipo de coleccin, debe existir una forma de poder introducir elementos y de extraer los mismos, al fin y al cabo el objetivo de una coleccin es almacenar cosas. En un vector: Mtodo addElement() es la manera en que se colocan objetos dentro de la coleccin. Mtodo elementAt(): es cmo se sacan.
Enumerador, o iterador El concepto de enumerador, o iterador, puede usarse para alcanzar el nivel de abstraccin que se necesita en este caso. Es un objeto cuyo propsito consiste en desplazarse a travs de un conjunto de objetos y seleccionar aquellos objetos adecuados sin que el programador que los usa tenga que conocer la estructura de la secuencia.
8
562
Gestin de colecciones
Mtodos de Enumerador, o iterador Veamos algunos mtodos de enumerador o iterador y un ejemplo de programacin: Mtodos: - El mtodo elements() nos suele devolver un objeto de tipo Enumeration y despus ya operaremos con l. - El mtodo nextElement() nos devolver el primer elemento en la lista, cuando lo aplicamos por primera vez. Para obtener siguiente elemento en la secuencia tambin o haremos a travs del mtodo nextElement(). - El mtodo hasMoreElements() para ver si hay ms elementos en la secuencia Hot pot en el botn ejemplo: for (int i=0; i <coches.size (); i++) { ((Coche)coches.elementAt(i)).print(); } Pese a su simplicidad esta clase es bastante potente y se emplea mucho en la programacin Java.
Ejemplo for (int i=0; i <coches.size (); i++) { ((Coche)coches.elementAt(i)).print(); } // Recorremos un vector de objetos Coche , y extraemos cada elemento para asignrselo a //un objeto de tipo coche while( e.hasMoreElements() ) ((Coche)e.nextElement()).print(); // Recorremos un Enumeration y extraemos cada elemento para asignrselo a un objeto // de tipo coche
En Enumeration no hay que preocuparse del nmero de elementos que contenga la coleccin, ya que del control sobre ellos se encargan los mtodos hasMoreElements() y nextElement().
9
563
Gestin de colecciones
3. Colecciones de tipos genricos
Collection y Map La nueva librera de colecciones parte de la premisa de almacenar objetos, y diferencia dos conceptos en base a ello: Collection Un grupo de elementos individuales, siempre con alguna condicin que se les puede aplicar. Un List almacenar objetos en una secuencia determinada y un Set no permitir elementos duplicados. Map Un grupo de parejas de objetos clave-valor, como la Hastable ya vista. Representa un conjunto de pares claves-valor. Mtodos Collection y Map Mtodos: - Object <Map>.put (Object key, Object value) - Object <Map>.get (Object key) - Object <Map>.remove (Object key - boolean <Map>.containsKey (Object key - boolean <Map>.containsValue (Object value)
i
10
564
Gestin de colecciones
Map tiene dos implementaciones HashMap: tiene mejor rendimiento TreeMap: almacena los elementos en un rbol balanceado y cuando se necesitan sacar lo hace de forma ordenada. Los elementos del Map deben implementar hashCode() y equals(). Los tipos genricos Utilizando los genricos se evitan las excepciones en tiempo de ejecucin debido a la insercin de objetos de distinto tipo en las colecciones. Los tipos genricos Solamente son evaluados en tiempo de compilacin, en ejecucin no existen aunque nos aseguramos que si el cdigo compila correctamente, no nos encontraremos con problemas de casting entre objetos en la ejecucin del cdigo.
Ejemplo Si por ejemplo declaramos la siguiente lista: List<Integer> miLista = new ArrayList<Integer>() el compilador no dejar que se inserte un objeto que no sea de tipo Integer.
Los tipos genricos 2 Nuestro compilador s aceptar clases derivadas, por ejemplo, si se declara una List<Map> se podr insertar un tipo HashMap, TreeMap, etc. Es decir, admite la sobrecarga de mtodos ( polimorfismo).
i
11
565
Gestin de colecciones
Esto sera incorrecto: ArrayList<Map> list = new ArrayList<HashMap>().
Justo en el momento que hacemos la declaracin (tipo Map) e instanciacin (tipo HashMap) del objeto coleccin no se admite el polimorfismo.
Clase Padre de todos los genricos Es <?>, indica que cualquier genrico puede ser insertado en la coleccin. Tambin se puede indicar el polimorfismo en los genricos mediante <? extends Map>. Donde se pueden utilizar los genricos Todo lo que extienda de Map se puede insertar en la coleccin:
Los genricos tambin se pueden utilizar en la declaracin de clases (class MiColecion <T> { ... } ), atributos de la clase (T instancia), constructores ( MiColeccion (T ref)), mtodos y tipos de retorno (public T bar (T ref) {}).
El compilador sustituir el tipo por el que se cree cuando se instancie un objeto de la clase MiColeccion
i
12
566
Gestin de colecciones
4. Resumen
Has llegado al final de este recurso formativo que denominamos Gestin de colecciones En esta leccin hemos estudiado los siguientes contenidos:
i
13
567
568
569
570
571
i
2
572
Como vemos el objeto Fiat que se crea a partir de la clase Coche, tiene las propiedades de la clase a la que pertenece y adems dichas propiedades toman un valor. Tambin el objeto Fiat tiene acceso a los mtodos de la clase a la que pertenece (arrancar() y frenar()).
i
3
573
Polimorfismo
i
4
574
Objetos y clases Los objetos son modelos de programacin que comprenden una serie de propiedades por medio de variables, y una funcionalidad por medio de mtodos. Propiedades Funcionalidad Variables Mtodos
Las clases son la generalizacin de los objetos, de forma que un conjunto de objetos con las mismas caractersticas y funcionalidad formarn una clase.
i
5
575
Clases Primitivas Java tiene un conjunto de clases predefinidas llamadas clases primitivas. Para incluir en nuestros programas paquetes con otras clases definidas por nosotros, teclearemos el comando import seguido del nombre del paquete que nos interese cargar y el nombre de la clase perteneciente a ese paquete. Ejemplo:
i
6
576
Parmetros de una clase Revisemos ahora todos los parmetros que pueden aparecer a la hora de definir una clase: Definicin de una clase:
[Modificador]: aplicable a clases, se vern ms adelante los posibles modificadores class: palabra reservada. Sirve para declarar una clase. Todos los atributos y mtodos de la clase se definirn dentro de las llaves de abajo. Nombre de Clase: es el nombre que le damos a la clase.
i
7
577
i
8
578
Tipos de Constructores Constructor por defecto, es aquel que no recibe parmetros. Los constructores generales son los que reciben uno o ms parmetros.
i
9
579
class punto { int x, y; punto (int x, int y) { this.x = x; this.y = y; } punto (int xy) { this (xy, xy); // Llama al constructor anterior. } }
Mtodos El mtodo es una funcin asociada a un objeto, de manera que siempre que se va a ejecutar un mtodo, se tiene que decir sobre qu datos del objeto. El mtodo no tiene el modificador static delante del nombre: class fecha { int dia, mes, anno; void imprimir () { System.out.println (this.dia+/+this.mes+/+ this.anno); } }
i
10
580
fecha f1 = new fecha(); fecha f2 = new fecha(); f1.dia = 20; f1.mes = 9; f1.anno = 2000; f2.dia = 6; f2.mes = 11; f2.anno = 1999; f1.imprimir(); // Llamada al mtodo > 20/9/2000 f2.imprimir(); // Llamada al mtodo > 6/11/2000 Las operaciones que se pueden realizar sobre objetos se van realizar por medio de mtodos.
Sobrecarga de funciones En Java es posible crear varias funciones con el mismo nombre, de manera que se distingan por sus parmetros. La diferencia de los parmetros se puede establecer respecto al nmero de parmetros o respecto al tipo de parmetros. Cuando se llame a la funcin, el compilador decidir a cul de las funciones sobrecargadas llamar en funcin a los parmetros: Parmetros:
11
581
i
12
582
583
i
2
584
i
3
585
i
4
586
La lgica de negocio de un banco es la gestin de las cuentas, de los recibos, prstamos, clientes
Reingeniera / Refactorizacin
La reingeniera de un S.I. con muchas carencias puede dar como resultado un nuevo S.I. ms fiable y estable. Un proceso de reingeniera aplicado en un antiguo sistema en Visual Basic puede resultar en un nuevo sistema en Java.
i
5
587
Un S.I. de una tienda on-line puede tener un mdulo de ventas y un mdulo de stock (entre otros mdulos). Un mdulo de operativa comn donde se gestionen las ventas, el stock y el cobro de pagos, no est bien cohesionado. Una clase llamada CuentaBanco que tenga un mtodo conectarBBDD() o un atributo llamado edadTitular no est bien cohesionada.
Cohesin
Acoplamiento
Supongamos que un mdulo A depende de otro mdulo B para poder funcionar. Si B no puede intercambiarse con otro mdulo C sin precisar de grandes cambios en A, entonces el acoplamiento entre A y B es elevado. Un mdulo de acceso a BBDD que se puede usar tanto en un S.I. de venta online como de gestin de RRHH. Es reutilizable. Una aplicacin cuyo interfaz grfico es intuitivo y facilita el trabajo del usuario es usable. Una aplicacin que respeta estndares para su uso por parte de discapacitados es accesible. El uso de variables con nombre crpticos dificulta la legibilidad de un cdigo. La falta de documentacin actualizada dificulta la comprensin (legibilidad) de un proyecto. Un determinado mdulo de un S.I. es trazable si podemos identificar claramente los entregables de las fases de anlisis y diseo que dieron lugar a su creacin.
Reutilizacin
Usabilidad
Accesibilidad
Legibilidad
Trazabilidad
6
588
Las notaciones grficas bsicas son: - Funcin: representada por un crculo. - Fichero/BBDD: representada por dos lneas paralelas - Entrada/Salida: representada por un rectngulo - Flujo: flecha que relaciona a los elementos anteriormente mencionados.
i
7
589
Al modelar S.I. primero se suele realizar un DFD de contexto que permite ubicar todos los mdulos principales del sistema (en un DFD se les llama funciones principales). A continuacin se expande ese DFD de contexto en diagramas ms detallados que cubran la funcionalidad requerida en el sistema. Diagramas entidad-relacin (DER): Permite modelar el almacenamiento persistente de informacin de una BBDD. Se emplean los siguientes elementos bsicos: - Entidades: las entidades sern habitualmente tablas de nuestra BBDD. Estn visualmente representadas por rectngulos. - Relaciones: representadas por flechas que opcionalmente pueden presentar rombos. - Atributos: indican propiedades de las tablas. Se representan con elipses.
i
8
590
Entidades Pedido y Artculos que representan la estructura tpica de una tienda Existen diversas notaciones que modifican la forma en que se representan los diagramas, estas diferencias afectan sobre todo a las relaciones. Las notaciones ms extendidas son: Barrer
9
591
Ejemplo de http://elearning.tvm.tcs.co.in/re/re/3_3_ERD.htm
10
592
i
11
593
12
594
Imagen de la wikipedia que refleja un proceso iterativo. http://en.wikipedia.org/wiki/Iterative_and_incremental_development Basada en prototipos: Es similar a la metodologa iterativa pero en cada iteracin se obtiene un prototipo de la aplicacin final. Este tipo de metodologa es especialmente til en proyectos donde el cliente quiera evaluar la evolucin del proyecto para realimentar los requisitos del mismo.
i
13
595
i
14
596
En esta imagen de la wikipedia se ve que el nmero de lneas de cdigo no determina la complejidad o funcionalidad obtenidas.
15
597
i
16
598
i
17
599
HERENCIA
600
NDICE
HERENCIA
1. Concepto de herencia. Caractersticas de la herencia en Java . . . . . . . . . . . . . . . . . . . . . . . .3 2. Ejecucin de constructores en la herencia. Uso de super y this. . . . . . . . . . . . . . . . . . . . . . .11 3. Sobreescritura de mtodos. Uso de modificadores final, protected y private . . . . . . . . . . . . .14 4. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17
601
Herencia
1. Concepto de herencia. Caractersticas de la herencia en Java
Herencia La herencia, nos permite crear una clase a partir de otra clase que ya est creada. A la clase de la que se hereda se le denomina clase base, y a la clase que hereda de la clase base se le denomina clase derivada. De esta forma las clases quedan organizadas de forma jerrquica.
Agregacin y Composicin Agregacin y Composicin son otro tipo de relaciones entre objetos. La Agregacin consiste en la creacin de un objeto desde una clase que se denomina objeto contenedor, el cual tiene referencias a objetos de otra clase a los que llamamos objetos contenidos. La vida de los objetos contenidos no est limitada a la vida del contenedor, ambos son independientes. La Composicin consiste en que hay un objeto que llamamos contenedor el cual est formado por objetos de otra clase a los que llamamos contenidos. De forma que la vida de los contenidos est limitada a la del contenedor.
3
602
Herencia
Ejemplo
Conversin implcita y explcita con referencias a Objetos Si las clases estn vinculadas mediante relaciones de herencia, se pueden hacer conversiones. Java permite convertir una referencia a clase derivada en una referencia a clase base implcitamente, y permite convertir una referencia clase base en una referencia clase derivada utilizando casting.
i
4
603
Herencia
Conversiones entre clases hermanas Entre clases hermanas no se pueden realizar conversiones ni con el operador casting. Deriv1 d1 = new Deriv1(); Deriv2 d2 = new Deriv2(); d1 = d2; // Error. d1 = (Deriv1) d2; // Error.
i
5
604
Herencia
Es lgico que no se pueda hacer la conversin ya que existirn atributos y mtodos en una clase y en otra no. En Java no se permiten las conversiones entre las referencias y los tipos fundamentales de datos ni con casting. int a = 3; Punto p = (Punto) a; // Error. Enlace Esttico y Enlace Dinmico El Enlace Esttico consiste en decidir qu mtodo ejecutar en funcin del tipo de referencia con la que se est apuntando al objeto (se ejecuta Metodo1 de la clase Base). Enlace Dinmico, consiste en decidir qu mtodo se debe ejecutar en funcin del tipo de objeto que se est apuntando desde la referencia (se ejecuta Metodo1 de la clase Derivada). La ventaja del Enlace Esttico es que es ms rpido que el Enlace Dinmico porque en tiempo de compilacin ya se sabe qu mtodo ejecutar. Tiene el inconveniente de que normalmente se va a querer ejecutar el mtodo del objeto apuntado y no el de la referencia que se usa para apuntar. El Enlace Dinmico es ms lento porque hasta que no llega el momento de ejecutar el mtodo no sabe a qu objeto estar apuntando la referencia. Java utiliza por defecto el Enlace Dinmico y si se quiere que utilice el Enlace Esttico se tiene que poner el modificador final al mtodo. class Base { final void Metodo1() { System.out.println (Mtodo de la clase Base); } }class Derivada extends Base { void Metodo1() { System.out.println (Mtodo de la clase Derivada); } } Base b = new Derivada(); // Correcto; b.Metodo1(); // Cul se ejecuta?
i
6
605
Herencia
El operador instanceof El operador instanceof sirve para preguntar si un objeto al que se est apuntando con una referencia es de una determinada clase. El formato es el siguiente: <Referencia> instanceof <clase>
Ejemplo Pixel px = new Pixel(); if (px instanceof Pixel) { // px es Pixel. Se cumple. } if (px instanceof Fecha) { // px no es Fecha. No entra. } if (px instanceof Punto) { // px no es Punto, pero Pixel deriva de Punto. Se cumple. } if (px instanceof Object) { // px al derivar de Punto, Punto deriva de Object. // Se cumple. }
i
7
606
Herencia
El mtodo finalize() El mtodo finalize(), es un mtodo que se ejecuta justo antes de que el sistema de recogida de basura de Java libere la memoria del objeto. El mtodo finalize() se puede redefinir para poner las operaciones que se quieran hacer antes de destruir el objeto:
class Punto p = new Punto (2,3); p.finalize() // Ejecutara las operaciones de desinicializacin // pero no libera memoria. class Punto { int x, y; protected void finalize() throws Throwable { //Operaciones de desinicializacin.
- El mtodo finalize() slo es ejecutado por JVM. - El mtodo finalize() se encuentra en la clase Object, vaco. En las clases derivadas es donde se redefine. super.finalize(); Ejemplo class Pixel { int x, y, color; protected void finalize() throws Throwable { super.finalize(); // Punto Object. } }
i
8
607
Herencia
Nexos Dinmicos (array de objetos) Nexos Dinmicos (Array de Objetos), es un conjunto de referencias a objetos que comparten una serie de caractersticas comunes. Los nexos dinmicos pueden tener otras caractersticas especficas que no formen parte del nexo.
class Figura { int color, vertices; Figura (int color, int vertices) { this.color = color; this.vertices = vertices; } int getVertices () { return vertices; } public String toString() { return Color: +color+ Vertices: + vertices; }
i
9
608
Herencia
class Punto extends Figura { int x, y, color; Punto (int x, int y, int color) { this.x = x; this.y = y; super (color, 1) } public String toString() { return [+x+ , +y+]+color } } class Segmento extends Figura { Punto desde, hasta; Segmento (int x1, int y1, int x2, int y2) { super (color, 2); desde = new Punto (x1, y1, color); hasta = new Punto (x2, y2, color); } public String toString() { return Segmento: +x1+,+y1+ / +x2, , +y2; } } Figura [] figuras = new Figura[4]; Figuras[0] = new Punto (2, 3, 8); Figuras[1] = new Segmento (4, 1, 3, 8, 5); Figuras[2] = new Punto (2, 1, 5); Figuras[3] = new Rectangulo(8, 4, 1, 3, 0, 1, 2, 8, 7);
for (int i=0; i < figuras.length; i++) System.out.println (figuras[i].toString()+ tiene + figuras[i].getVertices()+ vertices ); Con una referencia a clase base slo se puede acceder a los mtodos y atributos de clase base a pesar de que se est apuntando a un objeto de tipo clase derivada: figuras[1].x1 = 3; // Error (Atributo de la derivada). figuras[1].color = 3; // Correcto (Atributo de la base). Figuras[1].getVertices(); // Correcto (Mtodo de la base).
10
609
Herencia
2. Ejecucin de constructores en la herencia. Uso de super y this
Orden de Ejecucin de los constructores en la herencia La clase derivada hereda todos los mtodos y atributos excepto el constructor de la clase base (ni constructor por defecto ni los constructores generales). Cuando se crea un objeto de la clase derivada, primero se ejecuta el constructor por defecto de la clase base y posteriormente el constructor de la clase derivada.
i
11
610
Herencia
El operador super 1. Indica qu constructor de la clase base se quiere ejecutar cuando se crea un objeto de la clase derivada. 2.Indica que se quiere ejecutar un mtodo de la clase base que existe tambin en la clase derivada. Ejemplo class Punto { int x, y; Punto (int x, int y) { this.x = x; this.y = y; } Public toString() { return [+x+ , +y+]; } } // Cierre de la clase Punto class Pixel { int color; Pixel (int color) { this.color = color; super (x, y); // Llamada a constructor de la //clase Punto. } Public String toString() { return super.toString() + color: + color; // Llamada a la funcin toString de la clase Punto. } }
i
12
611
Herencia
El operador this El operador this, es una referencia sobre el objeto que se est ejecutando en el momento actual. Casi siempre se hace referencia al objeto actual y en algunos casos hace referencia a la clase actual. Como el significado de este parmetro depende en gran medida del contexto en el que lo estemos utilizando, haremos ms hincapi en el this, cada vez que vaya surgiendo a lo largo de este curso, explicando en cada momento a quin hace referencia.
Ejemplo Dentro de un constructor se pueden referenciar a las variables de la clase por medio de este operador, como puede verse en la clase siguiente: class Fecha{ int dia ; int mes; Fecha(int d){ this.dia=d; // this.dia hace referencia a la variable dia de la clase Fecha } Fecha(int d,int m){ this.dia=d; // this.dia hace referencia a la variable dia de la clase Fecha this.mes=m; // this.mes hace referencia a la variable mes de la clase Fecha } }
i
13
612
Herencia
3. Sobreescritura de mtodos. Uso de modificadores final, protected y private
Polimorfismo El polimorfismo permite que objetos distintos puedan tener mtodos con el mismo nombre o incluso un mismo objeto puede tener nombres de mtodos idnticos pero con distintos parmetros (concepto de sobrecarga de mtodos).
Tiene varios mtodos polimrficos, es decir, varias versiones del mismo mtodo que las usaremos segn nos convenga en un programa, la nica condicin es que no reciban igual nmero o igual tipo de parmetros.
Ejemplo class Prueba{ public void pintar( int x , int y){ System.outr.println( x+y); } public void pintar( String a , String b){ System.outr.println( a+b); } public void pintar( int x , int y,String z){ System.outr.println( (x+y) + <> + z); } }
i
14
613
Herencia
Tiene 3 mtodos con el mismo nombre pero parmetros distintos. Lo que no podremos tener nunca sern 2 mtodos pintar que reciban el mismo nmero y tipo de parmetros, la implementacin de este mtodo dentro de la clase Prueba dara un error: public void pintar( int c , int m){ System.outr.println( x+y); } El modificador final El modificador final indica que el atributo es una constante, su valor no se puede modificar.
class fecha { final int diasSemana = 7; final int [] diasMes = {31,28,31,30,31,30,31,31,30,31,30,31}; int dia, mes, anno; } fecha f1 = new fecha() f1.diasSemana = 5; // Error. f1.diasMes[1] = 29; // Correcto, los datos del array se // pueden modificar. f1.diasMes = new int[12]; // Error, no se puede crear un nuevo // array, lo constante es la referencia.
-o, opcin de compilacin para no incluir las constantes en los objetos. De esta forma las constantes se sustituyen por su valor y no reserva espacio en memoria. Normalmente los atributos declarados como final van a ser estticos: La razn es que no se necesita crear un objeto para acceder a ellas: En los mtodos, el modificador final indica que no se pueden redefinir, es decir, que ninguna clase derivada puede cambiar ese mtodo. static final float pi = 3.1416f; static final int altas = 2;
15
614
Herencia
El modificador protected Los atributos o mtodos de una clase que sean declarados como protected, solamente podrn ser accedidos desde la propia clase y desde las clases derivadas de ella, pero nunca desde otras clases. Ejemplo:
El atributo num al ser declarado como protected, solamente podr ser accedido desde objetos de las clases A ( su propia clase) y desde la clase B ya que es derivada de A, pero nunca desde la clase C.
El modificador private Los atributos o mtodos de una clase que sean declarados como private, solamente podrn ser accedidos desde la propia clase.
El atributo num al ser declarado como private, solamente podr ser accedido desde objetos de la clase A, pero nunca desde la clases B y C, a pesar de que B sea derivada de A.
16
615
Herencia
4. Resumen
Has llegado al final de este recurso formativo que denominamos Herencia En esta leccin hemos estudiado los siguientes contenidos:
i
17
616
617
NDICE
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
1. Clases abstractas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 2. Clases anidadas, locales y anonimas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5 3. Interfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9 4. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11
618
- Sirven para modelar conceptos. - Es una clase diseada para actuar como base de otras clases derivadas en la cual se pone la funcionalidad (los mtodos) comn de los objetos derivados, pero a diferencia de las clases normales no se pueden crear objetos de la base abstracta.
Ejemplo abstract class Figura { // Cuerpo de la clase. } No se pueden crear objetos pero s referencias: Figura fig; // Referencia. Figura fig = new Figura(); //Error, no se puede crear objeto. Figura fig = new Alfil(); //Correcto, Alfil es derivada.
3
619
Ejemplo abstract class Figura extends Casilla { int color; Figura (int x, int y, int color) { super (x, y); this.color = color; } public String toString() { return Color: +color+super.toString(); } abstract bolean movimientoACasilla (Casilla c); // Mtodo no implementado ya que es abstracto, se // redefine y se ejecuta el mtodo en la clase derivada. boolean esAtacadaPor (Figura f) { if (f.puedeMoverA(this)) return true; return false; } }
4
620
i
5
621
Dentro de Descripcion se puede acceder a los atributos de Robot: posX = 10; posY = 11; Clase interna deriva en clase externa La clase interna puede derivar de la externa, pero la externa no puede derivar de la clase interna. Continuando con el ejemplo, esto sera as:
6
622
i
7
623
Ejemplo public static void main (String [] args) { Punto p = new Punto(2,3) { int color = 5; public String toString() { return super.toString()+ color: +color; } }; }
En este caso no se puede acceder a los atributos de la clase annima: p.color = 10; //Error. Pixel px = (Pixel) p; // Error. Las clases annimas sirven para redefinir mtodos.
i
8
624
i
9
625
10
626
i
11
627
628
i
2
629
Los objetos pueden tener opcionalmente un nombre que los identifica, aunque en ocasiones no es necesario indicarlo.
Interfaz Define un contrato que deber ser implementado por una clase (u otro elemento) y permitir el uso de dicha implementacin sin tener que conocer el detalle de la misma.
3
630
EL LENGUAJE UML UML significa Lenguaje Unificado de Modelado. El lenguaje UML es visual, ms que programar en UML se modela visualmente. Muchos de los elementos de UML tienen su origen en la Orientacin a Objetos, otros vienen de fuentes diferentes. Notaciones grficas Son los elementos visuales existentes en UML, hemos visto algunos en la seccin de orientacin a objetos:
i
4
631
Estereotipo Es una cadena de texto que permite particular las caractersticas de un determinado elemento de UML. Por ejemplo, una clase UML puede ser estereotipada, representar elementos diferentes a las clases de la P.O.O.
i
5
632
i
6
633
Agregacin Es una asociacin donde los elementos relacionados presentan un vnculo de todo-parte. El uso de la agregacin frente a la asociacin depender en gran medida del caso concreto que estemos modelando y de las caractersticas del sistema.
El avin tiene inexorablemente 2 alas, solo podremos emplear aviones en nuestro S.I. cuando las alas estn disponibles.
i
7
634
Asociacin versus Agregacin versus Composicin Existen diferentes teoras sobre dnde usar una asociacin, una agregacin o una composicin. La falta de estandarizacin desaconseja que se haga un uso gratuito de unas u otras si no se respeta alguna de las numerosas interpretaciones existentes y a ser posible se documente la motivacin de su uso. En caso de duda, la asociacin representa tanto a la agregacin como a la composicin y siempre se podr detallar en mayor medida en fases posteriores del modelado. Herencia Indica que existe una relacin padre-hijo entre clases, de manera que la clase hija hereda las propiedades del padre.
8
635
Realizacin El elemento origen de la flecha proporciona una implementacin para el elemento destino de la flecha. En el siguiente ejemplo vemos que la clase ConexionBBDDOracle proporciona una implementacin concreta de ConexionBBDDGenerica.
Cuando se representa una implementacin entre clases e interfaces la realizacin se simplifica visualmente con una flecha continua sin cabeza, lo que puede provocar confusin con una relacin de asociacin bidireccional.
9
636
i
10
637
El cliente alquila un coche que l mismo conducir DIAGRAMAS Diagrama de casos de uso Modela los casos de uso del sistema (requisitos) y representa las interacciones que dichas funcionalidades deben tener con los actores vinculados a los mismos. Los actores pueden ser tanto seres humanos como maquinas con las que nuestro sistema debe interactuar.
i
11
638
La clase CuentaBanco usa a la clase Cliente para reflejar quin es el titular de la cuenta. Diagrama de objetos Muestra la interaccin que se produce entre instancias de las clases (objetos). Habitualmente se emplea para modelar aspectos crticos del comportamiento dinmico del sistema.
i
12
639
i
13
640
Diagrama de colaboracin (uml 1) / comunicacin (uml 2) Al igual que el diagrama de secuencia modela la interaccin que se produce entre objetos de un S.I. mediante el intercambio de mensajes. El Diagrama de Colaboracin es muy parecido al Diagrama de Secuencia, la principal diferencia es que el Diagrama de Secuencia se centra en la temporalidad existente entre diferentes mensajes entre objetos.
Diagrama de actividades Muestra las interacciones existentes entre diferentes acciones de un mismo proceso.
14
641
Diagrama de estados simple del ciclo de vida de una cuenta de banco Entre llaves se ubica la condicin de guarda de las transiciones. Cuando se cumpla dicha transicin se transita a otro estado.
i
15
642
Diagrama de componentes de un S.I. para Web que emplea una aplicacin flash para la presentacin al cliente final Diagrama de despliegue Modela los elementos de hardware que van a integrar el sistema que se est desarrollando. En ocasiones los elementos del Diagrama de componentes se distribuyen sobre los nodos del Diagrama de Despliegue.
Diagrama de despliegue para una aplicacin tpica accesible desde un dispositivo mvil y un PC.
16
643
La clase Prstamo juega dos roles diferentes con dos clases diferentes EL PROCESO UNIFICADO DE DESARROLLO Es una metodologa basada en el desarrollo iterativo del proyecto. El Proceso Unificado de desarrollo ms conocido es el RUP (Racional Unified Process) Se distingue del proceso iterativo clsico en que incluye una nueva variante: cada fase incluye el desempeo del trabajo en diferentes disciplinas del proyecto.
17
644
i
18
645
19
646
i
20
647
Modelado de anlisis de las clases vinculadas al proceso de login. De izq. a dcha. clases estereotipadas como boundary, control y entity.
i
21
648
i
22
649
Al seguir poblando de mtodos las clases de anlisis y obteniendo otras nuevas estamos definiendo el elemento fundamental del anlisis, las clases de anlisis. Diseo (anlisis orgnico) El diseo consiste en expandir la informacin elaborada en el anlisis del sistema y generar diagramas que representen la misma informacin del anlisis pero detallada en mayor medida y vinculada a la arquitectura concreta que se vaya a usar en el sistema.
i
23
650
Por ejemplo en este diagrama podemos apreciar cmo hemos realizado (expandido) el GestorCompras del anlisis en un par de clases de diseo para adaptarlo a un determinado framework (Struts de Java). Podemos apreciar tambin en la parte derecha del diagrama el uso de dos patrones de diseo, el DAO y el DTO. Corresponde al diseador poblar estas clases con mtodos de manera que reflejen toda la funcionalidad obtenida en el anlisis. Podemos estereotipar algunas clases si consideramos que es pertinente para detallar en mayor medida sus caractersticas.
24
651
25
652
Cada C.U. se detallar en una ficha con sus caractersticas, una de ellas es el flujo primario. El flujo primario se emplear para elaborar un diagrama de clases de anlisis y el diagrama de comunicacin o secuencia que modele el flujo primario del C.U. en cuestin. En teora tambin deberan modelarse en diagramas de secuencia o comunicacin los flujos alternativos o secundarios, pero por restricciones de tiempo se suelen obviar muchos flujos secundarios.
i
26
653
Los diagramas de diseo habitualmente se emplean para generar la estructura de clases con los atributos y mtodos que formarn el esqueleto del sistema que los programadores debern codificar. Las herramientas de modelado suelen aportar opciones para generar esos esqueletos de forma automtica. Muchas empresas disponen de mtricas especificas que son variaciones de RUP o versiones simplificadas o ms complejas que varia el tipo de entregables generados. Herramientas existentes Para modelado con UML se pueden emplear entre otras las siguientes herramientas: - StarUML: herramienta de software libre con soporte de UML 2.0. Los diagramas de este curso han sido desarrollados con esta herramienta. - Rational Rose: una herramienta desarrollada por Rational antes de que fuera comprado por IBM, desactualizada desde 2003 pero todava en uso en algunas empresas. - Rational IBM Software Modeller: herramienta de IBM con soporte para UML 2.0. - MyEclipse: versin de pago del IDE Eclipse con un plug-in para algunos diagramas de UML.
i
27
654
655
656
Mdulo 6: Excepciones
657
EXCEPCIONES
658
NDICE
EXCEPCIONES
1. Clasificacin de las Excepciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 2. Lanzamiento de excepciones. Clusula throw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8 3. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14
659
EXCEPCIONES
1. Clasificacin de las Excepciones
Tipos de errores en Java Una excepcin Java representa un error en tiempo de ejecucin
Para la generacin de excepciones crea un objeto con la descripcin del error y se le enva al programa. Si el programa no recoge la excepcin se produce una parada en la ejecucin del programa. El programa puede recoger la excepcin y tratarla para que no se pare. Uso de excepciones Una vez diseado el programa para hacer lo previsto, hay que pasar a definir el manejo de los casos en que se produzca un error en tiempo de ejecucin. Para ello se har uso de las excepciones. La forma de tratar las excepciones que Java proporciona tiene un aspecto como el que sigue: public class MiPrimeraClaseExcepcional { public void unMetodoExcepional() throws MiPrimeraExcepcion { //Cdigo donde se puede producir MiPrimeraExcepcin } ... } Aqu indicamos que este mtodo puede lanzar (producir) una excepcin, que adems se llama MiPrimeraExcepcion.
i
3
660
EXCEPCIONES
Error en el cuerpo del mtodo Hasta ahora, cuando diseamos un mtodo para que realice una serie de operaciones y nos devuelva una variable de un tipo determinado, estamos confiando en que nos dar siempre esa variable. Puede ocurrir, sin embargo, que pase algo anormal en el cuerpo de ese mtodo y se produzca un error. Si esto ocurre no tenemos la variable que devuelve el mtodo y nuestro programa se bloquear. Es aqu donde entran las excepciones, que servirn para que nosotros en todo momento tengamos control sobre el programa. Si nos falla la variable, lo sabremos y actuaremos al respecto, pero el programa no se bloquea, no se para.
No olvidar que las excepciones son objetos de una clase y gozan de las ventajas de tener una jerarqua. Instancias de la clase error No todos los errores deben ser listados al declarar un mtodo. Las instancias de la clase Error no deben ser capturadas.
4
661
EXCEPCIONES
Error: Las excepciones que deriven de la rama Error no se capturan, son tales como NoClassDefFoundError (no se encuentra una clase), NoSuchMethodError (no se encuentra la definicin de un mtodo), y en general son todas las que terminan con la palabra Error (tambin llamadas excepciones de la maquina virtual). Exception: Dentro de la rama exception hay otras dos ramas. Las excepciones que derivan de RunTimeException que se denominan excepciones del sistema dentro de estas hay 5 que veremos a continuacin, y las de librera que son excepciones que se encuentran en libreras Java, como por ejemplo, IOException que se encuentra en el paquete Java.io o MalformedURLException que se encuentra en la librera Java.net. Excepciones del sistema Revisa qu tipo de excepciones tenemos. Pulsa sobre cada una de ellas: 1. ArithmeticException: Se produce cuando sucede un error de tipo aritmtico, por ejemplo, cuando tratamos de dividir un nmero por cero, el programa no entiende lo que es y se para. 2. NullPointerException: Se produce cuando tratamos de acceder a una propiedad de un objeto que no existe todava para el programa. Ejemplo: String cadena=null: int longitud=cadena.length(); //Error porque el objeto no existe an. 3. ClasCastException: Se produce cuando no hacemos correctamente un casting entre clases.
i
5
662
EXCEPCIONES
4. ArrayIndexOutOfBoundsException: Se produce cuando accedemos a una posicin de un array superior al nmero de elementos del array. 5. NegativeSizeArrayIndexException: Se produce cuando accedemos a una posicin de un array inferior al elemento cero del array, es decir, a una posicin negativa del array. Uso prctico de excepciones 1 Estudiemos ahora cmo usar las excepciones. Para esto, recordaremos el mtodo que definimos anteriormente denominado unMetodoExcepcional():
Recordar mtodo public class MiPrimeraClaseExcepcional { public void unMetodoExcepional() throws MiPrimeraExcepcion { ... } ... } Llamar mtodo public void otroMetodoExcepcional() throws MiPrimeraExcection { MiPrimeraClaseExcepcional mPCE = new MiPrimeraClaseExcepcional(); mPCE.unMetodoExcepcional(); }
i
6
663
EXCEPCIONES
Si no tratamos aqu la excepcin MiPrimeraExcepcion, al menos hemos de lanzarla (indicar) a los llamadores de nuestro mtodo otroMetodoExcepcional() (lo hacemos mediante la sentencia throws) y hemos de hacerlo as porque estamos llamando al mtodo unMetodoExcepcional() que puede producir dicha excepcin. Uso prctico de excepciones 2 Si ahora quisiramos nosotros mismos manejar la excepcin lo haramos de una forma parecida a la que sigue (slo la manejamos nosotros):
public void metodoResponsable() { MiPrimeraClaseExcepcional mPCE = new MiPrimeraClaseExcepcional(); try { mPCE.unMetodoExcepcional(); } catch (MiprimeraExcepcion m) { // aqu haramos las acciones pertinentes // si se produjera la excepcin MiPrimeraExcepcion } }
La traduccin de la sentencia try podra ser: Intenta ejecutar el cdigo de dentro de las llaves y si hay excepciones lnzalas que yo las unir a los manejadores para que se ocupen de ellas. Generalizando lo que hemos hecho, podramos tener tantas clusulas catch al final de la sentencia try como necesitemos y cada una nos permitira manejar una instancia de una de las clases listadas dentro de los parntesis o de sus subclases (recordemos que las excepciones son clases).
i
7
664
EXCEPCIONES
2. Lanzamiento de excepciones.Clusula throw
Manejar la excepcin Para completar los casos, si quisiramos manejar la excepcin y adems pasrsela a aquel que llame a nuestro mtodo, escribiramos:
public void metodoResponsable() throws MiprimeraExcepcion { MiPrimeraClaseExcepcional mPCE = new MiPrimeraClaseExcepcional(); try { mPCE.unMetodoExcepcional(); } catch (MiPrimeraExcepcion m) { // aqu haramos las acciones pertinentes // si se produjera la excepcin MiPrimeraExcepcion throw m; // relanzamos la excepcin } }
Esto funciona debido a que las excepciones pueden anidarse. Es interesante operar de esta forma porque as, estamos tratando para nosotros la excepcin, pero adems, se la pasamos a aquel que use nuestro mtodo para que realice sus oportunas acciones. El sistema, por s mismo, trata todas las excepciones que no son cogidas (tratadas desde catch), pero lo hace abortando el programa y mostrando un mensaje de error.
i
8
665
EXCEPCIONES
Lanzar excepciones si algo no funciona bien Tambin podemos lanzar excepciones, si en algn punto del programa detectamos que algo no funciona bien:
public class MiPrimeraClaseExcepcional { public void unMetodoExcepional() throws MiprimeraExcepcion { ... if (algoInusualOcurrio()) { throw new MiPrimeraExcepcion(); // la ejecucion ya no llegara aqu } } ... }
Esta vez throw acta de forma similar a break, salta sin ejecutar las lneas de cdigo inmediatamente.
i
9
666
EXCEPCIONES
Construir cadenas Las excepciones son una potente herramienta para dividir el amplio espacio de posibles errores en partes ms manejables. Se pueden construir cadenas como las del siguiente ejemplo:
try { algunMetodoExcepcional(); } catch (NullPointerException n) { // Tratamiento } catch (RuntimeException r) { // Tratamiento } catch (IOException i) { // Tratamiento } catch (Exception e) { // Tratamiento que se realizar siempre en caso de que el cdigo del programa no entre por ninguno de los catch anteriores, esto funciona como un comodn, siempre al final ponemos la clase superior (Exception) y as nos aseguramos de que siempre se ejecutara algn catch en caso de error. }
i
10
667
EXCEPCIONES
Listar subclases Listar primero las subclases e ir subiendo en la jerarqua, se hace para que las clases ms especificas traten las excepciones ms especificas y que las ms generales sean manejadas por la parte superior de la jerarqua. Mediante estas cadenas y aprovechando que disponemos de una jerarqua tambin para las excepciones, podemos crearnos nuestro propio rbol para stas y tratar de forma precisa cada excepcin.
Falta, como no, aplicar esto, pero utilizando interfaces para el caso en el que la jerarqua tpica se quede corta. No entramos en ello de momento. Pasos para lanzar una excepcin Para conocer los pasos para lanzar una excepcin, pulsa sobre la caja.
i
11
668
EXCEPCIONES
1. Se crea el objeto del tipo excepcin. 2. Con la palabra reservada throw se lanza: class Demothrow { static void ProcDemo() { try { throw new NullPointerException (Mi Error); } catch (NullPointerException ex) { System.out.println (Captura en ProcDemo); throw ex; } } // fin ProcDemo public static void main(String [] args) { try {ProcDemo();} catch(NullPointerException ex) { System.out.println(Capturada en main+ex); } } // fin main } // fin de clase 3. Si una funcin no captura una excepcin, la excepcin viaja por la pila de llamada a funciones hasta que una funcin la captura o finaliza la ejecucin del programa: main() calula() divide() // Error try { calcula() } catch() { . . . } En un bloque try se pueden definir varios tipos de excepciones: class MultiCatch { public static void main(String [] args) { try { int a = args.length; int b = 42 / a; //AritmethicException int[] c = {2, 8}; c[a] = 99; //IndexOutOfBoundsException } catch (AritmethicException ex) { System.out.println (No hay argumentos+ex); } catch (IndexOutOfBoundsException ex) { System.out.println (Demasiado argumentos); } catch (Exception ex) { // Para dems excepciones System.out.println (Error desconocido+ex); } } // fin de main } // fin de clase
12
669
EXCEPCIONES
Limitaciones para el programador A la hora de sobreescribir mtodos, hemos de tener en cuenta las excepciones y debemos coger (mediante catch) las excepciones necesarias.
Ejemplo public class MiClaseIlegal { public String toString() { algunMetodoExcepcional(); ... // devuelve algn String } }
La superclase Object defini el mtodo toString() sin clusulas throw y nosotros debemos mantener esa restriccin. Por eso no podemos llamar a algunMetodoExcepcional() que genera errores y excepciones y algunas de estos deben ser cogidas en su respectiva sentencia catch.
Ejemplo public class MiClase { public String toString() { try { algunMetodoExcepcional(); } catch (IOException e) { } catch (MiPrimeraExcepcion m) { } ... // devuelve algn String } }
Hemos cogido las dos excepciones pero no hemos hecho nada con ellas, esto es legal, pero no ser siempre lo correcto. Habremos de aadir un comportamiento no trivial que har nuestro programa ms robusto.
13
670
EXCEPCIONES
3. Resumen
Has llegado al final de este recurso formativo que denominamos Excepciones Java En esta leccin hemos estudiado los siguientes contenidos:
i
14
671
672
NDICE
CONTROL DE EXCEPCIONES. EXCEPCIONES PERSONALIZADAS
1. Utilizacin de los bloques try, catch y finally . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 2. La lista de throws. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8 3. Crear excepciones personalizadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10 4. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14
673
Estructura Genrica try { // cdigo a ejecutarse y qu puede producir // algn tipo de excepcin } catch(Excepcion1 e1) { // aqu se ejecutara el cdigo necesario si dentro // de try ocurriera la excepcin denominada Excepcion1 } catch(Excepcion2 e2) { // aqu se ejecutara el cdigo necesario si dentro // de try ocurriera la excepcin denominada Excepcion2 } ... finally { // aqu se ejecutara SIEMPRE el cdigo que nos // interese, como pueda ser limpieza de variables ... } try: El bloque try constituye un conjunto de sentencias como otras, pero que pueden lanzar excepciones que sern tratadas a continuacin.
3
674
algunaClaseArchivo f = new algunaClaseArchivo(); if (f.open("/a/file/name/path")) { // instruccin para abrir un fichero algunMetodoExcepcional(); } finally { f.close(); // instruccin para cerrar un fichero } }
try {
La clusula finally 2 Lo que hay dentro de la clusula finally se va a ejecutar siempre pase lo que pase. De este modo lo que hacemos es poner la instruccin de cierre del fichero dentro de una clasula finally, as suceda lo que suceda, tendremos la seguridad de que el fichero se va a cerrar.
i
4
675
i
5
676
Throwable: Es una clase que representa un objeto que se puede lanzar. Error: Causados al enlazar dinmicamente el programa, son de bajo nivel para que el programador a veces pueda manejarlos. Exception: Las excepciones que no son RuntimeExceptions son condiciones que deben ser manejadas por nuestro cdigo. Las Excepciones son errores de usuario:
i
6
677
i
7
678
Hay que poner la lista de throws para todas las excepciones derivadas de Exception excepto las derivadas de RunTimeException. Tambin hay que ponerlo para Throwable pero no para Error y para sus derivadas.
class ThrowsDemo { static void Proc1() throws IOException { System.out.println (Algo va mal.); throw new IOException (Demo); } public static void main (String [] args) { Proc1(); } }
i
8
679
i
9
680
i
10
681
Manejo tradicional
int leerfichero (const *char Nombrefichero) { int CodError = 0; FILE fichero; CodError = Openfile (Nombrefichero,&hfichero); if (CodError == 0) { int longitud; CodError = Getfilelength(hfichero,&longitud); if (CodError == 0) { .... Algoritmo del problema .... } } return CodError; }
i
11
682
static void leerfichero (String nombrefichero) throw IOException { try { File f = new File(); f.openFile(nombrefichero); int longitud = f.getFileLength(); .... Algoritmo del problema .... } catch(FileOPenFailedException ex) { System.out.println (No existe el fichero); } catch(DeterminationFailedException ex) { System.out.println (No se sabe la longitud); } }
El error se propaga automticamente por la pila de llamadas a funcin. No hace falta, como en el mtodo tradicional, retornar ningn cdigo de error. Se permite dividir los errores en categoras utilizando la herencia.
i
12
683
i
13
684
i
14
685
686
687
688
689
NDICE
APLICACIONES BASADAS EN ENTORNO GRFICO
1. Caractersticas de un Applet. Ciclo de vida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 2. Inclusin de un Applet en una pagina web. Paso de parmetros . . . . . . . . . . . . . . . . . . . . . . .8 3. Ejecutar Applets. La clase Graphics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15 4. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .28
690
Los Applets no pueden leer o escribir sobre el sistema de ficheros, excepto en directorios especficos. No pueden comunicarse con otro servidor que no sea el que guarda el Applet. Esto a veces se puede configurar desde el browser. Los Applets no pueden ejecutar programas del sistema de lectura. Los Applets no pueden cargar programas nativos de la plataforma local.
i
3
691
Actividades del Applet Para comenzar a trabajar con Applets, se necesita algo ms que el main() usado en las aplicaciones. Un Applet necesita hacer algunas actividades asociadas a eventos importantes en el ciclo de vida del Applet y que estn directamente relacionados con el funcionamiento del browser. As, cada actividad tiene asociado su mtodo.
i
4
692
1.- Inicializacin:
Nada mas el Applet se carga. Entre lo que se puede hacer aqu hay que destacar: a. Crear objetos que necesitemos. b. Inicializar valores. c. Cargar imgenes. d. Cargar fuentes. El mtodo a sobreescribir (HOTPOT al pulsar aparece descripcin inferior) es:
2.- Arranque:
Ocurre despus de inicializar o despus de una parada previa. Este proceso puede ocurrir muchas veces durante la vida de un Applet. El mtodo a sobreescribir (HOTPOT al pulsar aparece descripcin inferior) es: public void start() { ... }
i
5
693
4.- Destruccin:
Sirve para limpiar la memoria antes de abandnarla desde el navegador. Normalmente no sobreescribiremos este mtodo a menos que queramos liberar recursos especficos. La diferencia entre destroy() y finalize() est en que finalize() es mas genrico y sirve para un objeto cualquiera mientras que destroy() es propia del Applet. El mtodo a sobreescribir (HOTPOT al pulsar aparece descripcin inferior) es:
i
6
694
Dentro del cdigo de nuestra Applet hemos de incluir: import java.awt.Graphics; El mtodo paint (Gaphics g) recibe un objeto g de la clase Graphics. Este objeto se denomina contexto grfico y se va a utilizar obligatoriamente siempre que queramos dibujar algo dentro del paint.
Ejemplo:
En este ejemplo dibujamos un String (Hola desde java) en las coordenadas x=10 y=10 dentro del Applet. (Despus se vern los mtodos ms importantes para dibujar en el Applet).
i
7
695
- Detrs de la palabra CODE se pone entre comillas el nombre de la clase Applet que queremos. De este modo suponemos que el Applet (.class) se encuentra en el directorio donde est el documento HTML. En el nombre hay que incluir la extensin .class.
- El texto alternativo sirve para sustituir al Applet si el navegador no entiende la etiqueta <APPLET>. Es interesante hacer uso de esta opcin para usuarios de nuestros Applets que no dispongan de un browser lo suficiente potente. - WIDTH y HEIGHT seran respectivamente el ancho y el alto del applet en pxeles.
i
8
696
ALIGN
Define cmo debe alinearse el Applet. Puede tener 9 valores. Para alinear en horizontal: ALIGN=LEFT Sita el Applet al margen izquierdo de la pagina web y todo el texto que sigue a la derecha del Applet. ALIGN=RIGHT Sita el Applet al margen derecho de la pagina web y todo el texto que sigue a la izquierda del Applet. Si queremos que el texto siga debajo usaremos la etiqueta <BR> o su familia <BR CLEAR=opcion>, donde opcin puede ser LEFT, RIGHT o ALL.
i
9
697
i
10
698
i
11
699
La etiqueta <EMBED> hereda todas las propiedades que hasta ahora tenia la etiqueta <APPLET> y por ello tiene la misma sintaxis y los mismos atributos que sta. Slo cambia que los atributos CODE y CODEBASE se unen en un nico atributo SCR. Pasando parmetros a Applets A los Applets tambin se les pueden pasar parmetros, para ello es necesario: 1. Una etiqueta especial en el archivo HTML. 2. Cdigo en nuestro Applet para tratar estos parmetros.
i
12
700
<APPLET CODE="nombreClase" WIDTH=100 HEIGHT=100> <PARAM NAME=nombre VALUE="Luis"> <PARAM NAME=ciudad VALUE="Madrid"> ... </APPLET> Pasando parmetros a Applets en su inicializacin Los parmetros se pasan al Applet en su inicializacin en el mtodo init() y accederemos al valor de los parmetros pasados al applet dentro del programa a travs del mtodo getParameter(). Este mtodo requiere un argumento que es un String representando el nombre del parmetro y devuelve el valor del mismo que ser otro String. Si no nos interesara un String, haramos una conversin de tipo. As en nuestro caso, en init(), para coger los parmetros anteriores se hara: public void init() { String nombre = getParameter("nombre"); String ciudad = getParameter("ciudad"); ... }
i
13
701
int tamao; String s = getParameter("tamao"); if (s == null) { tamao = 12; // valor por defecto } else { tamao = Integer.parseInt(s); }
i
14
702
Ejemplo
import java.awt.*; public class MiApplet extends Applet { public void init( ) { setBackground (Color.red);//pone el fondo del applet en rojo } public void paint(Graphics g) { g.drawString(Hola desde java...,20,20); // Escribimos en el applet } }
i
15
703
Por ltimo abrimos el Internet Explorer (browser) y abrimos la pgina MiApplet.htm con el resultado final. Al cerrar este cuadro de texto, aparece con animacin la flecha y la segunda imagen. Hot pot a esta segunda imagen, aparece lo siguiente: Tambin es posible poder visualizar el Applet sin un navegador, con la ayuda del appletviewer la herramienta de visualizacin de Applets incluida en el JDK. Lo haramos de la siguiente forma: C:>appletviewer MiApplet.htm
i
16
704
i
17
705
Ejemplo
Existe la posibilidad de dibujar tres tipos de rectngulos. Para cada una de estas formas, disponemos de dos mtodos, que lo dibuja y otro que lo dibuja y rellena. Los parmetros que se le pasan a estos mtodos son las couno ordenadas (x,y) de la esquina superior izquierda, la anchura (w) y la altura (h). - Rectngulos planos - Rectngulos redondeados - Rectngulos tridimensionales
i
18
706
i
19
707
poli.addPoint(xNueva,yNueva);
i
20
708
drawOval(x,y,ejehoriz,ejevert); fillOval(x,y,ejehoriz,ejevert);
Se dibuja el valo que est circunscrito en el rectngulo que hemos definido. Dibujar Arcos Para dibujar arcos utilizaremos la siguiente funcin: drawArc(x,y,w,h,ang,grad); fillArc(x,y,w,h,ang,grad); El mtodo fillArc() rellena como si el arco se tratara de una porcin de una tarta. Para contar los grados, debemos tomar una circunferencia de referencia y situar el valor 0 donde un reloj marca las 3. Los grados aumentan en sentido contrario a las agujas del reloj.
i
21
709
import java.applet.Applet; import java.awt.*; public class MiApplet extends Applet { public void init( ) { setBackground (Color.blue);//pone el fondo del applet en naranja } public void paint(Graphics g) { g.setColor(Color.orange);//rellenamos d ecolr verde el rectngulo g.fillArc(20,20,80,50,0,90); // Escribimos en el applet } }
i
22
710
copyArea(x,y,w,h,distx,disty); clearRect(x,y,w,h);
Donde x,y,w,h son los parmetros del rea rectangular y donde distx y disty son los movimientos en x e y hacia donde vamos a copiar el rea dada. Es decir, las nuevas coordenadas de la esquina superior izquierda del rectngulo son:
El mtodo clearRect() dibuja un rectngulo con el color de fondo. Si queremos borrar el Applet completo podemos hacer uso de la funcin size() de la siguiente forma:
i
23
711
Font.BOLD + Font.ITALIC
Para usar una fuente debemos cargar el paquete: import java.awt.Font; Para asignar la fuente al Applet usamos el mtodo de la clase Graphics setFont() que recibe un objeto de tipo Font.
import java.awt.Font; ... ... public void paint(Graphics g) { Font f=new Font(Arial,Font.BOLD,25); g.setFont(f); // Para asignar la fuente al Applet g.drawString(Hola desde java,20,20); } }
24
712
25
713
public void paint(Graphics g) { Font f = new Font("TimesRoman", Font.BOLD, 24); g.setFont(f); g.drawString("Esta es una fuente grande. ",x,y); ... }
Color Usando la clase Color podemos escribir y dibujar en varios colores. Para eso crearemos una instancia de la clase Color. Esta clase define ciertos colores almacenados en variables pero si queremos otros colores de la paleta menos populares podemos hacerlo igualmente. Los colores ms populares son:
Si queremos cualquier otro color o de forma mas general haremos: Color c = new Color(R,G,B); Los valores de R, G y B varan entre 0 y 255.
i
26
714
g.setColot(Color.green); g.setColor(c);
Adems podemos fijar los colores del fondo y del plano principal (texto e imgenes) utilizando los mtodos:
setBackground(Color.white); setForeground(Color.black);
Devuelve el color Devuelve el color de fondo Devuelve el color del primer plano
i
27
715
i
28
716
717
i
2
718
i
3
719
i
4
720
i
5
721
AppletContext: es el objeto que contiene las caractersticas del browser donde se est ejecutando el applet, AppletContext es un interface. Applet <AppletContext>.getApplet(String name) Obtiene una referencia a otro applet incluido en la pgina Web. Applet <AppletContext>.getAppletContext() Obtiene el AppletContext
i
6
722
Enumeration <AppletContext>.getApplets() Devuelve todos los applets de una pgina Web. void <AppletContext>.showStatus(String msg) Da un mensaje en la barra de estado incluido en el parmetro msg. void <AppletContext>.showDocument(URL url) Para dar un salto a otro documento Web.
i
7
723
i
8
724
<HTML> <HEAD> <TITTLE> Applet Estado </TITTLE> </HEAD> <BODY> A continuacin va el Applet: <BR> <APPLET code=AppletEstado.class width=300 height=25> </APPLET> </BODY> </HTML>
i
9
725
} }
Java Plug-In Utilizar un aadido de la Mquina Virtual de Java. Es una solucin a nivel corporativo pero no sirve para una nica pgina Web. Con el Plug-in se consige que el Browser utilice la JVM de Sun.
i
10
726
i
11
727
public class AppletBidon extends Applet { // Atributos int ancho, alto, lleno, x, y; int anchoapplet, altoapplet; AppletBidon otro; public void init() { // Se extraen los valores que se pasan desde la pg.HTML. ancho = Integer.parseInt(this.getParameter(ancho)); alto = Integer.parseInt(this.getParameter(alto)); lleno = Integer.parseInt(this.getParameter(lleno));
i
12
728
i
13
729
i
14
730
i
15
731
i
16
732
i
17
733
i
18
734
19
735
i
20
736
737
NDICE
APLICACIONES BASADAS EN ENTORNO GRFICO
1. Ventanas AWT y componentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 2. Paneles y Layouts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12 3. Ms componentes GUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .24 4. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .29
738
Contenedores
Son componentes genricos del AWT que pueden contener a otros componentes (incluso containers). La forma mas comn es el panel (es una regin diferenciada donde se incluyen componentes).
Lienzos
Son simplemente superficies de dibujo. Son tiles para dibujar imgenes y otras operaciones grficas.
Componentes UI
Pueden incluir botones, listas, mens desplegables, checkboxes y otros elementos de un interfaz de usuario.
i
3
739
Los componentes bsicos del interfaz de usuario El componente bsico es el componente UI. Podemos crearlos y aadirlos a nuestro Applet sin conocer nada sobre contenedores ni paneles. Como nuestro Applet es ya en s un contenedor (deriva de Panel) puede contener componentes AWT y entre stos, los componentes UI. El modo de trabajar con estos componentes es sencillo: 1. Creamos el componente. Se hace en el mtodo init(). 2. Sumamos el componente al panel que queramos.( add)
i
4
740
Label ()
Crea una etiqueta vaca, su texto se alinea a la izquierda
Label(String)
Crea una etiqueta con el string que le pasamos alineado a la izquierda.
Label(String, int)
Crea una etiqueta con el string que le pasamos y la alinea segn el valor que le pasamos. Los alineamientos posibles son 3. As la variable int ser: Label.RIGHT, Label.LEFT o Label.CENTER La fuente que escribe el contenido de la etiqueta depende de la fuente que hayamos configurado con setFont(). Ejemplo: add( new Label("Texto centrado", Label.CENTER));
Una vez definida una etiqueta podemos utilizar mtodos predefinidos en la clase Label.
5
741
Button ():
crea un botn vaco.
Button (String):
crea un botn con el string como etiqueta. Una vez creado el botn podemos usar estos mtodos con l.
El tamao del botn lo da la fuente de texto que lo etiqueta. Checkboxes Los Checkboxes son interfaces de usuario que pueden estar activadas o desactivadas. Son pequeas cajas cuadradas (casillas de verificacin) que se pueden marcar o desmarcar.
i
6
742
Checkboxes exclusivas
Una sola checkbox de un grupo puede estar activada. Se llaman radio buttons o tambin checkbox groups.
Checkboxes no exclusivas
Para su creacin utilizaremos uno de los siguientes constructores: Checkbox() : crea una checkbox vaca. Checkbox(String) : crea una checkbox con la etiqueta que le pasamos. Checkbox(String, null, boolean): crea la checkbox con la etiqueta que le pasamos y que estar activada/desactivada si el boolean vale true/false. El valor null es caracterstico de estos componentes. Mouse over sobre la imagen, al pasar el ratn sobre sta permite verla mejor, al agrandarse. Para los checkboxes tambin se definen algunos mtodos de utilidad.
i
7
743
i
8
744
Adems podemos utilizar otros mtodos predefinidos para los checkbox componentes del radio button:
import java.awt.*; import java.applet.Applet; public class RadiosButons extends Applet { Label l1=new Label("Forma de pago:"); public void init() { setBackground (Color.pink); CheckboxGroup cbg = new CheckboxGroup(); add(l1); add(new Checkbox("Visa",cbg,true)); add(new Checkbox("Metlico",cbg,false)); add(new Checkbox("Cheque",cbg,false)); } }
Cdigo HTML: <html> <body> <applet code="RadiosButons.class width=200 height=200> </applet> </body> </html>
9
745
Estos mens solo permiten una seleccin por men. Mas mtodos para este componente son:
i
10
746
11
747
Administrador de layouts Para crear un administrador de layout utilizaremos el mtodo setLayout() en el mtodo init(). public void init() { setLayout(new FlowLayout()); ... }
i
12
748
i
13
749
import java.awt.*; import java.applet.Applet; public class Grid extends Applet { Label l1=new Label("Celda 1"); Label l2=new Label("Celda 2"); Label l3=new Label("Celda 3"); Label l4=new Label("Celda 4"); public void init() { setLayout(new GridLayout(2,2)); add(l1); add(l2); add(l3); add(l4); } }
14
750
Antes, cada componente ocupaba una y slo una celda, ahora el componente podr ocupar varias celdas y definirse as un tamao ms particular. Cada componente se asocia a un objeto GridBagConstraints que se encarga de definir todos los parmetros de tamao, posicin, alineamiento y dems del componente.
i
15
751
1. gridx:
Posicin en x en la malla de celdas de la esquina superior de componente.
2. gridy:
Posicin en y en la malla de celdas de la esquina superior de componente. El valor GridBagConstraints.RELATIVE (-1), que es el valor por defecto, especifica que el componente se ponga justo a la derecha (para gridx) o debajo (para gridy) del componente anterior.
3. gridwidth:
Anchura del componente en nmero de celdas. Por defecto vale 1.
4. gridheight:
Altura del componente en nmero de celdas. Por defecto vale 1. Para gridwidth y gridheight los valores constantes siguientes significan: GridBagConstranits.REMAINDER (0) especifica que este componente es el ltimo de la fila (para gridwidth) o columna (para gridheight). GridBagConstranits.RELATIVE (-1) especifica que este componente es el penltimo de su fila (para gridwidth) o columna (para gridheight).
i
16
752
6. ipadx:
Ampla la anchura del componente resultando la anchura anterior ms 2*ipadx pixeles.
7. ipady:
Ampla la altura del componente resultando la altura anterior ms 2*ipady pixeles. Estos parmetros modifican el tamao sin deformar en s el componente.
8. insets:
Valor del margen del componente respecto de los ejes (imaginarios) de la malla.
i
17
753
10. weightx:
Nmero de componentes que caben en una fila.
11. weighty:
Nmero de componentes que caben en una columna. Por defecto, estas variables toman el valor 0 y el sistema con ello aade espacio extra entra la malla de celdas y los ejes del contenedor. Los valores numricos, entre parntesis, son los valores que tienen dichas constantes que tambin podemos utilizar para no tener que teclear el nombre completo aunque perderemos claridad en el cdigo fuente.
i
18
754
void addComp(Panel panel, GridBagLayout gb, Component comp, int x, int y, int w, int h, int fill, int anchor) { GridBagConstraints gbc = new GridBagConstraints(); gbc.gridx = x; gbc.gridy = y; gbc.gridwidth = w; gbc.gridheight = h; gbc.fill = fill; gbc.anchor = anchor; gbc.weightx = 1.0; gbc.weighty = 1.0; gb.setConstraints(comp,gbc); panel.add(comp); } FlowLayout g = new FlowLayout(); setLayout(g); GridBagLayout gb1 = new GridBagLayout(); Panel panel1 = new Panel(); panel1.setLayout(gb1); TextField nombreTF = new TextField("Antonio Cabanyero Campos",45); TextField telefonoTF = new TextField("964 217135",12); addComp(panel1,gb1,new Label("Nombre:"),0,0,2,1,0,17); addComp(panel1,gb1,nombreTF,2,0,4,1,0,13); addComp(panel1,gb1,new Label("Telefono:"),0,1,2,1,0,17); addComp(panel1,gb1,telefonoTF,2,1,2,1,0,13); add(panel1);
19
755
BorderLayouts Cuando aadimos un nuevo componente al panel que usa un layout de borde nosotros indicamos su emplazamiento geogrfico como...
Los elementos del borde ocupan el espacio que necesiten y el central ocupa el espacio restante.
i
20
756
21
757
setLayout(new CardLayout()); Panel uno = new Panel(); add("Primero",uno); Panel dos = new Panel(); add("Segundo",dos); Panel tres = new Panel(); add("Tercero",tres); show(this,"Segundo");
i
22
758
top
derecha
Para incluir un inset en cualquier layout sobreescribimos el mtodo insets() en nuestra clase:
Donde vsup, vinf, vizq y vder son los enteros que queramos.
i
23
759
TextArea()
crea un rea vaca de 0 filas y 0 columnas de caracteres de anchura.
TextArea(int, int)
crea un rea de texto vaca pero con el numero de filas y columnas dado.
TextArea(String)
crea un rea de texto conteniendo el string pero de 0 filas y 0 columnas.
i
24
760
i
25
761
Scrollbar()
crea una scrollbar de tamao 0 (mximo y mnimo valor).
Scrollbar(int)
scrollbar de tamao 0 (mximo y mnimo valor). El valor int es para la orientacin, int= Scrollbar.HORIZONTAL o Scrollbar.VERTICAL
i
26
762
Ejemplo: import java.awt.*; public class Scroll extends java.applet.Applet { Label l; public void init() { setBackground (Color.orange); l = new Label("0"); add(l); add(new Scrollbar(Scrollbar.HORIZONTAL,1,0,1,100)); } public boolean handleEvent(Event evt) { if (evt.target instanceof Scrollbar) { int v = ((Scrollbar)evt.target).getValue(); l.setText(String.valueOf(v)); } return true; } }
i
27
763
i
28
764
i
29
765
766
i
2
767
(*) Representa cualquier componente del GUI. Es un objeto pero con la caracterstica de que puede contener ms objetos. Es un lienzo dentro del cual se introducen componentes. Es un panel especial que se utiliza para las pginas Web.
i
3
768
i
4
769
i
5
770
i
6
771
Habr varios Source (Componentes) en un Listener (Formularios). Un objeto listener tiene que implementar los interface para recibir los eventos. Hay varios interfaces (lo ms tpicos):
i
7
772
Un objeto listener lo que tiene que hacer para enviar el evento es decir dnde habr que enviarlo. Tiene dos mtodos: void <Button>.addActionListener (ActionListener l) Aadir un evento a un listener. void <Button>.removeActionListener (ActionListener l) Eliminar un evento de un listener. El objeto listener tendr que implementar el interface ActionListener: public AppletBidon extends Applet implements ActionListener interface ActionListenter { public void actionPerformed (ActionEvent ev) } AppletBidon deber implementar dentro actionPerformed. multicast permite que cuando se produzca un evento en source se puede enviar el evento a varios objetos listener.
i
8
773
Object <ActionEvent>.getSource() Devuelve el objeto source que ha producido el evento. Dentro de actionPerformed: if (ev.getSource() == boton1) { ... } if (ev.getSource() == boton2) { ... }
i
9
774
10
775
i
11
776
i
12
777
public void mouseClicked (MouseEvent ev); Cuando se hace click. public void mousePrresed (MouseEvent ev); Cuando se presiona el botn. public void mouseReleased (MouseEvent ev); Cuando se suelta el botn. public void mouseEntered (MouseEvent ev); Ha entrado en un componente public void mouseExited } (MouseEvent ev); Ha salido del componente.
Ejemplo: import java.applet.*; import java.awt.*; import java.awt.event.*; public class AppletRaton extends Applet implements MouseListener { public void mouseClicked (MouseEvent ev) { System.out.println (Coordenadas: [+ev.getX()+ , +ev.getY()+]); }
i
13
778
public void init() { this.addMouseListener(this); } } <HTML> <HEAD> <TITLE> Applet con Etiqueta </TITLE> </HEAD> <BODY> <APPLET code=AppletRaton.class width=200 height=200> </APPLET> </BODY> </HTML>
i
14
779
Para poder anidar de Applet y de Adapter se utilizarn las clases anidadas (existe una clase exterior outer y una clase interior outer).
Ejemplo: import java.applet.*; import java.awt.*; import java.awt.event.*; public class AppletRaton2 extends Applet { class Raton extends MouseAdapter { public void mouseClicked (MouseEvent ev) { System.out.println ([+ev.getX()+ , +ev.getY()+]); } } // fin de clase Raton public void init () { this.addMouseListener(new Raton()); } } // fin de clase AppletRaton2
i
15
780
i
16
781
i
17
782
int <Contaniner>.geComponentCount() Da el nmero de elementos contenidos dentro del contenedor. Component <Container>.getComponent(int index) Devuelve el componente indicado por index. Los layout (acomodadores) En este punto se va indicar cmo colocar los componentes. Existen dos tcnicas: Utilizando coordenadas absolutas, las menos utilizadas. Utilizando coordenadas relativas, las que ms se utilizan. La colocacin de los componentes dentro del contenedor se realiza mediante los layouts. Existen cinco tipos.
i
18
783
i
19
784
<HTML> <HEAD> <TITLE> Applet con Etiqueta </TITLE> </HEAD> <BODY> <APPLET code=AppletLayout1.class width=200 height=200> </APPLET> </BODY> </HTML>
i
20
785
i
21
786
i
22
787
Dar posiciones absolutas a los componentes this.setLayout (null); // Container no tiene Layout // Se aaden los componentes del contenedor: void <Container>.add (Component c) // Por ltimo se indican las coordenadas de los componentes. void <Component>.setBounds (int x, int ym int width, int height) void <Component<.setLocation (int x, int y)
i
23
788
TextField, representa una caja de texto de una sola lnea. TextArea, representa una caja de texto con ms de una lnea.
i
24
789
i
25
790
i
26
791
i
27
792
i
28
793
i
29
794
i
30
795
Con el parmetro selected se le indica si el Checkbox est seleccionado o no. Mtodos: boolean <Checkbox>.getState() Devuelve el estado del Checkbox.
i
31
796
i
32
797
Panel p = new Panel(); p.setLayout (new gridLayout(3,0)); CheckGroup c = new CheckGroup(); Checkbox uno = new Checkbox (Uno, true, c); Checkbox dos = new Checkbox (Dos, false, c); Checkbox tres = new Checkbox (Tres, false, c);
i
33
798
i
34
799
i
35
800
i
36
801
i
37
802
i
38
803
i
39
804
i
40
805
i
41
806
42
807
i
43
808
i
44
809
i
45
810
public void windowClosing (WindowEvent ev) Cuando se va a cerrar public void windowClosed (WindowEvent ev) Cuando se cierra la ventana.
i
46
811
i
47
812
i
48
813
GridBagLayout GridBagConstraints van a ser unos objetos que permiten especificar como modificar las celdas. Tenemos que crear un GridBagLayout y un GridBagConstriants, un Layout: GridBagLayout = new GridBagLayout (); GridBagConstraints = new GridBagConstraints (); Panel panel = new Panel(layout);
i
49
814
i
50
815
i
51
816
i
52
817
i
53
818
Constructor: FileDialog (Frame frame) FileDialog (Frame frame, String title) FileDialog (Frame frame, String title, int kind)
i
54
819
i
55
820
56
821
i
57
822
i
58
823
i
59
824
i
60
825
826
NDICE
APLICACIONES BASADAS EN ENTORNO GRFICO
1. Manejando acciones UI y eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 2. Anidando paneles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6 3. El ratn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9 4. Eventos del teclado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16 5. El manejador de eventos del AWT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20 6. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .23
827
Manejando acciones UI y eventos Para que todos los componentes UI que hemos aprendido a crear tengan un efecto, es decir, para que el evento asociado a ellos determine una accin a realizar hemos de engancharles una operacin. Para interceptar una accin relacionada con un componente UI hemos de definir un mtodo action() en nuestra clase o en nuestro Applet.
Mtodo action () El mtodo action () tiene el aspecto similar al tratamiento de eventos de ratn, pero aade un segundo argumento que es un objeto de cualquier tipo y que va a depender del componente UI.
i
3
828
i
4
829
5
830
setLayout(new GridLayout(1,2,10,10); Panel panel1 = Panel(); Panel panel2 = Panel(); add(panel1); add(panel2);
Configuracin de layout Podemos ahora configurar un layout diferente para cada panel y podemos incluir nuevos componentes a cada panel independientes de los otros paneles haciendo uso del mtodo add() de forma apropiada:
i
6
831
Normalmente y en Applets de envergadura considerable se suelen separar en diferentes clases lo relacionado a cada panel o layout. Eventos y paneles anidados Al anidar paneles, creamos una jerarqua con el panel principal (normalmente el Applet) a la cabeza. Esta jerarqua de componentes determina el orden de pintado en pantalla. El manejo de los eventos entre distintos componentes en la jerarqua va a ser importante y vamos a hacer uso del valor boolean que devuelven normalmente los mtodos de manejo de eventos. Segn atendemos un evento ste se pasa o no a manejadores de eventos por encima en la jerarqua: 1. Si el evento no nos interesa y no lo procesamos devolvemos false. 2. Si el evento nos interesa y la procesamos devolvemos true. En este momento el evento deja de subir en la jerarqua. 3. Interceptar el evento, procesarlo y pasrselo a otro manejador. En este caso el manejador suele devolver false para que siga subiendo en nuestra jerarqua.
i
7
832
i
8
833
El evento MouseDown El evento mouseDown se corresponde con el pulsado del botn del ratn. Manejar este evento es muy fcil ya que basta sobrecargar mouseDown():
i
9
834
Al mtodo se le pasan tres parmetros: el mismo evento y las coordenadas (x,y) de pulsacin del ratn dentro del rea del Applet. No hay que olvidar que el mtodo debe devolver un boolean y por ello hemos de hacer uso de la palabra reservada return seguida de dicho valor. Este boolean lo debemos de interpretar para ver si nuestro Applet ha reaccionado ante el evento. Va a ser til cuando creemos interfaces de usuario. La idea es que si el mtodo trata el evento devuelva true. El evento Mouseup El evento mouseUp se corresponde con el soltado del botn del ratn. Manejar este evento es fcil, basta sobrecargar ahora mouseUp():
Al mtodo se le pasan los tres parmetros de antes. El manejo del valor resultado se hace de forma anloga al mtodo mouseDown().
i
10
835
i
11
836
i
12
837
import java.awt.*; public class Lineas extends java.applet.Applet { final int MAXLINES = 10; Point comienzo[] = new Point[MAXLINES]; Point fin[] = new Point[MAXLINES]; Point ancho; Point puntoactual; int lineaactual= 0; public void init() { setBackground(Color.white); } public boolean mouseDown(Event evt,int x,int y) { ancho = new Point(x,y); return true; }
i
13
838
public boolean mouseUp(Event evt,int x,int y) { if (lineaactual<MAXLINES) { addline(x,y); } else { System.out.println("Demasiadas lineas."); } return true; } public boolean mouseDrag(Event evt,int x,int y) { puntoactual = new Point(x,y); repaint(); return true; } void addline(int x, int y) { comienzo[lineaactual] = ancho; fin[lineaactual] = new Point(x,y); lineaactual++; puntoactual = null; repaint(); } public void paint(Graphics g) { g.drawRect(0,0,size().width-1,size().height-1); for (int i=0; i<lineaactual; i++) { g.drawLine(comienzo[i].x,comienzo[i].y,fin[i].x,fin[i].y); } g.setColor(Color.blue); if (puntoactual != null) { g.drawLine(ancho.x,ancho.y,puntoactual.x,puntoactual.y); } } }
i
14
839
i
15
840
i
16
841
Teclas standard Es tambin muy til para testear las teclas hacer uso de la estructura ya estudiada switch, ya que los valores de estas variables son enteros. Las teclas standard definidas son las siguientes: Variable Event.HOME Event.END Event.PGUP Event.PGDN Event.UP Event.DOWN Event.LEFT Event.RIGHT > > > > > > > > > Tecla pulsada HOME END PAGE UP PAGE DOWN UP Flecha DOWN Flecha LEFT Flecha RIGHT Flecha
i
17
842
import java.awt.*; import java.applet.Applet; public class Tecla extends Applet { public void init() { setBackground(Color.orange); setForeground(Color.blue); } public boolean keyDown(Event e , int key) { Graphics g=getGraphics(); g.drawString("Tecla pulsada"+ (char)key,10,10); return true; } }
i
18
843
Donde hemos usado la comprobacin de si la tecla SHIFT estaba pulsada cuando ocurri el otro evento: evt.shiftDown(). Los mtodos a usar con teclas modificadoras son: > shiftDown() > controlDown() > metaDown()
i
19
844
public boolean handleEvent(Event evt) { switch (evt.id) { case Event.MOUSE_DOWN: System.out.println("Evento MouseDown: " + evt.x + "," + evt.y); return true; case Event.MOUSE_UP: System.out.println("Evento MouseUp: " + evt.x + "," + evt.y); return true; case Event.MOUSE_MOVE: System.out.println("Evento MouseMove: " + evt.x + "," + evt.y); return true; case Event.MOUSE_DRAG: System.out.println("Evento MouseDrag: " + evt.x + "," + evt.y); return true; default: return false; } }
20
845
Teclado
public boolean handleEvent(Event evt) { if (evt.id == Event.MOUSE_DOWN) { // procesado especifico para el click del ratn return true; } else { return super.handleEvent(evt); } }
Ratn
Con todos estos eventos podemos sobrecargar el mtodo handleEvent() a nuestras necesidades, pero es importante conocer que al sobrescribir este mtodo ninguno de los mtodos de manejo de eventos son llamados ya que ocultamos el comportamiento del mtodo de la superclase. As, tenemos dos posibilidades: 1. Tratar en nuestra definicin todos los posibles eventos y qu hacer ante ellos. 2. Tratar los eventos que queramos tratar de forma particular y llamar al mtodo handleEvent() de la superclase para que ste trate el resto de eventos.
i
21
846
i
22
847
i
23
848
849
NDICE
APLICACIONES BASADAS EN ENTORNO GRFICO
1. Los contenedores y componentes de la clase Swing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 2. Los Botones JButton, JCheckBox, JRadioButton y JToggleButton. . . . . . . . . . . . . . . . . . . . . . .9 3. Los Mens. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16 4. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .29
850
Librera JFC (Java Foundation Classes) La librera JFC es un conjunto de libreras destinadas a hacer la parte grfica de Java.
i
3
851
JDialog, JFrame y JApplet son las nicas clases que no derivan de JComponent. Son ventanas del Sistema Operativo. Contenedores de primer nivel.
i
4
852
i
5
853
Existe un mtodo para establecer la barra de men sin tener que coger primero el RootPane:
Para acceder al ContentPage: Container cp = this.getRootPane().getContentPane(); void <JRootPane>.setContentPane(Container c) Acceder al ContentPane: Container <Frame>.getContentPane(); Para establecer la barra de menu sin tener que coger primero el RootPane void <Container>.add(Component c)
i
6
854
En principio podemos cambiar el ContentPane por otro contenedor, pero JSplitPane, JtabbedPane, JScrollPane no funcionan correctamente. El motivo es que son semitransparentes y para evitarlo se utiliza un mtodo que lo hace opaco: void <JComponent> setOpaque(boolean b) Los JApplet, a diferencia de los Applet, s podrn tener mens. Los layout por defecto de los componentes Los componentes tienen un layout por defecto, que es distinto en el caso de AWT y el de Swing.
En AWT
Frame, Dialog Panel, Applet => BorderLayout => Flowlayout
En Swing
JFrame, JDialog, JApplet JPanel => BorderLayout => FlowLayout
i
7
855
i
8
856
void <AbstractButton> setEnabled(boolean b) Activarlo o desactivarlo Todos los botones tienen, adems del texto, un Icono y un Mnemonic (tecla rpida). void <AbstractButton>.setText(String text) String <AbstractButton>.getText() void <AbstractButton>.setIcon(Icon icon) Icon <AbstractButton>.getIcon() void <AbstractButton>.setMnemonic(char c) char <AbstractButton>.getMnemonic() JButton JChekBox JRadioButton JToggleButton > > > > Botn pinchable CheckBox Radio Button Un botn que cuando se pincha se aplasta y cuando se vuelve a pinchar se levanta.
i
9
857
AbstractButton.CENTER (defecto) AbstractButton.TOP AbstractButton.BOTTOM void <AbstractButton>.setHorizontalTextPosition(int pos) AbstractButton.LEFT AbstractButton.CENTER AbstractButton.RIGHT (defecto)
i
10
858
void <Component>.setForeground(Color c)
void <Component>.setBackground(Color c)
Eventos: - ActionEvent
i
11
859
Eventos: - ItemEvent - ActionEvent Se produce cada vez que pulsamos en el CheckBox. El ms utilizado es el ActionEvent, ya que se utiliza junto al mtodo: int <ItemEvent>.getStateChange() Devuelve el estado del CheckBox. Se puede saber lo que ha ocurrido. Los botones: JRadioButton Existe una clase para agruparlos: ButtonGroup (derivada de Object). void <ButtonGroup> add (AbstractButton b)
i
12
860
Los botones: JToggleButton JTroggleButton es un botn que se aplasta o se desaplasta. Es un booleano. De ella derivan CheckBox y RadioButton. Se podrn crear grupos de JTroggleButton:
Eventos:
ItemEvent ActionEvent Para el cambio de estado. Para la accin de pulsar.
13
861
Es fcil crearse una clase que implemente a Icon, para crear nuestros propios iconos:
interface Icon { public abstract int getIconHeight(); public abstract int getIconWidth(); public abstract void paintIcon(Component c, Graphics g, int x, int y); // x,y origen del botn. }
i
14
862
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class IconoPersonal { public static void main (String [] args) { JFrame frame = new JFrame("Boton Personal"); frame.setSize(400,400); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent ev) { System.exit(0); } }); // Aadimos el botn frame.getContentPane().add(new JButton("Aros", new IconoAros())); // Mostrar la ventana frame.show(); } // fin de main } /// fin de la clase class IconoAros implements Icon { public int getIconWidth() { return 16; } public int getIconHeight() { return 16; } public void paintIcon(Component c, Graphics g, int x, int y) { g.setColor(Color.black); g.drawOval(x,y+4,8,8); g.drawOval(x+6,y+4,8,8); } } // fin de clase
15
863
i
16
864
JMenuBar
Representa la barra horizontal de Men. Slo puede haber una en la ventana. Est formado por varios elementos JMenu
JMenu
Representa una persiana. Est formado por varios elementos JmenuItem.
JMenultem
Representa una opcin de la persiana. Para colocar los elementos dentro de los Mens, tenemos los mtodos:
Una vez que se ha colocado, se tiene que aadir la barra de men con el mtodo:
Para aadir opciones a una persiana: JMenuItem <JMenu> add (String title)
i
17
865
Eventos de los mens Se pueden poner separadores en la persiana, pero en vez de crear una opcin con guiones como en AWT, utilizaremos el mtodo:
i
18
866
KeyStroke Los objetos de tipo KeyStroke se piden al sistema utilizando la funcin esttica:
Key_code
Cdigo de tecla virtual (dentro de la clase KeyEvent)
Modifiers
ALT_MASK, CONTROL_MASK (dentro de la clase KeyEvent)
i
19
867
opcion1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1, KeyEvent.ALT_MASK);
Las barras de herramientas JToolBar es la clase que nos permite crear Barras de Herramientas. Acta como un contenedor donde metemos los botones. Para poner una barra de herramientas en una ventana, el ContentPane debe utilizar BorderLayout. Por defecto, son Dockable: se pueden poner a cualquier lado de la ventana. Si no se pone borde, queda flotando. Si no queremos que esto ocurra tenemos el mtodo:
Cuando aadimos los botones y queremos dejar un espacio entre ellos, podemos hacerlo utilizando el mtodo>> void <JSeparator> addSeparator(); // un espacio por defecto void <JSeparator> addSeparator (Dimension d); // Espacio de d pixeles class Dimension { int width; } Se debe indicar el alto y el ancho que utilizar uno u otro en funcin de cmo est colocada la barra de herramientas. Ejemplo
20
868
mi_applet.add(componente); // AWT
y ahora haremos:
mi_applet.getContentPane().add(componente); // SWING
i
21
869
Son opacos, pintan todo su fondo de una color gris. Nos viene bien para poner un JPanel como ContentPane, aunque puede ralentizar el programa cuando dentro de un JPanel se encuentran otros. Para solucionar esto tenemos el mtodo: (combinando opacos y transparentes ganamos velocidad) void <JComponent> setOpaque (boolean b) Por defecto utilizan FlowLayout igual que en AWT. Si se quiere utilizar otro Layout se le indicar en el constructor de JPanel: JPanel(LayoutManager m)
i
22
870
Dimension <Component>.getMinimumSize() Dimension <Component>.getPreferedSize() Dimension <Component>.getMaximumSize() class Dimension { int width; int height; }
El Layout no siempre har caso a la respuesta de los mtodos. BorderLayout hace caso a los componentes mnimos que se colocan a los lados. FlowLayout hace caso al tamao preferido del componente.
i
23
871
i
24
872
i
25
873
i
26
874
Ejemplo:
JTextArea cajaTexto = new JTextArea (80,25); JScrollPane panel = new JScrollPane(cajaTexto); // Se refiere a la ventana principal. getContentPane().setPreferredSize(new Dimension (400,400)); getContentPane().add(panel,BordeLayout.CENTER);
Cambiar el Look & Feel de los componentes Para los componentes Swing existen varios LOOK & FEEL de los componentes. Para cambiar el LOOK & FEEL se tiene la siguiente funcin esttica: static void <UIManager>.setLookAndFeel (LookAndFeel lf)
i
27
875
(Component c)
i
28
876
i
29
877
878
879
880
881
882
883
Etiquetas
884
885
886
887
888
889
SELECT COL_A+COL_B FROM NULOS COL_A+COL_B 25 70 NULL NULL NULL 117 93 NULL NULL
10
890
11
891
12
892
GROUP BY Todos los nulos quedarn agrupados en el mismo grupo. SELECT COL_A, COUNT(*) FROM NULOS GROUP BY COL_A
13
893
14
894
15
895
AVG(PLAZAS_LIBRES)=10
16
896
v=e/t, t>e/v, 1.25>e/v, v*1.25 > AVG(DISTANCIA) SELECT AVIONES SELECT VUELOS SELECT * FROM AVIONES WHERE 1.25*VELO_CRUC > (SELECT AVG(DISTANCIA) FROM VUELOS WHERE NUM_VUELO=AVIONES.NUM_VUELO) EXISTS-NOT EXISTS Se define para comprobar la existencia o ausencia del valor devuelto por una Subselect. Una expresin con EXIST devuelve Cierto si la Subselect nos devuelve al menos un valor. WHERE EXISTS (<Subselect>) Cierto
17
897
18
898
19
899
DBNAME: nombre de la BdD a la que pertenece la tabla. CARD: n de filas de la tabla. OWNER: usuario creador de la tabla. SELECT * FROM SYSCOLUMNS WHERE DBNAME=RESERVAS
20
900
TBNAME: nombre de la tabla. COL_NO: posicin de la columna en la tabla. COL_TYPE: tipo de dato LENGTH: longitud del dato de la columna. NULLS: indica si se permite valor nulo. Ej: Obtngase la ltima hora de salida para cada destino de los vuelos realizados por aviones capaces de almacenar ms combustible que un tercio de la media que pueden almacenar los dems aviones. SELECT DESTINO, MAX(HORA_SALIDA) FROM VUELOS WHERE TIPO_AVION IN (SELECT TIPO FROM A WHERE COMBUSTIBLE>1/3*(SELECT AVG(COMBUSTIBLE) FROM AVIONES WHERE TIPO<>A.TIPO) Ej: Crear una vista sobre la tabla vuelos con las columnas ORIGEN y DESTINO para aquellos vuelos que no sean de IBERIA. Visualizar el contenido de la lista para los vuelos que no partan de Madrid. Borrar la vista. CREATE VIEW V_VUELOS (V_ORIGEN, V_DESTINO) AS SELECT ORIGEN, DESTINO FROM VUELOS WHERE NUM_VUELO NOT LIKE IB% SELECT * FROM V_VUELOS WHERE V_ORIGEN<>MADRID DROP VIEW V_VUELOS
21
901
22
902
23
903
Bibliografa: Diseo y Gestin de Bases de Datos. Angle Lucas. Se plantean una serie de problemas: Redundancia: cuando un autor tiene varios libros, se repite la nacionalidad. Anomalas de modificacin: si Ad.Mig. y Ma.Piat. desean cambiar de editor, se modifica en los 2 lugares. A priori no podemos saber cuntos autores tiene un libro. Los errores son frecuentes al olvidar la modificacin de un autor. Se pretende modificar en un slo sitio. Anomalas de insercin: se desea dar de alta un autor sin libros, en un principio. NOMBRE y COD_LIB son campos clave, una clave no puede tomar valores nulos. Teora de la normalizacin: la teora de la normalizacin ofrece una serie de reglas para efectuar una modelizacin ptima.
24
904
Formas normales
1 forma normal: es una restriccin inherente del modelo relacional. Se dice que una tabla est en 1 forma normal si no existen en ella grupos repetitivos. Una tabla no puede tener en un campo ms de un valor. TITULO AUTOR CyD Ad.Mig. Ma.Piat. Hay un grupo repetitivo. De este modo la tabla no es plana y no est en 1 forma normal. Para convertirla a 1 forma normal: TITULO AUTOR CyD Ad.Mig. CyD Ma.Piat.
25
905
Ej: DNI depende funcionalmente de NOMBRE y NOMBRE de DNI DNI NOMBRE NOMBRE DNI NOMBRE DNI Ej: DIRECCION depende funcionalmente de DNI, pero DNI no depende funcionalmente de DIRECCION DNI DIRECCION DIRECCION -/ DNI Ej: TITULO, LIBRO no dependen funcionalmente de DNI, AUTOR, porque un autor puede escribir varios libros DNI, AUTOR -/ TITULO, LIBRO Ej: Se tiene una base de datos de pluriempleados: Atributos: DNI, EMPRESA, SUELDO DNI -/ EMPRESA DNI -/ SUELDO Se puede concatenar atributos, obteniendo: DNI, EMPRESA SUELDO
26
906
Las relaciones a partir de ahora se definirn como un conjunto de atributos con dependencias funcionales R(A, DF). Para normalizar la tabla habr que conocer todas las dependencias funcionales, pero en la relacin que nos den slo tendremos algunas, a partir de las cuales podremos hallar el resto. Aplicaremos las propiedades de las dependencias funcionales para obtener todo el conjunto de posibles dependencias funcionales que puedan existir en la relacin. Al conjunto inicial de dependencias funcionales lo llamaremos F, conjunto a partir del cual obtendremos el resto de dependencias funcionales. A cada nueva dependencia funcional obtenida a partir de F la llamar f. Al nuevo conjunto que contenga todas las dependencias funcionales que obtenga le llamar F+. Una vez hallado F+ podr aplicar las formas normales de la teora de la normalizacin. Dependencia funcional derivada Dado un conjunto F de dependencias funcionales se dice que f deriva de F (F f) si f se obtiene a partir de F. Cierre de un conjunto de dependencias funcionales Se define Cierre (F+) como el conjunto de todas las dependencias funcionales implicadas por F o halladas a partir de F.
27
907
Se demuestra del siguiente modo: Z c W equivale a W Z. Si tenemos X Y y W Z afirmar que XW YZ a.3) Transitividad Si X Y y Y Z => X Z
podemos
b) Propiedades propiamente dichas b.1) Unin X Y y X Z => X YZ Demostracin: Si X Y (aumentatividad con X) => X XY Si X Z (aumentatividad con Y) => XY XZ Si X XY y XY YZ (transitividad) => X YZ
28
908
Dependencia funcional total El conjunto de atributos Y tiene dependencia funcional total con X si Y tiene dependencia funcional con X (X Y) y adems no existe ningn subconjunto Z de X (Z c X) con el cual Y tenga dependencia funcional (Z -/ Y). Diagramas de dependencias funcionales Son una herramienta que sirve para tener una visin general de los datos y de las dependencias funcionales entre ellos. S e representa en forma de grafo con los implicantes de las dependencias funcionales en un rectngulo, de los que salen flechas hacia los implicados. Ej: Dado: ABC MNS MN BC OPR OP CQ AB C BC
A B
29
909
Debe tener una dependencia funcional total con los atributos de la tabla. Si tenemos: WZ A WZ B WZ C pero Z -/ A Z -/ B Z -/ C La clave es la mnima superclave, no descomponible en claves menores.
30
910
D depende funcionalmente de B slo y debera depender de AB para estar en 2 forma normal. Para convertirlo en 2 forma normal se descompone en 2 tablas: Tabla 1: clave con dependencias totales Tabla 2: parte de la clave implicante con dependencias parciales A C B Esto cumple el teorema 1 enunciado en el captulo (Descomposicin por JOIN) Ej: Pasar a 2 forma normal la siguiente tabla: DNI EMPLEADO DNI SUELDO DNI NOMBRE EMPLEADO NOMBRE SUELDO B D
31
911
AC
A y B son claves candidatas a principales. Elegimos una de las 2, por ejemplo A. B C D E B A C E No est en 3 forma normal porque existen atributos no principales que dependen transitivamente de la clave de la relacin. D
32
912
33
913
A C
34
914
35
915
36
916
R (Asignatura, Texto, Profesor) 1. Asignatura Texto, x 2. Asignatura Profesor, y R1 (Asignatura, Texto, x) R2 (Asignatura, Profesor, y) Dependencia de JOIN Se dice que una relacin T formada por los atributos A1, A2, ..., An tiene una dependencia con sus proyecciones T1, T2, ..., Tn si T=T1 T2 T3 ... Tn
37
917
T=T1 T2 T3 5 Forma Normal: se dice que una tabla est en 5FN si est en 4FN y adems toda dependencia de JOIN est implicada por las claves de la tabla. Las columnas de enlace deben ser los atributos que componen la clave. En la siguiente tabla no existen dependencias funcionales. Bebida -/ Camarero.
Dependencias de JOIN: T=T1 T2 T3 Columna enlace: T1 T2 = Cliente Los tres atributos forman la clave. T no est en 5 forma normal. Si las columnas de enlace son las columnas de la clave entonces est en 5 forma normal. Para pasarlo a 5 forma normal habr que descomponer T en sus proyecciones.
38
918
39
919
40
920
SQL Embedido 1. SQL autocontenido 2. SQL embedido SQL embedido: Sentencia de SQL que se utiliza dentro de un programa llamado anfitrin, escrito en cualquier lenguaje. Tendremos tablas con datos de entrada y de salida. Las sentencias de SQL sern sentencias embebidas en el programa anfitrin. Caractersticas: * Todas las sentencias SQL van a estar enmarcadas por: EXEC SQL <sentencias> END-EXEC * Antes de utilizar un compilador para manejar SQL embebido es necesario pasar el programa fuente por un precompilador:
PROG FUENTE
precompilador
PROG OBJETO
LINKER
- sintaxis sentencias SQL - comentar sentencias SQL (para que las ignore el compilador) - sustituir sentencias SQL por llamadas a rutinas de libreras
41
921
42
922
43
923
44
924
1. INTRODUCCION
Integridad: caracterstica que nos permite tener coherencia y veracidad en la informacin. Existen ciertas operaciones de SQL que pueden hacer peligrar la integridad de la operacin: - Insercin - Borrado - Modificacin T.PADREEMPLEADO DNI Clave Principal
DNI_EMP
Clave Ajena
Puede que borremos un empleado y olvidemos eliminar los familiares. Tipos de integridad: Integridad de dominio: restringimos los valores que puede tomar un atributo respecto a su dominio, por ejemplo EDAD 18 - 65. Integridad de entidad: la clave primaria de una entidad no puede tener valores nulos y siempre deber ser nica, por ejemplo DNI. Integridad referencial: las claves ajenas de una tabla hija se tienen que corresponder con la clave primaria de la tabla padre con la que se relaciona. Por ejemplo, en familiares necesitaremos el DNI de empleado, que es la clave ajena de la tabla.
45
925
46
926
47
927
Todos los valores que aparezcan en la ltima columna existirn tambin en la primera, por tanto COD_EMP_JEFE se convierte en clave ajena de la tabla. Ciclos de integridad referencial Conjunto de tablas que funcionar como tablas padres e hijas unas de otras, formando un camino cerrado.
48
928
49
929
DELETE FROM T2 WHERE PKT2 = T2A Restricciones de borrado en tablas conectadas por mltiples caminos: Los dos caminos que llegan a una tabla deben tener definida siempre la misma regla de borrado, que debe ser RESTRICT o CASCADE.
50
930
3. DISPARADORES O TRIGGERS
Son un conjunto de sentencias que el sistema ejecuta a la hora de efectuar una insercin, actualizacin o borrado en una tabla. Para definir un TRIGGER necesitamos: - Nombre de la tabla sobre la que actuar el trigger - Sentencia que activar el trigger (insercin, actualizacin o borrado) - Acciones que realizar el trigger DB2 no incorpora la posibilidad de definir triggers, pero SQL s. Las reglas de integridad referencial se emulan en SQL mediante la implementacin de triggers. Emulacin de insercin en tabla hija mediante el uso de trigger en SQL: Segn la regla de integridad referencial, no se puede efectuar una insercin en una tabla hija a menos que exista un valor de clave primaria igual al de clave ajena de la fila que se desea insertar.
51
931
52
932
933
NDICE
ACCESO A DATOS EN JAVA
1. Drivers JDBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 2. El API JDBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8 3. Ejecutar sentencias SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11 4. Sentencias SQL Precompiladas (PREPARED STATEMENT) . . . . . . . . . . . . . . . . . . . . . . . . . . . .16 5. Uso de transacciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19 6. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .30
934
i
3
935
ODBC
Ventajas: - Viene ya con JDK. Inconvenientes: - ODBC debe estar instalado y congurado en la mquina del cliente. - El driver est escrito parte en JAVA y parte en una DLL. Esto quiere decir que como parte est en DLL no se puede enviar por la red. Por lo tanto no sirve para construir APPLETS
nativo
Oracle
nativo
SQLServer
i
4
936
PROGRAMA JAVA
nativo
Oracle
i
5
937
i
6
938
SERVIDOR -------------------------------------
SERVIDOR (LAN) SERVIDOR (LAN) Servidor de acceso de la base de datos Servidor de acceso de la base de datos
BDD BDD
SERVIDOR (WAN) -----------------------------------Native protocol pure Java driver La base de datos puede ser local o remota.
BDD
i
7
939
i
8
940
Normalmente se tendr una referencia del interface Connection para acceder a los objetos que deriven. Para obtener el mtodo Connection se utiliza el siguiente mtodo:
El parmetro url determina la cadena de conexin que indica qu driver vamos a utilizar y qu parmetros se les va a pasar. La cadena de conexin es un texto con tres partes:
i
9
941
Los DSN son de tres tipos: - DSN de usuarios, slo existen cuando se entra con un determinado nombre de usuario. - DSN de sistema, existen independientemente del usuario con que se entre. - DSN de ficheros, que son DSN donde la informacin de configuracin se almacena en un fichero.DSN Los dos primeros guardan la informacin de configuracin en el registro de Windows.
i
10
942
Una vez que se tenga el Statement se podr utilizar ejecutando las instrucciones SQL que se quiera. Con Statement se pueden ejecutar dos tipos de sentencias SQL: 1. Sentencias de actualizacin 2. Sentencias de consulta Sentencias de actualizacin Las sentencias de actualizacin SQL son:
CREATE TABLE Clientes (CodCliente INTEGER, Nombre CHAR(20), Direccion CHAR(30), Saldo NUMBER) INSERT INTO Clientes (1, 'Pedro Perez', 'Gibraltar 32', 28000) INSERT INTO Clientes (CodCliente, Nombre) VALUES (2, 'Juan Martnez') DELETE FROM Clientes WHERE Saldo > 25000 DROP TABLE Clientes
11
943
El mtodo devuelve el nmero de registros actualizados. Si se produce un fallo se lanza la Excepcin. Devuelve -1 si afecta a toda la tabla. Devuelve 0 cuando ningn registro se ha visto afectado por la modificacin. Sentencias de consulta I Las sentencias de consulta SQL son:
i
12
944
boolean <ResultSet>.next()
Se mueve al siguiente registro del Resultset Devuelve true cuando encuentra el siguiente registro. Cuando devuelve false se ha llegado al final de la consulta.
boolean <ResultSet>.getBoolean(int columnIndex) boolean <ResultSet>.getBoolean(String columnName) int <ResultSet>.getInt (int columnindex) int <ResultSet>.getInt (String columnName) String <ResultSet>.getString (int columnindex) String <ResultSet>.getString (String columnName)
Sentencias de consulta II Estos mtodos sirven para recuperar la informacin contenida dentro de las columnas, bien por el ndice (columnIndex) o bien por el nombre de la columna (columnName). El ndice de la primera columna tiene el valor 1.
i
13
945
<Resultset>.findColumn(String columnName)
muestra el texto inferior (sin negrita) en casilla lateral, como modelo Devuelve la posicin de la columna cuyo nombre se indica en el parmetro columnName.
ResultSetMetaData <ResultSet>.getMetaData()
muestra el texto inferior (sin negrita) en casilla lateral, como modelo Devuelve los metadatos del ResultSet.
int <ResultSetMetaData>.getColumnCount()
muestra el texto inferior (sin negrita) en casilla lateral, como modelo Devuelve el nmero de columnas.
i
14
946
Resultset <Statement>.getResultSet()
muestra el texto inferior (sin negrita) en casilla lateral, como modelo Devuelve los datos obtenidos tras ejecutar la sentencia con el mtodo execute.
<Statement>.getUpdateCount()
muestra el texto inferior (sin negrita) en casilla lateral, como modelo Devuelve el nmero de registros actualizados tras ejecutar la sentencia con el mtodo execute.
i
15
947
CLIENTE
En caso de ejecutar varias veces una misma sentencia SQL si el SERVIDOR las tiene que compilar baja el rendimiento en la aplicacin. Para que esto no ocurra se utilizan las sentencias precompiladas de SQL.
CLIENTE
(SELECT * FROM Clientes) SERVIDOR BD ------------------------------------> Compilar Codigo = 27 <----------------------------------- Ejecutar Codigo = 27 ------------------------------------> <----------------------------------- Ejecutar Codigo = 27 ------------------------------------> <----------------------------------- Ejecutar
i
16
948
De esta forma se podr repetir la instruccin INSERT las veces necesarias. La primera vez enviando la propia sentencia y las restantes veces se enviar el cdigo devuelto por la base de datos. Las sentencias precompiladas se representan mediante el interface PreparedStament el cual deriva de Statement. Para las sentencias precompiladas se le dir a la conexin que se quiere una Prepared Statement.
Statement <Connection>.createStatement() throws SQLException PreparedStatement <Connection>.prepareStatement(String sql) throws SQLException void <PreparedStatement>.setString (int paramIndex, String value) throws SQLException void <PreparedStatement>.setFloat (int paramIndex, float value) throws SQLException
i
17
949
ResultSet <PreparedStatement>.executeQuery() throws SQLException int <PreparedStatement>.excuteUpdate() throws SQLException boolean <PreparedStatement>.execute() throws SQLException
i
18
950
Atomicidad
Consiste en que la transaccin se realiza completamente o no se realiza en absoluto.
Serializacin
Dos transacciones concurrentes se ejecutan de forma de que el resultado es el mismo que si se hubiera realizado primero una y luego la otra.
Persistencia
El sistema debe ser lo bastante seguro como para que no se produzcan prdidas de informacin.
i
19
951
Cuando se quieran ejecutar todas las sentencias SQL lanzadas contra la base de datos habr que ejecutar el siguiente mtodo:
Si no se confirma la transaccin se deshace la transaccin. Si se quiere deshacer la transaccin se tiene el siguiente mtodo.
Las excepciones que lanza rollback no tienen que ver con las transacciones que se han realizado. La excepcin nos informan sobre otro tipo de problemas que se puedan dar durante la operacin de rollback (cada de la red, etc)
i
20
952
conexion.setAutoCommit (false); try { Statement stmt = conexion.createStatement(); stmt.executeUpdate ("INSERT INTO Clientes VALUES (1,'Luis',"Principe de Vergara 44',4000000)"); stmt.executeUpdate ("INSERT INTO Clientes VALUES (1,'Jose',"O'Donell 10',7000000)"); conexion.commit(); } catch (Exception ex) { System.out.println("Transaccin deshecha "+ex); } conexion.setAutoCommit (true);
i
21
953
int <Connection>.getTransactionIsolation() Devuelve el cdigo de nivel de aislamiento void <Connection>.setTransactionIsolation(int level) throws SQLException Fija el nivel de aislamiento.
Para fijar el nivel de aislamiento de la base de datos se siguen tres criterios: - Si se evitan los dirty read. Esto quiere decir, que hasta que otra transaccin no se confirma no se pueden leer los cambios de dicha transaccin. - Si se establece el valor del registro durante toda la transaccin (repeatable read). Es decir, aunque otra transaccin confirme, en la consulta se tiene el valor original por si el algoritmo lo volviese a leer hasta que esta ltima transaccin se cierre. - Si la transaccin es serializable. No se suele aconsejar este tipo de transacciones a no ser que sean estrictamente necesarias.
i
22
954
1. TRANSACTION_NONE
no se soporta nada.
2. TRANSACTION_READ_UNCOMMITED
es un nivel poco aislado, se pueden producir diry read y no se garantiza repeatable read ni serializacin.
3. TRANSACTION_READ_COMMITED
evita los dirty read pero no garantiza los repeatable read ni la serializacin.
4. TRANSACTION_REPEATABLE_READ
esta opcin evita los dirty read y garantiza los repeatable read.
5. TRANSACTION_SERIALIZABLE
evita dirty read, garantiza repeteable read y serializacin. IDS SERVER (Driver de Tipo 3)
Existe la restriccin de que un Applet solamente puede conectarse con la mquina de la que procede. Es decir, el Applet slo puede comunicarse con el Servidor de Web, es decir el Servidor de la base de datos debe estar en la misma mquina que el Servidor de Web.
i
23
955
www.idsoftware.com (IDSS321.EXE)
El driver de tipo 3 (todo Java), como el servidor de acceso a datos, debe estar hecho por la misma empresa. Clases del driver: applet o un programa Las clases del driver dependen de que lo que se realice sea un Applet o un programa: Si es un programa, se deber introducir en el Classpath: \classes\jdk12drv.zip
Si es un Applet, se deber descomprimir el fichero \classes\jdk12drv.zip en el mismo directorio donde est el Applet. Si las clases no estn en la mquina virtual buscar en el servidor, por eso debe estar descomprimido el fichero. 1. Se carga el driver de la base de datos:
Class.forName("ids.sql.IDSDriver");
i
24
956
- localhost, se corresponde a la mquina donde se va a conectar. Se puede poner tambin la direccin IP. - 12 corresponde al puerto que tambin es configurable. INTERBASE (Driver de Tipo 4) Es de arquitectura Cliente-Servidor. Existe para Windows y Unix. Partes de InterBase: - InterBase, es el motor de la base de datos. - InterClient, es un driver de tipo 4 que viene dentro del fichero interbase.jar. - InterServer, es un servidor de acceso a la base de datos.
Programa Java
InterBase
i
25
957
i
26
958
Satement <---- PreparedStatement <---- CallableStatement CallableStatemnt <Connection>.prepareCall (String sql) throws SQLException
Formato de SQL: "{call Anade Cliente (?,?,?,?)}" "{? call SumaSaldos()}" -->OUT Tras haber preparado el procedimiento almacenado se cargarn los parmetros de entrada, si existen, con los mtodos set (setInt, setString, ...) : --> IN
c.SetInt (1,8); c.SetString (2,"Pedro Perez"); c.SetString (3,"C/ Alcantara S/N"); c SetInt (4,80000);
i
27
959
Para recoger lo que ha devuelto el procedimiento almacenado tras su ejecucin, se tienen los siguientes mtodos: boolean <CallableStatement>.getBoolean(int parIndex) String <CallableStatement>.getString(int parIndex) Int <CallableStatement>.getInt(int parIndex) . . .
i
28
960
i
29
961
i
30
962
963
964
NOTA: El W3C es el organismo universal que regula el funcionamiento desde el punto de vista tcnico de la World Wide Web. La principal funcin del W3C es la de crear estndares aceptados universalmente, para que los estndares que se creen no favorezcan a ningn fabricante, u organismo en particular. Otra de sus obligaciones es la de mantener al da las tecnologas de la WWW para que stas respondan a las necesidades crecientes de los usuarios de la WWW. Entre otros, el W3C controla los estndares de html y xml. El W3C fue constituido en 1994 con el objetivo del desarrollo de protocolos comunes para la evolucin de Internet. El W3C es un consorcio de industrias internacionales y organismos, como el mit (EEUU), inria (Francia) y keio university (Japn). El W3C cuenta con el apoyo oficial de darpa (EEUU) y de la Comisin Europea.
Llegados a este punto, el W3C decide poner manos a la obra y comienza a plantearse un nuevo lenguaje, que ante todo, y como hemos apuntado anteriormente, fuera muy escalable. Para ello, en un primer momento el W3C pens directamente en el lenguaje SGML, que posea todas las caractersticas tcnicas para garantizar los objetivos que el W3C persegua con el nuevo lenguaje, pero SGML era un lenguaje bastante complicado, y precisamente lo que haba hecho popular al lenguaje HTML era la sencillez de su uso. Para ello, se marcaron un objetivo de crear un nuevo lenguaje de marcado, que pudiese ser tan escalable como SGML, pero que conservase la sencillez como base del mismo para que ste se hiciese popular. XML nace entonces (1996) como una parte de SGML, y es adoptado como estndar en Febrero de 1998 por el W3C. XML son las siglas de eXtended Markup Language o lenguaje de marcado extendido.
XML Aunque en su nombre se hace referencia a l, seguramente estamos confundidos acerca de si XML es un lenguaje de Marcado. A simple vista, podramos decir que s, ya que XML est basado en un lenguaje de Marcado SGML y adems tiene un primo que es un conocido lenguaje de Marcado HTML. XML debera ser tambin un lenguaje de Marcado, sin embargo, no lo es, XML es ms un lenguaje de lenguajes de marcado, o ms concretamente un meta-lenguaje de marcado. Para explicar esto en palabras llanas, podramos decir que a partir de XML podemos crear nuestro propio lenguaje de Marcado. Adems, aunque est basado en SGML est adaptado para su uso en Internet, y se ha simplificado de cara a su sencillez de uso y aprendizaje.
965
NOTA: Microsoft ha sido y es desde siempre un acrrimo defensor de XML, tanto es as que podemos encontrar mucha informacin acerca de XML en su Web site: www.microsoft.com. Adems, el primer navegador capaz de soportar XML fue Exlorer 4 de Microsoft, que de esta manera se adelantaba a su ms directo competidor, Netscape.
XML es suficientemente potente para ser usado no slo para describir documentos, sino tambin para describir Meta datos (Conjunto de informacin que describe a otra). Informacin XML naci para la red, pero la red no constituye la nica funcionalidad de XML. Borland utiliza en sus herramientas de programacin DELPHI y C++ BUILDER, as como en KYLIX, XML como lenguaje de definicin de tablas de bases de datos, adems de la informacin contenida en ellas. Los documentos XML son procesados mediante aplicaciones que analizan XML (analizadores o Parsers). Estos analizadores generan una salida basada en los contenidos del documento y en la marca que el documento XML utiliza para describir los contenidos. XML a diferencia de su primo el HTML, separa drsticamente el contenido de la visualizacin, aunque esto tambin es posible ahora con HTML, utilizando hojas de estilo (CSS Cascade Style Sheets, hojas de estilo en cascada).
966
967
En el ejemplo anterior, el nombre del elemento se corresponde con VEHCULO. Sin embargo, en HTML es opcional la etiqueta de cierre, y no pasa nada si se omite, pero en XML es completamente imprescindible la etiqueta de fin. HTML <HEAD> XML <VEHICULO> </VEHICULO>
El contenido del elemento Es la parte del documento XML que contiene, valga la redundancia, el valor que representa el elemento. <VEHICULO> M-9999-ZZ </VEHICULO>
968
El nombre del atributo sera MARCA MODELO Y el valor de los mismos OPEL CORSA Reglas de composicin de documentos XML Las reglas de composicin de documentos XML son muy sencillas, pero inflexibles, es decir, no puede saltarse ninguna de estas reglas. Seguidamente, veremos cada una de ellas: Estructura jerrquica de los elementos Los elementos deben seguir una estructura jerrquica o en rbol, es decir, cada elemento debe estar contenido dentro de otro elemento.
969
Los elementos, obligatoriamente, deben estar cerrados INCORRECTO <VEHICULO> <PROPIETARIO> CORRECTO <VEHICULO> <PROPIETARIO> </PROPIETARIO> </VEHICULO> </VEHICULO>
970
Nombre de los elementos El nombre de los elementos debe empezar siempre con una letra, y puede ser seguido por otros caracteres alfanumricos. El nombre de un elemento nunca puede comenzar por XML, xml, xML o cualquier variacin de ste. XML es case sensitive Debemos recordar siempre que XML es Case Sensitive (distingue entre maysculas y minsculas), por lo que para el analizador el elemento <Elemento> no ser igual que <elemento>. Veamos el siguiente ejemplo: INCORRECTO <Elemento> <elemento2> </elemento2> </elemento> CORRECTO <elemento> <elemento2> </elemento2> </elemento>
Uso de espacios y retorno de carro El espacio y el retorno de carro slo son tenidos en cuenta si aparecen en el valor de un atributo o, como en HTML si se indica su significado.
971
En la segunda lnea del prlogo, generalmente encontramos la referencia a los documentos de definicin (DTD), que ms adelante veremos. <!DOCTYPE documento SYSTEM documento.dtd> Entidades predefinidas Son aquellas que no son interpretadas como marcado por el analizador de XML. Es decir, si queremos utilizar alguno de estos caracteres no podemos hacerlo directamente, y, si lo hicisemos, el analizador lo interpretara como marca y no como valor. Son cinco: CARCTER & > < ENTIDAD &Amp; > < ' "
10
972
11
973
12
974
13
975
14
976
15
977
16
978
17
979
18
980
19
981
20
982
21
983
22
984
23
985
Los atributos ENUMERADOS son aquellos en los que definimos los posibles valores que el atributo puede tener, tal como vimos en un ejemplo anterior. <!ATTLIST monitor marca (SONY | FUJITSU) SONY> <!ATTLIST monitor marca (SONY | FUJITSU | PHILIPS)>
24
986
Declaracin de entidades Por medio de la declaracin de entidades obtenemos la posibilidad de que el analizador XML no analice determinados contenidos, siguiendo las reglas sintcticas del lenguaje XML. La declaracin de entidades se utiliza a menudo, por ejemplo, para declarar ficheros o direcciones de pginas web, no puede ser mas que una abreviatura utilizada para hacer referencia a determinado valor, al hacer referencia dentro del documento XML a la entidad, entonces el analizador la sustituye por el valor declarado en la DTD. En el caso de que un documento haga referencia a un fichero de imgenes externo, la localizacin de la imagen puede ser declarada como entidad y hacer referencia slo al nombre dado a la entidad, para que el analizador de XML sustituya el nombre de la entidad por el valor de sta, en este caso la localizacin exacta del fichero de imgenes.
25
987
26
988
Las entidades externas generales analizadas funcionan de igual manera que las anteriores, con la excepcin de que obtienen el valor de la entidad fuera del documento. Si hacemos referencia desde nuestro documento XML a una entidad externa analizada, el analizador extraer el contenido del fichero o link al que hacemos referencia por medio de la entidad, sustituir al nombre de la entidad por el contenido del fichero externo y lo analizar. <?xml version=1.0?> <!DOCTYPE [ <!ELEMENT monitores (monitor)*> <!ELEMENT monitor (#PCDATA)> <!ATTLIST monitor marca CDATA #REQUIRED>
27
989
28
990
29
991
30
992
31
993
32
994
33
995
Estaramos haciendo referencia al segundo elemento impresora contenido en el tercer elemento impresoras, y el contenido resultante sera: 234114423. Debemos tener en cuenta que XPATH no es un lenguaje para efectuar consultas (querys), XPATH es un lenguaje que permite al procesador de XSLT obtener los contenidos de los diferentes elementos de un documento XML. Por ltimo, no olvidemos nunca que nos movemos por una estructura jerrquica de elementos. A continuacin, definiremos los distintos patrones que pueden ser utilizados en XPATH:
/ // . * @ @*
Especifica el hijo inmediato, tambin puede ser utilizado para referirse al elemento raz. Selecciona a cualquier nivel dentro de la estructura de rbol. Selecciona el nodo actual. Selecciona todos los elementos del nodo actual. Selecciona un atributo especfico. Selecciona todos los atributos del nodo actual.
XSLT (XSL Transformations) El lenguaje de estilo extendido conocido como XSLT (Extensible Stylesheet Language Transformations), es un lenguaje que nos permite definir un formato de presentacin para un documento XML. XSLT est diseado para ser usado de manera independiente de XSL. De cualquier manera, XSLT no est diseado para ser un lenguaje de transformacin para cualquier propsito. Internet Explorer utiliza como lenguaje de transformacin de XML, XSLT. Un documento XSLT que defina una transformacin de un documento XML, tambin est expresado en s mismo como un documento XML bien formado. Un documento XSLT define las reglas para transformar un rbol origen (documento XML) en un rbol de resultado. La transformacin se realiza asociando las distintas plantillas con sus correspondientes valores. La estructura resultante (rbol de resultado) puede ser
34
996
El elemento stylesheet es el elemento raz de una hoja de estilo XSLT, es decir, todas las hojas de estilo XSLT deben comenzar con <xsl:stylesheet> y terminar con </xsl:stylesheet>. Dentro del elemento stylesheet tambin definimos mediante atributos la versin de XSL con la que estamos trabajando, as como la URI de lo que llamamos namespace (definicin de las reglas semnticas y sintcticas redactadas por el consorcio a las que hace referencia el analizador de XSL). De todas maneras, es opcional hacer referencia al namespace. Al igual que cualquier documento XML todos los elementos que formen parte de la hoja de estilo deben partir de su elemento raz, en este caso <xsl:stylesheet>. Tambin podremos encontrar el ejemplo anterior de esta otra forma: <xsl:transform version=1.0 xmlns:xsl=http://www.w3.org/1999/XSL/Transform> </xsl:transform>
35
997
36
998
37
999
<xsl:template match=/> <html> <head> <title> Informe Resumen de Gastos </title> </head> <body> <p>Total Amount: <xsl:value-of select=informe-gastos/total/></p> </body> </html> </xsl:template> </xsl:stylesheet>
La principal diferencia entre los dos ejemplos se centra, como puede verse, en la existencia del segundo del elemento <xsl:template>, que tiene como funcin situarse en un determinado nodo de la estructura del documento XML, mediante el atributo match, en el ejemplo <xsl:template match=/>, el analizador se situar en el nodo raz del documento XML, para a partir de ah, mediante el elemento <xsl:value-of select= ..../> extraer los valores de los elementos.
38
1000
El documento XSL: <?xml version=1.0?> <xsl:stylesheet xmlns:xsl=http://www.w3.org/TR/WD-xsl> <xsl:template match=/> <HTML> <HEAD> <TITLE> Sitios de Cine </TITLE> </HEAD> <BODY> <xsl:for-each select=sitiosweb/sitioweb> <b> <xsl:value-of /> </b><br/> </xsl:for-each> </BODY> </HTML> </xsl:template> </xsl:stylesheet>
39
1001
40
1002
<BODY> <xsl:for-each select=/sitiosweb/sitioweb> <A> <xsl:attribute name=href> <xsl:value-of select=./@href /> </xsl:attribute> <xsl:value-of select=./@titulo /> </A><br/> </xsl:for-each> </BODY> </HTML> </xsl:template> </xsl:stylesheet
En este otro ejemplo hemos utilizado los atributos href y titulo para hacer referencia a los sitios web que se almacenan en nuestro documento XML. Tal como vemos en el ejemplo, para hacer referencia al valor de un atributo utilizamos la @. <xsl:value-of select=./@href /> Recordemos siempre el uso del lenguaje XPATH en XSL ./, que en este caso indica el nodo actual.
41
1003
42
1004
<body> <table> <tbody> <xsl:for-each select=clientes/cliente> <tr> <th> <xsl:apply-templates select=nombre/> </th> <xsl:for-each select=pedido> <td> <xsl:apply-templates/> </td> </xsl:for-each> </tr> </xsl:for-each> </tbody> </table> </body> </html> </xsl:template> <xsl:if test=.....> </xsl:if>
43
1005
Crea un condicional del tipo Case, donde mediante la sentencia <xsl:when test=....> </xsl:when> establecemos las distintas opciones de la sentencia condicional.
<xsl:choose> <xsl:when test=...> </xsl:when> <xsl:when test=...> </xsl:when> <xsl:when test=...> </xsl:when> </xsl:choose>
44
1006
45
1007
<xsl:template match=@*|elemento1()> <xsl:copy> <xsl:apply-templates select=@*|elemento1()/> </xsl:copy> </xsl:template> <xsl:number/> El elemento xsl:number se utiliza para insertar un valor numrico formateado dentro del rbol de resultados. El nmero que insertemos debe ser introducido como una expresin de cadena de caracteres, es el analizador el encargado de evaluar la expresin y de efectuar su conversin para, finalmente, ser incluido dentro del rbol de resultados. <xsl:template match=elemento1> <xsl:for-each select=elemento1> <xsl:sort select=./> <p> <xsl:number value=position() format=1. /> <xsl:value-of select=./> </p> </xsl:for-each> </xsl:template>
46
1008
El siguiente ejemplo numerar los elementos titulo. Este ejemplo muestra cmo numerar los elementos de un documento, como si se tratase de una secuencia de captulos, seguida de una secuencia de apndices, donde tanto los captulos como los apndices contienen secciones que, a su vez, contienen subsecciones. Los captulos estarn numerados de la forma 1, 2, 3, ..., los apndices A, B, C, ... Las secciones en los captulos sern numeradas de esta manera 1.1, 1.2, 1.3, ..., y las secciones en los apndices sern numeradas A.1, a.2, a.3, ... <xsl:template match=titulo> <fo:block> <xsl:number level=multiple count=capitulo|seccion|subseccion format=1.1 />
47
1009
El elemento xsl:sort procesa los elementos pertenecientes al nodo actual de manera ordenada, esta ordenacin puede ser ascendente o descendente. Supongamos, por ejemplo, el siguiente documento XML, conteniendo datos acerca de los empleados de una compaa:
<empleados>
<empleado>
48
1010
<xsl:template match=empleados> <ul> <xsl:apply-templates select=empleado> <xsl:sort select=nombre/apellido/> <xsl:sort select=nombre/nombredepila/> </xsl:apply-templates> </ul> </xsl:template> <xsl:template match=empleado> <li> <xsl:value-of select=nombre/nombredepila/> <xsl:text> </xsl:text> <xsl:value-of select=nombre/apellido/> </li> </xsl:template> Funciones adicionales XSLT dispone de una serie de funciones adicionales que, a continuacin, sealamos:
- document(object, node-set?) Permite acceder a otros documentos XML, que no sean el documento XML origen de la plantilla. Ejemplo: generate-id (document(foo.xml))=generateid(document(foo.xml))
49
1011
generate-id(node-set?) Devuelve una cadena de texto, que identifica el nodo actual de manera nica. - system-property(string) Devuelve un valor coincidente con el valor de la propiedad del sistema a la que se hace referencia. Si la propiedad a la que se hace referencia no existe, entonces devuelve una cadena vaca.
50
1012
<xsl:template name=mensajepuntual> <xsl:param name=nombremensaje/> <xsl:message> <xsl:value-of select= $mensajes/mensaje[@name=$nombremensaje]/> </xsl:message> </xsl:template>
51
1013
Habr que implementar las siguientes opciones: Opciones del men: Base Datos: Cargar Driver: Carga el DRV de tipo 1 (odbc) Conectar: Conecta a la Base de Datos ARTICULOS.MDB Desconectar: Cierra la conexin Salir: Sale de la aplicacin
La estructura de la Base de Datos contendr la tabla Articulos con los campos: Codigo: alfanumrico Nombre: alfanumrico Precio: float
1014
El botn Guardar, almacena un registro en la tabla. Query: realiza una consulta de la tabla y la vuelca en un TextArea
1015
Sentencias Precompiladas: Precompiladas: abre una ventana Swing con el siguiente formato:
Se introducir un cdigo de Articulo en la caja de texto, y al hacer intro mostrar en el TextArea el registro con ese cdigo, en caso de que exista.
1016
<coches> <coche marca=Mercedes modelo=C320 color=verde> M-9999-XU </coche> <coche marca=Opel modelo=Vectra color=Blanco> M-8888-VO </coche> </coches>
1017
<coches> <usados> <coche marca=Mercedes modelo=C320 color=verde> M-9999-XU </coche> <coche marca=Opel modelo=Vectra color=Blanco> M-8888-VO </coche> </usados> <nuevos> <coche marca=Renault modelo=Clio color=azul> Sin Matricular </coche> <coche marca=Renault modelo=Megane> Sin Matricular </coche> </nuevos> </coches>
1018
Documento 2: <coches> <usados> <coche marca=Mercedes modelo=C320 color=verde> M-9999-XU </coche> <coche marca=Opel modelo=Vectra color=Blanco> M-8888-VO </coche> </usados> <nuevos> <coche marca=Renault modelo=Clio color=azul/> <coche marca=Renault modelo=Megane color=gris/> </nuevos> </coches>
1019
1020
Entidad discos/disco/titulo Valor: One Entidad discos/disco/autor Valor: The beatles Entidad discos/disco/titulo Valor: 1000 & 2000 > 500 Entidad discos/disco/autor Valor: Desconocido
1021
<coches> <usados> <coche marca=Mercedes modelo=C320 color=verde> M-9999-XU </coche> <coche marca=Opel modelo=Vectra color=Blanco> M-8888-VO </coche> </usados> <nuevos> <coche marca=Renault modelo=Clio color=azul> </coche> <coche marca=Renault modelo=Megane color=gris> </coche> </nuevos> </coches>
1022
<?xml version=1.0?> <!DOCTYPE prensa [ <!ELEMENT prensa (diarios | revistas)*> <!ELEMENT diarios (diario)*> <!ELEMENT diario (#PCDATA)> <!ELEMENT revistas (revista)*> <!ELEMENT revista (#PCDATA)> <!ATTLIST diario nombre CDATA #REQUIRED> <!ATTLIST diario editorial CDATA #IMPLIED> <!ATTLIST diario distribuidora NMTOKEN #REQUIRED> <!ATTLIST revista nombre CDATA #REQUIRED> <!ATTLIST revista editorial CDATA #IMPLIED> <!ATTLIST revista distribuidora CDATA #REQUIRED> <!ATTLIST revista color NMTOKEN #REQUIRED> ]>
1023
<beatles> <canciones> <cancion id= a1 titulo=Two of us agno=1970 autor=Lennon/> <cancion id= a2 titulo=Dig a pony agno=1970 autor=Mcartney/> <cancion id= a3 titulo=Across the Universe agno=1970 autor=Lennon/> <cancion id= a4 titulo=I Me Mine agno=1970 autor=Harrison/> <cancion id= a5 titulo=Dig It agno=1970 autor=Lennon/> <cancion id= a6 titulo=Let it Be agno=1970 autor=Lennon/> <cancion id= a7 titulo=Maggie Mae agno=1970 autor=Lennon/> <cancion id= a8 titulo=Ive got a feeling agno=1970 autor=Mcartney/> <cancion id= a9 titulo=The long and widing road agno=1970 autor=Lennon/> </canciones> <discos>LET IT BE</discos> </beatles>
1024
1025
NDICE
ACCESO A DATOS EN JAVA
1. Manejo de Ficheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 2. Filtro de Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10 3. Serializacin de Objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16 4. Clases para trabajar con array de caracteres y objetos String . . . . . . . . . . . . . . . . . . . . . . . .22 5. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .26
1026
i
3
1027
static final String <File>.pathSeparator > (;) static final String <File>.separator > (\) File f2 = new File (c:\\windows\\win.exe); // path absoluto File f3 = new File (.\\datos\\bd.dat); // path relativo
Mtodos File Con los mtodos de la clase File se obtiene informacin relativa al archivo o ruta con que se ha inicializado el objeto. As antes de crear un flujo para leer de un archivo es conveniente determinar si el archivo existe, en caso contrario no se puede crear el flujo. Los mtodos ms importantes que describen esta clase son los siguientes:
String <File>.getPath()
Devuelve el texto del path que anteriormente se le ha pasado al constructor de File.
String <File>.getAbsolutePath()
Devuelve el path completo File f1 = new File (.\\windows\\win.exe); System.out.println(f1.getAbsolutePath()); // c:\java\..\windows\win.exe
i
4
1028
boolean <File>.isDirectory()
Devuelve true si es directorio.
boolean <File>.exists()
Devuelve true si existe el fichero o directorio.
boolean <File>.canRead()
Si permite la lectura del fichero.
boolean <File>.canWrite()
Si permite la escritura del fichero.
long <File>.length()
Tamao del fichero en bytes.
boolean <File>.mkDir()
Intenta crear un directorio con el nombre que se le pasa en el constructor. Si lo crea correctamente devuelve true.
boolean <File>.delete()
Elimina el fichero o directorio.
i
5
1029
1: FileInputStream (String Filename) throws FileNotFoundException 2: FileInputStream (File Filename) throws FileNotFoundException Los mtodos ms importantes que describen esta clase son los siguientes:
i
6
1030
i
7
1031
import java.io.*; public class AccesoFichero { public static void main (String [] args) throws IOException { // se crea el fichero de salida. FileOutputStream fos = new FileOutputStream("c:\\vem\\text.txt"); // Cadena a escribir en el fichero. String str = "Texto de prueba"; //Proceso de escritura. for (int i = 0; i < str.length(); i ++) fos.write(str.charAt((i))); fos.close(); // Se cierra el fichero de salida. // se crea el fichero de entrada. FileInputStream fis = new FileInputStream("c:\\vem\\text.txt"); int tamano = fis.available();/Longitud del fichero. System.out.println("Hay un tamao de "+tamano+"bytes disponibles"); byte [] B = new byte [tamano]; fis.read(B); // Lectura del fichero. System.out.println ("Se ley el texto: "+new String(B)); fis.close(); // Se cierra el fichero de entrada. } // fin de main. } // fin de clase.
i
8
1032
2: SequenceInputStream (Enumeration):
Concatena a partir de una lista de objetos InputStream. Ejemplo:
Interface Enumeration { public boolean hasMoreElements(); //Controla si hay ms elementos public Object nextElement(); }
i
9
1033
Estas clases no trabajan con dispositivos finales sino que trabajan sobre Streams ya creados. En el constructor de cada una de las clases reciben un Stream de la clase base (InputStream / OutputStream).
i
10
1034
Cuando el buffer est lleno se envan automticamente los datos cargados, al fichero.
i
11
1035
Utilizar un buffer implica una optimizacin en el tiempo de acceso al fichero. FileInputStream f1 = new FileInputStream (datos.txt); BufferedInputStream bf1 = new BufferedInputStream (f1); // Primeramente se crea el Stream y luego el buffer asociado. En teora est bien aplicarlo, pero en la prctica los Sistema Operativos ya tienen buffers implementados, entonces el rendimiento casi es el mismo. De todas formas habr casos en los que utilizar buffers sea interesante.
i
12
1036
1: Interface DataInput { boolean readBoolean() throws IOException; int readInt() throws IOException; ... } 2: Interface DataOutput { boolean writeBoolean() throws IOException; int writeInt() throws IOException; ... } Ambas clases implementan los interfaces DataInput y DataOutput respectivamente. Ambos interfaces tienen implementadas todos los mtodos para los tipos de datos fundamentales.
i
13
1037
Constructores de la Pipes de Streams Los Pipes de Stream tienen los siguientes constructores:
PipedInputStream pis = new PipedInputStream(); PipedOutputStream pos = new PipedOutputStream(pis); // Quedan enlazados y se puede enviar y recibir datos.
Existe otra forma de realizar el enlace de dos Stream. Primeramente se crearn con el constructor por defecto para posteriormente conectarlos con los siguientes mtodos:
void <PipedOutputStream> connect (PipedInputStream sink) void <PipedInputStream> connect (PipedOutputStream src
14
1038
public class Conexion { static PipedOutputStream sumidero = new PipedOutputStream(); static PipedInputStream fuente = new PipedInputStream(); static { // Inicio de Bloque Esttico. try { fuente.connect(sumidero); } catch (IOException ex) { System.out.println (No se pueden conectar los pipes); } } // fin de Bloque Esttico. } // fin de clase.
Esta clase conecta dos pipes con el segundo mtodo explicado. Bloque esttico: Conjunto de instrucciones que se quiere que la mquina virtual ejecute en el momento que se carga la clase, es decir, la primera vez que se referencia o se nombra la clase en el programa. La clase Conexion no se instanciar pero en el momento que aparezca en el programa Conexion.sumidero o Conexion.fuente se ejecutar el bloque esttico.
i
15
1039
Persistencia temporal:
Consiste en hacer que la vida de un objeto supere el tiempo de ejecucin de un programa. Para realizarlo antes de cerrar el programa se guardar el objeto en un fichero y la prxima vez que se ejecute el programa se podr recuperar el objeto guardado.
Persistencia espacial:
Consiste en que un objeto pase a vivir a una zona de memoria distinta a la zona de memoria donde fue creado. Un objeto que se crea en una mquina se ir a otra mquina (Sistemas Distribuidos). interface ObjectInput extends DataInput { Object ReadObject(); } interface ObjectOutput extends DataOutput { void writeObject(Object ob); } En ambos casos se necesita serializar el objeto.
i
16
1040
Interface Serializable {} Acta nicamente como un flag para comprobar si un objeto se quiere o no serializar. Class Punto implements Serializable { // Objeto Serializable. ... }
NotSerializableException
ObjectOutputStream oos = new ObjectOutputStream (new FileOutputStream (datos.dat)); Punto p = new Punto (2,3); oos.writeObject(p); // El objeto Punto se serializa dentro del fichero datos.dat. ObjectInputStream ois = new ObjectInputStream (new FileInputStream (datos.dat)); Punto p = (Punto) in.readObject(); // El objeto Punto serializado se saca del fichero datos.dat.
i
17
1041
NotSerializableException
Si una clase contenedora est Serializable y tiene objetos contenidos, los objetos contenidos deben implementar tambin Serializable (Composicin). Si no se hace as se lanza la excepcin: Razones para serializar un atributo Cuando se serializa un objeto, sus atributos se serializan pero no sus mtodos. Los atributos estticos (static) no se serializan ya que pertenecen a la clase y no al objeto. Los atributos con el modificador transient tampoco se serializan. Las razones para serializar un atributo son dos bsicamente: 1. Por seguridad. 2. Para mantener la consistencia, por ejemplo, FileInputStream no es igual en dos mquinas ya que el sistema de ficheros en cada una de ellas es diferente.
- Mtodos con los que se pueden serializar los objetos con encriptacin.
private void writeObject(ObjectOutputStream oos)throws IOException private void readObject(ObjectInputStream ois) throws IOException class numero implements Serializable { int numero; private void writeObject (ObjectOutputStream oos) throws IOException { oos.writeInt(numero); } private void readObject(ObjectInputStream ois) throws IOException { numero = ois.readInt();
18
1042
void <ObjectOutputStream>.defaultWriteObject() throws IOException void <ObjectInputStream>.defaultReadObject() throws IOException class Cuenta implements Serializable { String nombre, direccion, telefono; int codpostal; transient int pin; private void writeObject(ObjectOutputStream oos) throws IOException { oos.defaultWriteObject(); int numero = pin ^ pin; //Operacin XOR. oos.writeInt(numero); } private void readObject(ObjectInputStream ois) throws IOException { ois.defaultReadObject(); pin ^= ois.readInt(pin); } } // fin de clase
i
19
1043
InvalidCastException
Ejemplo class Prueba implements Serializable { int numero = 0; ... } . . . se modifica la clase . . . class Prueba implements Serializable { int numero = 0; void NoHaceNada () {}; }
i
20
1044
i
21
1045
char[] letras = new char[10]; CharArrayReader ch = new CharArrayReader(letras); // Busca el carcter c en un array. int c = ch.read(); while (c = -1 && c = c) c=ch.read(); //Lee hasta al final del array o encuentre c.
i
22
1046
String letras = Federico; StringReader sr = new StringReader (letras); int pos = 0; int c = sr.read(); while (c = -1 && c = c) { pos++; c = sr.read(); }
StringWriter introduce los datos en un objeto de tipo StringBuffer mediante las operaciones write y no sobre el objeto String que como se sabe es constante. StringWriter tiene los siguientes constructores:
StringWriter()
El objeto StringBuffer se crea con un tamao de 32 bytes y se redimensiona si se necesita ms espacio.
StringWriter(int size)
Se le indica el tamao. Con esto se hace que la operacin sea ms rpida.
StringBuffer <StringWriter>.getBuffer()
Se saca lo que se ha escrito.
String <StringWriter>.toString()
Lo que est contenido se guarda en un String.
i
23
1047
InputStreamReader
InputStreamReader (InputStream is) De ASCII a UNICODE
El problema que surge es cmo traducir de ASCII a UNICODE los caracteres nacionales (0..127 Mundiales / 128..255 Nacionales). Este problema se resuelve con el siguiente constructor. InputStreamReader (InputStream is, String encode) El segundo parmetro representa el cdigo ISO que se quiere utilizar. En el caso de Espaa es 8859-1. En el primer constructor como se recibe el encode se utiliza la propiedad fileencoding. System.out.println (System.getProperty(fileencoding);
i
24
1048
FileInputStream f_binario = new FileInputStream (prueba.dat); InputStreamReader f_tex = new InputStreamReader (f_binario,8859-1);
Las clases FileReader y FileWriter Las clases FileReader y FileWriter son derivadas de las anteriores que slo valen para ficheros.
- FileReader (String filename) - FileReader (File f) - FileWriter (String filename) - FileWriter (File f) -FileWriter (String Filename, boolean append).
25
1049
i
26
1050
<?xml version=1.0 encoding=UTF-8?> <!DOCTYPE beatles [ <!ELEMENT beatles (canciones, discos) > <!ELEMENT canciones (cancion)*> <!ELEMENT discos (#PCDATA)> <!ELEMENT cancion (#PCDATA)> <!ATTLIST cancion id ID #IMPLIED titulo CDATA #REQUIRED agno CDATA #IMPLIED autor (Lennon | Mcartney | Harrison | Star) Lennon> ]> <beatles> <canciones> <cancion id= a1 titulo=Two of us agno=1970 autor=Lennon/> <cancion id= a2 titulo=Dig a pony agno=1970 autor=Mcartney/> <cancion id= a3 titulo=Across the Universe agno=1970 autor=Lennon/> <cancion id= a4 titulo=I Me Mine agno=1970 autor=Harrison/> <cancion id= a5 titulo=Dig It agno=1970 autor=Lennon/> <cancion id= a6 titulo=Let it Be agno=1970 autor=Lennon/> <cancion id= a7 titulo=Maggie Mae agno=1970 autor=Lennon/> <cancion id= a8 titulo=Ive got a feeling agno=1970 autor=Mcartney/> <cancion id= a9 titulo=The long and widing road agno=1970 autor=Lennon/> </canciones> <discos>LET IT BE</discos> </beatles>
1051
<?xml version=1.0 encoding=UTF-8?> <!DOCTYPE beatles [ <!ELEMENT beatles (discos)*> <!ELEMENT discos (canciones)*> <!ELEMENT canciones (cancion)*> <!ELEMENT cancion (#PCDATA)> <!ATTLIST discos titulo CDATA #REQUIRED discografica CDATA #IMPLIED agno CDATA #IMPLIED> <!ATTLIST cancion id ID #IMPLIED titulo CDATA #REQUIRED agno CDATA #IMPLIED autor (Lennon | Mcartney | Harrison | Star) Lennon> ]> <beatles> <discos titulo=LET IT BE discografica=EMI agno=1970> <canciones> <cancion id= a1 titulo=Two of us agno=1970 autor=Lennon/> <cancion id= a2 titulo=Dig a pony agno=1970 autor=Mcartney/> <cancion id= a3 titulo=Across the Universe agno=1970 autor=Lennon/> <cancion id= a4 titulo=I Me Mine agno=1970 autor=Harrison/> <cancion id= a5 titulo=Dig It agno=1970 autor=Lennon/>
1052
1053