You are on page 1of 1054

PPro

ogr
en
V
ram
n Ja
Volme
mac
ava
en 1
cin
a
n
1
Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

2

2
Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

3

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.
Objetivos generales del programa:
Dotar de las habilidades interpersonales que son claves para trabajar en equipo en los proyectos, y
conseguir resultados a travs de las personas, para satisfacer las necesidades de sus clientes.

Que los alumnos, sin experiencia en el desarrollo de programas, comprendan como se estructura un
programa de aplicaciones, a nivel general.

Disear y escribir programas en lenguaje Java que se ejecutan en el lado del servidor Web, utilizando el
API J2EE.

Los alumnos que superen los cursos de formacin con evaluacin positiva recibirn soporte para poder
participar en diversos procesos de seleccin de empresas relacionadas en con el mundo de las TIC.
El propsito de esta gua es darte una pauta de apoyo para que pueda planificar tu estudio. Hemos
distribuido cada una de las unidades, por da para que tengas una referencia en la dedicacin que esperamos
que tengas en el transcurso de esta formacin.

3



Desarro

ollador de SSoftware Especialista e en Tecnologgas Java (IFCD04TIC))
4
4
Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

5









INTRODUCCIN

MODALIDAD TOTAL DAS
Presencial 4

DA CONTENIDOS TERICOS
1 Introduccin del curso y sistemas de evaluacin.
2 Explicacin de los contenidos tericos
3 Explicacin de los contenidos tericos
4 Explicacin de los contenidos tericos

5
Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

6

MODALIDAD
TELEFORMACION


TOTAL DAS
38

CONTENIDOS TERICOS
MDULO 1. TCNICAS DE PROGRAMACIN ESTRUCTURADA

1. LA INFORMTICA Y EL MANEJO DE LA INFORMACIN.

1.1. La informacin y el tratamiento mecanizado de la informacin: La informtica.
1.2. El ordenador y sus componentes.
1.3. Procesamiento de la informacin.
1.4. Tipos de datos bsicos.
1.5. Sistemas de Numeracin.
1.6. Binario y Hexadecimal. Cambio de base y operaciones aritmticas bsicas: suma, resta
complementos.
1.7. Codificacin de la Informacin: ASCII, EBCDIC y orden de los datos en funcin del cdigo.
Formatos clsicos internos de almacenamiento en memoria.
1.8. Tipos de archivos de informacin: Ficheros y Bases de datos y operaciones tpicas de
entrada/salida.

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. Mtodos de diseos deductivos e inductivos. Diseo TOP DOWN.
3.2. Instrucciones secuenciales.
3.3. Instrucciones alternativas (bifurcaciones).
3.4. Instrucciones repetitivas (bucles).

6
Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

7

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
Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

8

MDULO 2. INTRODUCCIN A JAVA

1. CARACTERSTICAS DE LA TECNOLOGA JAVA.

1.1. Caractersticas del lenguaje Java.
1.2. La Mquina Virtual Java (JVM).
1.3. Soporte de fabricantes software.

2. EDICIONES JAVA.

2.1. Java Standar Edition.
2.2. Java Enterprise Edition.
2.3. Java Micro Edition.

3. PRIMEROS PASOS EN JAVA.

3.1. El Java Development Kit JDK 6.0.
3.2. Configuracin de variables de entorno.
3.3. Nociones bsicas de sintaxis Java.
3.4. Creacin del primer programa Java.
3.5. Utilizacin de un entorno de desarrollo IDE.




















8
Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

9

MDULO 3. SINTAXIS DEL LENGUAJE

1. VARIABLES, CONSTANTES Y TIPOS DE DATOS.

2. EL TIPO CADENA DE CARACTERES.

3. OPERADORES.

4. INSTRUCCIONES DE CONTROL.

5. ARRAYS.

6. CLASES Y OBJETOS.

6.1. Definicin formal de clase y objeto.
6.2. Creacin de objetos a partir de clases.
6.3. Implementacin de mtodos y atributos de una clase.
6.4. Mtodos estticos.
6.5. Modificadores de acceso.

7. CLASES DE TIPO JAVABEANS.

8. TIPOS GENRICOS.

8.1. La clase Object y las conversiones de tipos.
8.2. Definicin de tipos genricos. Ventajas.
8.3. Comodines y restricciones de tipos.
8.4. Mtodos genricos.














9
Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

10

MDULO 4. UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA

1. IMPORTAR CLASES Y PAQUETES EXTERNOS.

2. EL PAQUETE JAVA.LANG.

2.1. Manipulacin de cadenas con la clase String.
2.2. Operaciones matemticas con la clase Math.
2.3. Clases de envoltorio.
2.4. Autoboxing y autounboxing.

3. MANIPULACIN Y FORMATO DE FECHAS.

3.1. La clase Calendar.
3.2. La clase DateFormat.

4. OPERACIONES DE ENTRADA-SALIDA.

4.1. La clase PrintStream para salida de datos.
4.2. Lectura de caracteres con InputStream.
4.3. Lectura de cadenas con BufferedReader.
4.4. 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
Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

11

MDULO 5. PROGRAMACIN ORIENTADA A OBJETOS CON JAVA

1. CONSTRUCTORES.

2. SOBRECARGA DE MTODOS.

3. HERENCIA.

3.1. Concepto de herencia.
3.2. Caractersticas de la herencia en Java.
3.3. Ejecucin de constructores en la herencia.
3.4. Uso de super y this.
3.5. Sobreescritura de mtodos.
3.6. Uso de modificadores final y protected.
3.7. Herencia y tipos genricos.

4. CLASES ABSTRACTAS.

5. POLIMORFISMO.

6. INTERFACES.






















11
Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

12

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
Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

13

MDULO 7. APLICACIONES BASADAS EN ENTORNO GRFICO

1. LOS PAQUETES JAVA.AWT Y JAVAX.SWING.

2. CREACIN DE VENTANAS Y CUADROS DE DILOGO AWT.

3. GESTIN DE EVENTOS.

3.1. Principales clases de eventos.
3.2. Interfaces de escucha y adaptadores.
3.3. Registro de un evento.

4. UTILIZACIN DE CONTROLES SWING.

4.1. Creacin de un control.
4.2. Aadir controles a un contenedor.
4.3. Principales controles swing.

5. GESTORES DE ORGANIZACIN.

6. APPLETS.

6.1. Caractersticas de un applet.
6.2. Creacin de un applet.
6.3. Mtodos del ciclo de vida de un applet.


















13
Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

14

MDULO 8. ACCESO A DATOS EN JAVA

1. FUNDAMENTOS DEL LENGUAJE SQL.

2. LA TECNOLOGA JDBC.

2.1. Drivers JDBC.
2.2. Carga de un driver en una aplicacin.
2.3. El API JDBC.

3. ACCESO MEDIANTE JDBC A UNA BASE DE DATOS RELACIONAL.

3.1. Creacin de conexiones.
3.2. Ejecucin de consultas SQL.
3.3. Manipulacin de resultados.
3.4. Ejecucin de procedimientos almacenados.

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
Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

15









TUTORA

MODALIDAD TOTAL DAS
Presencial 2

DA CONTENIDOS TERICOS
42 Resolucin de dudas
43 Resolucin de dudas
15
Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

16

MODALIDAD
TELEFORMACION


TOTAL DAS
20

CONTENIDOS TERICOS

MDULO 9.PROGRAMACIN DE APLICACIONES MULTITAREA

1. CONCEPTO DE TAREA Y MULTITAREA.

2. CREACIN DE APLICACIONES MULTITAREA.

2.1. Herencia de la clase Thread.
2.2. Sobreescritura del mtodo run().
2.3. Inicio de una tarea.
2.4. Utilizacin de la interfaz Runnable.

3. PRINCIPALES MTODOS PARA EL CONTROL DE LA MULTITAREA.

4. SINCRONIZACIN DE PROCESOS.























16
Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

17

MDULO 10. COMUNICACIN DE APLICACIONES EN RED

1. CONCEPTOS BSICOS SOBRE REDES.

1.1. Direccin IP, Nombre de dominio y URL.
1.2. Puertos de escucha.
1.3. El protocolo TCP.

2. LA CLASE INETADDRESS.

3. INTERCONEXIN DE APLICACIONES MEDIANTE SOCKETS.

3.1. Creacin de un socket. La clase Socket.
3.2. Lectura y escritura a travs de un socket.
3.3. Creacin de sockets de servidor. La clase ServerSocket.
3.4. Escucha de peticiones en un socket del servidor.
3.5. Principales mtodos de la clase ServerSocket.

























17
Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

18

MDULO 11. ARQUITECTURA DE APLICACIONES JAVA EE

1. EL MODELO DE TRES CAPAS EN INTERNET.

1.1. Caractersticas de las aplicaciones de tres capas.
1.2. Interaccin cliente capa intermedia.
1.3. El Protocolo HTTP.
1.4. Tecnologas cliente, capa intermedia y datos.

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
Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

19

MDULO 12. FUNDAMENTOS DE HTML Y JAVASCRIPT

1. EL PAPEL DE HTML Y JAVASCRIPT EN UNA APLICACIN WEB.

2. ESTRUCTURA DE UN DOCUMENTO HTML.

3. PRINCIPALES ETIQUETAS HTML.

3.1. Estilos y formato.
3.2. Imgenes.
3.3. Tablas y listas.

4. FUNDAMENTOS DE HOJAS DE ESTILO.

5. FORMULARIOS HTML.

5.1. La etiqueta <form> y sus atributos principales.
5.2. Los controles de texto.
5.3. Los controles de seleccin.
5.4. Controles tipo botn.

6. INCLUSIN DE SCRIPTS EN UNA PGINA WEB.

7. SINTAXIS BSICA DE JAVASCRIPT.

7.1. Variables
7.2. Operadores.
7.3. Instrucciones de control.
7.4. Funciones del lenguaje.
7.5. Principales Objetos Java Script.













19
Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

20

MDULO 13. DESARROLLO DE APLICACIONES WEB CON SERVLETS

1. CARACTERSTICAS DE UN SERVLET.

2. CREACIN DE UN SERVLET.

2.1. Extensin de la clase HttpServlet.
2.2. Sobreescritura de los mtodos del ciclo de vida de un servlet.
2.3. Creacin del primer servlet.
2.4. Registro de un servlet en web.xml.

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
Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

21

MDULO 14. DESARROLLO DE APLICACIONES WEB CON JSP

1. CARACTERSTICAS DE LA TECNOLOGA JSP.

2. INSERCIN DE CDIGO JAVA EN UNA PGINA JSP.

3. GENERACIN DE PGINAS WEB CON JSP.

4. LOS OBJETOS INTEGRADOS JSP.

5. DIRECTIVAS JSP.

6. ACCIONES JSP.

7. UTILIZACIN DE JAVABEANS EN PGINAS JSP.

8. ACCESO A DATOS DESDE UNA PGINA JSP.

9. CREACIN DE LIBRERAS PERSONALIZADAS PARA JSP.

10. EL LENGUAJE DE EXPRESIONES EL PARA JSP.

11. LA LIBRERA DE ACCIONES ESTNDAR JSTL.





















21
Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

22

MDULO 15. LA ARQUITECTURA MODELO VISTA CONTROLADOR

1. PATRONES DE DISEO JAVA EE.

2. ESTRUCTURACIN DE APLICACIONES WEB JAVA EE.

3. CAPAS MVC.

3.1. El controlador.
3.2. La vista.
3.3. El modelo.

4. EL ACCESO A LOS DATOS EN UNA APLICACIN MVC.

5. DESPLIEGUE DE UNA APLICACIN EN UN SERVIDOR DE APLICACIONES.



























22
Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

23

MDULO 16. CREACIN DE COMPONENTES ENTERPRISE JAVABEANS
(EJBs)

1. LA ARQUITECTURA EJB.

1.1. Definicin de EJB.
1.2. Caractersticas y ventajas.
1.3. mbito de utilizacin de EJBs.

2. TIPOS DE COMPONENTES EJB.

3. DIFERENCIAS ENTRE UN EJB 3.0 Y VERSIONES ANTERIORES.

4. IMPLEMENTACIN DE UN EJB.

4.1. Anotaciones, interfaces, clases y descriptores de despliegue.
4.2. Descriptores de despliegue.
4.3. Despliegue de un EJB.

5. CREACIN DE APLICACIONES WEB CLIENTES DE EJB.

5.1. Utilizacin de JNDI.
5.2. Parmetros de inicializacin de contexto.

6. ANLISIS DE LOS EJBS DE SESIN.

6.1. Stateless Session Bean frente a Stateful Sesion Bean.
6.2. Mtodos del ciclo de vida.
6.3. Proceso de construccin de un EJB de sesin.

7. MESSAGE-DRIVEN BEAN.

7.1. Introduccin a JMS.
7.2. Construccin y despliegue de un MDB.

8. DESPLIEGUE DE UN MDULO EJB.

9. PERSISTENCIA DE DATOS.

9.1. Entidades y persistencia.
9.2. El API EntityManager.
9.3. Empaquetado y despliegue de clases de entidad.

23
Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

24









TUTORA

MODALIDAD TOTAL DAS
Presencial 1

DA CONTENIDOS TERICOS
64 Resolucin de dudas

24
Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

25

25

Mdulo 1:
Tcnicas de Programacin
Estructurada


26
LA INFORMTICA Y
EL MANEJO DE LA
INFORMACIN
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
Objetivos
A lo largo de ste te mostraremos los dispositivos de almacenamiento de la memoria principal y las unidades
de medida del ordenador, entre otros.
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.
3
La informtica y el manejo de la informacin
i
29
La informacin se almacena en las unidades tpicas de almacenamiento externos o perifricos tales como
discos magnticos o discos duros, memorias USB y los discos compactos (CD-ROM), etc., en los cuales se
almacenan de forma segura todos los programas o datos que el usuario desee.
Los datos son introducidos por el fabricante del ordenador (instrucciones que carga el computador cuando
enciende) y la memoria auxiliar o externa (almacenamiento). Para que se procese la informacin es
imprescindible que todo ello, tanto instrucciones como datos sean cargados en la memoria central o principal.
Memoria Central o Principal
La memoria central o principal, se refiere a componentes de un ordenador, dispositivos y medios de grabacin
que retienen datos informticos durante un intervalo de tiempo.
Es uno de los componentes fundamentales de todos los ordenadores modernos que, acoplados a la Unidad
Central de Proceso (CPU por su acrnimo en ingls, Central Processing Unit), implementa lo fundamental del
modelo de ordenador de Von Neumann, usado desde los aos 1940.
La memoria central se divide en:
MEMORIA CENTRAL
- Memoria R.O.M
- Memoria R.A.M
Memoria RAM
Es un tipo de memoria temporal que pierde sus datos cuando se queda sin energa (por ejemplo, al apagar
el ordenador), por lo cual es una memoria voltil. Esto es cierto desde el punto de vista terico: cientficos
de la Universidad de Princeton han descubierto una destruccin gradual de los datos almacenados en la
memoria RAM que oscila entre unos segundos y varios minutos, siendo inversamente proporcional a la
4
La informtica y el manejo de la informacin
i
30
temperatura. Esto puede significar una brecha en la seguridad en tanto que las claves de acceso de cifradores
de informacin como BitLocker quedan almacenadas en la memoria RAM.
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,
5
La informtica y el manejo de la informacin
i
31
pues es necesario conocer cunta informacin podemos almacenar en un dispositivo, o qu espacio disponible
poseemos para guardar un archivo.
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
6
La informtica y el manejo de la informacin
i
32
informaciones 0 o 1. Estas informaciones 0 o 1, independientemente de la naturaleza de la seal con la que
estn representadas, es la que se llama dgito binario o bit.
Un sistema como ste, que slo maneja dos estados o dos signos, recibe el nombre de Sistema Binario, y a
la informacin representada con estos dos signos o estados se le llama informacin.
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.
7
La informtica y el manejo de la informacin
i
33
Como se puede observar una hoja cuadriculada est compuesta nica y exclusivamente de cuadros, desde
el principio hasta el final. En este caso tenemos una hoja que posee 160 cuadritos, que podra compararse
con el espacio total disponible en la memoria RAM o en cualquier dispositivo de almacenamiento. Cada
cuadro sera utilizado para colocar dentro un carcter, ya sea letra nmero o caracteres especiales.
El Byte
Un Byte est compuesto de 8 bits, el bit es la unidad ms pequea de este sistema de medida llamado
Sistema Binario.
El sistema mtrico decimal se compone de 10 dgitos desde el 0 hasta el 9, pero el Sistema Binario solo se
compone de dos dgitos que son el 0 y el 1.
El 0 es un bit y el 1 es otro bit. Como cada carcter (letra, nmero, smbolo) corresponde a un BYTE (byte)
entonces, por ejemplo, el 1 en binario sera as: 00000001. Estos 8 bit dan origen al BYTE.
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).
8
La informtica y el manejo de la informacin
i
34
Mltiplos y submltiplos de la unidad Byte
Igual que otras unidades de medida, la unidad byte tambin posee mltiplos y submltiplos.
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.
9
La informtica y el manejo de la informacin
i
35
2. Tipos de datos bsicos
En ste te mostraremos las diferentes categoras de datos y la manipulacin de datos en la memoria
principal.
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.
10
La informtica y el manejo de la informacin
i
36
Los datos se clasifican en diversas categoras, segn el tipo de mquina o del lenguaje en uso. Generalmente
podemos encontrar las siguientes categoras:
- NUMRICOS.
- LGICOS.
- CADENAS.
- COMPUESTOS.
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.
11
La informtica y el manejo de la informacin
i
37
No representan valor alguno para efectos numricos. Pueden distinguirse porque son delimitados por
apstrofes o comillas.
Se suelen clasificar en dos categoras en la mayora de los lenguajes de programacin actuales:
- Datos tipo CARCTER (Char)
- Datos tipo CADENA ALFANUMERICA (String)
Datos lgicos
Tambin se los denomina bolanos (booleanos o boolean). Son aquellos datos que slo pueden tomar uno de
dos valores: falso verdadero (false o true).
Este tipo de datos se utiliza para representar las alternativas (verdadero/falso) a determinadas condiciones.
Por ejemplo:
- Cuando se pide si un valor entero es primo, la respuesta ser verdadera o falsa, segn sea el
nmero primo o no lo sea
- Si digo que el nmero: -32 es positivo esto ser FALSO.
(3>2)= Verdadero
(7>9)= Falso
12
La informtica y el manejo de la informacin
i
38
Datos constantes y variables
Los datos tambin se pueden clasificar en funcin de si sus contenidos se pueden modificar o no a lo largo
de toda la ejecucin de un programa, as pues, podemos diferenciar entre constantes y variables.
En ambos casos se asocian a direcciones de memoria donde el procesador guarda la informacin para su
proceso posterior.
Datos constantes
Tienen un valor fijo que se le da cuando se define la constante y que ya no puede ser modificado durante la
ejecucin.
Las constantes pueden llevar asociadas un nombre o no, si no lo llevan, se llaman literales. El tipo,
dependiendo de los lenguajes hay que ponerlo, y en otros no hace falta ponerlo porque toma el tipo del
dato que se le asigna.
Datos variables
Su valor puede cambiar durante la ejecucin del algoritmo, pero nunca vara su nombre y su tipo. Deben tener
un nombre, y debe ser un nombre significativo. Tiene que empezar por una letra, y el tamao depende del
lenguaje.
13
La informtica y el manejo de la informacin
i
39
Caractersticas de los datos
Los datos es una expresin general que describe los objetos con los que opera el ordenador. La informacin
de entrada-salida se clasifica y se convierte en datos para hacerlos ms manejables.
Los algoritmos y programas que crean los programadores operan con estos datos para obtener unos
resultados. De esta forma los datos de entrada se transforman por el programa en las etapas intermedias para
generar los datos de salida, es decir unos resultados.
- Tienen un nombre asignado por el programador que los diferencia del resto de datos del programa.
- Tienen asociado un tipo de dato que determina y restringe qu tipo de operaciones podemos hacer
con estos tipos de datos.
- Se les puede cargar con un valor inicial que puede variar o no a lo largo del proceso.
- Cada uno de estos datos tiene una longitud y una direccin de almacenamiento en memoria que se
le asigna el sistema durante la fase de compilacin (la cual en la actualidad es transparente para el
programador).
14
La informtica y el manejo de la informacin
i
40
Manipulacin de Datos en la Memoria Principal
Veamos un ejemplo de manipulacin de datos en la memoria tal cual lo hara el ordenador al ejecutar un
programa:
Los datos definidos y usados por el programa, quedaran representados de la siguiente manera en la memoria
RAM del ordenador.
15
La informtica y el manejo de la informacin
i
Datos en memoria antes
de la ejecucin del programa
Datos en memoria despus de la
ejecucin del programa
41
3. Resumen
Has llegado al final de esta leccin de formacin que denominamos La informtica y el manejo de la
informacin.
En esta leccin hemos estudiado los siguientes contenidos:
16
La informtica y el manejo de la informacin
i
42
SISTEMAS DE
NUMERACIN Y
CODIFICACIN DE
LA INFORMACIN
43
NDICE
SISTEMAS DE NUMERACIN Y CODIFICACIN
DE LA INFORMACIN
1. Sistemas de numeracin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3
2. Codificacin de la informacin y formatos de almacenamiento . . . . . . . . . . . . . . . . . . . . . . .19
3. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .33
44
1. Sistemas de numeracin
Objetivos
A lo largo ste te mostraremos los diferentes sistemas de numeracin que utiliza el ordenador, cambio de
bases y operaciones aritmticas bsicas de los sistemas binario y hexadecimal y conversiones entre los
diferentes sistemas.
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.
0 1 2 3 4 5 6 7 8 9
3
Sistemas de numeracin y codificacin de la informacin
i
45
Asimismo, el ordenador debido a su construccin, lo hace desde ambos puntos de vista con el sistema binario,
utilizando una serie de cdigos que permiten su perfecto funcionamiento.
0 1
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:
4
Sistemas de numeracin y codificacin de la informacin
i
46
A continuacin revisaremos el sistema binario y hexadecimal. Repasaremos el sistema decimal como medio
de comparacin y comprensin de los dems sistemas de numeracin. Todo ello con el objetivo de poder
garantizar una mayor comprensin a la hora de manejar un sistema informtico.
El Sistema Decimal
El sistema decimal es uno de los denominados sistemas posicionales, utilizando un conjunto de smbolos cuyo
significado depende fundamentalmente de su posicin relativa al smbolo coma (,), denominado coma
decimal, que en caso de ausencia se supone colocada implcitamente a la derecha.
Utiliza como base el 10, que corresponde al nmero de smbolos que comprende para la representacin de
cantidades.
Estos smbolos (tambin denominados dgitos) son:
0 1 2 3 4 5 6 7 8 9
Estos dgitos pueden tener un valor absoluto o valor relativo.
Sistema de Numeracin Posicional
El valor relativo posicional se deduce a partir del Teorema Fundamental de la Numeracin (TFN).
ste indica que en cualquier sistema de numeracin posicional todos los nmeros pueden expresarse mediante
la siguiente suma de productos:
5
Sistemas de numeracin y codificacin de la informacin
i
47
Es decir que una determinada cantidad, que llamaremos numero decimal, se puede expresar as:
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
6
Sistemas de numeracin y codificacin de la informacin
i
48
Donde X es el dgito y la B la base.
Este teorema es fundamental en informtica, ya que los ordenadores nicamente trabajan con el sistema
binario es decir, con ceros y unos.
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.
7
Sistemas de numeracin y codificacin de la informacin
i
49
De no haber existido el sistema matemtico binario, el desarrollo de una tecnologa para que los ordenadores
pudieran funcionar empleando el sistema decimal, hubiera sido tan costosa que los ordenadores no hubieran
estado siquiera al alcance de la mayora de las empresas, tal como ocurra con las voluminosas computadoras
o mainframes que se utilizaron a partir de los aos 50 del siglo pasado.
El Sistema Binario
La mayora de los circuitos electrnicos que conforman un ordenador slo puede detectar la presencia o
ausencia de tensin en el circuito. A la presencia de tensin en un punto del circuito le asignamos el valor 1
y a la ausencia de la misma el valor (lgica positiva).
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
8
Sistemas de numeracin y codificacin de la informacin
i
50
Suma y resta binaria
Para comprender mejor lo anterior, a continuacin veremos algunas operaciones bsicas con binarios: la
suma y la resta.
Suma Binaria
Es semejante a la suma en el sistema decimal, con la diferencia de que se manejan slo 2 dgitos (0 y 1), y
que cuando el resultado excede de los smbolos utilizados se agrega el exceso (acarreo) a la suma parcial
siguiente hacia la izquierda. Veamos en el cuadro de abajo las tablas de sumar en binario.
Como ejemplo, realizamos un paralelo a la aritmtica binaria su equivalente en decimal:
9
Sistemas de numeracin y codificacin de la informacin
51
Resta Binaria
La resta binaria es similar a la decimal con la diferencia de tener slo 2 dgitos y que al realizar las restas
parciales entre 2 dgitos, 1 del minuendo y otro del sustraendo, si el segundo excede al primero, se sustrae
una unidad del dgito de ms a la izquierda en el minuendo (si existe y vale 1), convirtindose este ltimo
en 0 y equivaliendo la unidad extrada a 1 * 2 en el minuendo de resta parcial que estamos realizando. Si es
0 el dgito siguiente a la izquierda, se busca en los sucesivos teniendo en cuenta que su valor se multiplica
por 2 cada desplazamiento a la derecha.
Ejemplo
10
Sistemas de numeracin y codificacin de la informacin
52
Resta por complemento
Un truco para hacer la resta sin complicaciones es convertir el nmero a restar en su contrario, en su
complemento (es decir, cambiar los unos por ceros y los ceros por unos, excepto el nmero de la derecha)
y despus realizamos la suma de los dos nmeros. Con ello en lugar de hacer una resta directamente, estamos
recurriendo a la suma que parece ms sencilla.
Ejemplo
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:
Y nos sale el mismo resultado que si hacemos la resta.
11
Sistemas de numeracin y codificacin de la informacin
i
53
Complemento a uno y a dos
El complemento a uno de un nmero N, compuesto por n bits es, por definicin, una unidad menor que el
complemento a dos:
Es decir: C1N = C2N 1 y, por la misma razn: C2N = C1N + 1
Calculemos el complemento a uno del nmero 101101:
N = 101101, y su complemento a dos C2N = 01001
C1N = C2N 1 = 010011 000001 = 010010
C1N = 010010
El complemento a uno de un nmero binario es el nmero resultante de invertir los UNOS y CEROS de dicho
nmero.
Ejemplo
Si: N = 110100101, obtenemos su complemento a uno invirtiendo ceros y unos, con lo que resulta:
C1N = 001011010
Y su complemento a dos es: C2N = C1N + 1 = 001011011
Sistema de Numeracin Hexadecimal
En el sistema hexadecimal los nmeros se representan con diecisis smbolos:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E y F. Se utilizan los caracteres A, B, C, D, E y F representando las
cantidades decimales 10, 11, 12, 13, 14 y 15 respectivamente (porque no hay dgitos mayores que 9 en el
sistema decimal). El valor de cada uno de estos smbolos depende, como es lgico, de su posicin, que se
calcula mediante potencias de base 16.
12
Sistemas de numeracin y codificacin de la informacin
i
54
Es posible para los humanos trabajar con este sistema de numeracin tan complejo conociendo las
equivalencias y transformaciones posibles. Como sabemos cualquier dgito de un nmero del sistema
hexadecimal, como en el sistema decimal, tiene un valor relativo o posicional en funcin de la base 16.
Por ello, el nmero hexadecimal 2CA equivale al 714 en decimal:
Suma y resta en el Sistema Hexadecimal
Ejemplo de suma en Hexadecimal
13
Sistemas de numeracin y codificacin de la informacin
i
55
Ejemplo de resta en Hexadecimal
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
Sistemas de numeracin y codificacin de la informacin
56
Conversin Decimal-Binario
Para la conversin de decimales a binarios se hacen divisiones sucesivas por 2 y como resultado se recoge el
ltimo cociente y todos los restos, colocndolos en orden inverso a como se obtuvieron.
Ejemplo: Convertir el nmero decimal 1992 a binario.
Conversin Decimal-Hexadecimal
Para la conversin de decimales enteros a hexadecimal, recurrimos al mtodo de las divisiones sucesivas por
16.
15
Sistemas de numeracin y codificacin de la informacin
i
57
Se divide el nmero decimal y los cocientes sucesivos por 16 hasta obtener un cociente igual a cero. El
nmero hexadecimal buscado ser el compuesto por todos los restos obtenidos en orden inverso a su
obtencin.
Ejemplo: Convertir el nmero decimal 1000 a hexadecimal.
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:
16
Sistemas de numeracin y codificacin de la informacin
i
58
En caso de que los dgitos binarios no formen grupos completos de cuatro dgitos, se deben aadir ceros a la
izquierda hasta completar el ltimo grupo. Por ejemplo:
Ejemplo de transformacin directa, agrupando de 4 en 4 bits:
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
17
Sistemas de numeracin y codificacin de la informacin
i
59
Otro ejemplo de transformacin directa apoyndonos en la tabla de equivalencias de arriba, 4 bits por cada
hexadecimal.
18
Sistemas de numeracin y codificacin de la informacin
i
60
2. Codificacin de la informacin y formatos de almacenamiento
Los cdigos a travs de la historia I
En ste te mostraremos las diferentes cdigos utilizados por los ordenadores, ejemplos de su representacin
y los formatos internos de almacenamiento de datos en la memoria.
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.
19
Sistemas de numeracin y codificacin de la informacin
i
61
Las tarjetas IBM (tambin conocidas como tarjetas de cdigo Hollerith), tenan 80 columnas a todo lo ancho
con doce posiciones predeterminadas en cada una de las columnas para ubicar las perforaciones. Por medio
de una mquina perforadora provista de un teclado de mquina de escribir, se introducan los datos
perforando las tarjetas. Una sola perforacin en una columna corresponda a un nmero, mientras que dos
perforaciones en diferentes posiciones de una misma columna correspondan a una letra.
Los cdigos a travs de la historia II
En la dcada de 1960, se adopt el cdigo ASCII como nuevo estndar. ASCII es un cdigo de caracteres basado
en el alfabeto latino tal como se usa en ingls moderno y en otras lenguas occidentales.
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.
20
Sistemas de numeracin y codificacin de la informacin
i
62
ASCII fue publicado como estndar por primera vez en 1967 y fue actualizado por ltima vez en 1986. En la
actualidad define cdigos para 33 caracteres no imprimibles, de los cuales la mayora son caracteres de
control obsoletos que tienen efecto sobre cmo se procesa el texto, ms otros 95 caracteres imprimibles que
les siguen en la numeracin (empezando por el carcter espacio).
El Cdigo ASCII
Un mapa de caracteres ASCII es una manera de mantener todos los caracteres imprimibles o mostrados por
pantalla en una lista.
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.
21
Sistemas de numeracin y codificacin de la informacin
i
63
En el Cdigo ASCII los valores binarios entre 0 y 31 corresponden a instrucciones, entre 32 y 127 corresponden
al alfabeto alfanumrico y entre 128 y 255 a caracteres de otros idiomas y signos menos convencionales
22
Sistemas de numeracin y codificacin de la informacin
64
El Cdigo ASCII y su equivalencia en Binario
Cada uno de los caracteres alfanumricos del Cdigo ASCII equivale a un Byte de informacin, aunque el
nmero binario correspondiente al decimal no ocupe ocho cifras.
En el cdigo binario, el nmero 0 corresponde igualmente al "0" y el 255 al "1111 1111". En la tabla
podemos ver la representacin de algunos nmeros decimales y sus equivalentes en Binario y en Octeto
formando Bytes en cdigo ASCII.
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.
23
Sistemas de numeracin y codificacin de la informacin
i
65
Origen del Cdigo EBCDIC
El Cdigo EBCDIC tiene como objetivo la representacin de caracteres alfanumricos, controles y signos de
puntuacin.
Cada carcter est compuesto por 8 bits = 1 byte, por eso EBCDIC define un total de 256 caracteres. Gracias
a l, ser posible almacenar letras maysculas, caracteres especiales, etc. , para los dispositivos de E/S.
Aunque EBCDIC no se utiliza mucho en las microcomputadoras, es conocido y aceptado internacionalmente,
sobre todo como cdigo de IBM para los mainframes y minicomputadoras de la compaa.
Fue ideado entre 1963 y 1964 IBM y anunciado con el lanzamiento de la lnea de ordenadores IBM System/360.
IBM adapt el EBCDIC del cdigo de tarjetas perforadas y lo promulg como una tctica de control de clientes
cambiando el cdigo estndar ASCII amplindolo a 256 caracteres.
24
Sistemas de numeracin y codificacin de la informacin
i
66
Caractersticas del Cdigo EBCDIC
Cuando fue ideado, el EBCDIC hizo relativamente fcil incorporar datos en un ordenador con las tarjetas
perforadas. Puesto que estas tarjetas han quedado obsoletas, el EBCDIC se utiliza en arquitecturas modernas
solamente para la compatibilidad con aparatos antiguos.
Caractersticas
- No tiene ninguna ventaja tcnica sobre las pginas de cdigo ASCII, tales como la serie ISO-8859.
- La mayora de los codepages de EBCDIC permiten utilizar solamente hasta 2 idiomas (ingls y otra
lengua) en un archivo de base de datos o de texto.
- Cuando se requiere utilizar texto multilinge, es necesario un sistema de apoyo con ms caracteres,
generalmente una versin de Unicode.
- Existen muchas versiones ("codepages") de EBCDIC con caracteres diferentes, respectivamente
sucesiones diferentes de los mismos caracteres. Por ejemplo, al menos hay 9 versiones nacionales de
EBCDIC con Latn 1 caracteres con sucesiones diferentes.
- Para ver los valores del cdigo EBCDIC ms utilizados en programacin y edicin de programas
- Para ver la equivalencia de la mayora de los caracteres que se utilizan, tanto en el cdigo ASCII
como en el cdigo EBCDIC,
25
Sistemas de numeracin y codificacin de la informacin
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:
26
Sistemas de numeracin y codificacin de la informacin
i
68
Por ejemplo, cuando se escribe en el teclado la letra A mayscula, se generan automticamente 8 bits u
octeto, equivalentes a un byte, que representan esa letra.
El cdigo numrico que se genera, para que el ordenador reconozca que se ha escrito la letra A , es: 0100
0001. Cada uno de los bits correspondientes a los dgitos 1 contenidos en ese byte de informacin generan
pulsos elctricos, mientras que los representados por el dgito 0 no generan prcticamente ningn pulso
elctrico.
Segn lo anterior, veamos cmo quedara almacenada en cdigo ASCII y en cdigo EBCDIC una frase con el
texto siguiente
LA PROGRAMACION ES TAN FACIL COMO ====> 1 + 1 = 2
Traducido a Cdigo ASCII
27
Sistemas de numeracin y codificacin de la informacin
i
69
Traducido a Cdigo EBCDIC
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.
28
Sistemas de numeracin y codificacin de la informacin
i
70
Gracias a ese mecanismo el circuito digital puede diferenciar perfectamente el valor correspondiente a estos
dos dgitos sin equivocarse, por lo que el riesgo de que se produzcan confusiones o errores a la hora de
reconocer el valor de ambos es prcticamente nula.
Combinacin de pulsos y no pulsos elctricos 0100 0001
I
MEMORIA RAM
I
A
Cuando la memoria RAM del ordenador recibe una combinacin de pulsos y no pulsos elctricos
correspondientes a los unos y los ceros que forman el byte 0100 0001, reconoce que le estn enviando el
cdigo correspondiente a la letra A. De esa forma lo descifra y retiene como tal, permitiendo, a su vez,
que esa letra se pueda representar en la pantalla del monitor.
Formatos internos de almacenamiento de los datos en memoria.
Ahora veremos los tres formatos clsicos de almacenamiento que existen para guardar los datos en memoria.
Ello nos dar una mejor idea de cmo funcionan los bits y los bytes en el ordenador.
Existen distintos formatos de almacenamiento de datos. Estos formatos son:
29
Sistemas de numeracin y codificacin de la informacin
i
71
1. FORMATO ZONA para valores alfanumricos
A razn de 1 carcter por octeto. (Cada uno de los caracteres del cdigo EBCDIC ASCII se almacenan en un
BYTE de memoria).
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:
Signo + = C 1100
Signo - = D 1101
Signo absoluto = F 1111
30
Sistemas de numeracin y codificacin de la informacin
i
72
3. FORMATO DE ALMACENAMIENTO EMPAQUETADO para valores numricos
Se almacenan a razn de 2 dgitos por octeto, excepto el octeto extremo derecha que contiene un slo
dgito y el signo.
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).
31
Sistemas de numeracin y codificacin de la informacin
i
73
4. FORMATO DE ALMACENAMIENTO BINARIO PURO para valores numricos
Es el formato que ms se utiliza en los lenguajes ms recientemente creados. Los valores numricos son
almacenados en formato binario puro. Es decir, el valor numrico decimal, antes de almacenarse es traducido
al sistema numrico en base 2 (ceros y unos).
Son campos de "longitud fija" a razn de:
2 Octetos: Media palabra (de 1 a 4 dgitos)
4 Octetos: Una palabra (de 5 a 9 dgitos)
8 Octetos: Doble palabra (de 10 a 18 dgitos)
El signo: + o - , se localiza en este tipo de campos en el primer bit del primer octeto de la izquierda. Vase
el ejemplo:
32
Sistemas de numeracin y codificacin de la informacin
i
74
3. Resumen
Has llegado al final de esta leccin de formacin que denominamos Sistemas de numeracin y codificacin
de la informacin.
A continuacin te invitamos a realizar un repaso de los contenidos estudiados a lo largo de la misma.
33
Sistemas de numeracin y codificacin de la informacin
i
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
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.
3
Introduccin a la programacin
i
78
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.
4
Introduccin a la programacin
i
79
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.
5
Introduccin a la programacin
i
80
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 de inicio/fin
- Instrucciones de asignacin
- Instrucciones de lectura
- Instrucciones de escritura
Para disear o crear nuestros programas podemos recurrir a dos herramientas bsicas, los diagramas de flujo
y los pseudocdigos que veremos a continuacin.
6
Introduccin a la programacin
i
81
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.
7
Introduccin a la programacin
i
82
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.
8
Introduccin a la programacin
i
83
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.
9
Introduccin a la programacin
i
Este smbolo se utiliza para
representar la pantalla del
ordenador
84
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.
10
Introduccin a la programacin
i
85
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.
11
Introduccin a la programacin
i
86
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.
12
Introduccin a la programacin
i
87
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:
13
Introduccin a la programacin
i
88
Diseo del algoritmo
Pseudocdigo
1. Inicio
2. Escribir rea de un triangulo
3. Leer a, b, c
4. Calcular s=(a+b+c)/2
5. Calcular A= (s(s-a)(s-b)(s-c))
6. Escribir A
7. Fin
Flujograma
14
Introduccin a la programacin
i
89
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:
A continuacin haremos una breve revisin de cada uno de ellos.
15
Introduccin a la programacin
i
90
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:
16
Introduccin a la programacin
i
91
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
17
Introduccin a la programacin
i
92
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.
18
Introduccin a la programacin
i
93
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.
19
Introduccin a la programacin
i
94
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. Parntesis (comenzando por los ms internos) 6. Concatenacin
2. Signo 7. Relacionales
3. Potencia 8. Negacin NOT
4. Producto, divisin y mdulo 9. Conjuncin AND
5. Suma y resta 10. Disyuncin OR
20
Introduccin a la programacin
95
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:
21
Introduccin a la programacin
i
96
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.
22
Introduccin a la programacin
i
97
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
23
Introduccin a la programacin
i
98
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)
&&, AND, y: Conjuncin: todas las relaciones han de ser verdad. (1)
II, OR, o: Disyuncin: alguna relacin ha de ser cierta. (2)
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 ejecu ta la parte THEN del IF.
1 * 1 * 1 * 1 = 1 1 * 0 * 1 * 1 = 0
24
Introduccin a la programacin
i
99
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 0 + 0 + 0 + 0 = 0
Roll over Operadores lgicos
25
Introduccin a la programacin
i
100
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)
26
Introduccin a la programacin
i
101
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 (A OR B) es igual que NOT A AND NOT B
NOT (C AND D) es igual que NOT C OR NOT D
NOT (NOT A AND NOT B) es igual que A OR B
NOT (NOT C OR D) es igual que C AND NOT D
Negando las condiciones
A OR B es lo contrario de NOT A AND NOT B
C AND D es lo contrario de NOT C OR NOT D
NOT A AND NOT B es lo contrario de A OR B
NOT C OR D es lo contrario de C AND NOT D
27
Introduccin a la programacin
i
102
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.
28
Introduccin a la programacin
i
103
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.
29
Introduccin a la programacin
i
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
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.
3
Arrays y Tablas
i
107
Clasificacin de las Tablas
Las Tablas pueden clasificarse segn su estructura, dimensin, valores y nmero de elementos.
4
Arrays y Tablas
i
108
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.
5
Arrays y Tablas
i
109
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
6
Arrays y Tablas
i
110
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)
7
Arrays y Tablas
i
111
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.
8
Arrays y Tablas
i
112
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) creacin sin inicializar
TablaGastosDia(7)= 1,2,3,4,5,6,7 creacin con contenido
Dia=1 Indice para apuntar a cada uno de los dias
1 forma con DO WHILE y test antes
9
Arrays y Tablas
i
113
2 forma con DO WHILE y test despus
3 forma con FOR
10
Arrays y Tablas
i
114
4 forma con DO UNTIL y test antes
5 forma con DO UNTIL y test despus
11
Arrays y Tablas
i
115
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
12
Arrays y Tablas
i
116
1 forma con DO WHILE y test antes
2 forma con FOR
13
Arrays y Tablas
i
117
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
14
Arrays y Tablas
i
118
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 3 4 5 6 7
TablaGastosDia(7)= 40, 29, 90, 71, 28, 93, 100
Dia= 1 Indice para apuntar a cada elemento
TotalSemana= 0
1 forma con DO WHILE
15
Arrays y Tablas
i
119
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.
16
Arrays y Tablas
i
120
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.
17
Arrays y Tablas
i
121
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.
18
Arrays y Tablas
i
122
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
1 forma con DO WHILE
19
Arrays y Tablas
i
123
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
20
Arrays y Tablas
i
124
1 forma con DO WHILE
2 forma con FOR
21
Arrays y Tablas
i
( con > solo )
(El IF de abajo se podra meter aqui dentro antes del EXIT FOR
sin el ELSE)
125
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
22
Arrays y Tablas
i
126
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:
23
Arrays y Tablas
i
127
FUNCIONES Y
PROCEDIMIENTOS
128
NDICE
FUNCIONES Y PROCEDIMIENTOS
1. Teora y Funciones con Funciones y Procedimientos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3
2. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20
129
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.
3
Funciones y Procedimientos
i
130
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
4
Funciones y Procedimientos
i
131
Funciones y mbitos de las Variables
Para ver las funciones y el mbito de las variables presiona cada botn
FUNCIONES
AMBITO DE LAS VARIABLES
5
Funciones y Procedimientos
i
132
Funciones y Procedimientos. Representacin Grafica
Analice la representacin grafica de las Funciones y Procedimientos.
6
Funciones y Procedimientos
i
133
Llamadas a Procedimientos
A travs del esquema siguiente podr ver como se realizan las llamadas a procedimientos.
7
Funciones y Procedimientos
i
134
Esquema Bsico de llamadas a Procedimientos
Ahora veremos el esquema bsico de llamadas a procedimientos.
8
Funciones y Procedimientos
i
135
Formato de Funciones en Visual Basic
Analizaremos en este punto el formato de funciones en visual basic.
9
Funciones y Procedimientos
i
136
Formatos de Funciones en JAVA , C y C++
En esta pantalla se presenta el esquema de FORMATOS DE FUNCIONES EN JAVA , C y C++
10
Funciones y Procedimientos
i
137
Suma de dos nmeros. Mtodos
METODO 1)
Sin necesidad de procedimientos. Todo en el programa principal
Suma de dos nmeros. Mtodos
METODO 1)
Sin necesidad de procedimientos. Todo en el programa principal
11
Funciones y Procedimientos
i
138
METODO 2)
Usando variables GLOBALES dentro del procedimiento.
METODO 2)
Usando variables GLOBALES dentro del procedimiento.
12
Funciones y Procedimientos
i
139
METODO 3)
Usando variables LOCALES dentro del procedimiento..
METODO 3)
Usando variables LOCALES dentro del procedimiento..
13
Funciones y Procedimientos
i
140
METODO 4)
Pasndole los valores de las variables GLOBALES al procedimiento y ejecutndose dentro del mismo con
variables LOCALES.
14
Funciones y Procedimientos
i
141
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 .
15
Funciones y Procedimientos
i
142
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 .
16
Funciones y Procedimientos
i
143
Anexo Tablas y Procedimiento Versin 1
Estudia el siguiente pseudocdigo y elige las salidas correctas del procedimiento:
POSIBLES SOLUCIONES:
a)2, 4, 6, 8, 10, 12, 14, 16, 18, 20
b)4, 6, 12, 16, 21, 27, 34, 42, 51, 61
c)1, 2, 3, 4, 5, 6, 7, 8, 9, 10
d)10, 9, 8, 7, 6, 5, 4, 3, 2, 1
17
Funciones y Procedimientos
i
144
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
18
Funciones y Procedimientos
i
145
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
19
Funciones y Procedimientos
i
146
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:
20
Funciones y Procedimientos
i
147
LA INFORMTICA Y
EL MANEJO DE LA
INFORMACIN
148
NDICE
LA INFORMTICA Y EL MANEJO DE LA INFORMACIN
1. LA INFORMTICA Y EL MANEJO DE LA INFORMACIN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3
149
1. LA INFORMTICA Y EL MANEJO DE LA INFORMACIN.
1.1. La informacin y el tratamiento mecanizado de la informacin y La Informtica.
Hoy en da el uso eficaz de la informacin para la empresa determina en gran medida sus
beneficios, su competitividad frente a la competencia e incluso su supervivencia a corto o largo
plazo.
La informtica: Es la Ciencia que estudia el tratamiento, elaboracin, transmisin y utilizacin de
la informacin.
La informtica es la disciplina que estudia el tratamiento automtico de la informacin utilizando
dispositivos electrnicos y sistemas computacionales. Tambin es definida como el procesamiento
de la informacin en forma automtica.
El vocablo informtica proviene del francs informatique, acuado por el ingeniero Philippe
Dreyfrus en 1962. El vocablo es acrnimo de las palabras information y automatique. En lo que hoy
da conocemos como informtica confluyen muchas de las tcnicas y de las mquinas que el hombre
ha desarrollado a lo largo de la historia para apoyar y potenciar sus capacidades de memoria, de
pensamiento y de comunicacin.
Segn el Diccionario de la Real Academia Espaola RAE informtica es el: Conjunto de
conocimientos cientficos y tcnicas que hacen posible el tratamiento automtico de la informacin
por medio de ordenadores.
Los computadores se han convertido en una herramienta indispensable para la vida actual. La
mayor parte de los aparatos electrnicos estn dotados de algn elemento de computacin
(lavadoras, celulares, televisores, etc.).
De forma genrica, podemos entender el concepto de informtica como aquella disciplina
encargada del estudio de mtodos, procesos, tcnicas, desarrollos y su utilizacin en ordenadores
(computadores) con el fin de almacenar, procesar y transmitir informacin y datos en formato
digital.
El Computador u ordenador es una maquina electrnica que procesa gran cantidad de datos en
forma rpida y segura.
LA INFORMTICA Y EL MANEJO
DE LA INFORMACIN
3
150
Perspectiva histrica de la automatizacin de los clculos
hasta la era de la informtica:
1. baco: En el 3000 a. C. Era digital.
2. En el siglo XVII Pascal construye una mquina que suma y resta. Era manual.
3. Leibnitz mejora la mquina de Pascal introduciendo la multiplicacin y la divisin
pero segua siendo manual.
4. En el siglo XIX Babbage introduce el concepto de programa externo.
5. En el siglo XX comienza la era de la informtica debido a Von Newman y el
desarrollo de la electrnica.
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.
LA INFORMTICA Y EL MANEJO
DE LA INFORMACIN
4
151
En la informtica convergen los fundamentos de las ciencias de la computacin, la programacin
y las metodologas para el desarrollo de software, la arquitectura de computadores, las redes de
datos (como Internet), la inteligencia artificial y ciertas cuestiones relacionadas con la electrnica.
Se puede entender por informtica a la unin sinergia de todo este conjunto de disciplinas.
Esta disciplina se aplica a numerosas y variadas reas del conocimiento o la actividad humana,
como por ejemplo: gestin de negocios, almacenamiento y consulta de informacin, monitorizacin
y control de procesos, industria, robtica, comunicaciones, control de transportes, investigacin,
desarrollo de juegos, diseo computerizado, aplicaciones/herramientas multimedia, medicina,
biologa, fsica, qumica, meteorologa, ingeniera, arte, etc. Una de la aplicaciones ms
importantes de la informtica es facilitar informacin en forma oportuna y veraz, lo cual, por
ejemplo, puede tanto facilitar la toma de decisiones a nivel gerencial (en una empresa) como
permitir el control de procesos crticos.
Actualmente es difcil concebir un rea que no use, de alguna forma, el apoyo de la informtica;
en un enorme abanico que cubre desde las ms simples cuestiones domsticas hasta los clculos
cientficos ms complejos.
Entre las funciones principales de la informtica se cuentan las siguientes:
- Creacin de nuevas especificaciones de trabajo.
- Desarrollo e implementacin de sistemas informticos.
- Sistematizacin de procesos.
- Optimizacin de los mtodos y sistemas informticos existentes.
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.
LA INFORMTICA Y EL MANEJO
DE LA INFORMACIN
5
152
Podemos definir el ordenador como una mquina con la que automatizar el tratamiento de la
informacin. Debemos entender que el ordenador no es ms que una herramienta de trabajo
segura y rpida, pero no tiene inteligencia, no puede pensar, solo puede realizar las pocas tareas
para las cuales ha sido programado.
El ordenador ejecuta aplicaciones que gestionan datos con el objetivo de generar informacin til
a la toma de decisiones.
Datos de Entrada Salida y el proceso de la informacin:
Bsicamente la misin del ordenador es recoger en sus dispositivos de ENTRADA algn tipo de
informacin, esta es elaborada con mayor o menos complejidad, es decir, es PROCESADA y despus
una vez transformada es enviada a sus dispositivos de SALIDA para que los humanos la analicemos
adecuadamente.
Esquema de Entrada, Procesamiento y salida de la informacin.
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.
LA INFORMTICA Y EL MANEJO
DE LA INFORMACIN
6
153
El esquema siguiente pretende mostrar, de una forma sencilla y grficamente las distintas partes
de la organizacin fsica de un ordenador.
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:
LA INFORMTICA Y EL MANEJO
DE LA INFORMACIN
7
154
Dispositivos de Entrada/Salida del ordenador:
1.- Los Dispositivos de Entrada:
Estos dispositivos permiten al usuario del computador introducir datos, comandos y programas en el CPU. El
dispositivo de entrada ms comn es un teclado similar al de las mquinas de escribir. La informacin
introducida con el mismo, es transformada por el ordenador en modelos reconocibles. Los datos se leen de
los dispositivos de entrada y se almacenan en la memoria central o interna. Los Dispositivos de Entrada,
convierten la informacin en seales elctricas que se almacenan en la memoria central.
2.- Los Dispositivos de Salida:
Estos dispositivos permiten al usuario ver los resultados de los clculos o de las manipulaciones de datos de
la computadora. El dispositivo de salida ms comn es la unidad de visualizacin (VDU, acrnimo de Video
Display Unit), que consiste en un monitor que presenta los caracteres y grficos en una pantalla similar a la
del televisor.
Algunos de los dispositivos y perifricos de entrada/salida ms usados y conocidas a lo largo de la historia
de la informtica, (sin pretensin de recogerlos todos) se relacionan en el cuadro siguiente:
Resumen de dispositivos y perifricos de entrada/salida ms conocidos.
LA INFORMTICA Y EL MANEJO
DE LA INFORMACIN
8
155
Como se ha podido observar existen muchos tipos de dispositivos que utiliza la computadora y que son
indispensables para poder comunicarnos con la mquina. Un ejemplo muy claro lo es el Teclado y el Mouse.
A lo largo del tiempo, se ha demostrado que la tecnologa avanza cada da ms en busca de mejores cosas y
mayor comodidad para el usuario.
Por ello debemos tener en cuenta como utilizar los dispositivos perifrico del ordenador para obtener un
mayor aprovechamiento de cada uno de estos y hacer nuestro trabajo ms rpido y con la mayor comodidad
posible, para lograr facilitar nuestras labores cotidianas en las ayuda de estas maquinas.
Los Tipos de Dispositivos de Entrada, salida o entrada/salida ms comunes son:
a) Teclado: El teclado es un dispositivo eficaz para introducir datos no grficos como rtulos de imgenes
asociados con un despliegue de grficas. Los teclados tambin pueden ofrecerse con caractersticas que
facilitan la entrada de coordenadas de la pantalla, selecciones de mens o funciones de grficas.
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.
LA INFORMTICA Y EL MANEJO
DE LA INFORMACIN
9
156
c) Micrfono, cascos, altavoces: Los micrfonos son los transductores encargados de transformar energa
acstica en energa elctrica, permitiendo, por lo tanto el registro, almacenamiento, transmisin y
procesamiento electrnico de las seales de audio. Son dispositivos duales de los altoparlantes, constituyendo
ambos transductores los elementos mas significativos en cuanto a las caractersticas sonoras que sobre
imponen a las seales de audio.
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.
LA INFORMTICA Y EL MANEJO
DE LA INFORMACIN
10
157
f) Pantalla o Monitor: Es en donde se ve la informacin suministrada por el ordenador. En el caso ms habitual
se trata de un aparato basado en un tubo de rayos catdicos (CRT) como el de los televisores, mientras que
en los porttiles y en ordenadores actuales es una pantalla plana de cristal lquido (LCD).
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
LA INFORMTICA Y EL MANEJO
DE LA INFORMACIN
11
158
mientras que el disco gira en un sentido. La informacin se almacena en pistas concntricas que a su vez se
dividen en sectores que a su vez se dividen en bloques.
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.
LA INFORMTICA Y EL MANEJO
DE LA INFORMACIN
12
159
El Pen Drive es un dispositivo de conexin USB para almacenamiento que se puede llevar en el bolsillo y de
fcil acceso y conexin a una computadora.
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.
LA INFORMTICA Y EL MANEJO
DE LA INFORMACIN
13
160
k) El DVD (tambin conocido como Digital Versatile Disc o Disco Verstil Digital, debido a su popular
uso en pelculas algunos lo llaman Disco de Video Digital) es un formato de almacenamiento ptico que
puede ser usado para guardar datos, incluyendo pelculas con alta calidad de vdeo y audio. Se asemeja a
los discos compactos en cuanto a sus dimensiones fsicas (dimetro de 12 u 8 centmetros), pero estn
codificados en un formato distinto y a una densidad mucho mayor. A diferencia de los CD, todos los DVD
deben guardar los datos utilizando un sistema de archivos denominado UDF (Universal Disk Format), el cual
es una extensin del estndar ISO 9660, usado para CD de datos. El DVD Forum (un consorcio formado por
todas las organizaciones que han participado en la elaboracin del formato) se encarga de mantener al da
sus especificaciones tcnicas.
LA INFORMTICA Y EL MANEJO
DE LA INFORMACIN
14
161
1.2 El ordenador y sus componentes:
CPU, UC, UAL y dispositivos de entrada/salida de la informacin.
Unidad Central de Proceso (CPU o UCP):
La UCP, es la Unidad Central de proceso, tambien se la conce como CPU tomado del ingles Central Process
Unit Es el verdadero cerebro de la computadora. Su misin consiste en coordinar y controlar o realizar todas
las operaciones del sistema. Se compone de elementos cuya naturaleza es exclusivamente electrnica
(circuitos).
La figura de arriba representa el esquema bsico de un ordenador
LA INFORMTICA Y EL MANEJO
DE LA INFORMACIN
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:
1- Identificar cual es la instruccin y la operacin que conlleva la instruccin.
2- Localizar los datos u operandos.
3- Desencadenar la ejecucin de la instruccin.
4- Desencadenar el almacenamiento del resultado.
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.
LA INFORMTICA Y EL MANEJO
DE LA INFORMACIN
16
163
La Unidad aritmticolgica (UAL).
Es la encargada de realizar las operaciones elementales de tipo aritmtico (generalmente sumas o restas) y
de tipo lgico (generalmente comparaciones).
Su funcin es ejecutar la operacin sobre los datos que recibe de la unidad de control. Solo sabe las
operaciones suma, resta, AND (y lgica) y OR (o lgica).
Las dems operaciones las realiza a travs de programas.
La Unidad Aritmtico Lgica consta de dos partes:
El Banco de registros generales: Que es donde se almacenan los datos que vienen de la unidad de control.
Uno de estos registros es el acumulador que es donde se van almacenando los resultados de las operaciones.
Y el operador que es el que realiza las operaciones.
Funcionamiento:
UNIDAD ARITMTICO-LGICA (UAL)
LA INFORMTICA Y EL MANEJO
DE LA INFORMACIN
17
164
TIPOS DE
ARCHIVOS DE
INFORMACIN
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
1. Ficheros y Bases de Datos y operaciones tpicas de Entrada/salida.
Todas las aplicaciones necesitan almacenar y recuperar informacin. En una computadora, cuando se ejecuta
una aplicacin (un proceso) la informacin se almacena en la memoria principal electrnica del computador;
este es un tipo de memoria voltil, de forma que cuando la aplicacin termina la informacin se pierde. Esto
es inaceptable para muchas aplicaciones, que pueden requerir que la informacin permanezca disponible
durante largos periodos de tiempo.
Con respecto a la memoria principal de las computadoras, se trata de un tipo de memoria electrnicas cuyas
principales caractersticas son:
- La memoria principal tiene poca capacidad de almacenamiento. No se pueden manipular grandes
cantidades de datos, ya que puede haber casos en los que no quepan en la memoria principal.
- La memoria principal es voltil.
- Acceso rpido a la informacin.
Otro problema es que varios procesos pueden necesitar acceder a una misma informacin de forma
concurrente.
Como los espacios de memoria de los procesos son privados, un proceso no puede acceder a los datos en el
espacio de memoria de otro. La solucin es hacer que la informacin sea independiente de los procesos.
Por tanto, hay tres requisitos esenciales para almacenar informacin durante un tiempo indefinido:
- Debe ser posible almacenar una gran cantidad de informacin.
- La informacin debe mantenerse (persistir) tras la terminacin de los procesos que la usan.
- Varios procesos deben de ser capaces de acceder a la informacin de forma concurrente.
La solucin a estos problemas consiste en almacenar la informacin en discos magnticos u otros dispositivos
en unas unidades llamadas ficheros o archivos.
Podemos definir un fichero como la abstraccin de un mecanismo que permite almacenar informacin
en un dispositivo y leerla posteriormente. De igual forma podemos definir un fichero como una
coleccin de informacin que tiene un nombre.
TIPOS DE ARCHIVOS DE
INFORMACIN
3
167
Los fichero pueden ser ledos y escritos por cualquier proceso. Son una forma de almacenamiento
denominada memoria secundaria. Sus principales cualidades son:
- Capacidad de almacenamiento slo limitada por el soporte fsico de que se disponga.
- La informacin est almacenada permanentemente.
- Acceso lento a la informacin, ya que tiene que ser transportada desde el dispositivo externo hasta
la memoria principal para su tratamiento. Existe un rea de memoria principal destinada a recibir
esta informacin procedente del dispositivo secundario. Esta rea se denomina Buffer.
De la definicin vista de fichero, se deduce que existen diferentes tipos de ficheros en funcin de:
- El tipo de informacin que contienen.
- El mtodo de organizacin de la informacin.
En funcin del tipo de informacin que contienen los ficheros y segn el mtodo usado para guardarla
codificarla dentro de estos podemos diferenciar entre :
- Ficheros de texto: Se guarda la informacin en caracteres, tal y como se mostrara en pantalla.
- Ficheros binarios: Se guarda la informacin en binario, tal y como est en memoria
TIPOS DE ARCHIVOS DE
INFORMACIN
4
168
2. CONCEPTO DE ORGANIZACIN DE FICHEROS
La organizacin hace referencia a la forma en que los registros lgicos estn almacenados, o se van a
almacenar, dentro del dispositivo de memoria auxiliar para ese fichero.
La eleccin de la organizacin de un fichero determina un mayor o menor uso de recursos del sistema, o una
mayor o menor velocidad de procesamiento as como el tipo de acceso a la hora de procesar los registros.
La organizacin es decidida por el analista en funcin del tamao del fichero y de la volatilidad y actividad
de los registros lgicos.
Para soportar las distintas organizaciones, los sistemas operativos contienen un conjunto de rutinas
especializadas llamadas mtodos de acceso (secuencial, aleatorio o los dos).
ORGANIZACIONES STANDARD DE FICHEROS (ANSI)
Son tres las organizaciones que suelen estar implementadas en todos los compilado res. (ANSI = AMERICAN
NATIONAL STANDARD INSTITUTE).
- Organizacin Secuencial
- Organizacin Indexada
- Organizacin Relativa
ORGANIZACION SECUENCIAL (SEQUENTIAL)
Los registros lgicos son almacenados unos detrs de otros, por orden de llegada.
Slo se pueden procesar en forma secuencial.
Se pueden colocar en cualquier tipo de almacenamiento auxiliar.
El archivo slo contiene registros lgicos (ninguna informacin secundaria).
ORGANIZACION INDEXADA (INDEXED)
Los registros son almacenados en orden ascendente de acuerdo con el contenido de un CAMPO CLAVE
predefinido, que identifica a cada registro lgico.
TIPOS DE ARCHIVOS DE
INFORMACIN
5
169
Se pueden procesar tanto secuencialmente como aleatoriamente y slo son posible en dispositivos de acceso
directo.
Tambin se conoce a esta organizacin como SECUENCIAL-INDEXADA.
Los ficheros indexados estn compuestos de un rea de datos y un rea de ndices en la cual se guarda la
clave de registro y la direccin de su posicin en el rea de datos. Esto permite el acceso directo a l.
ORGANIZACION DIRECTA O ALEATORIA O RELATIVA (RELATIVE)
Se basa en la divisin del espacio fsico de que disponga el fichero, en celdas destinadas a contener un slo
registro. Estas celdas estn numeradas por el nmero de posicin relativa en el fichero, y podrn o no
contener registro.
El usar archivos con organizacin relativa requiere que el programador desarrolle un algoritmo de
direccionamiento que asocie la clave de los registros lgicos con el nmero de posicin del registro en el
fichero.
Es posible el proceso secuencial (en el orden del nmero de registro); tambin es posible el acceso directo
a un registro, ya que, el sistema operativo es capaz de calcular la direccin en el disco a partir del nmero
de registro.
Es imprescindible dispositivo de almacenamiento de acceso directo. Esta organizacin tambin recibe el
nombre de aleatoria.
TIPOS DE ARCHIVOS DE
INFORMACIN
6
170
3. CONCEPTO DE METODO DE ACCESO A LA INFORMACION DE
LOS FICHEROS.
Los mtodos de acceso a ficheros son el conjunto de tcnicas que tienen por objeto facilitar la bsqueda
de informacin dentro de la organizacin fsica de los ficheros.
Esta funcin la realizan el Subsistema de Gestin de Ficheros integrado en el Sistema Operativo, que acta
como intermediario entre la organizacin fsica y la organizacin lgica (lo cual, es transparente al
usuario).
Los principales mtodos son: ACCESO SECUENCIAL, ACCESO DIRECTO y ACCESO DINAMICO. El acceso Dinmico,
se usa, para procesar un mismo fichero empleando los dos mtodos de acceso anteriores a la vez.
ACCESO SECUENCIAL (SEQUENTIAL)
Permite procesar registros secuencialmente, es decir, se leen o actualizan en el mismo orden en el que se
encuentren. Para acceder a un determinado registro es imprescindible, recorrer todos los anteriores hasta
llegar a l.
Es el tipo de acceso que se asume por defecto.
ACCESO DIRECTO (RANDOM)
Permite acceder directa y aleatoriamente a cualquier registro del fichero.
Es posible el acceso directo con ficheros Indexados (ISAM, y VSAM-KSDS) y tambin en ficheros Relativos (y
VSAM-RRDS).
SECUENCIAL Y DIRECTO A LA VEZ (DYNAMIC)
Este tipo de acceso en realidad es una mezcla de los dos anteriores.
Nos permite acceder directamente a un determinado registro lgico y despus secuencialmente, todos los
que estn grabados a continuacin de l, hasta el final del fichero.
TIPOS DE ARCHIVOS DE
INFORMACIN
7
171
CONCEPTOS BSICOS SOBRE FICHEROS
La informacin almacenada en ficheros debe ser persistente, es decir, no debe verse afectada por la creacin
y finalizacin de los procesos. La gestin de ficheros es tarea del sistema operativo, y la parte del mismo que
realiza dicha gestin se conoce como sistema de ficheros.
Desde el punto de vista de los usuarios, el aspecto ms importante de un sistema de ficheros es cmo ste
se presenta a ellos. Es decir, qu es un fichero, cmo se nombra, qu operaciones se permiten, etc. En
definitiva, al usuario le interesa saber qu es lo que puede hacer. Desde el punto de vista de los diseadores
de sistemas, lo interesante es saber cmo est implantado el sistema de ficheros.
Veamos ahora una serie de conceptos bsicos:
- Registro lgico: Un registro es una coleccin de informacin relativa a una entidad particular. Por
tanto, el registro va a contener a todos aquellos campos lgicamente relacionados, referentes a una
determinada entidad, y que pueden ser tratados globalmente por un programa. Por ejemplo la
informacin de un determinado alumno, que contiene los campos DNI, nombre, apellidos, fecha de
nacimiento, etc.
- Clave de un registro lgico: Una clave es un campo o conjunto de campos de datos que identifica
al registro lgico y lo diferencia del resto de registros lgicos del fichero. Por tanto, esta clave debe
ser distinta para cada registro.
- Registro activo: El registro lgico que va a procesarse en la siguiente operacin del fichero.
- Apuntador: Marca interna que siempre apunta al registro lgico activo. Se incrementa
automticamente cada vez que se procesa un registro (se lee o se escribe).
- Marca de fin de fichero: Una marca situada al final de cada fichero, para no acceder mas all del
ltimo registro lgico existente, ya que el tamao del fichero no est limitado y no se conoce a
priori. Existe una funcin lgica, eof (end of file), que toma el valor verdadero cuando llegamos al
final del fichero y falso en caso contrario.
TIPOS DE ARCHIVOS DE
INFORMACIN
8
172
- Registro fsico o bloque: Un registro fsico o bloque es la cantidad ms pequea de datos que pueden
transferirse en una operacin de entrada/salida entre la memoria principal del ordenador y los
dispositivos perifricos o viceversa. El tamao del bloque o registro fsico depender de las
caractersticas del ordenador. En la mayora de los casos el tamao del bloque suele ser mayor que
el del registro lgico. La adaptacin consiste en empaquetar en cada bloque tantos registros lgicos
como se pueda. El empaquetamiento puede ser de tipo fuerte o dbil, segn que se permita o no
aprovechar el sobrante de un bloque, situando registros a caballo entre dos bloques contiguos.
- Factor de bloqueo: Factor de bloqueo es el n de registros lgicos que puede contener un registro
fsico.
TIPOS DE ARCHIVOS DE
INFORMACIN
9
173
4. OPERACIONES TIPICAS QUE SE HACEN CON LOS FICHEROS
Una vez visto lo que es un fichero y los principales conceptos al hablar de ellos, pasemos ahora a estudiarlos
desde un punto de vista operativo. Bsicamente se trata de responder: qu operaciones se pueden realizar
sobre un fichero?. La respuesta es:
- 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.
TIPOS DE ARCHIVOS DE
INFORMACIN
10
174
- Ordenacin o clasificacin: Consiste en lograr una nueva disposicin sobre el soporte de los registros
de un archivo, con una secuencia de ubicacin determinada por el valor de uno o varios campos.
- Compactacin o empaquetamiento: Esta operacin permite la reorganizacin de los registros de un
fichero eliminando los huecos libres intermedios existentes entre ellos normalmente ocasionados por
la eliminacin de registros.
TIPOS DE ARCHIVOS DE
INFORMACIN
11
175
5. LAS BASES DE DATOS.
Una base de datos o banco de datos es un conjunto de datos pertenecientes a un mismo contexto y
almacenados sistemticamente para su posterior uso. En este sentido, una biblioteca puede considerarse una
base de datos compuesta en su mayora por documentos y textos impresos en papel e indexados para su
consulta. En la actualidad, y debido al desarrollo tecnolgico de campos como la informtica y la electrnica,
la mayora de las bases de datos estn en formato digital (electrnico), que ofrece un amplio rango de
soluciones al problema de almacenar datos.
Existen unos programas denominados sistemas gestores de bases de datos, abreviado SGBD, que permiten
almacenar y posteriormente acceder a los datos de forma rpida y estructurada. Las propiedades de estos
SGBD, as como su utilizacin y administracin, se estudian dentro del mbito de la informtica.
Tipos de bases de datos.
Las bases de datos pueden clasificarse de varias maneras, de acuerdo al criterio elegido para su clasificacin:
Segn la variabilidad de los datos almacenados:
Bases de datos estticas: stas son bases de datos de slo lectura, utilizadas primordialmente para
almacenar datos histricos que posteriormente se pueden utilizar para estudiar el comportamiento de un
conjunto de datos a travs del tiempo, realizar proyecciones y tomar decisiones.
Bases de datos dinmicas: stas son bases de datos donde la informacin almacenada se modifica con el
tiempo, permitiendo operaciones como actualizacin y adicin de datos, adems de las operaciones
fundamentales de consulta. Un ejemplo de esto puede ser la base de datos utilizada en un sistema de
informacin de una tienda de abarrotes, una farmacia, un videoclub, etc.
Segn el contenido:
Bases de datos bibliogrficas: Solo contienen un surrogante (representante) de la fuente primaria, que
permite localizarla. Un registro tpico de una base de datos bibliogrfica contiene informacin sobre el autor,
fecha de publicacin, editorial, ttulo, edicin, de una determinada publicacin, etc. Puede contener un
resumen o extracto de la publicacin original, pero nunca el texto completo, porque sino estaramos en
presencia de una base de datos a texto completo (o de fuentes primariasver ms abajo). Como su nombre
lo indica, el contenido son cifras o nmeros. Por ejemplo, una coleccin de resultados de anlisis de
laboratorio, entre otras.
TIPOS DE ARCHIVOS DE
INFORMACIN
12
176
Bases de datos de texto completo: Almacenan las fuentes primarias, como por ejemplo, todo el contenido
de todas las ediciones de una coleccin de revistas cientficas.
Modelos de bases de datos:
Adems de la clasificacin por la funcin de las bases de datos, stas tambin se pueden clasificar de acuerdo
a su modelo de administracin de datos.
Un modelo de datos es bsicamente una descripcin de algo conocido como contenedor de datos (algo en
donde se guarda la informacin), as como de los mtodos para almacenar y recuperar informacin de esos
contenedores. Los modelos de datos no son cosas fsicas: son abstracciones que permiten la implementacin
de un sistema eficiente de base de datos; por lo general se refieren a algoritmos, y conceptos matemticos.
Algunos modelos con frecuencia utilizados en las bases de datos:
- Base de datos relacional
- Bases de datos orientadas a objetos
- Gestin de bases de datos distribuida
- Bases de datos jerrquicas
- Base de datos de red
- Bases de datos documentales
- Bases de datos documentales
- Bases de datos multidimensionales
TIPOS DE ARCHIVOS DE
INFORMACIN
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
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).
INTRODUCCIN A LA
PROGRAMACIN
3
180
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.
INTRODUCCIN A LA
PROGRAMACIN
4
181
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:
INTRODUCCIN A LA
PROGRAMACIN
5
182
Las otras fases del ciclo de vida de las aplicaciones informticas son:
INTRODUCCIN A LA
PROGRAMACIN
6
183
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.
INTRODUCCIN A LA
PROGRAMACIN
7
184
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
INTRODUCCIN A LA
PROGRAMACIN
8
185
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.
INTRODUCCIN A LA
PROGRAMACIN
9
186
Los lenguajes de programacin a lo largo de la historia.
Periodo Influencias Lenguajes
1950 - 1955 Ordenadores primitivos Lenguajes ensamblador.
Lenguajes experimentales de alto nivel
1956 - 1960 Ordenadores pequeos, caros y lentos FORTRAN
Cintas magnticas. ALGOL 58 y 60
Compiladores e intrpretes COBOL
Optimizacin del cdigo. LISP
1961 - 1965 Ordenadores grandes y caros FORTRAN IV
Discos magnticos COBOL 61 Extendido
Sistemas operativos ALGOL 60 Revisado
Lenguajes de propsito general. APL (como notacin slo)
1966 - 1970 Ordenadores de diferentes tamaos, PL/I
velocidades, y costes. FORTRAN 66 (estndar)
Sistemas caros de almacenamiento COBOL 65 (estndar)
masivo de datos. ALGOL 68
Sistemas operativos multitarea SIMULA 67
e interactivos. BASI
Compiladores con optimizacin. C
Lenguajes estndar, flexibles APL/360
y generales.
1971 - 1975 Micro ordenadores. PASCAL
Sistemas pequeos y baratos de COBOL 74
almacenamiento masivo de datos. PL/I
Programacin estructurada.
Ingeniera del software.
Lenguajes sencillos.
INTRODUCCIN A LA
PROGRAMACIN
10
187
Periodo Influencias Lenguajes
1976 - 1980 Ordenadores baratos y potentes. ADA
Sistemas distribuidos. FORTRAN 77
Programacin interactiva. PROLOG
Abstraccin de datos. COBOL II
Programacin con fiabifidad y fcil
mantenimiento.
1980 -1990 Ordenadores ms baratos y potentes. SmallTalk
Mayor abstraccin de datos. OOCOBOL
Menor costo de memorias C++
Programacin Orientada o Objetos Objective C
Object Pascal (Delphi)
Visual Basic
1990 - 2008 Ordenadores ms baratos y potentes. JAVA
Conexin universal. INTERNET HTML,XM
Ordenadores mucho ms pequeos. JAVASCRIPT
, , , . C#
Visual Basic .NET y muchos ms, ,
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
INTRODUCCIN A LA
PROGRAMACIN
11
188
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 0001 1010 0001 01 A1
1000 1001 1001 1010 89 9A
0011 1010 1001 1100 3A 9C
0111 0100 0111 0000 74 70
1110 1001 0010 0000 E9 20
INTRODUCCIN A LA
PROGRAMACIN
12
189
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.
EJEMPLO:
INICIO: ADD B, 1
MOV A, E
CMP A, B
JE FIN
JMP INICIO
FIN : END
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.
INTRODUCCIN A LA
PROGRAMACIN
13
190
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.
INTRODUCCIN A LA
PROGRAMACIN
14
191
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.
INTRODUCCIN A LA
PROGRAMACIN
15
192
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.
INTRODUCCIN A LA
PROGRAMACIN
16
193
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 :
INTRODUCCIN A LA
PROGRAMACIN
17
194
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.
INTRODUCCIN A LA
PROGRAMACIN
18
195
6. Cdigo fuente, cdigo objeto y cdigo ejecutable.
Definicin de conceptos de Compilacin:
PROGRAMA FUENTE: Programa cuyas instrucciones estn escritas en un lenguaje simblico.
PROGRAMA OBJETO: Programa cuyas instrucciones estn escritas en lenguaje reconocible por el
ordenador.
COMPILAR: Fundamentalmente accin de traducir un programa FUENTE a OBJETO.
COMPILADOR: Programa que realiza bsicamente la funcin de traducir un programa
FUENTE a OBJETO.
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.
INTRODUCCIN A LA
PROGRAMACIN
19
196
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 MODULO: Nombre predefinido que asocia el compilador a un verbo COBOL y el
LINKEDITOR a un conjun to de instrucciones residentes en una librera.
PROGRAMA EJECUTABLE: Programa generado por el linkeditor a partir del programa OBJETO
generado por el compilador, los mdulos COBOL Y LOS POSIBLES PRO -
GRAMAS LLAMADOS. El programa EJECUTA BLE, como dice la palabra,
est dispuesto para realizar el proceso.
PROGRAMA LLAMANTE: Programa, en nuestro caso COBOL, que contie ne una o n veces el
verbo CALL para solicitar que se le incorpore una copia del programa
indi cado como operando de dicho verbo.
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.
INTRODUCCIN A LA
PROGRAMACIN
20
197
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 explota cin).
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 instruc ciones y todas las situaciones y caminos del Programa.
INTRODUCCIN A LA
PROGRAMACIN
21
198
LA PROGRAMACIN
ESTRUCTURADA.
PSEUDOCDIGOS Y
ESTRUCTURAS
BSICAS
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
1. Introduccin a la Programacin Estructurada.
Como se vio ms arriba, un algoritmo es un conjunto finito de acciones o pasos ordenados que terminan en
la solucin del problema, y que nos permitan resolver cualquier problema, ya sea prctico o no. Un algoritmo
es solucin para un solo problema, es decir, distintos problemas tienen sus propios algoritmos especficos para
cada uno, pero un problema puede tener uno o ms algoritmos distintos como solucin.
Ejemplo de Algoritmo: Encender un fsforo.
- Tenemos una caja de fsforos con al menos 1 fsforo en su interior.
- Abrimos la caja de fsforos.
- Introducimos dedo pulgar e ndice en la caja de fsforos.
- Tomamos y sacamos un fsforo de la caja.
- Sin soltar el fsforo, deslizamos su cabeza por el costado de la caja de fsforos.
- El fsforo se enciende.
A finales de los aos sesenta surgi una nueva forma de programar que no solamente daba lugar a programas
fiables y eficientes, sino que adems estaban escritos de manera que facilitaba su comprensin posterior. El
teorema del programa estructurado, demostrado por Bhm-Jacopini, demuestra que todo programa puede
escribirse utilizando nicamente por tres tipos de instrucciones de control.
Esta metodologa es esencial e imprescindible para la programacin de los ordenadores.
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.
El primer paso de la realizacin de un programa es razonar la solucin del problema para determinar:
- Las operaciones que debe realizar el ordenador, y
- En qu secuencia
Al disear el pseudocdigo el programador tendr en cuenta:
- El objetivo que persigue el programa y como llegar a l, segn su forma habitual de razonar.
- Siempre ayuda algo, a encontrar una solucin ms fcilmente, el tener en cuenta el lenguaje de alto
nivel escogido para su codificacin final. De esta forma se facilita la traduccin de la solucin al
lenguaje final.
- Tambin es conveniente tener presente, las limitaciones de los recursos de los ordenadores
en donde se ejecutar.
LA PROGRAMACIN ESTRUCTURADA.
PSEUDOCDIGOS Y ESTRUCTURAS BSICAS
3
201
La programacin estructurada se basa en unos conceptos y unas tcnicas muy bsicas. Para disear programas
vamos a utilizar las siguientes reglas:
- Diseo descendente (TOP-DOWN). Consiste en descomponer una accin compuesta o compleja en
otras acciones ms simples. Realizamos el diseo partiendo de lo ms general a lo ms particular
descomponiendo el problema en aproximaciones sucesivas.
- El programador sigue un razonamiento deductivo subordinando lo lo particular a lo general. De
esta forma, establece las lneas maestras de su algoritmo atendiendo a las funciones generales que
deber hacer su programa. Debe razonar que grandes cosas debe hacer el programa y en que
secuencia. As pues, utilizar en sus diseos:
- Recursos abstractos (subprogramas, rutinas, etc.).
- Refinamientos sucesivos hasta lo ms elemental.
En programacin y diseo de algoritmos, el diseo estructurado persigue elaborar algoritmos
que cumplan la propiedad de modularidad, para ello, dado un problema que se pretende
resolver mediante la elaboracin de un programa de ordenador, se busca dividir dicho programa
en mdulos siguiendo los principios de diseo de Descomposicin por refinamientos sucesivos,
creacin de una Jerarqua modular y elaboracin de mdulos Independientes.
- Teorema de la estructura: Todo programa por muy complejo que sea puede ser diseado con solo
tres estructuras bsicas:
- secuencias
- alternativas o instrucciones condicionales
- y repetitivas ligadas a condiciones (bucles o iteraciones )
Solamente con estas tres estructuras se pueden escribir todos los programas y aplicaciones posibles. Si bien
los lenguajes de programacin tienen un mayor repertorio de estructuras de control, stas pueden ser
construidas mediante las tres bsicas.
Ventajas de la programacin estructurada
Con la programacin estructurada, elaborar programas de computador sigue siendo una labor que demanda
esfuerzo, creatividad, habilidad y cuidado. Sin embargo, con este estilo podemos obtener las siguientes
ventajas:
LA PROGRAMACIN ESTRUCTURADA.
PSEUDOCDIGOS Y ESTRUCTURAS BSICAS
4
202
- 1. Los programas son ms fciles de entender, ya que pueden ser ledo de forma secuencial, sin
necesidad de hacer seguimiento a saltos de lnea (GOTO) dentro de los bloques de cdigo para
entender la lgica.
- 2. La estructura del programa es clara puesto que las instrucciones estn ms ligadas o relacionadas
entre s.
- 3. Reduccin del esfuerzo en las pruebas. El seguimiento de los fallos o errores del programa
(debugging) se facilita debido a la estructura ms visible, por lo que los errores se pueden detectar
y corregir ms fcilmente.
- 4. Reduccin de los costos de mantenimiento de los programas.
- 5. Programas ms sencillos y ms rpidos (ya que es ms fcil su optimizacin).
- 6. Los bloques de cdigo son auto explicativos, lo que facilita a la documentacin.
- 7. Los GOTO se reservan para construir las instrucciones bsicas. Aunque no se usan de forma directa,
por estar prohibida su utilizacin, estn incluidas implcitamente en las instrucciones de seleccin e
iteracin.
- 8. Un programa escrito de acuerdo a estos principios no solamente tendra una estructura sino tambin
una excelente presentacin.
- 9. La programacin estructurada ofrece estos beneficios,pero no se la debe considerar como una
panacea ya que el desarrollo de programas es, principalmente, una tarea de dedicacin, esfuerzo y
creatividad.
Inconvenientes de la programacin estructurada
El principal inconveniente de este mtodo de programacin, es que se obtiene un nico bloque de programa,
que cuando se hace demasiado grande puede resultar problemtico su manejo, esto se resuelve empleando
la programacin modular, definiendo mdulos interdependientes programados y compilados por separado. Un
mtodo un poco ms sofisticado es la programacin por capas, en la que los mdulos tienen una estructura
jerrquica muy definida y se denominan capas.
LA PROGRAMACIN ESTRUCTURADA.
PSEUDOCDIGOS Y ESTRUCTURAS BSICAS
5
203
2. Instrucciones secuenciales.
El Teorema de la estructura afirma que todo programa por muy complejo que sea puede ser diseado con
solo tres estructuras bsicas. Las instrucciones secuenciales son una se ellas.
Y en ltimo termino, TODO SON INSTRUCIONES secuenciales en un programa, ya que en la CPU del ordenador
todo se ejecuta secuencialmente. Una instruccin detrs de otra. El nico matiz a destacar que estas
instrucciones secuenciales una veces sern muy elementales y otras veces sern ms complejas.
Veamos su representacin en pseudocdigo y su equivalente en ordinagrama.
LA PROGRAMACIN ESTRUCTURADA.
PSEUDOCDIGOS Y ESTRUCTURAS BSICAS
6
204
3. Instrucciones alternativas (bifurcaciones).
En el mundo real constantemente tenemos que tomar decisiones, y en funcin de la eleccin se toman
distintos caminos o acciones para dar solucin a nuestros problemas diarios.
Cuando queremos plasmar estas mismas decisiones en el pseudocdigo usamos una serie de reglas muy
estandarizadas en programacin.
El Teorema de la estructura afirma que todo programa por muy complejo que sea puede ser diseado con
solo tres estructuras bsicas. Las instrucciones alternativas o instrucciones condicionales o bifurcaciones
condicionales son las otras estructuras de diseo necesarias.
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.
LA PROGRAMACIN ESTRUCTURADA.
PSEUDOCDIGOS Y ESTRUCTURAS BSICAS
7
205
LA PROGRAMACIN ESTRUCTURADA.
PSEUDOCDIGOS Y ESTRUCTURAS BSICAS
8
206
LA PROGRAMACIN ESTRUCTURADA.
PSEUDOCDIGOS Y ESTRUCTURAS BSICAS
9
207
LA PROGRAMACIN ESTRUCTURADA.
PSEUDOCDIGOS Y ESTRUCTURAS BSICAS
10
208
4. Instrucciones repetitivas (bucles).
Como razonbamos antes, en el mundo real constantemente tenemos que realizar acciones y algunas de
ellas las tenemos que repetir varias o muchas veces hasta dar por terminado una tarea.
Cuando queremos plasmar estas mismas tareas repetitivas en el pseudocdigo usamos una serie de reglas muy
estandarizadas en programacin.
El Teorema de la estructura afirma que todo programa por muy complejo que sea puede ser diseado con
solo tres estructuras bsicas.
Las instrucciones repetitivas ligadas a condiciones tambin conocidas como instrucciones iterativas o
ms coloquialmente como bucles son la tercera estructura de diseo necesarias para disear nuestros
programas.
Veamos todos los formatos conocidos de repetitivas y su representacin en pseudocdigo y su equivalente
en ordinagrama.
LA PROGRAMACIN ESTRUCTURADA.
PSEUDOCDIGOS Y ESTRUCTURAS BSICAS
11
209
LA PROGRAMACIN ESTRUCTURADA.
PSEUDOCDIGOS Y ESTRUCTURAS BSICAS
12
210
LA PROGRAMACIN ESTRUCTURADA.
PSEUDOCDIGOS Y ESTRUCTURAS BSICAS
13
211
LA PROGRAMACIN ESTRUCTURADA.
PSEUDOCDIGOS Y ESTRUCTURAS BSICAS
14
212
LA PROGRAMACIN ESTRUCTURADA.
PSEUDOCDIGOS Y ESTRUCTURAS BSICAS
15
Funcionamiento interno del BUCLE FOR
Se ejecutan las instrucciones de la repetitiva
mientras la condicin es cierta.
213
LA PROGRAMACIN ESTRUCTURADA.
PSEUDOCDIGOS Y ESTRUCTURAS BSICAS
16
214
LA PROGRAMACIN ESTRUCTURADA.
PSEUDOCDIGOS Y ESTRUCTURAS BSICAS
17
215
LA PROGRAMACIN ESTRUCTURADA.
PSEUDOCDIGOS Y ESTRUCTURAS BSICAS
18
216
Los 4 modelos o paradigmas de la programacin actual se pueden ver representados grficamente a
continuacin:
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.
LA PROGRAMACIN ESTRUCTURADA.
PSEUDOCDIGOS Y ESTRUCTURAS BSICAS
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.
LA PROGRAMACIN ESTRUCTURADA.
PSEUDOCDIGOS Y ESTRUCTURAS BSICAS
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.
LA PROGRAMACIN ESTRUCTURADA.
PSEUDOCDIGOS Y ESTRUCTURAS BSICAS
21
219
LA PROGRAMACIN ESTRUCTURADA.
PSEUDOCDIGOS Y ESTRUCTURAS BSICAS
22
220
TCNICAS DE
PROGRAMACIN
ESTRUCTURADA
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
1. TIPOS DE DATOS MS UTILIZADOS EN LA MAYORA DE LOS LENGUAJES
DE PROGRAMACIN. (Revisin de Conceptos)
Nmero enteros:
Caracter Byte (1 byte) 0 a 255
Numerico Entero Integer (2 bytes) -32768 a 32767
Numerico Entero largo Long (4 bytes) -2.147.483648 a
+2.147.483647
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. String (hasta 64K. Un caracter por byte)
Datos Boleanos (verdadero/falso)
Booleano/Switch Boolean (2 bytes) True o False
Datos tipo Fechas
Fecha y Hora Date (8 bytes) desde ao 100 a 9999
RESUMEN: Tipologa y Tamao de los datos
BYTE 0 a 255 BOOLEAN True / False
INTEGER -32.768 a 32.767 FLOAT Decimales
LONG INTEGER -2.147.483.648 a STRING Alfanumricos
2.147.483.647
TCNICAS DE PROGRAMACIN
ESTRUCTURADA
3
223
LOS OPERADORES EN INFORMTICA: Los operadores son smbolos que sirven para conectar los datos
haciendo diversas clases de operaciones.
TIPOS DE OPERADORES DE DATOS EN INFORMTICA:
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.
TCNICAS DE PROGRAMACIN
ESTRUCTURADA
4
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.
TCNICAS DE PROGRAMACIN
ESTRUCTURADA
5
225
Formatos De Las Instrucciones Utilizadas En La Programacin Estructurada
Para El Diseo De Algoritmos Y Programas A Travs De Pseudocdigos.
TCNICAS DE PROGRAMACIN
ESTRUCTURADA
6
226
Instrucciones Repetitivas o Instrucciones Cclicas.
TCNICAS DE PROGRAMACIN
ESTRUCTURADA
7
227
2. EJERCICIOS DE TEORA Y TCNICAS DE PROGRAMACIN ESTRUCTURADA
1. Leer un nmero y, si es par, que lo imprima, si no, que vuelva a leer otro.
(Se leer uno o dos nmeros dependiendo de que meta el par a la primera).
(Ejemplo de lo que no se debe hacer en Programacin estructurada).
TCNICAS DE PROGRAMACIN
ESTRUCTURADA
8
228
Versin del uno: Leer un nmero y, si es par, que lo imprima, si no, que vuelva a leer nmeros
indefinidamente hasta que se introduzca un nmero par. Cuando se lee un par se parar el programa.
OJO: CON (numero MOD 2 = 0) EL CERO SE CUELA COMO PAR
TCNICAS DE PROGRAMACIN
ESTRUCTURADA
9
229
2. Leer dos nmeros e imprimir el mayor de ellos.
TCNICAS DE PROGRAMACIN
ESTRUCTURADA
10
230
3. Leer un nmero, si es negativo lo imprime, si no, lee un nuevo nmero e imprime la suma de ambos.
TCNICAS DE PROGRAMACIN
ESTRUCTURADA
11
231
4. Leer TRES nmeros y decir cual es el mayor de los tres (no se considerar la opcin de iguales, es decir,
al programa llegarn siempre tres nmeros distintos. Se da por supuesto que los tres nm. siempre sern
distintos).
TCNICAS DE PROGRAMACIN
ESTRUCTURADA
12
232
(4.2 continuacin. Otra forma vlida)
TCNICAS DE PROGRAMACIN
ESTRUCTURADA
13
233
(4.3 continuacin.
Otra forma Vlida. Aunque solo se guarda el nmero mayor. Los tecleados se van perdiendo. )
TCNICAS DE PROGRAMACIN
ESTRUCTURADA
14
234
(4.4 continuacin. Otras formas Vlidas. Aunque solo se guarda el nmero mayor.
Los tecleados se van perdiendo. CON REPETITIVAS).
TCNICAS DE PROGRAMACIN
ESTRUCTURADA
15
235
(4.5 continuacin.
Otra forma vlida EN LA QUE SE DETECTA LA POSIBILIDAD DE QUE HAYA NMEROS IGUALES).
Se pueden dar tres situaciones: N1 N2 N3
Que los 3 nmeros sean iguales 1 1 1 N1=N2 Y N1=N3
Que 2 de ellos sean iguales 1 1 2 N1=N2 N1=N3 N2=N3
1 2 1
2 1 1
2 2 1
2 1 2
1 2 1
Y que los 3 sean distintos ===> Ya visto en versiones anteriores en la pizarra
TCNICAS DE PROGRAMACIN
ESTRUCTURADA
16
236
5. Leer dos nmeros e imprimir todos los nmeros naturales comprendidos entre los dos nmeros ledos.
TCNICAS DE PROGRAMACIN
ESTRUCTURADA
17
237
(Tercera Versin valida : Se imprimir del numero primero al nmero segundo con independencia de
cual sea el mayor y el menor).
TCNICAS DE PROGRAMACIN
ESTRUCTURADA
18
238
(Versiones Cuarta y quinta : Se imprimir del numero primero al nmero segundo con independencia
de cual sea el mayor y el menor).
HACEN LO MISMO QUE LA VERSION ANTERIOR.
TCNICAS DE PROGRAMACIN
ESTRUCTURADA
19
239
(Sexta Versin: Se imprimir del numero primero al nmero segundo con independencia de cual sea el
mayor y el menor).
Con WHILE y text posterior y CONTROL DE IGUALES)
TCNICAS DE PROGRAMACIN
ESTRUCTURADA
20
240
6. Leer el nombre de una figura geomtrica (tringulo, cuadrado o pentgono) e imprimir su rea.
TCNICAS DE PROGRAMACIN
ESTRUCTURADA
21
241
LO MISMO PERO LLAMANDO A PROCEDIMIENTOS DONDE SE DESARROLLA
TCNICAS DE PROGRAMACIN
ESTRUCTURADA
22
242
7. Leer un nmero, entre 1 y 9, e imprimir su tabla de multiplicar
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.
TCNICAS DE PROGRAMACIN
ESTRUCTURADA
23
243
TCNICAS DE PROGRAMACIN
ESTRUCTURADA
24
244
OTRAS POSIBILIDADES:
(MENOS NORMALES)
TCNICAS DE PROGRAMACIN
ESTRUCTURADA
25
245
8. Leer un nmero entero positivo e imprimir su tabla de multiplicar as como la de los nmeros anterior
y posterior al tecleado.
TCNICAS DE PROGRAMACIN
ESTRUCTURADA
26
246
OTRAS POSIBILIDADES: TABLA DE MULTIPLICAR DE UN NMERO Y DEL ANTERIOR Y DEL POSTERIOR QUE ESTE
COMPRENDIDO ENTRE EL 0 Y EL 300 Y ADEMS SE MULTIPLICA HASTA EL n 20 EN LUGAR DE HASTA EL 10
Y ADEMAS SE VALIDA LA ENTRADA DE UN NMERO VALIDO
TCNICAS DE PROGRAMACIN
ESTRUCTURADA
27
247
OTRAS POSIBILIDADES: TABLA DE MULTIPLICAR DE UN NMERO Y DEL ANTERIOR Y DEL POSTERIOR QUE ESTE
COMPRENDIDO ENTRE EL 0 Y EL 300 Y ADEMS SE MULTIPLICA HASTA EL n 20 EN LUGAR DE HASTA EL 10
Y ADEMAS SE VALIDA LA ENTRADA DE UN NMERO VALIDO
LOS TRES EN LA MISMA LINEA
TCNICAS DE PROGRAMACIN
ESTRUCTURADA
28
248
EJERCICIOS DE
METODOLOGA DE
PROGRAMACIN
249
1. Leer un nmero entero e imprimir todos los NMEROS NATURALES comprendidos entre 1 y el nmero
entero ledo inclusive.
EJERCICIOS DE METODOLOGA
DE PROGRAMACIN
2
250
2. Leer un nmero e imprimir todos los nmeros PARES comprendidos entre 1 y ese nmero.
EJERCICIOS DE METODOLOGA
DE PROGRAMACIN
3
251
3. Leer un nmero e imprimir la suma de todos los nmeros comprendidos entre 1 y el nmero ledo.
Una vez terminado el programa, modificarlo para que adems de la suma final imprima cada uno de los
nmeros que se van sumando adems de las sumas parciales que se van obteniendo.
EJERCICIOS DE METODOLOGA
DE PROGRAMACIN
4
252
4. Crear un programa que lea las edades de una serie de personas (hasta que se reciba una EDAD
NEGATIVA o CERO) y que despus imprima la media de todas las edades procesadas (tecleadas).
EJERCICIOS DE METODOLOGA
DE PROGRAMACIN
5
253
5. Leer cinco nmeros y si alguno de ellos es par, que imprima la suma de estos cinco nmeros.
EJERCICIOS DE METODOLOGA
DE PROGRAMACIN
6
254
6. Lee las notas de los alumnos de una clase de 40 alumnos e imprime el nmero de aprobados y de
suspensos. Imprime adems la media de los aprobados y la media de los suspensos.
EJERCICIOS DE METODOLOGA
DE PROGRAMACIN
7
255
7. Lee las notas (entre 0 y 10) de Matemticas de los 40 alumnos de una clase introducidas por el
profesor e imprime la nota mayor y la nota menor.
EJERCICIOS DE METODOLOGA
DE PROGRAMACIN
8
256
(AQU CON ALGN MATIZ DISTINTO)
EJERCICIOS DE METODOLOGA
DE PROGRAMACIN
9
257
8. El programa nada ms comenzar solicita al usuario que teclee una clave o password numerica de ac-
ceso. Si esta es correcta, le pide un nuevo nmero y el programa imprime todos los pares menores que
ese nmero hasta llegar al cero ( desde el cero hasta el nmero tecleado).
Si la clave no es correcta el programa vuelve a solicitar otra vez la password, hasta un mximo de 5 in-
tentos.
(Yo soy el programador y s que la PW definida internamente es 88).
EJERCICIOS DE METODOLOGA
DE PROGRAMACIN
10
258
ARRAYS Y TABLAS
UNIDIMENSIONALES,
BIDIMENSIONALES,
TRIDIMENSIONALES Y
MULTIDIMENSIONALES.
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
Programas de proposito General con TABLAS
(Arrays, Vectores, Matrices, Poliedros)
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:
Hacer la tareas habituales que se suele necesitar realizar en la mayora de los programas con este tipo
de datos:
- 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.
ARRAYS Y TABLAS UNIDIMENSIONALES, BIDIMENSIONALES,
TRIDIMENSIONALES Y MULTIDIMENSIONALES.
3
261
1. ORDENACION DE TABLAS (Existen mltiples Mtodos)
5. A partir de dicho tabla de una dimensin (vector) de 7 elementos que contendr los gastos de cada
uno de los 7 das de la semana.
Ordenar los elementos de la tabla e imprimirlos una vez ordenados.
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.
ARRAYS Y TABLAS UNIDIMENSIONALES, BIDIMENSIONALES,
TRIDIMENSIONALES Y MULTIDIMENSIONALES.
4
262
ARRAYS Y TABLAS UNIDIMENSIONALES, BIDIMENSIONALES,
TRIDIMENSIONALES Y MULTIDIMENSIONALES.
5
263
ARRAYS Y TABLAS UNIDIMENSIONALES, BIDIMENSIONALES,
TRIDIMENSIONALES Y MULTIDIMENSIONALES.
6
264
ORDENACION DE TABLAS (OTRO MTODO OPTIMIZADO)
6. A partir de dicho tabla de una dimensin (vector) de 7 elementos que contendr los gastos de cada
uno de los 7 das de la semana.
Ordenar los elementos de la tabla e imprimirlos una vez ordenados.
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.
ARRAYS Y TABLAS UNIDIMENSIONALES, BIDIMENSIONALES,
TRIDIMENSIONALES Y MULTIDIMENSIONALES.
7
265
PROGRAMA ORDENACION DE TABLAS MUY OPTIMIZADO (continuacin)
ARRAYS Y TABLAS UNIDIMENSIONALES, BIDIMENSIONALES,
TRIDIMENSIONALES Y MULTIDIMENSIONALES.
8
266
ARRAYS Y TABLAS UNIDIMENSIONALES, BIDIMENSIONALES,
TRIDIMENSIONALES Y MULTIDIMENSIONALES.
9
267
ORDENACION POR MTODO DE LA BURBUJA MEJORADO
Este tercer mtodo de ordenacin, es uno de las ms representativos (aunque no por ello el ms eficaz). Se
van comparando parejas de elementos, siempre juntos. Si se encuentra un valor desordenado se va
arrastrando hacia la izquierda hasta dejar el valor ms pequeo en la posicin CERO. Conforme se avanza,
cada vez que se encuentran dos elementos que estn desordenados se ordenan y se activa el Switch y se va
retrocediendo hasta dejar el valor ms pequeo colocado en su lugar. Despus de incrementar el indice ms
a la izquierda se comienza el proceso hasta que el indice de la izquierda se iguala al indice mximo posible
para esa tabla.
ARRAYS Y TABLAS UNIDIMENSIONALES, BIDIMENSIONALES,
TRIDIMENSIONALES Y MULTIDIMENSIONALES.
10
268
ORDENACION POR MTODO DE LA BURBUJA MEJORADO
ARRAYS Y TABLAS UNIDIMENSIONALES, BIDIMENSIONALES,
TRIDIMENSIONALES Y MULTIDIMENSIONALES.
11
269
6. A partir de una tabla como de 7 elementos. Y QUE ESTA INCOMPLETA, es decir, que HAY SITIO LIBRE
AL FINAL de la tabla y los ltimos elementos estn vacios. Insertar uno o ms nmeros (u otros datos)
introducidos por el usuario desde el teclado.
ARRAYS Y TABLAS UNIDIMENSIONALES, BIDIMENSIONALES,
TRIDIMENSIONALES Y MULTIDIMENSIONALES.
12
270
INSERTAR UN NUMERO EN SU LUGAR EN UNA TABLA ORDENADA DESPLAZANDO LOS VALORES MAYORES
QUE EL HACIA EL FINAL
(Como es lgico, debe haber elementos vacios al final de la tabla y conocer la posicin del 1 vacio).
7. A partir de una tabla ordenada como de 7 elementos y que est incompleta. Insertar uno o ms
nmeros introducidos por el usuario.
ARRAYS Y TABLAS UNIDIMENSIONALES, BIDIMENSIONALES,
TRIDIMENSIONALES Y MULTIDIMENSIONALES.
13
271
ARRAYS Y TABLAS UNIDIMENSIONALES, BIDIMENSIONALES,
TRIDIMENSIONALES Y MULTIDIMENSIONALES.
14
272
BORRAR UN ELEMENTO DE UNA TABLA .
8. A partir de una tabla de 7 elementos. Eliminar uno o ms nmeros de elementos introducidos por el
usuario.
ARRAYS Y TABLAS UNIDIMENSIONALES, BIDIMENSIONALES,
TRIDIMENSIONALES Y MULTIDIMENSIONALES.
15
273
BORRAR UN ELEMENTO DE UNA TABLA (continuacin)
ARRAYS Y TABLAS UNIDIMENSIONALES, BIDIMENSIONALES,
TRIDIMENSIONALES Y MULTIDIMENSIONALES.
16
274
EJERCICIOS CON
TABLAS/ARRAYS
BIDIMENSIONALES
(MATRICES)
275
FORMATOS TIPICOS DE TRATAMIENTOS DE TABLAS BIDIMENSIONALES:
EJERCICIOS CON TABLAS/ARRAYS
BIDIMENSIONALES (MATRICES)
2
276
1. Disear un programa que a partir de un array o tabla de dos dimensiones de 16 por 16 elementos
(16 filas y 16 columnas) cuyo nombre ser producto:
A.) Cargar el array con el PRODUCTO del nmero de la fila por el nmero de la columna .
B.) Imprimir en pantalla el contenido del array una vez cargado.
EJERCICIOS CON TABLAS/ARRAYS
BIDIMENSIONALES (MATRICES)
3
277
2. Disear un programa que cargue un array BIDIMENSIONAL llamado DIAGONAL de 10 por 10 elementos
de tal forma que los elementos de una de las diagonales se rellenen con el valor 1 y todos los dems
con el valor 0.
EJERCICIOS CON TABLAS/ARRAYS
BIDIMENSIONALES (MATRICES)
4
278
Opcion2: Si el lenguaje NO permite inicializar a la hora de crear las variables.
EJERCICIOS CON TABLAS/ARRAYS
BIDIMENSIONALES (MATRICES)
5
279
Opcion3: AQU SE METEN UNOS EN LA OTRA DIAGONAL.
EJERCICIOS CON TABLAS/ARRAYS
BIDIMENSIONALES (MATRICES)
6
280
3. A partir de una tabla BIDIMENSIONAL de 4 filas por 10 columnas ya cargada con los valores que se
deseen por parte del alumno, obtener su array transpuesto (10 filas por 4 columnas).
EJERCICIOS CON TABLAS/ARRAYS
BIDIMENSIONALES (MATRICES)
7
281
Otra posibilidad con tablas de tamaos invertidos:
EJERCICIOS CON TABLAS/ARRAYS
BIDIMENSIONALES (MATRICES)
8
282
4. A partir de una tabla BIDIMENSIONAL de 20 filas por 10 columnas ya cargada con los valores de las
notas de las 10 asignaturas de 20 alumnos.
A: Hallar la media de las notas de cada uno de los alumnos y mostrarlas por pantalla con el
formato que desee el alumno.
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.
EJERCICIOS CON TABLAS/ARRAYS
BIDIMENSIONALES (MATRICES)
9
283
5. Tenemos la informacin de las notas de un colegio guardadas en un array de tres dimensiones,
organizada de la siguiente forma:
EL primer nivel de 20 cursos, el segundo nivel 10 alumnos por curso y en el tercer nivel las 15
asignaturas de cada uno de los alumnos.
Hacer el algoritmo que recorra todos los elementos de la tabla y que a todas las notas con valor 4
5 que les sume 1 punto ms. A la vez ir sumando todas las notas (despus del posible incremento)
y al final del programa imprimir por pantalla la media de todas las notas de la tabla. (RECORRIDO
SECUENCIAL de una tabla Tridimensional).
EJERCICIOS CON TABLAS/ARRAYS
BIDIMENSIONALES (MATRICES)
10
284
6. Tenemos la informacin de las notas de un colegio guardadas en un array de tres dimensiones,
organizada de la siguiente forma:
EL primer nivel de 20 cursos, el segundo nivel 10 alumnos por curso y en el tercer nivel las 15
asignaturas de cada uno de los alumnos.
Hallar e imprimir por pantalla la media de las notas de cada uno de los alumnos as como la media
de las notas de cada uno de los 20 cursos y adems la media total de todas las medias.
EJERCICIOS CON TABLAS/ARRAYS
BIDIMENSIONALES (MATRICES)
11
285
7. A partir de un array tridimensional con informacion acumulada con los gastos de 10 aos cada uno
de 12 meses y a su vez cada uno con 31 gastos (31 das, 31 posible gasto por mes).
Sacar un informe semejante e este:
EJERCICIOS CON TABLAS/ARRAYS
BIDIMENSIONALES (MATRICES)
12
286
EJERCICIOS CON TABLAS/ARRAYS
BIDIMENSIONALES (MATRICES)
13
287
PRCTICAS DE
PROGRAMACIN
ESTRUCTURADA CON
PSEUDOCDIGOS
(seguimiento de
algoritmos)
288
1. Indica qu Tipo de Estructura de la PROGRAMACIN ESTRUCTURADA es cada una de los siguientes
Pseudocdigos. Recuerda: el Teorema de la Estructura afirma que para realizar cualquier programa basta
con utilizar distintas combinaciones de tres tipos bsicos de instrucciones, que son ... :
Tipo de Estructura de:
PRCTICAS DE PROGRAMACIN ESTRUCTURADA
CON PSEUDOCDIGOS (seguimiento de algoritmos)
2
289
2. Los siguientes algoritmos pretenden validar un cdigo con cuatro posibles valores vlidos de ficha (1, 2,
3 y 4). Qu pseudocdigo investigara correctamente si el cdigo de ficha es vlido o errneo?
PRCTICAS DE PROGRAMACIN ESTRUCTURADA
CON PSEUDOCDIGOS (seguimiento de algoritmos)
3
290
3. Dada una variable llamada Num con un valor mayor que 0 (cero), indica cul de los siguientes
pseudocdigos imprimira el resultado de las siguientes operaciones:
PRCTICAS DE PROGRAMACIN ESTRUCTURADA
CON PSEUDOCDIGOS (seguimiento de algoritmos)
4
291
4. Cuando termine el algoritmo siguiente qu procedimiento se habr procesado:
PRCTICAS DE PROGRAMACIN ESTRUCTURADA
CON PSEUDOCDIGOS (seguimiento de algoritmos)
5
292
5. Cuando haya finalizado el siguiente proceso, indica el valor de las variables R, T y X.
PRCTICAS DE PROGRAMACIN ESTRUCTURADA
CON PSEUDOCDIGOS (seguimiento de algoritmos)
6
293
6. Cuando haya finalizado el siguiente proceso, indica el valor de la variables A, B , Z e Y.
PRCTICAS DE PROGRAMACIN ESTRUCTURADA
CON PSEUDOCDIGOS (seguimiento de algoritmos)
7
294
7. Qu valor deber tener la variable Z para que, con independencia del resto del proceso, la estructura
del DO WHILE ms interna SE REPITA SLO TRES VECES.
8. Qu valor deber tener la variable T cuando finalice el proceso.
PRCTICAS DE PROGRAMACIN ESTRUCTURADA
CON PSEUDOCDIGOS (seguimiento de algoritmos)
8
295
Finalizado el proceso Qu valores tendrn las variables A y B ?
10. Finalizado el proceso Qu valor de X se imprimir ?
PRCTICAS DE PROGRAMACIN ESTRUCTURADA
CON PSEUDOCDIGOS (seguimiento de algoritmos)
9
296
PRCTICAS DE
PROGRAMACIN
ESTRUCTURADA CON
PSEUDOCDIGOS
(seguimiento de
algoritmos)
297
1.- Finalizado el proceso Qu valores tendrn las variables A y B ?.
1. Finalizado el proceso Qu valor de X se imprimir ?.
PRCTICAS DE PROGRAMACIN ESTRUCTURADA
CON PSEUDOCDIGOS (seguimiento de algoritmos)
2
298
2. Finalizado el proceso Qu valores tendrn las variables A y B ?.
3. Finalizado el proceso Qu valor de X y de P se imprimirn ?.
PRCTICAS DE PROGRAMACIN ESTRUCTURADA
CON PSEUDOCDIGOS (seguimiento de algoritmos)
3
299
4. Finalizado el proceso Qu valores tendrn las variables A y B ?.
5. Finalizado el proceso Qu valor de I se imprimir ?.
PRCTICAS DE PROGRAMACIN ESTRUCTURADA
CON PSEUDOCDIGOS (seguimiento de algoritmos)
4
300
6. Finalizado el proceso Qu valores tendrn las variables X, Y y Z ?.
PRCTICAS DE PROGRAMACIN ESTRUCTURADA
CON PSEUDOCDIGOS (seguimiento de algoritmos)
5
301
7. Finalizado el proceso Qu valores tendrn las variables A y B ?.
PRCTICAS DE PROGRAMACIN ESTRUCTURADA
CON PSEUDOCDIGOS (seguimiento de algoritmos)
6
302
8. Finalizado el proceso Qu valor de X y de A se imprimir ?
PRCTICAS DE PROGRAMACIN ESTRUCTURADA
CON PSEUDOCDIGOS (seguimiento de algoritmos)
7
303
9. Se desea sumar los nmeros enteros desde 10 hasta 20 ambos inclusive.
Cul de los siguientes pseudocdigos lo hara correctamente ?
(10-19)(10-21)(11-21)(10-20)
PRCTICAS DE PROGRAMACIN ESTRUCTURADA
CON PSEUDOCDIGOS (seguimiento de algoritmos)
8
304
10. Los siguientes Pseudocdigos pretenden buscar un cdigo de artculo en una Tabla de 20 elementos ya
cargada con los 20 artculos existentes. El cdigo de artculo a buscar se obtiene a partir de un Registro
de un fichero. Selecciona el Pseudocdigo que realiza una bsqueda secuencial de artculos en esta tabla,
parando la bsqueda al encontrar el artculo en alguno de los 20 elementos de la tabla. (El primer
elemento de la tabla es el 1).
PRCTICAS DE PROGRAMACIN ESTRUCTURADA
CON PSEUDOCDIGOS (seguimiento de algoritmos)
9
305
PRCTICAS DE PROGRAMACIN ESTRUCTURADA
CON PSEUDOCDIGOS (seguimiento de algoritmos)
10
306
PRCTICAS DE PROGRAMACIN ESTRUCTURADA
CON PSEUDOCDIGOS (seguimiento de algoritmos)
11
307
PRCTICAS DE
PROGRAMACIN
ESTRUCTURADA CON
PSEUDOCDIGOS
(seguimiento de
algoritmos)
308
1. Los siguientes Pseudocdigos pretenden buscar un cdigo de artculo en una Tabla de N elementos ya
cargada con los N artculos existentes. El cdigo de artculo a buscar se obtiene a partir de un Registro
de un fichero. Selecciona el Pseudocdigo que realiza una bsqueda secuencial de artculos en dicha
tabla, parando la bsqueda (saliendo de la repetitiva), en el caso de encontrar el artculo en alguno de
los N elementos de la tabla.
(El primer elemento de la tabla se direcciona con el ndice con valor 1).
PRCTICAS DE PROGRAMACIN ESTRUCTURADA
CON PSEUDOCDIGOS (seguimiento de algoritmos)
2
309
1. Los siguientes Pseudocdigos pretenden buscar un cdigo de artculo en una Tabla de 20 elementos ya
cargada con los 20 artculos existentes. El cdigo de artculo a buscar se obtiene a partir de un Registro
de un fichero. Selecciona el Pseudocdigo que realiza una bsqueda secuencial de artculos en esta tabla,
parndo la bsqueda Saliendo de la repetitiva) al encontrar el artculo en alguno de los 20 elementos
de la tabla. (El primer elemento de la tabla es el 1).
PRCTICAS DE PROGRAMACIN ESTRUCTURADA
CON PSEUDOCDIGOS (seguimiento de algoritmos)
3
310
2. Dado el siguiente pseudocdigo con DOS REPETITIVAS. Cuntas veces se ejecuta cada uno de los dos
bucles?
RESPUESTAS: Cuntas veces se ejecutan las 2 repetitivas?
a.- El Bucle 1 INFINITAS Veces y el Bucle 2 TAMBIN.
b.- El Bucle 1 INFINITAS Veces y el Bucle 2 NUNCA.
b.- El Bucle 2 se realiza 3 Veces por cada 10 del Bucle 1.
d.- Ninguna de las anteriores respuestas es vlida.
OPCIN CORRECTA:
PRCTICAS DE PROGRAMACIN ESTRUCTURADA
CON PSEUDOCDIGOS (seguimiento de algoritmos)
4
311
3. Qu valor tendr la variable X cuando termine el programa.
4. Qu valor tendr la variable Z cuando termine el programa.
PRCTICAS DE PROGRAMACIN ESTRUCTURADA
CON PSEUDOCDIGOS (seguimiento de algoritmos)
5
312
5. Qu valor tendr la variable Z cuando termine el programa.
PRCTICAS DE PROGRAMACIN ESTRUCTURADA
CON PSEUDOCDIGOS (seguimiento de algoritmos)
6
313
6. Finalizado el proceso Qu valor de X y de C se imprimir ?.
PRCTICAS DE PROGRAMACIN ESTRUCTURADA
CON PSEUDOCDIGOS (seguimiento de algoritmos)
7
314
7. Qu valor debera estar puesto en el recuadro, para que una vez finalizado el programa, el valor impreso
de X sea igual a 10 ?.
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 ?.
PRCTICAS DE PROGRAMACIN ESTRUCTURADA
CON PSEUDOCDIGOS (seguimiento de algoritmos)
8
315
9. Finalizado el proceso Qu valor tendr CONTADOR ?
10. Finalizado el proceso Qu valor tendr CONTADOR ?
PRCTICAS DE PROGRAMACIN ESTRUCTURADA
CON PSEUDOCDIGOS (seguimiento de algoritmos)
9
316
11. Qu valor tendrn estas variables cuando haya finalizado el programa?
PRCTICAS DE PROGRAMACIN ESTRUCTURADA
CON PSEUDOCDIGOS (seguimiento de algoritmos)
10
317
12. Qu valor tendrn estas variables cuando haya finalizado el programa?
PRCTICAS DE PROGRAMACIN ESTRUCTURADA
CON PSEUDOCDIGOS (seguimiento de algoritmos)
11
318
13. Cul de los Tres pseudocdigos siguientes cumple mejor la especificacin siguiente: De estas 3 ciudades:
Zaragoza, Oviedo y Sevilla, Cul es la que tiene mayor extensin? . (NOTA: No es posible que sean
iguales).
PRCTICAS DE PROGRAMACIN ESTRUCTURADA
CON PSEUDOCDIGOS (seguimiento de algoritmos)
12
319
Dado el siguiente pseudocdigo que pretende leer datos de un fichero y guardar en una tabla los datos de
los registros con cdigo=1 e imprimir los restantes. Tambin, una vez rellenada la tabla y antes de terminar
el proceso, tiene que imprimir la tabla. Indica cul de las afirmaciones de abajo es correcta (Nota: El
primer elemento de la tabla es el 1).
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:
PRCTICAS DE PROGRAMACIN ESTRUCTURADA
CON PSEUDOCDIGOS (seguimiento de algoritmos)
13
320
14. Indica si el resultado de las expresiones siguientes es correcto o no
15. Indica si el resultado de las expresiones siguientes es correcto o n
PRCTICAS DE PROGRAMACIN ESTRUCTURADA
CON PSEUDOCDIGOS (seguimiento de algoritmos)
14
321

Mdulo 2:
Introduccin a java


322
CARACTERSTICAS
DE LA
TECNOLOGA JAVA
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
1. Caractersticas del lenguaje Java
A lo largo ste te mostraremos los inicios del lenguaje Java y sus principales caractersticas
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.
3
Caractersticas de la Tecnologa Java
i
325
Desarrollo de las primeros navegadores
Java se convierte en un asunto de mxima importancia para SUN. Es entonces cuando desarrolla un
navegador, el HotJava, que permite trabajar con Applets Java (pequeos programas escritos Java
ejecutables/interpretables desde un navegador) y adems estaba hecho en Java.
Tena una importancia doble:
- La ejecucin sobre cualquier mquina de programas en un nuevo lenguaje.
- La potencia del mismo al desarrollar el navegador en el mismo lenguaje Java
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.
4
Caractersticas de la Tecnologa Java
i
326
Evolucin de Java
Java sigue depurndose y esto obliga a los navegadores que se precien, a seguir por el camino que Java
marca, mejorando as sus browsers incorporando las nuevas generaciones de intrpretes de Java.
Es tal el desarrollo de Java que se estudia:
Crear chips que ejecuten los bytecodes Java (cdigo Java) por hardware para mejorar los
tiempos de respuesta, que por software dejan todava mucho que desear.
Actualmente IBM y SUN trabajan en un proyecto para desarrollar microprocesadores que ejecuten Java
directamente.
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.
5
Caractersticas de la Tecnologa Java
i
327
De Java se dice que hereda la mayora de las ventajas de C++ y elimina sus inconvenientes permitiendo, de
esta manera, un desarrollo de cdigo ms eficiente y simplificado. El motivo principal de su xito podemos
encontrarlo en una de sus principales caractersticas: la independencia de la plataforma. Unido a esta
caracterstica, la segunda y de gran importancia tambin sera que es compatible con el protocolo HTTP, es
decir, los ficheros ejecutables de java son transportables a travs de la red Internet, mediante este protocolo,
permitiendo que las aplicaciones Java se distribuyan en la World Wide Web.
Portabilidad de Java
Una de la caractersticas principales de Java es su portabilidad
Debido a:
- Permite interpretar los programas Java desde cualquier plataforma de programacin.
- Es un lenguaje de plataforma independiente tanto a nivel de cdigo fuente como a nivel binario.
- Podemos escribir cdigo Java en una plataforma y marcharnos a otra, con la garanta de que sta
tambin entender el cdigo sin necesidad de tener que reescribirlo.
- Los archivos binarios Java resultado de la compilacin, conocidos por bytecodes, podrn ejecutarse
desde cualquier plataforma sin necesidad de ninguna recopilacin.
Para ejecutar los programas en Java se hacen dos operaciones:
- Compilacin
- Interpretacin
El inconveniente del uso de bytecodes, como tenemos ocasin de ver, cuando cargamos un Applet desde una
pagina Web, es la prdida de velocidad de ejecucin. Vale la pena recordar aqu el intento de desarrollar
hardware especifico para trabajar con los bytecodes Java.
6
Caractersticas de la Tecnologa Java
i
328
Tipos de programas de Java: applets
Dentro de Java podemos distinguir entre dos tipos de programas: los applets y las aplicaciones.
Los applets, son programas dinmicos e interactivos que puede ejecutarse dentro de una pgina Web.
Debe ser visualizado por un browser (navegador) con capacidad para soportar Java. Los applets se disean
para ser vistos en el navegador, el navegador lleva una mquina virtual propia de cada fabricante y es en esa
JVM (Mquina Virtual de JAVA) donde se ejecuta el applet y no en la JVM instalada en el ordenador.
7
Caractersticas de la Tecnologa Java
i
329
Tipos de programas de Java: las aplicaciones
Las aplicaciones, no requieren navegador para ejecutarlas y son programas como los desarrollados en otro
lenguaje, pero esta vez en Java.
Slo se diferencian de stos en que despus de la compilacin, requieren un intrprete de aplicaciones java,
es decir, una JVM o Mquina Virtual de Java. El cdigo de las aplicaciones debe llevar obligatoriamente una
funcin o mtodo llamado main(), mientras que en los applets esta funcin no es obligatoria y adems casi
nunca se suele poner. Se ejecutan en entorno MS-DOS.
8
Caractersticas de la Tecnologa Java
i
330
2. La Mquina Virtual de Java (JVM)
Qu es JVM
La Mquina Virtual de Java (en ingls Java Virtual Machine, JVM) es un programa nativo, es decir, ejecutable
en una plataforma especfica, capaz de interpretar y ejecutar instrucciones expresadas en un cdigo binario
especial (el bytecode), el cual es generado por el compilador del lenguaje Java.
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
9
Caractersticas de la Tecnologa Java
i
331
Ejemplos:
- Un programa .class escrito en Windows puede ser interpretado en un entorno Linux, tan slo es
necesario disponer de dicha mquina virtual para dichos entornos. De ah el famoso axioma que sigue
a Java, "escrbelo una vez, ejectalo en cualquier parte", o "Write once, run anywhere".
- La Mquina Virtual de Java puede estar implementada en software, hardware, una herramienta de
desarrollo o un browser, lee y ejecuta cdigo precompilado bytecode que es independiente de la
plataforma.
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.
10
Caractersticas de la Tecnologa Java
i
332
A partir de J2SE 5.0, los cambios en la especificacin de la JVM han sido desarrollados bajo el auspicio de la
Java Community Process (JCP) y especificada en la JSR 924. Desde el ao 2006, cambios en la especificacin
para soportar las modificaciones del formato del fichero de clases (JSR 202) se estn llevando a cabo en una
versin de mantenimiento en la JSR 924. Las especificaciones para la JVM estn publicadas en lo que se
conoce como "el libro azul".
Compiladores JIT
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.
11
Caractersticas de la Tecnologa Java
i
333
Instrucciones para grupos de tareas
La JVM tiene instrucciones para los siguientes grupos de tareas:
- Carga y almacenamiento.
- Aritmticas.
- Conversin de tipos.
- Creacin y manipulacin de objetos.
- Gestin de pilas (push/pop).
- Transferencias de control (branching).
- Invocacin y retorno a mtodos.
- Lanzar excepciones (errores en tiempo de ejecucin).
Sistema de seguridad
Una arquitectura de mquina virtual implementa un sistema de
seguridad denominada sand box security model sobre las acciones que
el cdigo puede hacer dentro de la mquina. Esto est diseado para
permitir ejecucin segura de cdigo no confiable desde fuentes
remotas.
En el caso de los applets, las restricciones fundamentales por defecto
seran:
- No puede acceder ni en modo escritura ni en modolectura a
nuestros sistemas de ficheros, por lo tanto, a bases de datos de
nuestro sistema.
- No puede establecer una comunicacin va red (sockets) con
ningn servidor distinto al del que procede el applet.
12
Caractersticas de la Tecnologa Java
i
334
3. Soporte de Fabricantes de Software
Entornos de desarrollo
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.
13
Caractersticas de la Tecnologa Java
i
335
4. Resumen
Has llegado al final de este recurso formativo que denominamos Caractersticas de la Tecnologa Java
En esta leccin hemos estudiado los siguientes contenidos:
14
Caractersticas de la Tecnologa Java
i
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
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).
3
Ediciones Java
i
339
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.
4
Ediciones Java
i
340
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
Ediciones Java
341
Componentes
J2EE tiene perfectamente especificada la API para que un desarrollador pueda hacer: componentes,
servicios y comunicaciones.
6
Ediciones Java
i
342
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.
7
Ediciones Java
i
343
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.
8
Ediciones Java
i
344
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.
9
Ediciones Java
i
Java Message Service Java Mail
345
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.
10
Ediciones Java
i
346
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.
11
Ediciones Java
i
347
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
Ediciones Java
i
348
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.
13
Ediciones Java
i
349
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.
14
Ediciones Java
i
350
4. Resumen
Has llegado al final de este recurso formativo que denominamos Ediciones Java.
En esta leccin hemos estudiado los siguientes contenidos:
15
Ediciones Java
i
351
PRIMEROS PASOS
EN JAVA
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
1. Java Development Kit JDK 6.0.
A lo largo de ste te mostraremos qu es Java Development Kit y cmo
realizar su correcta instalacin.
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.
3
Primeros pasos en Java
i
354
Java Developers Kit (JDK)
Dentro del Java Developers Kit (JDK) estn las herramientas necesarias para el desarrollo de applets y
aplicaciones en Java.
El compilador
Toma el programa en Java y genera los bytecodes que se van a poder ejecutar desde cualquier plataforma.
El compilador se llama javac.exe y se utiliza de la siguiente forma:
C:> javac NombrePrograma.java
Instalacin JDK
Para instalar el JDK se debe disponer de un espacio libre en el disco duro de alrededor de 30 Mb, a lo que
hay que sumar otros 30 Mb para la instalacin de la documentacin del producto, si bien esta ltima se
puede descargar de la pgina de SUN.
4
Primeros pasos en Java
i
355
Para instalar el JDK basta hacer doble clic sobre su archivo ejecutable y seguir las instrucciones que se
muestren a continuacin.
Una vez realizado el proceso de instalacin se puede liberar espacio del disco duro borrando los archivos de
instalacin que no se volvern a necesitar.
Para instalar la documentacin de ayuda del producto se procede de igual manera descomprimiendo el
archivo principal de documentacin. Es conveniente aunque no imprescindible, que la instalacin de la
documentacin se realice en un directorio dentro del de JDK.
5
Primeros pasos en Java
i
356
2. Configuracin de variables de entorno
Directorio de instalacin
Una vez instalados el JDK y la documentacin, ser necesario configurar ciertas variables de entorno antes
de empezar a trabajar con el producto.
Java utiliza una variable de entorno CLASSPATH para indicarle en qu directorio encontrar las clases de Java.
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.
6
Primeros pasos en Java
i
357
Directorios de instalacin del JDK
Si se examina el contenido del directorio JDK se encontrarn estos directorios:
7
Primeros pasos en Java
i
358
3. Nociones bsicas de sintaxis Java.
Directorios de instalacin del JDK
Todos los programas Java van dentro de la definicin de una clase. Adems dentro de una aplicacin Java
siempre es obligatorio definir el mtodo main al igual que ocurre en el lenguaje C.
Ya tenemos, entonces, una idea aproximada de lo que sera el esqueleto de un programa Java:
Nombre de una clase (lo que sera el nombre del programa), abriramos una llave ( { ) , definiramos el
mtodo main con todos sus parmetros y finalmente cerraramos la llave ( } ).
Si por ejemplo quisiramos definir el programa Prueba1 lo haramos de la siguiente forma:
class Prueba1 {
public static void main (String args [ ] )
{
}
}
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.
8
Primeros pasos en Java
i
359
4. Creacin del primer programa Java
Creando un programa Java I
Para poder entender mejor el funcionamiento de este lenguaje, realizaremos un ejercicio de un primer
programa Java al que vamos a llamar ImprimirFrase. Este programa lo que har ser visualizar por pantalla
la frase mi primer programa java.
Lo primero, antes de usar ningn editor, vamos a probar todo el mecanismo utilizando el bloc de notas. De
este modo aprenderemos a trabajar desde la consola MS-DOS. Lo primero que haremos ser crear la clase
ImprimirFrase. Para ello escribiremos nuestro programa dentro del bloc de notas.
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
9
Primeros pasos en Java
i
360
Creando un programa Java II
Una vez hecho lo anterior, abrimos una sesin de MS-DOS , y nos situamos en el directorio de trabajo.
Tecleamos javac ImprimeFrase.java como sigue:
Se habr generar el fichero ImprimirFrase.class que es nuestro fichero de bytecodes. Volveremos a MS-
DOS y ejecutaremos nuestro fichero .class de la siguiente forma:
El resultado ser :
10
Primeros pasos en Java
i
361
5. Utilizacin de un entorno de desarrollo IDE
JCREATOR
Para este curso hemos elegido un eeditor ditor muy sencillo de usar y altamente intuitivo, cuyas
caractersticas lo asemejan a un de los de alto rendimiento, es el JCREATOR (lo puedes descargar
gratuitamente desde www.jcreator.com)
El aspecto general que tiene dicho IDE es el siguiente:
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.
11
Primeros pasos en Java
i
362
Creando un proyecto
Para crear un proyecto nuevo iremos a la opcin del men de arriba Project seleccionando a continuacin
la opcin New Project.
Al hacer lo anterior se nos abrir la siguiente pantalla:
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.
12
Primeros pasos en Java
i
363
Creando un proyecto II
En el recuadro Name indicaremos el nombre del proyecto y en el recuadro Location indicaremos la ruta
donde estar ubicado el mismo.
Una vez seleccionada la ruta, automticamente se rellenar la misma en los recuadros Source Path (ubicacin
del fichero .java ) y Out Path (ubicacin del fichero .class).
13
Primeros pasos en Java
i
364
Proyecto 1
Este sera el aspecto de la creacin de un proyecto, al que hemos llamado Proyecto1:
Ahora para crear una clase nueva iremos al men
de arriba y seleccionaremos la opcin File y dentro
de sta la opcin New y dentro de sta la opcin
Class. A continuacin aparecer una nueva
ventana, mostramos en la siguiente pantalla.
14
Primeros pasos en Java
i
365
Crear una nueva clase
En el recuadro Name pondremos el nombre de la clase (nuestro programa Java) y en un principio, como es
una clase bsica, de momento no aadiremos ninguna opcin ms y pulsaremos el botn de Finish.
15
Primeros pasos en Java
i
366
Crear una nueva clase llamada Prueba
Si por ejemplo cresemos una clase llamada Prueba, el resultado sera el que se muestra ms abajo.
Podramos aadirle una lnea dentro del mtodo main, que imprimiese por pantalla el mensaje Clase de
Prueba (System.out.println (Clase de Prueba);),
Dentro de la botonera de arriba tendremos botones tanto para compilar como para ejecutar el programa.
16
Primeros pasos en Java
i
367
Resultado final
El resultado final sera el siguiente:
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.
17
Primeros pasos en Java
i
368
6. Resumen
Has llegado al final de este recurso formativo que denominamos Primeros pasos en Java.
En esta leccin hemos estudiado los siguientes contenidos:
18
Primeros pasos en Java
i
369
INTRODUCCIN
A JAVA
370
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
INTRODUCCIN A JAVA
371
Estructura del JDK 1.5 stndar edition ( J2SE)
Imagen sacada de la pgina oficial de SUN Microsystems
3
INTRODUCCIN A JAVA
372
Operadores condicional y de bits
1. Operador condicional:
<condicin> ? <valor cierto> : <valor falso>
c = b!= 0 ? b : 0;
2. Operadores a nivel de bits:
& (AND Binario)
| (OR Binario)
~ (NOT Binario)
^ (XOR Binario)
&
1 & 1 > 1 a = 30; b = 12; c= a & b; //c = 12
1 & 0 > 0 a 0 0 0 1 1 1 1 0
0 & 1 > 0 b 0 0 0 0 1 1 0 0
0 & 0 > 0
c 0 0 0 0 1 1 0 0
|
1 | 1 > 1 a = 30; b = 12; c= a | b; //c = 30
1 | 0 > 1 a 0 0 0 1 1 1 1 0
0 | 1 > 1 b 0 0 0 0 1 1 0 0
0 | 0 > 0
c 0 0 0 1 1 1 1 0
1 | 1 > 1 a = 30; b = 12; c= a | b; //c = 30
1 | 0 > 1 a 0 0 0 1 1 1 1 0
0 | 1 > 1 b 0 0 0 0 1 1 0 0
0 | 0 > 0 ------------------
c 0 0 0 1 1 1 1 0
~
~ 1 > 0 a = ~a; a 0 0 0 1 1 1 1 0
~ 0 > 1 ~a 1 1 1 0 0 0 0 1
^
1 ^ 1 > 0 a = 30; b = 12; c= a ^ b; //c = 18
1 ^ 0 > 1 a 0 0 0 1 1 1 1 0
0 ^ 1 > 1 b 0 0 0 0 1 1 0 0
1 ^ 1 > 0
c 0 0 0 1 0 0 1 0
4
INTRODUCCIN A JAVA
373
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
INTRODUCCIN A JAVA
374
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 fun-
cin.
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>]
}
static void saludaCliente (String Usuario) {
System.out.println (Buenos das+Usuario);
}
static int suma (int a, int b) {
return (a+b);
}
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
INTRODUCCIN A JAVA
parmetros
Retorno parmetro
Ejecucin del Retorno
Llamadas a las funciones
375
Organizacin de la memoria en un programa 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 va-
riable 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
INTRODUCCIN A JAVA
376
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);
}
- 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;
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];
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
INTRODUCCIN A JAVA
PARMETROS FORMALES
PARMETROS REALES
PASO POR VALOR
PASO POR REFERENCIA
377
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 encap-
sulados dentro de una funcin, son llamados desde ella misma una y otra vez, en contraposicin a los algo-
ritmos 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
INTRODUCCIN A JAVA
378
Mdulo: INTRODUCCION A JAVA Caso prctico
Explica brevemente cules son las dos caractersticas fundamentales del lenguaje JAVA y por qu
decimos que es un lenguaje portable, seguro y multitarea.
INTRODUCCION A JAVA Caso prctico
1
379
Mdulo: INTRODUCCION A JAVA Caso prctico
Realiza un programa JAVA, llamado Mostrar en modo MS-DOS, que muestre por pantalla la famosa frase
Hellow World, describiendo uno a uno todos los pasos desde que empezamos a escribir el cdigo
fuente en el bloc de notas hasta que obtenemos el resultado por pantalla, explicando en qu paso se
realiza la compilacin y en cul la ejecucin.
INTRODUCCION A JAVA Caso prctico
1
380

Mdulo 3:
Sintaxis del lenguaje


381
TIPOS DE DATOS Y
CADENAS DE
CARACTERES
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
1.Variables, constantes y tipos de datos
Variables y tipos de variables
Una variable representa un espacio de memoria donde almacenamos un valor,
que puede variar durante la ejecucin del programa.
- Caractersticas de las variables: nombre, tipo y valor.
- Operaciones con las variables: declaracin, uso general
(asignaciones, operaciones, ...).
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.
3
Tipos de datos y cadenas de caracteres
i
384
Declaracin de variables
Lo primero que se hace con una variable es declararla y en ese momento, si interesa, se le asigna un valor.
La declaracin de una variable consiste en incluirla en un tipo y darle un nombre.
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 de cadena: null
- Variables numricas enteras: 0 , reales: 0.0
- Variables de carcter: \u0000
- Variables 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.
4
Tipos de datos y cadenas de caracteres
i
385
Expresiones
Conjunto de variables relacionadas con todo tipo de operadores (=, +, -, *, /, etc.). Terminadas en ";" siempre.
Todas las sentencias de Java al igual que en C y C++ finalizan en punto y coma.
Y Java tambin al igual que C y C++ diferencia entre maysculas y minsculas. No es lo mismo SUMA que suma
o que Suma.
Ejemplo:
int i = 1;
int c=a+b;
boolean verdad = true;
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:
5
Tipos de datos y cadenas de caracteres
i
386
Nmeros en coma flotante:
Hay dos tipos de datos de nmeros en coma flotante:
- float 32 bits simple-precisin
- double 64 bits doble-precisin
Caracteres:
- char 16 bits de precisin.
Los caracteres se representan entre comillas simples:
char letra=n;
Booleanos
Este tipo de datos tienen dos posibles valores: true o false (por defecto).
boolean verdad=true;
Asignacin de valores a variables
Podemos asignar un valor a una variable simplemente utilizando el operador "=".
Para asignar a una variable un nmero que queremos sea flotante se aade al final del valor una "f", ya que
Java cuando detecta un literal (lo que va a la derecha del smbolo =) con coma, automticamente se lo
asigna al tipo double, con lo que si estamos definiendo un float habr que ponerle la f al final.
Ejemplo:
float b = 12.5f;
6
Tipos de datos y cadenas de caracteres
i
387
Comentarios
1. Haciendo uso del sealizador de comentario de varias lneas:
Ejemplo:
/* esto es
un comentario
multilinea
*/
2. Utilizando el sealizador de comentario de una lnea:
Ejemplo:
// esto es un comentario
// multilinea
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
Tipos de datos y cadenas de caracteres
388
Una combinacin de caracteres es un String. Se especifican entre dobles comillas. Los Strings pueden
contener caracteres de escape:
"Esto es un String"
"" // String vaco
"Esto es un \t String"
8
Tipos de datos y cadenas de caracteres
i
389
2. Cadenas de caracteres
El tipo String
Java define adems otros tipos que no estn en la anterior clasificacin de tipos primitivos o elementales de
datos, uno de stos es el tipo String.
Los String son objetos de Java con una sintaxis especialmente cmoda para representar cadenas de
caracteres.
Tambin en Java los arrays son considerados como objetos (sta es otra caracterstica importante del
lenguaje Java).
Ejemplo:
String cadena =Hola;
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 .
9
Tipos de datos y cadenas de caracteres
i
390
Creacin de objetos de la clase String
Los Strings u objetos de la clase String se pueden crear explcita o implcitamente.
String Implcitamente
Para crearlo se pone una cadena de caracteres entre comillas dobles:
System.out.println("Curso de Java");
Java crea un objeto de la clase String automticamente.
String Explcitamente
Para crear un String explcitamente (operador new) escribimos:
String cadena=new String("Curso de Java");
Tambin se puede escribir, alternativamente:
String cadena="Nuestro primer programa";
String Vaco o Nulo
Para crear un String vaco o nulo (cadena vaca) se puede hacer de estas dos formas:
String cadena="";
String cadena=new String();
10
Tipos de datos y cadenas de caracteres
i
391
3. Resumen
Has llegado al final de este recurso formativo que denominamos Tipos de datos y cadenas de caracteres
En esta leccin hemos estudiado los siguientes contenidos:
11
Tipos de datos y cadenas de caracteres
i
392
OPERADORES Y
SENTENCIAS DE
CONTROL DE
FLUJO
393
NDICE
OPERADORES Y SENTENCIAS DE CONTROL DE FLUJO
1. Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3
2. Sentencias de control de flujo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7
3. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15
394
1. Operadores
Operadores Java
Las variables, como base de informacin de un lenguaje, pueden ser creadas,
modificadas y comparadas con otras por medio de los llamados operadores.
A continuacin se enumeran los operadores utilizados en el lenguaje Java, pulsa
sobre cada uno para conocerlos.
Operadores aritmticos
Asignaciones
3
Operadores y Sentencias de control de flujo
i
395
Incrementos y decrementos
Comparaciones
Operadores lgicos
4
Operadores y Sentencias de control de flujo
i
396
Operadores bit a bit
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
Operadores y Sentencias de control de flujo
397
Aritmtica de Strings
A continuacin revisemos la aritmtica de Strings.
El comando System.out.println("hola + desde Java"), manda el mensaje a la salida standard de nuestro
sistema, es decir, a la pantalla. El signo "+" sirve para concatenar cadenas con el fin de obtener una nica
cadena, con lo que en la salida se obtendr la concatenacin (suma) de ambas cadenas Hola desde Java.
Si lo que queremos es concatenar una cadena de texto con una variable, la variable no debe de ir
entrecomillada.
Ejemplo
int x=3;
System.out.println(valor de x es: + x );
La salida que se obtiene es valor de x es: 3
6
Operadores y Sentencias de control de flujo
i
398
2.Sentencias de control de flujo
Sentencia condicional if
Existe una condicin que se evala a cierto o falso; si resulta cierto, se evalan las sentencias que estn
inmediatamente a continuacin y si resulta falso se evalan las sentencias dentro del else.
La sintaxis o estructura general de la sentencia condicional if es la siguiente:
if (condicion) {
sentencia1;
sentencia2;
...
sentencian;
}
else {
sentencia1;
sentencia2;
...
sentencian;
}
7
Operadores y Sentencias de control de flujo
i
399
El operador ternario
El operador ternario se emplea para asignar valores a una variable en funcin del cumplimiento o no de una
condicin, es decir, evala una condicin y retorna un valor dependiendo si la condicin es verdadera (true)
o falsa (false).
La sintaxis del operador ternario es la siguiente:
pregunta ? trueresultado : falseresultado;
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.
8
Operadores y Sentencias de control de flujo
i
400
Su sintaxis es:
switch (variable) {
case valor1:
sentencias1;
break;
case valor2:
sentencias2;
break;
case valorn:
sentenciasn;
break;
default:
sentenciasPorDefecto;
}
El bloque de sentencias por defecto es opcional. En la variable que evaluamos slo se pueden comparar y
utilizar tipos de variables: int, char, byte y short. sta es una caracterstica muy importante del lenguaje
Java.
Es importante resear la funcin de break. Su utilidad est en que las sentencias correspondientes a un valor
se ejecutan hasta llegar a un break, punto en el cual saltan al final del switch. As, si nos interesa que se
ejecuten unas mismas sentencias para varios valores distintos, podemos teclear las sentencias una sola vez
y omitir los breaks correspondientes
Bucle FOR
Un bucle o ciclo, en programacin, es una sentencia que se realiza repetidas veces a un trozo aislado de
cdigo hasta que la condicin asignada a dicho bucle deje de cumplirse. El bucle FOR se utiliza para repetir
ms instrucciones, un determinado nmero de veces.
9
Operadores y Sentencias de control de flujo
i
401
De entre todos los bucles, FOR se suele utilizar cuando sabemos seguro el nmero de veces que queremos
que se ejecute la sentencia.
La sintaxis del bucle FOR se muestra a continuacin.
for (inicializacin ; condicin ; incremento) {
sentencia1;
sentencia2;
...
sentencian;
}
Ejemplo
Inicializacin de las posiciones de un array a 0.
for (int i=0; i<10; i++) {
array[i]=0;
System.out.println("Posicion: " + i + " icializada a 0");
}
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.
10
Operadores y Sentencias de control de flujo
i
402
La sintaxis del bucle while se muestra a continuacin.
while (condicion) {
sentencia1;
sentencia2;
...
sentencian;
}
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.
11
Operadores y Sentencias de control de flujo
i
403
La sintaxis del bucle do/while se muestra a continuacin.
do {
sentencia1;
sentencia2;
...
sentencian;
} while (condicion);
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.
12
Operadores y Sentencias de control de flujo
i
404
Adems se puede utilizar el comando continue del mismo modo que el comando break slo que en este caso
se termina esta iteracin y no el bucle completo.
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
13
Operadores y Sentencias de control de flujo
i
405
Bucles etiquetados
Los bucles etiquetados son tiles para poner una etiqueta al bloque que queremos que se salte al utilizar
break o continue.
La forma de etiquetar consiste en poner un nombre de etiqueta terminado con ":" exactamente antes del
comienzo del bucle que queremos y aadiendo a la palabra clave break o continue el nombre de la etiqueta.
Ejemplo
salir:
for (int i=0; i<10; i++) {
while (x<50) {
if (i*x == 400)
break salir;
sentencia2;
...
sentencian;
}
sentencia2;
...
sentencian;
}
14
Operadores y Sentencias de control de flujo
i
406
3. Resumen
Has llegado al final de este recurso formativo que denominamos Operadores y sentencias de control de
flujo
En esta leccin hemos estudiado los siguientes contenidos:
15
Operadores y Sentencias de control de flujo
i
407
CLASES Y
OBJETOS.
LAS CLASES
JAVABEANS
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
1. Definicin formal de clase y objeto.
Creacin de objetos a partir de clases.
Definicin de clase
Una clase la podramos definir como una plantilla que contiene aquellas
propiedades y mtodos comunes a todos los objetos que pertenezcan a dicha clase.
En el caso de que quisiramos implementar la clase Coche, pensaramos mediante
este proceso de abstraccin en propiedades comunes a todos los coches, por
ejemplo, color, nmero de puertas, tipo de motor, etc. y tambin en aquellos
mtodos comunes a todos los coches, tales como, acelerar, frenar, etc.
Al crear un objeto, dicho objeto heredar las propiedades y mtodos de la clase a la cual pertenece y es aqu,
en dicho objeto, donde las propiedades tomarn valor.
Ejemplo
class Coche {
String color;
int numeroRuedas;
String tipoMotor;
public void acelerar(){}
public void frenar()
}
3
Clases y objetos. Las clases JavaBeans
i
410
Extend
En Java no existe la herencia mltiple, esto significa que una clase slo se puede heredar de una sola clase.
Sin embargo, varias clases s podran heredar todas ellas de la misma clase.
Para indicar que una clase hereda de otra lo indicaremos con la palabra reservada extends.
En el ejemplo la codificacin sera:
class B extends A
{
}
4
Clases y objetos. Las clases JavaBeans
i
411
Operador New
Deducimos que en Java solamente puede haber un extends.
Si queremos crear un nuevo objeto de cualquier clase, hemos de hacer uso de el operador new.
La forma de utilizarlo es la siguiente:
NombreClase NombreNuevoObjeto = new NombreClase();
Ejemplos
String str = new String();
Random r = new Random();
Date fecha = new Date(27,4,2003);
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.
5
Clases y objetos. Las clases JavaBeans
i
412
El constructor reserva memoria para un nuevo objeto e inicializa sus variables. Realmente el operador new
es el que reserva dicho espacio de memoria y posteriormente llama al constructor de la clase:
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.
6
Clases y objetos. Las clases JavaBeans
i
413
2. Implementacin de mtodos y atributos de una clase
Acceso a las variables
A las variables se accede mediante la dot notation (notacin punto).
Nos referiremos a una variable de un objeto, indicando el nombre del objeto, luego ".", y finalmente el
nombre de la variable.
Objeto.variable;
Al utilizar esta expresin se devolver el valor de la variable.
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
Clases y objetos. Las clases JavaBeans
i
414
Para poder acceder a la variable nmero, hay que hacerlo a travs de un objeto. En el ejemplo es e el
objeto, y usando la notacin punto accedemos a la variable numero.
Tipos de variables
Variables de instancia
Son aquellas que van dentro de la clase y tambin se denominan propiedades o atributos. No hace falta
inicializarlas. Se necesita un objeto para acceder a ellas.
Variables de clase
Son aquellas que van dentro de la clase, no hace falta inicializarlas, se necesita un objeto para acceder a
ellas. sta es la excepcin a la regla que sealamos antes. Adems llevan la palabra reservada static delante
al declararlas. Si modificamos su valor en un objeto, automticamente se modificar en todos los que tengan
esa variable.
static int colores;
Variables locales
Son las que van dentro de los mtodos. Es obligatorio inicializarlas antes de usarlas.
void pintar()
{
String color=Rojo;
System.out.println(color);
}
8
Clases y objetos. Las clases JavaBeans
i
415
Acceso a los mtodos
Se accede tambin haciendo uso de la dot (notacin punto) notation.
Objeto.metodo();
- Todos los mtodos llevan los parntesis asociados, con o sin parmetros.
- Igualmente como ocurra con las variables, tambin hay mtodos de instancia y mtodos de clase,
con propiedades similares.
- Es decir, si un mtodo lleva delante el modificador static significa que no es necesario tener un
objeto para poder acceder a l.
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
}
}
9
Clases y objetos. Las clases JavaBeans
i
416
Hay que recordar esta regla ya que es muy importante. Siempre que una variable o un mtodo lleven el
modificador static delante no tendremos la necesidad de tener que crear un objeto.
Declaracin completa de un mtodo
La declaracin completa de un mtodo sera:
[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 .
10
Clases y objetos. Las clases JavaBeans
i
417
Llamar a un mtodo dentro del cdigo del programa
Para llamar a un mtodo dentro del cdigo del programa ponemos su nombre asociado a un objeto (si es static
no hace falta) y se le pasan los parmetros si fuese necesario.
Ejemplo
1.
int suma(int x, int y)
{
return (x+y);
}
...
2. Despus en cualquier punto del programa hacemos la llamada al mtodo.
3.
objeto.suma(2,3);
y nos devolvera un 5.
4.
En el API de Java son muchsimos los mtodos que llevan este modificador. Para llamarlos basta con anteponer
el nombre de la clase a la que pertenece el mtodo , y en muchos otros casos ni siquiera hara falta.
El mtodo static ms conocido es el main , que es llamado por la JVM en el momento de ejecutar una clase
principal.
11
Clases y objetos. Las clases JavaBeans
i
418
Asignar el valor de un objeto a otro
Cuando asignamos el valor de un objeto a otro, lo que estamos haciendo es referenciar el segundo objeto al
primero, de modo que si cambiamos alguna variable del primer objeto, sta tambin cambiar en el segundo.
Ejemplo
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.
12
Clases y objetos. Las clases JavaBeans
i
419
3. Modificadores de acceso
En las clases: Public
Las clases declaradas como public son accesibles desde otras clases, bien sea directamente o bien mediante
herencia, desde clases declaradas fuera del paquete que contiene a esas clases pblicas debido a que, por
defecto, las clases solamente son accesibles por otras clases declaradas dentro del mismo paquete en el que
se han creado.
Para acceder desde otros paquetes, primero tienen que ser importadas. La sintaxis sera:
public class nombreClase extends nombreClase { }
En las clases: Abstract, Final, Synchronizable
Ahora revisaremos las clases Abstract, Final, Synchronizable
Abstract:
Una clase abstract tiene al menos un mtodo abstracto. Una clase abstracta no se instancia (esto significa
que no pueden crearse objetos de dichas clases), sino que se utiliza como clase base para la herencia. Es el
equivalente al prototipo de una funcin en C++. Un mtodo abstracto es un mtodo que no se puede redefinir.
Final:
Clase final es aquella que ya no puede tener clases derivadas por debajo de ella, es decir, no podra tener
clases hijas, es lo contrario a una clase abstracta. Nadie puede heredar de una clase final. Aunque sera
posible declarar clases con varias combinaciones de public, abstract y final, la declaracin de una clase
abstracta y a la vez final no tiene sentido, y el compilador no permitir que se declare una clase con esos
dos modificadores juntos.
13
Clases y objetos. Las clases JavaBeans
i
420
Synchronizable:
Este modificador indica que todos los mtodos definidos en la clase estn sincronizados, es decir, que no se
puede acceder al mismo tiempo a ellos desde distintos threads; el sistema se encarga de colocar los avisos
o warnings necesarios para evitarlo. Este mecanismo hace que desde hilos diferentes se puedan modificar
las mismas variables sin que haya problemas de que se sobrescriban.
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.
14
Clases y objetos. Las clases JavaBeans
i
421
public: Los elementos de tipo pblicos son visibles desde cualquier parte, es decir se pueden leer o modificar
desde cualquier clase que conforme la solucin de software.
protected: Los elementos protegidos sern visibles para la misma clase y las clases que heredan de sta.
private: Los elementos privados slo son visibles dentro de la clase que fueron declarados.
Estos cuatro elementos son aplicables a los atributos y mtodos de nuestras clases y los dos primeros a
nuestras clases en s.
15
Clases y objetos. Las clases JavaBeans
i
422
4. Clases de Tipo JavaBeans
Diferencia entre un objeto y un componente
En Java un objeto y un componente aparentemente son lo mismo. Sin embargo, la diferencia radica en que
un componente es reutilizable mientras que el periodo de vida de un objeto es desde que empieza el
programa hasta que ste termina.
- Se puede crear un interfaz de usuario en un IDE Java usando componentes: paneles, botones,
etiquetas, caja de listas, barras de desplazamiento, dilogos, mens, etc.
- Si has programado en cualquier lenguaje orientado a objetos, ya estars familiarizado con la idea de
componente, aunque el lenguaje de programacin sea diferente. Existen componentes que van desde
los ms simples como un botn hasta otros mucho ms complejos como un calendario, una barra de
estado, etc.
Ventaja de los JavaBeans
La especificacin de JavaBeans de Sun Microsystems los define como "componentes de software reutilizables
que se puedan manipular visualmente en una herramienta de construccin".
La primeros componentes que tuvieron gran xito fueron los VBX (Visual Basic Extension), seguidos a
continuacin por los componentes OCX (OLE Custom Controls).
La principal ventaja de los JavaBeans es que son independientes de la
plataforma, definicin tpica del lenguaje Java.
16
Clases y objetos. Las clases JavaBeans
i
423
Algunos componentes son visibles cuando se ejecuta una aplicacin, pero no tienen por qu serlo, solamente
tienen que ser visibles en el momento de su diseo, para que puedan ser manipulados por un Entorno de
Desarrollo de Aplicaciones (IDE) al estilo del NetBeans, por poner un ejemplo.
Entorno de desarrollo de aplicaciones (IDE)
Podemos crear una aplicacin en un IDE seleccionando los componentes visibles e invisibles en una paleta
de herramientas para situarlas sobre un panel o una ventana, arrastrndolos con el ratn.
Con el ratn unimos los sucesos (events) que generan un objeto (fuente), con los objetos (listeners)
interesados en responder a las acciones sobre dicho objeto.
Ejemplo
- Un botn que cuando pulsaramos sobre l automticamente nos estableciera la conexin con una base
de datos.
- Tendramos un componente que sera un botn, programado, por decirlo de alguna forma, para que
realice esa accin.
- Posteriormente dicho componente se podra agregar a una plataforma IDE para que otros
desarrolladores los incorporasen a sus desarrollos Java.
Hay compaas que se dedican a la comercializacin de componentes Java beans, como por
ejemplo The Theary Center que disea componentes para otras empresas.
17
Clases y objetos. Las clases JavaBeans
i
424
Caractersticas de los Componentes JavaBeans
A pesar de haber muchas semejanzas, los JavaBeans no deben confundirse con los Enterprise JavaBeans
(EJB), una tecnologa de componentes del lado servidor que es parte de Java EE a la que ya hicimos referencia
en apartados anteriores.
Caractersticas de los componentes JavaBeans
Introspeccin: permite analizar a la herramienta de programacin o IDE como trabaja el Bean.
Customizacin: el programador puede alterar la apariencia y la conducta del Bean.
Events: informa al IDE de los sucesos que puede generar en respuesta a las acciones del usuario o del sistema,
y tambin los sucesos que puede manejar.
Properties: permite cambiar los valores de las propiedades del Bean para personalizarlo (customization).
Persistencia: se puede guardar el estado de los Beans que han sido personalizados por el programador,
cambiando los valores de sus propiedades.
Reglas para la programacin de un Bean
Y en cuanto a la programacin pura y dura de un Bean tenemos una clase que obedece a ciertas reglas:
- Un Bean tiene que tener un constructor por defecto (sin argumentos).
- Un Bean tiene que tener persistencia, es decir, implementar el interface
Serializable.
- Un Bean tiene que tener introspeccin (instrospection). Los IDE reconocen
ciertas pautas de diseo, nombres de las funciones miembros o mtodos y
definiciones de las clases, que permiten a la herramienta de programacin
observar dentro del Bean y conocer sus propiedades y su conducta.
18
Clases y objetos. Las clases JavaBeans
i
425
Propiedades de un Bean
Las propiedades de un Bean pueden examinarse y modificarse mediante mtodos que acceden a dicha
propiedad, y pueden ser de dos tipos (patrn getter and setter) .
getter: lee el valor de la propiedad.
setter: cambia el valor de la propiedad
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;
}
19
Clases y objetos. Las clases JavaBeans
i
426
5. Resumen
Has llegado al final de este recurso formativo que denominamos Clases y objetos. Las clases JavaBeans
En esta leccin hemos estudiado los siguientes contenidos:
20
Clases y objetos. Las clases JavaBeans
i
427
ARRAYS, LA CLASE
OBJECT Y TIPOS
GENRICOS
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
1. Arrays
Declaracin del Array
Los Arrays son una lista de elementos de cualquier tipo o clase que ocupan
posiciones contiguas en la memoria y adems se pueden referenciar a travs de un
ndice. Todos los elementos han de ser del mismo tipo.
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;
3
Arrays, la clase Object y tipos genricos
i
430
i
Creacin de un Array
Hay dos formas de crear un Array:
1. Tipo_Array[ ] NombreArray = new Tipo_Arra[tamao];
Donde tamao es el nmero de elementos del Array.
Aqu en la creacin del Array es obligatorio indicar el nmero de elementos de que consta el Array.
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.
Ejemplo
char letras []={a,b,c}; // Array de carcteres de 3 posiciones
4
Arrays, la clase Object y tipos genricos
i
431
i
Acceso al Array. Arrays multidimensionales
El acceso para asignarle un valor a un objeto se hace de la siguiente manera:
NombreArray [posicin] = valor;
La posicin del Array comienza desde la posicin 0.
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.
5
Arrays, la clase Object y tipos genricos
i
432
i
Obtener la longitud del Array
Todos los objetos Array tienen una variable de instancia llamada length.
Esta variable contiene el nmero de elementos presentes en el mismo, de este modo, podramos recorrer en
un bucle FOR, el contenido del Array desde la posicin 0 hasta la ltima de la siguiente manera:
int numeros []=new int[10];
for(int i=0;i<numeros.length;i++)
{ ...
...
}
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.
6
Arrays, la clase Object y tipos genricos
i
433
i
Dentro de la definicin del mtodo main
public static void main (String args[ ] ){}
String args[ ] corresponde a la definicin de un Array denominado args, que es de tipo String, o sea, almacena
datos en formato cadena y es el Array donde se almacenan los datos que se le pasan al programa por lnea
de comandos.
A la hora de ejecutar el programa
C:>Java Prueba 6
El 6 en este caso se almacenara automticamente en la posicin 0 del Array args. Pero se almacenara como
la cadena 6 ya que el Array es de tipo cadena de caracteres. Para poder operar con l en caso de querer
realizar una operacin aritmtica habra que convertirlo a nmero entero con la funcin:
Integer.parseInt(args [0]); // args [0] hace referencia a la primera posicin del Array args.
Si queremos pasar ms de un parmetro al programa desde la lnea de comandos, se pondra uno a
continuacin del otro seguido por espacios en blanco.
Por ejemplo:
C:>Java Prueba 4 hola 56 luis
Array args
El Array args es el nico Array en Java cuya dimensin es indefinida.
7
Arrays, la clase Object y tipos genricos
i
434
2. La clase Object y las conversiones de tipos
La clase Object
La clase Object es la clase raz de la cual derivan todas las clases. Esta derivacin es implcita, todas las clases
Java, si no indicamos nada, derivan de Object.
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.
8
Arrays, la clase Object y tipos genricos
i
435
Solo sern iguales si son el mismo objeto, ya que lo que realmente contiene un objeto es una direccin de
memoria. En esta direccin de memoria guarda el contenido del objeto, de tal modo, que aunque 2 objetos
distintos tengan el mismo contenido, al compararlos con el operador == sern diferentes ya que lo que
realmente estamos comparando son 2 direcciones de memoria distintas.
Para comparar dos objetos String utilizaremos el mtodo equals() perteneciente a la clase Object, en lugar
del operador '==' por el mismo motivo que hemos citado antes ya que los Strings en Java son objetos.
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();
9
Arrays, la clase Object y tipos genricos
i
436
Tambin podramos hacer uso del operador instanceof para saber si un objeto pertenece a una clase de la
siguiente forma:
Objeto instanceof NombreClase;
Devuelve true si el objeto es de esa clase.
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
}
10
Arrays, la clase Object y tipos genricos
i
437
Casting: conversin de tipos
Casting consiste en convertir un valor de un tipo dado, en otro valor de otro tipo, que sea compatible con el
primero y sin perder el valor original.
El Casting se puede realizar de 3 formas:
Casting entre tipo primitivos:
es el ms utilizado, no se puede aplicar a valores booleanos. Si convertimos de un tipo a otro que utiliza ms
bits para almacenar el valor, mantenemos la precisin.
La conversin de tipo aplicado a variables se hace:
VariableNueva = (NombreTipo) valor;
Ejemplo: cociente = (int) (x / y);
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
Arrays, la clase Object y tipos genricos
438
Conversin de tipos de tipos primitivos a objetos:
la conversin de tipos primitivos a objetos no se puede hacer directamente pues son dos estructuras distintas,
pero Java define clases asociadas a los tipos primitivos bsicas y as se soluciona el problema:
clase Integer para los int
clase Float para los float
clase Boolean para los boolean
...
etc.
Para crear de esta forma un objeto equivalente haramos uso de la funcin new ya conocida:
ClaseBasica NombreObjeto = new ClaseBasica();
Ejemplo: Integer num = new Integer(2);
12
Arrays, la clase Object y tipos genricos
i
439
3. Definicin de tipos genricos. Ventajas
Caractersticas de los tipos genricos
Los tipos genricos se utilizan principalmente para implementar tipos abstractos de datos como son las pilas,
las colas y otros que permiten almacenar distintos tipos de elementos segn sean instanciados en tiempo de
compilacin.
Los tipos genricos han sido aadidos a Java a partir de la versin 1.5 del jdk
- Con los tipos genricos, los tipos que contienen datos, como por ejemplo las listas, no estn definidas
para operar sobre tipos de datos especficos.
* Operan sobre un conjunto homogneo en el que el tipo de conjunto es definido en la
declaracin.
- Sin los tipos genricos, es mucho ms complicado trabajar con los tipos de datos que contienen a su
vez otros tipos.
* Para realizar esto es necesario declarar una lista que acepte objetos de tipo Object.
- Puesto que en Java todas las clases heredan de Object, la clase Lista (List) puede almacenar cualquier
tipo de elementos mediante polimorfismo (Definicin de mtodos con el mismo nombre, pero que
reciben distinto tipo o nmero de parmetros.) Luego, al recuperar estos elementos de la lista, es
necesario aadir los Castings pertinentes dependiendo del tipo de dato que haya sido introducido en
ella.
- Si en una lista metemos objetos de las clases coche, animal y casa, se guardarn como Object pero
al extraerlos de la lista habr que hacer un Casting al tipo de objeto que proceda segn se haya
guardado.
13
Arrays, la clase Object y tipos genricos
i
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.
14
Arrays, la clase Object y tipos genricos
i
441
Para el compilador los elementos de todas las listas son de tipo Object, por lo que no se pueden comprobar
los tipos en tiempo de compilacin.
El compilador sabe que los tipos de listas son diferentes porque contienen distintos elementos. Los errores
al ser detectados en tiempo de compilacin son mucho ms fciles de detectar y corregir que los errores en
tiempo de ejecucin.
La ausencia de soporte para el uso de tipos genricos fue uno de los principales handicaps que tuvo el
lenguaje Java en sus primeras versiones. Esta caracterstica estaba pensada originalmente para formar parte
de la especificacin del lenguaje, pero debido a la falta de tiempo y a la complejidad de la propuesta de su
creador James Gosling, autor de la especificacin del lenguaje, la inclusin de tipos genricos no se pudo
realizar.
15
Arrays, la clase Object y tipos genricos
i
442
4. Comodines y restricciones de tipos.
Comodines
Si necesitamos que un mtodo cualquiera aunque no sea genrico, admita cualquier objeto de un tipo
genrico como parmetro, es posible usar el comodn de tipo o tipo desconocido.
Se representa con el carcter ?, en vez de un tipo concreto. Un ejemplo es el mtodo reverse de la clase
Java.util.Collections:
Ejemplo:
static void reverse(List<?> lista)
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.
Ejemplo:
Tipo_uno get(int index) devolver Object en vez de Tipo_uno
16
Arrays, la clase Object y tipos genricos
i
443
2. Los mtodos del tipo genrico (List< Tipo_uno >) que estn declarados para aceptar argumentos cuyo tipo
es el parmetro de tipo (Tipo_uno), ), en la situacin de desconocer el tipo no pueden ser llamados. El
compilador no lo permite porque no garantizara la seguridad de tipos.
Ejemplo:
boolean add(Tipo_uno obj) no podr ser llamado
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.
17
Arrays, la clase Object y tipos genricos
i
444
El comodn de tipo limitado nos va a proporcionar una solucin ms factible:
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
18
Arrays, la clase Object y tipos genricos
i
445
5. Mtodos genricos
Los mtodos genricos son aquellos que tienen declaradas sus propias variables de tipo.
Un ejemplo son los mtodos estticos, que por su propia definicin, no pueden acceder a las variables de
tipo declaradas en su propia clase, pero s que podran tener sus propias variables de tipo.
En los mtodo genricos las variables se declaran como hasta ahora, entre los
smbolos < >( menor-mayor) y separadas por comas.
Se sitan entre los modificadores del mtodo y el tipo de retorno.
Esta sera su declaracin:
Modificador_Metodo <A,B,..> Tipo_Retorno nombre_Metodo(arg1,arg2,..)
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
Arrays, la clase Object y tipos genricos
i
446
Observa que se utiliza la variable de tipo N, para limitar las instancias de Pila. Esto se podra conseguir de
modo ms eficiente, usando comodines de tipo que vimos anteriormente:
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
Arrays, la clase Object y tipos genricos
447
6. Resumen
Has llegado al final de este recurso formativo que denominamos Arrays, la clase Object y tipos genricos
En esta leccin hemos estudiado los siguientes contenidos:
21
Arrays, la clase Object y tipos genricos
i
448
Mdulo: SINTAXIS DEL LENGUAJE Caso prctico
Haz un programa Java en modo MS-DOS, para calcular si el nmero 3456 es primo o no.
En el caso de que sea primo se imprimir un mensaje por pantalla diciendo que el nmero es primo. En
el caso de que no sea primo tendrs que imprimir pon pantalla tambin la cantidad de divisores que
tiene dicho nmero. La clase se llamar Primo.java
Utiliza las estructuras for e if.
SINTAXIS DEL LENGUAJE Caso prctico
1
449
Mdulo: SINTAXIS DEL LENGUAJE Caso prctico
Realiza un programa JAVA llamado Factorial.java en modo MS-DOS que muestre por pantalla el
factorial del nmero que se introduzca por lnea de comandos. Dicho nmero ha de estar comprendido
entre 1 y 10, en caso de que no sea as se mostrar por pantalla el mensaje Fuera de Rango y
directamente nos sacar del programa ( return).
En caso de que el nmero de parmetros pasados al programa desde la lnea de comandos sea distinto
de 1 sacaremos un mensaje diciendo Nmero de parmetros incorrectos.
Utiliza las estructuras for e if.
SINTAXIS DEL LENGUAJE Caso prctico
1
450

Mdulo 4:
Utilizacin de las libreras
bsicas de java


451
IMPORTAR CLASES:
EL PAQUETE
JAVA.LANG
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
1. Importar clases y paquetes externos
Paquetes Java
Un paquete o package es un conjunto de clases agrupadas bajo un mismo
mbito, o sea, se agrupan todas las clases para evitar posibles errores en las
llamadas a las mismas.
Las vamos a ir agrupando en carpetas Windows en base a la funcionalidad
que desempeen dichas clases.
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.
}
3
Importar clases: el paquete java.lang
i
454
i
Caractersticas de los paquetes
La palabra reservada package, permite agrupar clases e interfaces (ms adelante veremos el concepto de
interface Java).
Los nombres de los paquetes son palabras separadas por puntos y se almacenan en directorios que coinciden
con esos nombres.
Los siguientes archivos: Applet.java, AppletContext.java, AppletStub.java, AudioClip.java, que son clases ya
creadas en Java con sus propios mtodos y variables, contienen al inicio de su cdigo la siguiente lnea:
package java.applet;
Las clases que se obtienen al compilar dichos ficheros, se encuentran con el nombre:
nombre_de_clase.class, en el directoriojava/applet
Import
Para utilizar una clase desde fuera de un paquete vamos a usar la sentencia import:
El carcter * importa todas las libreras de ese paquete, es como si fuese un comodn.
4
Importar clases: el paquete java.lang
i
455
i
Los paquetes de clases se cargan con la palabra reservada import, especificando el nombre del paquete como
ruta y nombre de clase, de la misma forma que el #include de C y C++.
Si un fichero fuente Java no contiene ningn package, se coloca en el paquete por defecto sin nombre que
sera en este caso el mismo directorio en el que se encuentre el fichero fuente.
Tipos de paquetes Java
El lenguaje Java proporciona una serie de paquetes que incluyen interfaces grficas de usuario con todos sus
componentes, ventanas, botones, utilidades, un sistema de entrada/salida con ficheros, streams,
comunicaciones, etc.
Los paquetes Java que se incluyen son:
java.applet
Este paquete contiene las clases especficas para usar applets. Hay una clase Applet y tres interfaces:
AppletContext, AppletStub y AudioClip. Las interfaces, como veremos ms adelante, son muy similares a las
clases.
java.awt
El paquete Abstract Windowing Toolkit (awt) contiene clases para generar componentes GUI (Interfaz Grfico
de Usuario). Incluye las clases Button, Checkbox, Choice, Component, Graphics, Menu, Panel, TextArea y
TextField, Frame, Dialog ,etc. Es uno de los paquetes ms extensos del lenguaje Java.
java.io
El paquete de entrada/salida contiene las clases de acceso a ficheros, directorios, dispositivos de E/S,
mediante clases como FileInputStream, FileOutputStream, BufferedReader, etc.
Es muy utilizada en comunicaciones mediante sockets.
5
Importar clases: el paquete java.lang
i
456
java.lang
Este paquete incluye las clases del lenguaje Java propiamente dicho: Object, Thread, Exception, System,
Integer, Float, Math, String, etc.
Ademas, es el nico paquete que se importa automticamente sin necesidad de tener que recurrir a la
sentencia import de Java.
java.net
Este paquete da soporte a las comunicaciones del protocolo TCP/IP, entre ellos, el http tan importante en
Java como ya vimos. Incluye las clases Socket, URL y URLConnection , etc.
java.util
Este paquete contiene muchas utilidades Java, tiles para muchas cosas en programacin. Se incluyen, entre
otras, Date (fecha), Dictionary (diccionario), Random (nmeros aleatorios), Stack, Enumeration (es una
coleccin de objetos muy usado en Java), etc.
Sub-paquetes Java
Muchos de los paquetes Java contienen, a su vez, sub-paquetes. El hecho de que hagamos un import del
paquete entero no implica que estemos importando las clases de los sub-paquetes, sino solamente, las clases
del paquete.
6
Importar clases: el paquete java.lang
i
457
Ejemplo
El paquete java.awt, adems de contener clases, contiene un sub-paquete denominado event que a su vez
contendr ms clases (observa adems que los nombres de los paquetes siempre se escriben en minsculas).
Si se escribe import java.awt.* se importan las clases que estn nicamente dentro de la carpeta awt, pero
en ningn caso las que estuviesen dentro de la subcarpeta event.
Para poder trabajar con dichas clases se debe escribir:
import java.awt.event.*;
Fjate que por cada nivel de carpetas escribimos su nombre separado con un punto.
7
Importar clases: el paquete java.lang
i
458
2. Manipulacin de cadenas con la clase String
Podemos crear una cadena de forma sencilla de la siguiente manera:
String nombre = Pedro;
Tambin, se pueden crear cadenas, a partir de la definicin de un array de caracteres:
char [] b= {P, e, d, r, o};
String nombre = new String(b);
Se permite concatenar String con el operador + (no existe sobrecarga de operadores excepto para este caso):
String apellidos = Lopez;
String nombre_completo = nombre + + apellidos;
Siempre se puede preguntar por la longitud del String:
int <String>.length()
int longitud = nombre_completo.length();
System.out.println (Hola.length());
System.out.println (new String = {H, o, l, a}.length();
Imprimira 4
8
Importar clases: el paquete java.lang
i
459
Clase Stringbuffer
Para modificar el contenido de un String se utilizar la clase Stringbuffer:
String cad = Pedro;
cad = Juan;
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 <StringBuffer>.insert (int index, char c); > insertar.
void <StringBuffer>.append (char c); > aadir.
void <StringBuffer>.append (int i); > aadir.
void <StringBuffer>.append (String s); > aadir.
void <StringBuffer>.append (Object o); > aadir.
9
Importar clases: el paquete java.lang
i
460
Ejemplo de uso de StringBuffer
StringBuffer str = new StringBuffer(Altura );
Str.append(25);
String mensaje = str.toString(); // mensaje = Altura 25
String str = El tiene+ edad +aos ;
String str = new StringBuffer(El tiene) ;
str.append(edad);
str.append(aos);
System.out.println( str.toString) ;
Mtodos importantes de la clase String
Veamos los mtodos ms importantes de la clase String. Revsalos detenidamente.
char [] <String> toCharArray ():
Retorna un array de caracteres. (2 bytes/carcter).
byte [] <String>.getBytes ():
Retorna un array de bytes. (1 byte/carcter).
boolean <String>.equals(String):
Comparar 2 cadenas.
Ejemplo:
if (str1.equals(str2))
{
// se cumple
}
10
Importar clases: el paquete java.lang
i
461
boolean <String>.equalsIgnoreCase(String2):
Compara 2 cadenas sin tener en cuenta maysculas ni minsculas.
boolean <String>.startsWith(String s):
Si la cadena empieza por s.
boolean <String>.endsWith(String a):
Si la cadena termina por a.
Ejemplo:
if (Fichero.endsWith(.txt))
{
// se cumple
}
int <String>.indexOf (char c):
Retorna el ndice en que se encuentra la primera ocurrencia del carcter especificado.
int <String>.indexOf (String str):
Retorna el ndice en que se encuentra la primera ocurrencia de la cadena especificada.
int <String>.indexOf (int index, char c):
Retorna el ndice en que se encuentra la primera ocurrencia del carcter especificado desde el ndice
especificado.
int <String>.indexOf (int index, String str):
Retorna el ndice en que se encuentra la primera ocurrencia de la cadena especificado desde el ndice
especificado. Si retorna 1 quiere decir que no ha encontrado la cadena o el carcter.
11
Importar clases: el paquete java.lang
i
462
String <String>.toLowerCase():
La cadena se pasa a minsculas.
String <String>.toUpperCase():
La cadena se pasa a maysculas.
char <String>.charAt(int index):
Sirve para recoger un carcter en la posicin indicada (en index).
Ejemplo de Mtodos de la clase String
Vamos a ver estos ltimos mtodos con un ejemplo. Para ello vamos a crear la clase cadenas.java que va a
evaluar la siguiente cadena En Un lUgar de lA mAncha" , la cual nos indicar, cuntas letras A mayscula
y a minscula tiene la cadena as como cuntas vocales en total.
Para esto usaremos el mtodo charAt para ir extrayendo los caracteres de la cadena y poder discriminar si
es vocal, mayscula o minscula.
Iremos paso a paso revisando el programa.
Ejemplo
public class cadenas {
public static void main(String args[]){
String cadena="En Un lUgar de lA mAncha"; //Declaramos la variable
//cadena como String
int mayusculas=0,minusculas=0,cont=0; // Declaramos las variables
12
Importar clases: el paquete java.lang
i
463
// recorremos la cadena extrayendo el carcter de la posicin i y preguntamos si //coincide
con A o a e incrementaremos sus respectivos contadores
for (int i=0; i<cadena.length(); i++){
if (cadena.charAt(i)=='A')
mayusculas++;
else
if (cadena.charAt(i)=='a')
minusculas++;
}
// Pasamos toda la cadena a minsculas
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
13
Importar clases: el paquete java.lang
i
464
3. Operaciones matemticas con la clase Math
Constantes de la clase Math
La clase Math contiene dos constantes definidas, el nmero PI y el nmero E:
public final class Math {
public static final double E = 2.7182818284590452354;
public static final double PI = 3.14159265358979323846;
//...
}
El modificador final implica que los valores que almacenan no se pueden cambiar, son valores constantes.
Para acceder a estas constantes de la clase Math, lo hacemos de la siguiente manera:
System.out.println("Pi vale " + Math.PI);
System.out.println("e vale " + Math.E);
Al tratarse de constantes estticas se puede acceder, como ya dijimos, a travs del nombre de la clase sin
necesidad de un objeto.
Mtodos de la clase Math
La clase Math tiene muchos mtodos y versiones diferentes de cada uno de ellos. Por ejemplo, para hallar
el valor absoluto de un nmero define el siguiente mtodo: se llama a un mtodo u otro, en funcin del tipo
de dato que se le pasa en su nico argumento (sobreescritura de mtodos o polimorfismo).
14
Importar clases: el paquete java.lang
i
465
public final class Math {
public static int abs(int a) {return (a < 0) ? -a : a; }
public static long abs(long a) {return (a < 0) ? -a : a; }
public static float abs(float a) {return (a < 0) ? -a : a; }
public static double abs(double a) {return (a < 0) ? -a : a; }
//...
}
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));
15
Importar clases: el paquete java.lang
i
466
Para pasar de coordenadas rectangulares a polares usaramos el mtodo atan2, que admite dos argumentos,
la ordenada y la abscisa del punto. Nos devuelve el ngulo en radianes.
double y=-6.2; //ordenada
double x=1.2; //abscisa
System.out.println("atan2(" + y+" , "+x + ") es " + Math.atan2(y, x));
Mtodos exponenciales, logartmicos, potencia y raz cuadrada
El mtodo exponencial exp devuelve el nmero e elevado a una potencia:
System.out.println("exp(2.0) es " + Math.exp(2.0));
System.out.println("exp(10.0) es " + Math.exp(10.0));
El mtodo log calcula el logaritmo natural (de base e) de un nmero
System.out.println("log(2.0) es " + Math.log(2.0));
System.out.println("log(Math.E) es " + Math.log(Math.E));
El mtodo potencia eleva un nmero x a la potencia y, se emplea pow(x, y):
System.out.println("pow(5.0, 3) es " + Math.pow(5.0,3));
Para hallar la raz cuadrada de un nmero, se emplea la funcin sqrt:
System.out.println("La raz cuadrada de " + x + " es " + Math.sqrt(99));
16
Importar clases: el paquete java.lang
i
467
Aproximacin de un nmero decimal
Si queremos definir un nmero real con un nmero determinado de nmeros decimales, empleamos el mtodo
round. Por ejemplo, para definir los nmeros x e y, con dos cifras decimales cada uno, lo haremos de la
siguiente forma:
double x = 52.2144;
double y = .04394;
System.out.println(x + " es aprox. " + (double)Math.round(x*100)/100);
System.out.println(y + " es aprox. " + (double)Math.round(y*100)/100);
Salida
52.2144 es aprox. 52.21
0.04994 es aprox. 0.05
La funcin round devuelve un nmero entero int que es necesario convertir a double para efectuar la divisin
entre 100. Si utilizamos el mtodo floor en vez de round :
System.out.println(x + " es aprox. " + Math.floor(x*100)/100);
System.out.println(y + " es aprox. " + Math.floor(y*100)/100);
Salida
52.2144 es aprox. 52.21
0.04994 es aprox. 0.04
La aproximacin del primero es correcta, ya que la tercera cifra decimal es 4 inferior a 5. La aproximacin
del segundo es incorrecta ya que la tercera cifra decimal es 9 mayor que 5.
17
Importar clases: el paquete java.lang
i
468
El mayor y el menor entre dos nmeros
Para hallar el mayor y el menor de dos nmeros se emplean los mtodos min y max que comparan nmeros
del mismo tipo.
int i = 8;
int j = -7;
double x = 92.3543;
double y = 0.2497;
// para hallar el menor de dos nmeros
System.out.println("min(" + i + "," + j + ") es " + Math.min(i,j));
System.out.println("min(" + x + "," + y + ") es " + Math.min(x,y));
// para hallar el mayor de dos nmeros
System.out.println("max(" + i + "," + j + ") es " + Math.max(i,j));
System.out.println("max(" + x + "," + y + ") es " + Math.max(x,y));
Nmeros aleatorios
La clase Math define el mtodo random, que devuelve un nmero aleatorio comprendido en el intervalo
[0.0, 1.0).
System.out.println("Nmero aleatorio: " + Math.random());
Salida: 0.25991750935573255
Por ejemplo, si quisiramos calcular un nmero aleatorio entre 0 y 1000, lo haramos de la siguiente forma:
System.out.println("Nmero aleatorio: " + (int)(Math.random()*1000));
Salida: Nmero aleatorio: 122
18
Importar clases: el paquete java.lang
469
4. Clases de envoltorio y Clases runtime
Clases Envoltorio o Clases Wrapper
Clases envoltorios o Clases Wrapper son las clases que sirven para representar los tipos fundamentales de Java
como objetos. Estn organizados de forma jerrquica:
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();
19
Importar clases: el paquete java.lang
i
470
Utilidad de objetos
La utilidad que tienen estos objetos, es pasar los tipos de datos fundamentales por referencia y poder
modificar su valor:
Los siguientes mtodos permiten convertir un String en un tipo de dato fundamental:
static byte <Byte>.parseByte(String Text)
static int <Integer>.parseInt(String Text)
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.
20
Importar clases: el paquete java.lang
i
471
Clases Runtime (procesos)
Las Clases Runtime encapsulan un proceso del intrprete de la JVM, representa slo procesos que estn
ejecutndose dentro de la JVM. Las clases Runtime no se pueden instanciar (crear objetos).
S se pueden obtener referencias al Runtime que se est ejecutando en el momento:
Static Runtime <Runtime>.getRuntime()
El Runtime representa un panel de control que va a permitir realizar las siguientes funciones sobre el proceso
en ejecucin:
Funciones
long <Runtime>.totalMemory()
Memoria adquirida en el proceso en ejecucin.
long <Runtime>.freeMemory()
Memoria libre del proceso en ejecucin.
void <Runtime>gc()
Recogida de basura (Garbage Collector).
Desde Java se puede llamar a otros programas con lenguajes de programacin diferentes con los siguientes
mtodos:
Ver mtodos
Process <Runtime>.exec (String command)
Process <Runtime>.exec (String command, String [] emulador)
Donde String [] emulador se utiliza para almacenar las variables de entorno.
Process representa un proceso externo a Java.
21
Importar clases: el paquete java.lang
472
5. Autoboxing y Unboxing
Definicin Autoboxing y Unboxing
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.
22
Importar clases: el paquete java.lang
i
473
Gracias al autoboxing podemos de manera fcil asignar un tipo primitivo a su Wrapper class, y al revs. Es
decir, podemos, por ejemplo, asignar un boolean a una clase Boolean.
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.
23
Importar clases: el paquete java.lang
i
474
6. Resumen
Has llegado al final de este recurso formativo que denominamos Importar clases: el paquete java.lang
En esta leccin hemos estudiado los siguientes contenidos:
24
Importar clases: el paquete java.lang
i
475
UTILIZACIN DE
LAS LIBRERAS
BSICAS DE JAVA
476
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
Paquetes e interfaces. APIS String y Math
Paquetes
Es un conjunto de clases agrupadas bajo un mismo espacio de nombre, es decir, se agrupan todas las clases
para evitar posibles errores en la llamada a la clase.
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 .class (bytecode).
Para empaquetar una clase:
package <nombre_paquete>;
package ajedrez;
class Torre {
// Cuerpo de la clase.
}
2
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
477
Interfaces
Un interface es una especificacin de las operaciones que tienen los objetos de un determinado tipo de
forma. Los interfaces los define un fabricante y otros cumplen con ese interface definido.
interface Television {
[abstract] void encender();
void apagar();
void subirVolumen (int cuanto);
void bajarVolumen ( int cuanto);
void cambiarCanal (int canal);
int getCanalActual();
}
class Sanyo implements Television {
int volumen, canal;
static final int MIN_VOLUMEN = 0;
static final int MAX_VOLUMEN = 20;
static final int MIN_CANAL = 1;
static final int MAX_CANAL = 99;
void apagar () {
System.out.println (Televisor apagado. Adis.);
}
void encender () {
System.out.println (Televisin Sony BT13, hola.);
}
3
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
478
void subirVolumen (int cuanto) {
if (volumen + cuanto > MAX_VOLUMEN)
volumen = MAX_VOLUMEN;
else volumen += cuanto;
}
void bajarVolumen (int cuanto) {
if (volumen cuanto > MIN_VOLUMEN)
volumen = MIN_VOLUMEN;
else volumen -= cuanto;
}
void cambiarCanal (int canal) {
if (canal < MIN_CANAL || canal > MAX_CANAl)
return;
this.canal = canal;
}
void getCanalActual() {
return canal;
}
} // Fin de clase Sanyo
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.
4
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
479
Una clase que implementa un interface, tiene que implementar todos sus mtodos o bien declararse como
abstracta.
Al haber slo herencia simple en Java tenemos:
class <nombre_clase> [extends <clase base>]
[implements <lista_interfaces>]
{. . .}
Existe conversin implcita de referencia a una clase que implementa a un interface al interface que
implementa la clase:
Sanyo s = new Sanyo();
Television tv = s; // Conversin implcita.
Television t = new Television(); // Error no se puede crear
// objeto a partir del
// interface Television.
Hay conversin explcita (casting) desde un interface hasta una clase que implemente ese interface;
s = (Sanyo) tv; // Correcto, conversin explcita.
Con un interface slo se pueden crear referencias:
Television tv;
5
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
480
Se pueden realizar funciones que reciben como parmetros interfaces y trabajar con ellos:
static void usa (Television tv) {
tv.encender();
tv.subirVolumen();
tv.apagar();
}
. . .
Sanyo s = new Sanyo()
usa (s); // Se convierte en un objeto Television.
Herencia mltiple
Una clase derivada solamente puede tener una clase base y puede implementar muchos interfaces para
derivar de otras clases ya que los interfaces slo tienen mtodos abstractos entonces no se producen
ambigedades.
Clase Base Interface
perimetro() p perimetro()
IS-A IS-A
Clase Derivada
perimetro()
Siempre se llama el permetro del rombo.
6
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
Rombo
Cuadrado
Rectngulo
481
Java mantiene la jerarqua mltiple respecto a la jerarqua y no respecto a la reutilizacin.
El mtodo toString()
Es una utilidad que se utiliza en clases de Java para que nos d una descripcin textual del objeto.
class Punto {
int x, y;
public String toString() {
return [+x+ , +y]; // No se usa el objeto this.
}
El especificador super
Se puede usar para dos funcionalidades:
- Indicar qu constructor de la clase base se quiere ejecutar cuando se crea un objeto de la clase
derivada.
- Indicar que se quiere ejecutar un mtodo de la clase base que existe tambin en la clase derivada.
class Punto {
int x, y;
Punto (int x, int y) {
this.x = x; this.y = y;
}
7
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
482
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.
}
}
A continuacin vamos a poner un extracto del API oficial de la pgina de SUN Microsystems para que tengas
a mano un resumen con los mtodos ms usados en lo que se refiere a la clase String y la clase Math.
8
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
483
Constructores
Clase String:
Constructores
String()
Initializes a newly created String object so that it represents an empty character sequence.
String(byte[] bytes)
Constructs a new String by decoding the specified array of bytes using the platforms default charset.
String(byte[] ascii, int hibyte)
Deprecated. This method does not properly convert bytes into characters. As of JDK 1.1, the
preferred way to do this is via the String constructors that take a charset name or that use the
platforms default charset.
String(byte[] bytes, int offset, int length)
Constructs a new String by decoding the specified subarray of bytes using the platforms default
charset.
String(byte[] ascii, int hibyte, int offset, int count)
Deprecated. This method does not properly convert bytes into characters. As of JDK 1.1, the
preferred way to do this is via the String constructors that take a charset name or that use the
platforms default charset.
String(byte[] bytes, int offset, int length, String charsetName)
Constructs a new String by decoding the specified subarray of bytes using the specified charset.
9
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
484
String(byte[] bytes, String charsetName)
Constructs a new String by decoding the specified array of bytes using the specified charset.
String(char[] value)
Allocates a new String so that it represents the sequence of characters currently contained in the
character array argument.
String(char[] value, int offset, int count)
Allocates a new String that contains characters from a subarray of the character array argument.
String(int[] codePoints, int offset, int count)
Allocates a new String that contains characters from a subarray of the Unicode code point array
argument.
String(String original)
Initializes a newly created String object so that it represents the same sequence of characters as the
argument; in other words, the newly created string is a copy of the argument string.
String(StringBuffer buffer)
Allocates a new string that contains the sequence of characters currently contained in the string
buffer argument.
String(StringBuilder builder)
Allocates a new string that contains the sequence of characters currently contained in the string
builder argument.
10
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
485
Mtodos
char charAt(int index)
Returns the char value at the specified index.
int codePointAt(int index)
Returns the character (Unicode code point) at the specified index.
int codePointBefore(int index)
Returns the character (Unicode code point) before the specified index.
int codePointCount(int beginIndex, int endIndex)
Returns the number of Unicode code points in the specified text range of this String.
int compareTo(String anotherString)
Compares two strings lexicographically.
int compareToIgnoreCase(String str)
Compares two strings lexicographically, ignoring case differences.
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.
11
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
486
boolean contentEquals(StringBuffer sb)
Returns true if and only if this String represents the same sequence of characters as the specified
StringBuffer.
static String copyValueOf(char[] data)
Returns a String that represents the character sequence in the array specified.
static String copyValueOf(char[] data, int offset, int count)
Returns a String that represents the character sequence in the array specified.
boolean endsWith(String suffix)
Tests if this string ends with the specified suffix.
boolean equals(Object anObject)
Compares this string to the specified object.
boolean equalsIgnoreCase(String anotherString)
Compares this String to another String, ignoring case considerations.
static String format(Locale l, String format, Object... args)
Returns a formatted string using the specified locale, format string, and arguments.
static String format(String format, Object... args)
Returns a formatted string using the specified format string and arguments.
Byte[] getBytes()
Encodes this String into a sequence of bytes using the platforms default charset, storing the result
into a new byte array.
12
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
487
void getBytes(int srcBegin, int srcEnd, byte[] dst, int dstBegin)
Deprecated. This method does not properly convert characters into bytes. As of JDK 1.1, the
preferred way to do this is via the getBytes() method, which uses the platforms default charset.
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.
int hashCode()
Returns a hash code for this string.
int indexOf(int ch)
Returns the index within this string of the first occurrence of the specified character.
int 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.
int indexOf(String str)
Returns the index within this string of the first occurrence of the specified substring.
int indexOf(String str, int fromIndex)
Returns the index within this string of the first occurrence of the specified substring, starting at the
specified index.
13
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
488
String intern()
Returns a canonical representation for the string object.
int lastIndexOf(int ch)
Returns the index within this string of the last occurrence of the specified character.
int lastIndexOf(int ch, int fromIndex)
Returns the index within this string of the last occurrence of the specified character, searching
backward starting at the specified index.
int lastIndexOf(String str)
Returns the index within this string of the rightmost occurrence of the specified substring.
int lastIndexOf(String str, int fromIndex)
Returns the index within this string of the last occurrence of the specified substring, searching
backward starting at the specified index.
int length()
Returns the length of this string.
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.
14
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
489
boolean regionMatches(int toffset, String other, int ooffset, int len)
Tests if two string regions are equal.
String replace(char oldChar, char newChar)
Returns a new string resulting from replacing all occurrences of oldChar in this string with newChar.
String replace(CharSequence target, CharSequencereplacement)
Replaces each substring of this string that matches the literal target sequence with the specified
literal replacement sequence.
String replaceAll(String regex, String replacement)
Replaces each substring of this string that matches the given regular expression with the given
replacement.
String replaceFirst(String regex, String replacement)
Replaces the first substring of this string that matches the given regular expression with the given
replacement.
String[] split(String regex)
Splits this string around matches of the given regular expression.
String[] split(String regex, int limit)
Splits this string around matches of the given regular expression
boolean startsWith(String prefix)
Tests if this string starts with the specified prefix.
boolean startsWith(String prefix, int toffset)
Tests if this string starts with the specified prefix beginning a specified index.
15
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
490
CharSequence subSequence(int beginIndex, int endIndex)
Returns a new character sequence that is a subsequence of this sequence.
String substring(int beginIndex)
Returns a new string that is a substring of this string.
String substring(int beginIndex, int endIndex)
Returns a new string that is a substring of this string.
char[] toCharArray()
Converts this string to a new character array.
String toLowerCase()
Converts all of the characters in this String to lower case using the rules of the default locale.
String toLowerCase(Locale locale)
Converts all of the characters in this String to lower case using the rules of the given Locale.
String ToString()
This object (which is already a string!) is itself returned.
String toUpperCase()
Converts all of the characters in this String to upper case using the rules of the default locale.
String toUpperCase(Locale locale)
Converts all of the characters in this String to upper case using the rules of the given Locale.
String trim()
Returns a copy of the string, with leading and trailing whitespace omitted.
16
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
491
static String valueOf(boolean b)
Returns the string representation of the boolean argument.
static String valueOf(char c)
Returns the string representation of the char argument.
static String valueOf(char[] data)
Returns the string representation of the char array argument.
static String valueOf(char[] data, int offset, int count)
Returns the string representation of a specific subarray of the char array argument.
static String valueOf(double d)
Returns the string representation of the double argument.
static String valueOf(float f)
Returns the string representation of the float argument.
static String valueOf(int i)
Returns the string representation of the int argument.
static String valueOf(long l)
Returns the string representation of the long argument.
static String valueOf(Object obj)
Returns the string representation of the Object argument.
17
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
492
Clase Math:
Mtodos
static double abs(double a)
Returns the absolute value of a double value.
static float abs(float a)
Returns the absolute value of a float value.
static int abs(int a)
Returns the absolute value of an int value.
static long abs(long a)
Returns the absolute value of a long value.
static double acos(double a)
Returns the arc cosine of an angle, in the range of 0.0 through pi.
static double asin(double a)
Returns the arc sine of an angle, in the range of -pi/2 through pi/2.
static double atan(double a)
Returns the arc tangent of an angle, in the range of -pi/2 through pi/2.
static double atan2(double y, double x)
Converts rectangular coordinates (x, y) to polar (r, theta).
18
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
493
static double cbrt(double a)
Returns the cube root of a double value.
static double ceil(double a)
Returns the smallest (closest to negative infinity) double value that is greater than or equal to the
argument and is equal to a mathematical integer.
static double cos(double a)
Returns the trigonometric cosine of an angle.
static double cosh(double x)
Returns the hyperbolic cosine of a double value.
static double exp(double a)
Returns Eulers number e raised to the power of a double value.
static double expm1(double x)
Returns e
x
-1.
static double floor(double a)
Returns the largest (closest to positive infinity) double value that is less than or equal to the argument
and is equal to a mathematical integer.
static double hypot(double x, double y)
Returns sqrt(x
2
+y
2
) without intermediate overflow or underflow.
static double IEEEremainder(double f1, double f2)
Computes the remainder operation on two arguments as prescribed by the IEEE 754 standard.
19
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
494
static double log(double a)
Returns the natural logarithm (base e) of a double value.
static double log10(double a)
Returns the base 10 logarithm of a double value.
static double log1p(double x)
Returns the natural logarithm of the sum of the argument and 1.
static double max(double a, double b)
Returns the greater of two double values.
static float max(float a, float b)
Returns the greater of two float values.
static int max(int a, int b)
Returns the greater of two int values.
static long max(long a, long b)
Returns the greater of two long values.
static double min(double a, double b)
Returns the smaller of two double values.
static float min(float a, float b)
Returns the smaller of two float values.
static int min(int a, int b)
Returns the smaller of two int values.
20
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
495
static long min(long a, long b)
Returns the smaller of two long values.
static double pow(double a, double b)
Returns the value of the first argument raised to the power of the second argument.
static double random()
Returns a double value with a positive sign, greater than or equal to 0.0 and less than 1.0.
static double rint(double a)
Returns the double value that is closest in value to the argument and is equal to a mathematical
integer.
static long round(double a)
Returns the closest long to the argument.
static int round(float a)
Returns the closest int to the argument.
static double signum(double d)
Returns the signum function of the argument; zero if the argument is zero, 1.0 if the argument is
greater than zero, -1.0 if the argument is less than zero.
static float signum(float f)
Returns the signum function of the argument; zero if the argument is zero, 1.0f if the argument is
greater than zero, -1.0f if the argument is less than zero.
static double sin(double a)
Returns the trigonometric sine of an angle.
21
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
496
static double sinh(double x)
Returns the hyperbolic sine of a double value.
static double sqrt(double a)
Returns the correctly rounded positive square root of a double value.
static double tan(double a)
Returns the trigonometric tangent of an angle.
static double tanh(double x)
Returns the hyperbolic tangent of a double value.
static double toDegrees(double angrad)
Converts an angle measured in radians to an approximately equivalent angle measured in degrees.
static double toRadians(double angdeg)
Converts an angle measured in degrees to an approximately equivalent angle measured in radians.
static double ulp(double d)
Returns the size of an ulp of the argument.
static float ulp(float f)
Returns the size of an ulp of the argument.
22
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
497
MANIPULACIN Y
FORMATO DE
FECHAS
498
NDICE
MANIPULACIN Y FORMATO DE FECHAS
1. La clase Calendar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3
2. La clase DateFormat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9
3. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12
499
1. La clase Calendar
La clase Calendar es una clase abstracta que se utiliza para conversiones
entre un objeto de tipo Date y un conjunto de campos enteros del tipo YEAR
(ao), MONTH (mes), DAY (da), HOUR (hora), etc.
Un objeto de Calendar representa una fecha de acuerdo a las reglas de un
calendario determinado. El API de java proporciona una subclase especfica
de Calendar: GregorianCalendar. Cualquier subclase de Calendar podran
representar varios tipos de calendarios lunares utilizados en cualquier lugar
del mundo.
Cuando obtenemos un objeto de la clase Calendar obtenemos un instante de tiempo especfico con gran
precisin muy parecido a lo que obtenemos con la clase Date. Si bien es cierto, podemos decir que aqu los
milisegundos desempean un papel primordial, la importancia de la clase Calendar radica, no en obtener un
instante de tiempo, sino en extraerle los datos
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.
3
Manipulacin y formato de fechas
i
500
Obtener un espacio de tiempo especfico y diferente del actual es bastante sencillo con esta clase, indicando
simplemente el da, mes y ao con que deseamos trabajar o se puede acotar an ms dando hora, minuto y
segundo que queremos.
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
4
Manipulacin y formato de fechas
i
501
Mtodo get
La clase Calendar tiene solamente un mtodo get para obtener todos sus datos, pero se apoya en una serie
de constantes que permiten obtener o ajustar una propiedad determinada de la fecha.
La clase Calendar tiene solamente un mtodo get para obtener todos sus datos, pero se apoya en una serie
de constantes que permiten obtener o ajustar una propiedad determinada de la fecha.
Las principales son:
- YEAR: ao.
- MONTH: mes.
- DATE, DAY_OF_MONTH: da del mes.
- DAY_OF_WEEK: da de la semana entre 1 (MONDAY) y 7 (SATURDAY).
- HOUR: hora antes o despus del medio da (en intervalos de 12 horas).
- HOUR_OF_DAY: la hora absoluta del da (en intervalos de 24 horas).
- MINUTE: el minuto dentro de la hora.
- SECOND: el segundo dentro del minuto.
Existen tambin las propiedades que representan los meses, como: JANUARY, MARCH, JUNE, DECEMBER, etc.
que van desde 0 (JANUARY) hasta 11 (DECEMBER), y las propiedades que representan los das: SUNDAY,
TUESDAY, SATURDAY, etc. Estos empiezan con 1 (SUNDAY) y van hasta 7 (SATURDAY).
5
Manipulacin y formato de fechas
i
502
Ejemplo de uso del mtodo get
Para obtener el valor de alguna de las propiedades que acabamos de ver, se usa el mtodo get. Para esto,
pasaramos como parmetro alguna de las constantes anteriores y el mtodo devuelve un dato de tipo int.
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
6
Manipulacin y formato de fechas
i
503
Mtodo set
Modificar una propiedad de Calendar no es complicado, slo es necesario usar el mtodo set (int atributo,
int valor). Siendo atributo una de las constante vistas anteriormente y valor la cantidad que se le quiere
asignar.
Ejemplo
cal.set(Calendar.MONTH,Calendar.JUNE)
cal.set(Calendar.YEAR, 1999)
Pondra la fecha almacenada en el objeto cal a junio o al ao 1999 sin modificar ninguna de las otras
propiedades.
Clase GregorianCalendar
Las operaciones como sumar o restar das no se hacen directamente con la clase Calendar sino con alguna
clase que herede de ella y que represente algn calendario concreto, ya que no todos los calendarios tienen
12 meses ni aos de 365 das como en occidente.
GregorianCalendar es una clase que deriva de Calendar y es la definicin del
calendario gregoriano, sta es la nica implementacin de un calendario en
jdk1.4.
A travs de esta clase podemos sumar 2 3 das a una fecha sin preocuparnos
por pasarnos de rango tanto en das, meses o aos ya que lo hace
automticamente.
Del mismo modo podemos obtener informacin como el da de la semana o
la semana del ao que fue una fecha determinada.
7
Manipulacin y formato de fechas
i
504
Este calendario usado en occidente, llamado gregoriano fue adoptado por primera vez en 1582 para sustituir
al calendario juliano utilizado desde que Julio Csar lo instaurase en el ao 46 a.c.
El calendario gregoriano consta de aos que son definidos por cada vuelta de la tierra alrededor del sol.
Cada ao tiene doce meses de los cuales 7 tienen 31 das, 4 tienen 30 das y 1 tiene 28 das excepto en aos
bisiestos que tiene 29.
Estos aos bisiestos se implantaron para corregir el desfase que existe cada cuatro aos (un ao real dura
365 das y 6 horas aproximadamente). La regla completa para los aos bisiestos segn en calendario
gregoriano es:
"Un ao es bisiesto si es divisible por 4, excluyendo los que son divisibles por 100 pero no los que son divisibles
por 400 que s son bisiestos".
El mtodo add()
El mtodo add (CONSTATE, valor) suma algebraicamente valor a una fecha.
El valor a sumar toma el valor dado por CONSTANTE, que es una de las definidas para la clase y que vimos
anteriormente (MONTH, YEAR, SECOND, etc).
Por ejemplo para sumar 3 das y 2 meses a la fecha actual.
Calendar hoy =
Calendar.getInstance();hoy.add(Calendar.DATE,
3);hoy.add(Calendar.MONTH,
2);System.out.println(hoy.getTime());
Para el mismo ejemplo de fecha anterior (15:30 p.m. del 1 de noviembre de 2008 tendramos la siguiente
salida:
Sun Jan 04 15:37:34 CET 2009
8
Manipulacin y formato de fechas
i
505
i
2. La clase DateFormat
Dateformat se define como una clase abstracta (no se puede instanciar) para trabajar con el formato
fecha/hora en alguna de las subclases suya. Proporciona los formatos y las fechas o el tiempo en un idioma
de manera independiente.
El formato fecha/hora en alguna subclase, como por ejemplo SimpleDateFormat, permite dar formato (es
decir, la fecha -> texto), anlisis sintctico ( texto -> fecha), y la normalizacin. La fecha se representa
como un objeto Date o como el nmero de milisegundos desde el 1 de enero de 1970, 00:00:00 GMT (como
en javascript).
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;
9
Manipulacin y formato de fechas
i
506
i
Ejemplo
Formatear la fecha actual:
SimpleDateFormat fecha = new SimpleDateFormat(dd/MM/yyyy);
Podemos tambin aplicar algunas mscaras segn se define en el API de esta clase. Se puede especificar una
mscara de formato personalizado para fechas y horas con una lista de smbolos.
10
Manipulacin y formato de fechas
i
507
DateFormat: Formato de estilos
Dateformat analiza el formato y fechas para cualquier localizacin. Su cdigo es absolutamente
independiente de la localizacin de los convenios de meses, das de la semana, o incluso el formato de
calendario, solar o lunar.
El formato de los estilos debe incluir todos los detalles, largo, mediano y corto.
Ejemplo
String hora = DateFormat.getDateInstance().format(miFecha);
Para uformatear na fecha con una localizacin diferente, hay que indicarlo con el mtodo getDateInstance().
11
Manipulacin y formato de fechas
i
508
3. Resumen
Has llegado al final de este recurso formativo que denominamos Manipulacin y formato de fechas
En esta leccin hemos estudiado los siguientes contenidos:
12
Manipulacin y formato de fechas
i
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
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().
Ejemplo:
System.out.println (Hola desde Java);
int x=3;
System.out.println (x);
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.
3
Operaciones de entrada-salida
i
512
4
Operaciones de entrada-salida
513
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).
5
Operaciones de entrada-salida
i
514
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.
6
Operaciones de entrada-salida
i
515
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.
7
Operaciones de entrada-salida
i
516
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.
8
Operaciones de entrada-salida
i
517
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.
9
Operaciones de entrada-salida
i
518
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.
10
Operaciones de entrada-salida
i
519
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));
11
Operaciones de entrada-salida
i
520
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".
12
Operaciones de entrada-salida
i
521
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.
13
Operaciones de entrada-salida
i
522
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));
14
Operaciones de entrada-salida
i
523
5. Resumen
Has llegado al final de este recurso formativo que denominamos Operaciones de entrada-salida
En esta leccin hemos estudiado los siguientes contenidos:
15
Operaciones de entrada-salida
i
524
UTILIZACIN DE
LAS LIBRERAS
BSICAS DE JAVA
525
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
Trabajando con streams Java. Flujos y Ficheros
Flujos de memoria
Est representado por dos clases:
- ByteArrayInputStream, sirve para trabajar con array de bytes de forma interna. Permite leer los datos de
un array como si fuera un Stream.
Tiene el siguiente constructor:
ByteArrayInputStream (byte [] b)
String str = Mensaje a impresora.
ByteArrayInputStream in = new ByteArrayInputStream(str.getBytes());
imprime (in);
void imprime (InputStream in) { . . . }
- ByteArrayOutputStream, permite actuar como un buffer en memoria que se usa antes de enviarlo al
dispositivo.
El constructor es el siguiente:
ByteArrayOutputStream()
byte [] <ByteArrayOutputStream>.toByteArray()
Devuelve los datos introducidos en la estructura de memoria generada.
2
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
526
String <ByteArrayOutputStream>.toString()
Devuelve los datos de dentro de la estructura y los introduce dentro de un String.
Void <ByteArrayOutputStream>.writeTo(OutputStream os)
Enva los datos del buffer al dispositivo que se le indique. Al ser parmetro clase base se le puede enviar a
cualquier derivada.
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.
3
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
527
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
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
String <File>.GetCanonicalPath() throws IOException
Devuelve el path normalizado. Lanza excepciones ya que comprueba la existencia del fichero o directorio
dentro de los sistemas de ficheros.
boolean <File>.isFile() Devuelve true si es fichero.
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.
4
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
528
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>.renameTo (String name) Renombra el fichero o directorio.
boolean <File>.delete() Elimina el fichero o directorio.
- FileInputStream y FileOutputStream
Ambas clases sirven para acceder al contenido de los ficheros.
FileInputStream, 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) throws FileNotFoundException
FileInputStream (File Filename) throws FileNotFoundException
int <InputStream>.read() throws IOException
Realiza la lectura del fichero.
Protected <FileInputStream>.finalize() throws IOException
5
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
529
Redefine este mtodo que procede de 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, realiza la escritura de los datos del fichero. Tiene el siguiente constructor:
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)
throws IOException
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.
6
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
530
// 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.
- SequenceInputStream
Esta clase permite concatenar varios Streams en uno solo, de forma que cuando recorremos el Stream
resultante se leer consecutivamente uno detrs de otro. Para concatenar tienen dos constructores:
SequenceInputStream (InputStream s1, InputStream s2)
Concatena dos cadenas.
SequenceInputStream (Enumeration)
Concatena a partir de una lista de objetos InputStream.
Interface Enumeration {
public boolean hasMoreElements(); //Controla si hay mas elementos
public Object nextElement();
}
7
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
531
Filtro de Streams
Los filtros van a permitir modificar los datos que estn dentro del Stream. Para construir filtros se tienen las
siguientes clases:
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).
8
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
532
Para realizar el acceso de estas clases se utilizan los siguientes atributos que apuntan al Stream ya creado:
protected InputStream <FileInputStream> in;
protected OutputStream <FileOutputStream> out;
Los atributos son protected para que slo puedan acceder las clases FilterOutputStream y FilterInputStream
y sus derivadas.
- BufferedInputStream y BufferedOutputStream
Estas clases sirven para poner un buffer (memoria RAM) tanto para los Streams de entrada como para los de
salida antes de pasarlo al dispositivo final.
En el constructor de estas clases se le pasa el Stream y al Stream se le aade un buffer:
protected byte [] <BufferedOutputStream> buf;
Array de datos a cargar en el buffer.
protected int <BufferedOutputStream> count;
Indica hasta dnde est cargado el buffer.
9
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
533
Cuando el buffer est lleno se envan automticamente los datos cargados al fichero.
Para forzar que se vace de informacin el buffer se tiene el mtodo flush() de la clase base.
protected [] byte <BufferedInputStream> buf;
Array de datos del buffer.
protected int <BufferedInputStream> count;
Indica hasta dnde est cargado el buffer.
protected int <BufferedInputStream> pos;
Indica la siguiente posicin a liberar del buffer.
10
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
534
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 que utilizar buffers sea interesante.
- DataInputStream y DataOutputStream
Son filtros que permiten solucionar el problema de escribir y leer datos que no sean del tipo fundamental
byte.
11
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
535
Interface DataInput {
boolean readBoolean() throws IOException;
int readInt() throws IOException;
. . .
}
Interface DataOutput {
boolean writeBoolean() throws IOException;
int writeInt() throws IOException;
. . .
}
Ambas clases implementan los interfaces DataInput y DataOutput respectivamente.
Ambos interfaces tienen implementados todos los mtodos para los tipos de datos fundamentales.
Pipes de Streams
Son una forma de comunicar hilos. Para la comunicacin con pipes existen 2 tipos de hilos:
- Hilo productor, que enva datos al pipe.
- Hilo consumidor recibe datos del pipe.
12
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
536
Constructores:
PipedOutputStream (PipedInputStream sink)
PipedOutputStream ()
PipedInputStream (PipedOutputStream src)
PipedInputStream ()
Con estos constructores se puede enlazar de la siguiente forma:
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)
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.
13
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
537
Esta clase conecta dos pipes con el segundo mtodo explicado.
Bloque esttico: conjunto de instrucciones que queremos 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.
Serializacin de Objetos
En un flujo se pueden escribir datos fundamentales como se ha visto anteriormente, a partir de ahora tambin
se van a poder enviar y recoger objetos de un Stream. Para hacer esto, habr que serializar el objeto, es decir,
convertir el objeto en una serie de bytes. Posteriormente se podr introducir en el Stream. Se tienen dos
clases de persistencias:
- 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).
En ambos casos se necesita serializar el objeto.
14
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
538
interface ObjectInput extends DataInput {
Object ReadObject();
}
interface ObjectOutput extends DataOutput {
void writeObject(Object ob);
}
No se permite por defecto serializar los objetos ya que cualquiera puede hacerlo. Para que un objeto se
pueda serializar tiene que implementar el interface Serializable. Si el objeto no es serializable y se intenta
serializar en ejecucin, se lanza la siguiente excepcin:
NotSerializableException.
Interface Serializable {}
Acta nicamente como un flag para comprobar si un objeto se quiere o no serializar.
Class Punto implements Serializable { // Objeto Serializable.
. . .
}
En este momento ya se pueden crear objetos Punto y serializarlos, la forma de hacerlo sera la siguiente:
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.
15
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
539
ObjectInputStream ois = new ObjectInputStream
(new FileInputStream (datos.dat));
Punto p = (Punto) in.readObject();
// El objeto Punto serializado se saca del fichero datos.dat.
Se puede comprobar que se utiliza el operador cast con el mtodo readObject ya que este mtodo devuelve
un objeto tipo Object.
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:
NotSerializableException
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:
- Por seguridad.
- 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).
Tambin con los siguientes mtodos se pueden serializar los objetos con encriptacin:
private void writeObject(ObjectOutputStream oos)throws IOException
private void readObject(ObjectInputStream ois) throws IOException
16
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
540
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();
}
}
Existen tambin dos mtodos para serializar y deserializar de forma estndar, recogen los atributos de la clase
y operan con ellas.
void <ObjectOutputStream>.defaultWriteObject() throws IOException
void <ObjectInputStream>.defaultReadObject() throws IOException
class Cuenta implements Serializable {
String nombre, direccion, telefono;
int codpostal;
transient int pin;
17
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
541
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
Cuando hay una clase base que implementa Serializable todas las derivadas implementarn Serializable
(Agregacin). Si la derivada implementa Serializable la base puede implementarla o no.
Cuando se serializa un objeto de clase derivada, primero se serializan los atributos de la base y
posteriormente los atributos de la derivada.
Cuando se deserializa un objeto de clase derivada, primero se hace con los atributos de la base y
seguidamente los atributos de la derivada.
- Gestin de versiones
En Java por defecto si la clase de serializacin y la clase de deserializacin no coinciden no se puede recoger
el objeto. La excepcin que se lanza cuando se produce este error es la siguiente:
18
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
542
InvalidCastException
class Prueba implements Serializable {
int numero = 0;
. . .
}
. . . se modifica la clase . . .
class Prueba implements Serializable {
int numero = 0;
void NoHaceNada () {};
}
A pesar de que el nmero de atributos no ha cambiado las clases se consideran incompatibles.
Para comprobar las versiones de las clases en Java, Java dispone del nmero SUID (Serial Unique ID) que es
diferente para cada una de las clases que se crean.
Este nmero SUID lo genera a partir de los bytecode de la clase utilizando la funcin hash(). Si se modifica
algo en una clase ya generada la funcin hash() genera un nuevo nmero SUID para la clase modificada.
C:\> serialver <Clase> Devuelve el nmero SUID de una clase
Para mantener la compatibilidad entre las distintas versiones de una clase, habr que declarar la siguiente
constante dentro de la clase:
static final long serialVersionUID = 6290341731103L; // serialver
El valor de serialVersionUID se corresponder con la primera versin de la clase.
Normalmente el nmero SUID se pone desde la primera clase generada.
19
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
543
Las clases Reader y Writer
Estas clases sirven para trabajar con Streams de UNICODE. Normalmente se utilizan para Streams de texto.
Todos lo anteriores sirven para flujo binario.
Reader y Writer son clases abstractas.
Reader se corresponde con InputStream, tiene todos los mtodos descritos anteriormente en InputStream.
Adems tiene el siguiente mtodo:
boolean <Reader>.ready()
Devuelve true en caso de que la prxima lectura de un solo byte se queda bloqueada.
Writer se corresponde a OutputStream.
Clases para trabajar con array de caracteres y objetos String
- CharArrayReader y CharArrayWriter
CharArrayReader equivale a ByteArrayInputStream.
CharArrayWriter equivale a ByteArrayOutputStream.
Sirven para trabajar con array de caracteres.
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.
20
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
544
- StringReader y StringWriter
Son igual que las anteriores slo que trabajan con objetos String.
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 writer y no sobre
el objeto String que como se sabe es constante. StringWriter tiene dos 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.
21
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
545
InputStreamReader y OutputStreamReader
Conversin de cdigo UNICODE a ASCII y viceversa. Actan como filtro para la traduccin.
InputStreamReader
InputStreamReader (InputStream is) De ASCII a UNICODE
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);
22
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
546
- OutputStreamReader
Realiza la conversin de UNICODE a ASCII.
OutputStreamWriter (OutputStream os)
OutputStreamWriter (OutputStream os, String encode)
Igual que lo definido en InputStreamReader.
FileInputStream f_binario = new FileInputStream (prueba.dat);
InputStreamReader f_tex = new InputStreamReader
(f_binario,8859-1);
Las clases FileReader y FileWriter
23
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
547
Como se puede comprobar 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)
A continuacin puedes ver un extracto del API oficial de la pgina de SUN Microsystems para que tengas a
mano un resumen con los mtodos ms usados en lo que se refiere a streams y ficheros java.
Empezaremos con la clase InputStream:
MTODOS
int available()
Returns the number of bytes that can be read (or skipped over) from this input stream without
blocking by the next caller of a method for this input stream.
void close()
Closes this input stream and releases any system resources associated with the stream.
void mark(int readlimit)
Marks the current position in this input stream.
boolean markSupported()
Tests if this input stream supports the mark and reset methods.
24
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
548
abstract int read()
Reads the next byte of data from the input stream.
int read(byte[] b)
Reads some number of bytes from the input stream and stores them into the buffer array b.
int read(byte[] b, int off, int len)
Reads up to len bytes of data from the input stream into an array of bytes.
void reset()
Repositions this stream to the position at the time the mark method was last called on this input
stream.
long skip(long n)
Skips over and discards n bytes of data from this input stream.
Clase OutputStream:
MTODOS
void close()
Closes this output stream and releases any system resources associated with this stream.
void flush()
Flushes this output stream and forces any buffered output bytes to be written out.
void write(byte[] b)
Writes b.length bytes from the specified byte array to this output stream.
25
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
549
void write(byte[] b, int off, int len)
Writes len bytes from the specified byte array starting at offset off to this output stream.
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.
int compareTo(Object o)
Compares this abstract pathname to another object.
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.
26
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
550
static File createTempFile (String prefix, String suffix, File directory)
Creates a new empty file in the specified directory, using the given prefix and suffix strings to
generate its name.
boolean delete()
Deletes the file or directory denoted by this abstract pathname.
void deleteOnExit()
Requests that the file or directory denoted by this abstract pathname be deleted when the virtual
machine terminates.
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.
27
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
551
String getName()
Returns the name of the file or directory denoted by this abstract pathname.
String getParent()
Returns the pathname string of this abstract pathnames parent, or null if this pathname does not
name a parent directory.
File getParentFile()
Returns the abstract pathname of this abstract pathnames parent, or null if this pathname does not
name a parent directory.
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.
28
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
552
long lastModified()
Returns the time that the file denoted by this abstract pathname was last modified.
long length()
Returns the length of the file denoted by this abstract pathname.
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.
29
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
553
boolean mkdir()
Creates the directory named by this abstract pathname.
boolean mkdirs()
Creates the directory named by this abstract pathname, including any necessary but nonexistent
parent directories.
boolean renameTo(File dest)
Renames the file denoted by this abstract pathname.
boolean setLastModified(long time)
Sets the last-modified time of the file or directory named by this abstract pathname.
boolean setReadOnly()
Marks the file or directory named by this abstract pathname so that only read operations are allow
String toString()
Returns the pathname string of this abstract pathname.
URL toURL()
Converts this abstract pathname into a file: URL.
30
UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA
i
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
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.
3
Gestin de colecciones
i
557
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.
4
Gestin de colecciones
i
558
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.
5
Gestin de colecciones
i
559
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.
6
Gestin de colecciones
i
560
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
7
Gestin de colecciones
i
561
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
Gestin de colecciones
562
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
Gestin de colecciones
563
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)
10
Gestin de colecciones
i
564
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).
11
Gestin de colecciones
i
565
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
12
Gestin de colecciones
i
566
4. Resumen
Has llegado al final de este recurso formativo que denominamos Gestin de colecciones
En esta leccin hemos estudiado los siguientes contenidos:
13
Gestin de colecciones
i
567
Mdulo: UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA Caso prctico
Haz un programa Java en modo MS-DOS, la clase Leer.java, que nos sirva de modo estndar para poder
leer cualquier frase que un usuario introduzca por teclado.
Dentro tendrs que programar el mtodo porTeclado() que ser el que nos devuelva la cadena que se
ha ledo en formato tipo String.
UTILIZACIN DE LAS LIBRERAS
BSICAS DE JAVA Caso prctico
1
568
Mdulo: UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA Caso prctico
Realiza un programa JAVA llamado GestorCoche.java en modo MS-DOS que muestre por pantalla un
men con las siguientes opciones:
1. Crear Objetos Coche y guardarlos
2. Salir
La opcin 1 se encarga de ir creando objetos de tipo Coche (ser una de las clases del ejercicio) con
los atributos marca y modelo de tipo String y ao de tipo entero:
String marca=null;
String modelo=null;
int anio=0;
Para ello leeremos por teclado el valor de los 3 atributos.
Una vez creado el objeto de tipo Coche, lo insertaremos en un Vector que guardar todos los coches
que vayamos creando. Como estructuras se proponen el do...while y el switch. Para leer por teclado
se utilizar la clase realizada en el caso 1.
En la clase Coche se utilizar el mtodo toString () por si se necesitara imprimir las propiedades de un
coche:
public String toString(){
String cadena=Marca: + marca + Modelo: + modelo + Ao:+ anio;
return cadena;
}
UTILIZACIN DE LAS LIBRERAS
BSICAS DE JAVA Caso prctico
1
569

Mdulo 5:
Programacin orientada a
objetos con java


570
LA PROGRAMACIN
ORIENTADA A
OBJETOS.
CONSTRUCTORES Y
SOBRECARGA
DE MTODOS
571
Caractersticas de los Objetos
La programacin orientada a objetos intenta llevar al mundo del software, los objetos del mundo real.
Al igual que en el mundo real los objetos estn constituidos por propiedades o atributos y mtodos, como
por ejemplo, un ordenador que tiene como propiedades la cantidad de memoria RAM, la capacidad de disco
duro, etc. y como mtodos, encenderse(), resetearse(), etc., de la misma manera en el diseo orientado a
objetos, cada objeto consta de propiedades o atributos y de mtodos.
Los objetos estn organizados en clases, que representan las caractersticas comunes a todos los objetos
que pertenecen a ellas. Las clases funcionan como una especie de plantilla que contiene las propiedades y
mtodos comunes a todos los objetos que pertenecen a una determinada clase.
Ejemplos de los Objetos
Revisemos lo anterior, a travs de un ejemplo.
2
LA PROGRAMACIN ORIENTADA A OBJETOS.
CONSTRUCTORES Y SOBRECARGA DE MTODOS
i
572
La clase coche tiene las propiedades color y motor y los mtodos arrancar() y frenar(). Por lo tanto, todos
los objetos que pertenezcan a la clase coche, llevarn implcitas estas propiedades as como el acceso a sus
mtodos.
Dentro de la clase coche, las propiedades color y motor no contienen ningn valor, simplemente se declaran,
sin embargo, cuando creamos un objeto de esa clase es cuando los valores de las propiedades toman un
valor acorde con el tipo que tienen asignado.
Podramos crear un objeto llamado Fiat, que perteneciese a la clase Coche y dar valor a sus propiedades:
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()).
3
LA PROGRAMACIN ORIENTADA A OBJETOS.
CONSTRUCTORES Y SOBRECARGA DE MTODOS
i
573
Caractersticas de la POO
Las caractersticas que hacen que un lenguaje sea o se considere orientado a objetos son:
Herencia
Polimorfismo
4
LA PROGRAMACIN ORIENTADA A OBJETOS.
CONSTRUCTORES Y SOBRECARGA DE MTODOS
i
574
Encapsulacin
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 Variables
Funcionalidad 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.
5
LA PROGRAMACIN ORIENTADA A OBJETOS.
CONSTRUCTORES Y SOBRECARGA DE MTODOS
i
575
Surge ahora el trmino de instancia. Una instancia de una clase no es ms que un objeto particular de esa
clase. Cuando creamos un objeto de una determinada clase, diremos que ese objeto se ha instanciado de la
clase a la cual pertenece:
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:
6
LA PROGRAMACIN ORIENTADA A OBJETOS.
CONSTRUCTORES Y SOBRECARGA DE MTODOS
i
576
Si nos interesara incluir todas las clases del paquete Java.awt, teclearemos el comando import seguido del
nombre del paquete que nos interese cargar y despus el smbolo * (asterisco) para hacer referencia a todas
las clases incluidas en ese paquete.
Ejemplo:
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.
7
LA PROGRAMACIN ORIENTADA A OBJETOS.
CONSTRUCTORES Y SOBRECARGA DE MTODOS
i
577
[extends Nombre_clase]: indica que la clase hereda de otra clase. Tambin se indica el nombre de la clase
de la que se hereda.
[implements Nombre_interface]: indica que se implementa un interface Java. Posteriormente se definir
ms a fondo el concepto de interface Java.
Constructores
El Constructor es un mtodo especial que se ejecuta justo despus de haber creado el objeto y que sirve para
inicializarlo. No reserva memoria para el objeto, slo lo inicializa. Quien reserva memoria para el objeto es
el operador new.
El constructor se caracteriza porque tiene el mismo nombre que la clase y no tiene retorno, ni siquiera se le
pone el modificador void.
Class punto {
int x, y;
punto (int x, int y) {
this.x = x;
this.y = y;
}
}
punto p1 = new punto (3,1);
punto p2 = new punto (5,4);
8
LA PROGRAMACIN ORIENTADA A OBJETOS.
CONSTRUCTORES Y SOBRECARGA DE MTODOS
i
578
Ejemplo
Tipos de Constructores
Constructor por defecto, es aquel que no recibe parmetros. Los constructores generales son los que reciben
uno o ms parmetros.
9
LA PROGRAMACIN ORIENTADA A OBJETOS.
CONSTRUCTORES Y SOBRECARGA DE MTODOS
i
579
Si una clase no tiene constructores, el compilador le pone un constructor annimo por defecto.
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);
}
}
10
LA PROGRAMACIN ORIENTADA A OBJETOS.
CONSTRUCTORES Y SOBRECARGA DE MTODOS
i
580
Mientras las funciones no necesitan un objeto para ejecutarlas, los mtodos necesitan que se haya creado
el objeto para ejecutar el mtodo:
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
LA PROGRAMACIN ORIENTADA A OBJETOS.
CONSTRUCTORES Y SOBRECARGA DE MTODOS
581
Funcin
int a = 3, b = 5, c = 8;
float f = 3.7f;
double d = 8.2, e = 1.7;
suma (a,b); // Llama 1.
suma (a, b, c); // Llama 2.
suma (d, e); // Llama 3.
suma (a, d); // Llama 3.
suma (a, b, f); // Error no se puede estrechar.
Suma (a, b, (int) f); // Llama 2.
Resumen
Has llegado al final de este recurso formativo que denominamos La programacin orientada a objetos.
Constructores y sobrecarga de mtodos
En esta leccin hemos estudiado los siguientes contenidos:
12
LA PROGRAMACIN ORIENTADA A OBJETOS.
CONSTRUCTORES Y SOBRECARGA DE MTODOS
i
582
PROGRAMACION
ORIENTADA A
OBJETOS
CON JAVA
583
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
Diseo estructurado
La falta de estandarizacin de ciertos conceptos y sobre todo de sus traducciones al castellano hacen que
dependiendo de la fuente documental el nombre de los conceptos vare.
- Mtrica 3 y Mtricas del software se refieren a elementos totalmente diferentes
- Muchas veces se emplea la palabra Anlisis para referirse al Diseo o el trmino Anlisis
Orgnico para referirse al Diseo.
Existen diversas metodologas estndar, pero muchas empresas las aplican parcialmente usando criterios
propios, con lo que se pierden ciertas virtudes de la estandarizacin.
En UML 1.0 se habla de diagramas de colaboracin, mientras que en UML 2.0 este mismo diagrama se
denomina de comunicacin mientras que el termino colaboracin se emplea con un significado diferente.
CONCEPTOS PREVIOS
Especificacin
Definicin de un problema que se debe resolver o de unos objetivos que se quieren alcanzar.
Implementacin
Una combinacin de elementos de software que cumplen una especificacin y por lo tanto resuelven el
problema o cumplen el contrato que la especificacin plantea.
2
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
i
584
Sistema Informtico
Programa informtico y soporte de software y de hardware que permite su funcionamiento. Se abrevia con
las siglas (S.I.).
Lgica de negocio
Elementos de un S.I. que estn vinculados con la actividad especfica desarrollada por un determinado
organismo, empresa o entidad.
Mtodos de negocio
Operativas que implementan la lgica del negocio.
Reingeniera / Refactorizacin
Proceso por el que se vuelve a realizar un cierto trabajo vinculado con el desarrollo del S.I. con el fin de
mejorar sus propiedades.
Modelar
Consiste en generar documentos que permiten desarrollar un S.I. desde sus requisitos hasta su puesta en
produccin.
CARACTERSTICAS DE UN S.I.
Modularidad
Capacidad que tiene una parte de un S.I. para poderse planificar, disear, desarrollar y verificar
independientemente de otros mdulos.
3
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
i
585
Cohesin
Integracin de las funcionalidades implementadas en un determinado mdulo de cdigo.
Acoplamiento
Mide la capacidad de los mdulos de funcionar juntos sin tener que conocer la implementacin interna de
dicho mdulo.
Acoplamiento alto: los mdulos interactan pero las dependencias entre ambos mdulos son elevadas
Acoplamiento bajo: los mdulos interactan a travs de un interfaz bien definido y acotado.
Reutilizacin
Capacidad que tiene un mdulo de software para poder emplearse en diferentes situaciones.
Usabilidad
Facilidad que presenta un determinado S.I. o mdulo de software para su empleo por parte de usuarios con
capacidades tcnicas medias.
Accesibilidad
Facilidad que presenta un determinado S.I. o mdulo de software para su empleo por parte de usuarios con
algn tipo de limitacin fsica o psquica.
4
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
i
586
Legibilidad
Facilidad que presenta un cdigo, documentacin o mdulo de un S.I. para su compresin por desarrolladores
ajenos al programador original.
Trazabilidad
Capacidad que presenta un determinado proceso o producto para poder analizar el ciclo de vida de ese
producto desde su concepcin hasta la fase actual.
EJEMPLOS DE CONCEPTOS
Trmino Ejemplo
Especificacin Hacer una aplicacin de venta online
Implementacin La aplicacin Web que cumple la especificacin aportada.
Sistema Informtico Aplicacin Web + Servidor de Aplicaciones + Servidor de Hardware + Entregables.
Lgica del negocio 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.
5
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
i
587
Trmino Ejemplo
Modelar Se modelan diagramas en el anlisis de un sistema para pasar de los requisitos
del mismo a su diseo.
Modularidad Un S.I. de una tienda on-line puede tener un mdulo de ventas y un mdulo de
stock (entre otros mdulos).
Cohesin 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.
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.
Reutilizacin 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.
Usabilidad Una aplicacin cuyo interfaz grfico es intuitivo y facilita el trabajo del usuario
es usable.
Accesibilidad Una aplicacin que respeta estndares para su uso por parte de discapacitados
es accesible.
Legibilidad 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.
Trazabilidad 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.
6
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
i
588
ENTREGABLES
Diagramas de flujo de datos (DFD):
Permite modelar el procesamiento que experimentan los datos en un determinado proceso de software
mediante notaciones grficas.
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.
Imagen de la wikipedia con los smbolos bsicos de
un diagrama DFD
7
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
i
589
Modelado del alta y baja de empleados en un almacen del S.I.
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.
8
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
i
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
Ejemplo de notacin Barrer de http://www.essentialstrategies.com/
9
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
591
Chen
Ejemplo de http://cs1.mcm.edu
Bachman
Ejemplo de http://elearning.tvm.tcs.co.in/re/re/3_3_ERD.htm
10
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
592
Diccionario de proyecto:
Proporciona una definicin para todos los conceptos propios de lgica de negocio de una aplicacin. En
proyectos internacionales se suele indicar el concepto en castellano y el concepto en ingls para evitar
confusiones debidas a la traduccin.
Ejemplo de diccionario de proyecto para un proyecto de agencia de viajes:
- Asistente de vuelo (flight atendant): persona encargada de garantizar la seguridad y confort de los
pasajeros del vuelo.
- Operador de base fija (fixed base operador): proporcionan servicios como combustible, aceite y
aparcamiento para aviones en los aeropuertos.
- Codeshare: convenio entre dos empresas para compartir un avin en un vuelo.
Prototipos:
Versiones intermedias de una aplicacin que proporcionan un avance del resultado final de la aplicacin que
se pretende obtener. Un prototipo puede ser de dos tipos:
- Maqueta: permite evaluar la apariencia visual del sistema pero no dispone de funcionalidad real.
- Prototipo: permite evaluar la apariencia visual y parte de la funcionalidad que se pretende
implementar.
11
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
i
593
METODOLOGAS BSICAS PARA EL DESARROLLO DE PROYECTOS
Secuencial o en cascada:
Formada por todas o parte de las siguientes etapas:
- Captura de requisitos (casos de uso)
- Anlisis
- Diseo
- Implementacin
- Pruebas unitarias
- Pruebas de conjunto
- Paso a produccin
- Mantenimiento
Representacin tpica de una metodologa secuencial o en cascada
12
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
594
Iterativa:
Consiste en repetir la metodologa secuencial un determinado numero de veces, reevaluando el resultado
obtenido al final de cada iteracin.
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.
13
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
i
595
METODOLOGAS ESPECFICAS
Mtrica 3:
- Metodologa impulsada por el Ministerio de Administraciones Publicas.
- Cubre aspectos no slo del anlisis y el diseo sino tambin de planificacin, seguridad y estimacin.
- Los puntos bsicos que la definen son:
* Planificacin de Sistemas de Informacin (Proceso PSI)
* Estudio de Viabilidad del Sistema (Proceso EVS)
* Anlisis del Sistema de Informacin (Proceso ASI)
* Diseo del Sistema de Informacin (Proceso DSI)
* Construccin del Sistema de Informacin (Proceso CSI)
* Implantacin y Aceptacin del Sistema (Proceso IAS)
* Mantenimiento del Sistema de Informacin (Proceso MSI)
- En sus versiones ms recientes presenta la posibilidad de emplear tcnicas propias del Anlisis y
Diseo orientado a Objetos (Diagrama de casos de uso, de secuencia,)
14
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
i
596
MTRICAS DEL SOFTWARE
- Las mtricas del software pretenden evaluar con parmetros objetivos y universalmente aplicables
diferentes parmetros de proyectos y sistemas informticos desarrollados.
- Las mtricas del software suelen recibir fuertes crticas y su aplicacin prctica est muy discutida
en ciertos entornos.
- No debemos confundir las mtricas del software con la metodologa Metrica 3, su nica semejanza
es el nombre.
Numero de lneas de cdigo.
Cuenta el nmero de lneas de cdigo de una determinada aplicacin.
Cada vez tiene menos sentido, al depender el software en libreras externas que aportan la funcionalidad
bsica.
En esta imagen de la wikipedia se ve que el nmero de lneas de cdigo no determina la complejidad
o funcionalidad obtenidas.
15
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
597
Complejidad ciclomtica.
- Evala el numero de rutas posibles de ejecucin que un programa puede tener, a mayor numero de
rutas, mayor complejidad.
Anlisis punto de funcin.
- Evala la lgica de negocio que un S.I. aporta al usuario desde el punto de vista del propio usuario.
- Es un procedimiento ideado por IBM en los 80 que cuenta con un procedimiento de aplicacin muy
extenso y parametrizable a cualquier tipo de S.I.
- Bsicamente consiste en ponderar la complejidad de los diferentes elementos que forman un sistema
y acumular dicha complejidad para obtener una medicin de todo el sistema.
Errores por lnea de cdigo.
Evala el nmero de errores que se presentan en los sistemas con respecto al cdigo total del mismo.
Su aplicacin es compleja debido a que no todos los errores son del mismo tipo y complejidad. Existen
diferentes variantes de esta mtrica.
Mtricas menores
Otras muchas mtricas se usan en determinados mbitos del desarrollo de S.I. para evaluar la calidad del
proyecto, del producto o del mantenimiento del mismo.
- Nmero de errores introducidos por desarrollador / hora de trabajo
- Nmero de actualizaciones necesarias desde el lanzamiento para obtener un producto estable.
- Nmero de fallos detectados por el usuario final.
16
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
i
598
Ventajas de las mtricas
- Las mtricas permiten evaluar la evolucin de los proyectos en un equipo de proyecto o empresa y
as mejorar futuros desarrollos.
Desventajas de las mtricas
- La complejidad inherente al desarrollo de aplicaciones hace que las mtricas muchas veces no
plasmen numricamente la realidad de los proyectos.
17
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
i
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
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.
class MiVentana extends Window {
// Cuerpo de la clase.
}
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
Herencia
602
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.
4
Herencia
i
603
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.
5
Herencia
i
604
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?
6
Herencia
i
605
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.
}
7
Herencia
i
606
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.
}
}
8
Herencia
i
607
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;
}
9
Herencia
i
608
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
Herencia
609
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.
11
Herencia
i
610
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.
}
}
12
Herencia
i
611
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
}
}
13
Herencia
i
612
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);
}
}
14
Herencia
i
613
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
Herencia
614
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
Herencia
615
4. Resumen
Has llegado al final de este recurso formativo que denominamos Herencia
En esta leccin hemos estudiado los siguientes contenidos:
17
Herencia
i
616
PROGRAMACION
ORIENTADA A
OBJETOS
CON JAVA
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
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
3
1. Clases abstractas
Caractersticas de las clases abstractas
Una clase abstracta (modificador abstract) es una clase que puede tener clases que deriven de ella, pero no
puede ser instanciada, es decir, no se puede hacer un new.
Caractersticas de las clases abstractas:
- Una clase abstracta tiene que derivar de una clase abstracta.
Por ejemplo, la clase Number es una clase abstracta que representa cualquier tipo de nmeros y sus
mtodos no estn implementados, son abstractos, lo que quiere decir que estn vacos. Las clases
descendientes de sta, como Integer o Float, s implementan los mtodos de la clase base Number,
y se pueden instanciar.
- 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.
619
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
4
Mtodos abstractos
Las clases abstractas opcionalmente pueden tener mtodos abstractos. Un mtodo abstracto no se
implementa (va sin cdigo) para que sea una clase derivada quien lo implemente.
Es decir, un mtodo que obligatoriamente hay que redefinirlo (sobrescribirlo).
- Slo las clases abstractas pueden tener mtodos abstractos.
- Si una clase tiene un mtodo abstracto sus derivadas deben implementar el mtodo abstracto o
seguirn siendo clases abstractas.
- Una clase abstracta puede tener constructores los cuales sern obligatorios para las derivadas.
- Los mtodos estticos no pueden ser abstractos.
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;
}
}
620
2. Clases anidadas, locales y annimas
Clases anidadas
Llamamos clase interna (inner class) a una clase que est declarada dentro de otra a la que se le denomina
clase externa (outer class).
Revisemos esto a travs de un ejemplo:
class Robot {
Robot (String nombre, int posX, int posY) {
this.descripcion = new Descripcion(nombre);
this.posX = posX;
this.posY = posY;
}
int posX, posY;
Descripcion descripcion;
class Descripcion {
String nombre;
Descripcion (String nombre) {
this.nombre = nombre;
}
public String toString() {
return Robot: +nombre+ en coordenadas: +
[posX+ , +posY+];
}
} // Cierre de la Clase Descripcion.
} // Cierre de la Clase Robot.
5
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
i
621
Ventaja de la clase interna
La clase interna tiene la ventaja de que puede acceder a los atributos de la clase externa (aunque sean
privados) y a sus propios atributos.
Siguiendo con el ejemplo anterior, para crear un objeto a partir de la clase Robot, se hara as:
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
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
622
Clase interna esttica
La clase interna puede ser esttica, en cuyo caso slo puede acceder a los atributos estticos de la clase
externa, pero a cambio va a poder ser instanciada desde fuera de la clase:
class Contenedora {
static class contenida {
int x,y;
}
}
public static void main (String[] args) {
Contenedora.Contenida c1 = new Contenedora.Contenida();
Las clases anidadas pueden ser tambin abstractas y finales (abstract / final).
Clases locales
La clase local es aquella que est declarada dentro del mtodo de otra clase.
La clase local puede acceder a las variables locales del mtodo y a los atributos de la clase externa y puede
derivar de la clase externa pero no al revs.
Ejemplo
class Prueba {
public static void main(String [] args) {
class Punto { // Clase Local puede acceder a las var.
int x,y; // locales de main y a los atributos
} // de la clase Prueba.
}
Punto p = new Punto();
}
7
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
i
623
Clases annimas
La clase annima es aquella que se crea sin nombre como derivada de otra.
A la vez que se crea la clase annima se instancia un objeto de dicha clase.
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.
8
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
i
624
3. Interfaces
Una interface es una clase que no implementa sus mtodos, sino que deja a cargo la implementacin a otras
clases. Las interfaces pueden derivar de otras interfaces pero no de otras clases.
Interface
- Sus mtodos suelen ser abstractos y sus atributos son finales (una interfaz contiene solamente
mtodos vacos y/o constantes).
- Genera relaciones entre clases que de otro modo no estn relacionadas, o para distribuir paquetes
de clases indicando la estructura de la interface pero no las clases individuales.
- Distintas clases pueden implementar las mismas interfaces, y a la vez derivar de otras clases.
- Una clase slo puede derivar a la vez de una sola clase, sin embargo puede implementar ms de una
interface. Es la forma de dotar a Java de herencia mltiple ya que a diferencia de C++ carece de esta
caracterstica.
class <nombre_clase> [extends <clase base>]
[implements <lista_interfaces>]
{. . .}
Ejemplo de interface
Una interface es una especificacin de las operaciones que tienen los objetos de un determinado tipo de
forma.
Una clase que implementa una interface, tiene que implementar todos sus mtodos o bien
declararse como abstracta.
9
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
i
625
interface Television {
[abstract] void encender();
void apagar();
void subirVolumen (int cuanto);
void bajarVolumen ( int cuanto);
void cambiarCanal (int canal);
int getCanalActual();
}
class Sony implements Television {
int volumen, canal;
static final int MIN_VOLUMEN = 0;
static final int MAX_VOLUMEN = 20;
static final int MIN_CANAL = 1;
static final int MAX_CANAL = 99;
void apagar () {
System.out.println (Televisor apagado. Adis.);
}
void encender () {
System.out.println (Televisin Sony BT13, hola.); }
void subirVolumen (int cuanto) {
if (volumen + cuanto > MAX_VOLUMEN)
volumen = MAX_VOLUMEN;
else volumen += cuanto; }
void bajarVolumen (int cuanto)
if (volumen cuanto > MIN_VOLUMEN)
volumen = MIN_VOLUMEN;
else volumen -= cuanto;
}
void cambiarCanal (int canal) {
if (canal < MIN_CANAL || canal > MAX_CANAl)
return;
this.canal = canal;
}
void getCanalActual() {
return canal;
}
} // Fin de clase Sony.
10
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
626
4. Resumen
Has llegado al final de este recurso formativo que denominamos Clases abstractas, anidadas, locales y
annimas. Interfaces
En esta leccin hemos estudiado los siguientes contenidos:
11
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
i
627
PROGRAMACION
ORIENTADA A
OBJETOS
CON JAVA
628
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
Diseo orientado a objetos
Conceptos bsicos de Orientacin a Objetos
A continuacin vamos a analizar algunos conceptos bsicos de orientacin a objetos aprovechando la notacin
UML que estudiaremos en detalle mas adelante.
Clase
Es una abstraccin de la realidad, un elemento del presente en el dominio del problema que pasar a formar
parte de nuestro S.I. en una forma simplificada. Las caractersticas que definen a la clase son los atributos
y los mtodos.
- Los atributos tambin son llamados campos, variables de clase o propiedades de la clase.
- Los mtodos tambin son llamados operaciones o funciones.
2
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
i
629
Objeto
Es una instancia de la clase, un caso concreto donde la clase toma valores concretos.
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
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
630
Paquete lgico
Agrupacin lgica de clases, interfaces y otros elementos de Programacin orientada a objetos.
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:
4
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
i
631
Otros sin embargo son especficos de UML, como:
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.
5
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
i
632
Aunque algunos estereotipos tienen un significado prcticamente universal, otros se pueden encontrar con
diferentes acepciones dependiendo del entorno laboral.
Un analista, diseador o arquitecto puede crear sus propios prototipos si una determinada situacin lo
aconseja.
UML reconoce la posibilidad de que un estereotipo modifique la representacin visual de dicho elemento.
Relaciones
Enlaces realizados entre las notaciones grficas con el fin de mostrar la interaccin existente entre dichas
notaciones. Existen diversas notaciones
Asociacin
Indica que existe una relacin de uso entre los elementos vinculados con la asociacin.
La relacin puede tener direccionalidad indicando que elemento referencia al otro.
6
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
i
633
En ocasiones se simplifican los diagramas indicando que una asociacin implica la presencia de un atributo
en la clase origen de la siguiente manera.
El avin tiene un nmero indeterminado de ruedas
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.
7
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
i
634
Composicin
Es una asociacin donde los elementos relacionados presentan un vinculo ms fuerte que en la asociacin y
agregacin.
La creacin de instancias de una clase compuesta implicar la creacin de instancias de las otras clases
compuestas. De la misma manera la destruccin de instancias ser simultnea.
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.
El trabajador es la superclase o clase base. Empleado y autnomo son dos subclases.
8
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
635
Dependencia
Indica que el elemento origen de la flecha precisa de alguna de las propiedades del elemento destino de la
flecha para poder funcionar.
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
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
636
Adornos de una relacin
Los adornos aportan informacin adicional sobre las relaciones existentes entre diferentes elementos. El uso
de dichos adornos depender de la labor especfica que estemos desempeando en un momento dado.
En el siguiente ejemplo hemos aadido una cardinalidad (valor numrico) a la relacin.
El avin tiene de n ruedas
Podemos tambin indicar un nombre a la relacin.
El piloto es el comandante de un vuelo
10
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
i
637
O si necesitamos mayor detalle en la definicin del papel que cada clase juega en la relacin podemos usar
los roles de las clases.
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.
Diagrama de C.U. que modela parcialmente la funcionalidad de un S.I. de banca online.
11
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
i
638
Diagrama de clases
El diagrama de clases modela el comportamiento de las clases de un sistema.
En un sistema orientado a objetos cada clase representa un elemento que interacta con otros a travs de
sus mtodos para conseguir un comportamiento global.
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.
En este caso los objetos tienen nombre, pero habitualmente se omiten.
12
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
i
639
Sin embargo de por s slo su utilidad es muy limitada. A veces se crea como base de un diagrama de secuencia
o de comunicacin.
Diagrama de secuencia
Modela la interaccin que se produce entre objetos de un S.I. mediante el intercambio de mensajes.
Interaccin realizada por un cliente en un cajero para ver un extracto de operaciones
13
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
i
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.
El cliente emplea el cajero para obtener un extracto de sus operaciones.
Diagrama de actividades
Muestra las interacciones existentes entre diferentes acciones de un mismo proceso.
14
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
641
Diagrama de estados
Muestra el ciclo de vida de un determinado elemento de software o concepto de lgica de negocio.
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.
15
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
i
642
Diagrama de componentes
Modela los elementos de software que van a integrar nuestro sistema.
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
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
643
Diagrama de estructura compuesta
Modela los vnculos estructurales existentes entre clases con mayor detalle que un diagrama de clases
convencional.
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
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
644
Fases del proceso
Definicin de casos de caso
La definicin de casos de uso consiste en extraer, recopilar, estructurar y modularizar los requisitos del S.I.
que se debe desarrollar.
Habitualmente estos requisitos se extraen del cliente que solicita el sistema aunque en proyectos de
reingeniera los requisitos pueden extraerse en gran medida de un S.I. preexistente.
La extraccin se realiza en un diagrama de casos de uso (abreviado C.U.) y los C.U. se detallarn en mayor
medida en una ficha de C.U.
La ficha de C.U. es un documento que detalla informacin sobre los C.U. definidos, esta informacin puede
variar dependiendo del proyecto pero habitualmente tiene las siguientes caractersticas:
- Id: identificador que permite referenciar de forma nica a un determinado C.U.
- Nombre: nombre del C.U.
- Descripcin: descripcin breve del C.U.
- Flujo principal: indica la secuencia de pasos que llevan a la consecucin de la funcionalidad
especificada por este C.U.
- Flujos secundarios: indican la secuencia de pasos que llevan a situaciones no deseables que se pueden
presentar al intentar ejecutar este C.U.
- Precondiciones: condiciones que se deben cumplir antes de poder ejecutar la funcionalidad
especificada en este C.U.
- Postcondiciones: condiciones que se deben cumplir al finalizar la ejecucin de la funcionalidad
especificada en este C.U.
18
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
i
645
Captura de requisitos de una tienda online:
Vamos a desarrollar un caso prctico desde la captura de requisitos hasta el inicio de la codificacin del
sistema para ilustrar la aplicacin de la metodologa RUP.
En primer lugar realizaremos la captura de requisitos con ayuda de reuniones con el cliente o, en el caso de
que exista, de documentacin o aplicaciones preexistentes.
Por ejemplo el cliente podra plantear los siguientes requisitos funcionales:
- Funcionalidad propia del cliente:
* Listar los artculos con su stock
* Aadir artculos al carrito de la compra
* Confirmar el carrito de la compra
* Almacenar el carrito de la compra en el sistema para confirmarlo posteriormente
* Efectuar el pago de la compra (que interacta con una pasarela bancaria).
- Funcionalidad propia del administrador:
* Logearse en el sistema
* Gestionar artculos y stock
*- Generar informes sobre ventas
* Modificar contrasea del administrador
Un diagrama UML que incluya la funcionalidad especificada podra ser el siguiente:
19
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
646
La metodologa RUP admite mltiples variantes con respecto a la introduccin de requisitos:
- Por ejemplo Logearse en el sistema se puede considerar un prerrequisito de varios casos de uso, en
vez de un caso de uso en s mismo.
- Gestionar artculos y stock se podra dividir en dos casos de uso o dejar en un solo caso de uso que
se explota en casos de uso ms detallados.
- Podemos establecer dependencias entre casos de uso y adems estereotiparlas para particular las
propiedades de esa dependencia.
Una vez realizado el diagrama de C.U. para el caso prctico deberamos elaborar la ficha de C.U. para todos
los C.U. indicados en el diagrama y para los C.U. que estn en diagramas ms detallados.
En esta fase del proyecto y en las posteriores podemos elaborar otros muchos diagramas de soporte que
consideremos tiles para clarificar conceptos de negocio, como por ejemplo el ciclo de vida de un pedido.
20
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
i
647
Anlisis (anlisis funcional)
El anlisis consiste en expandir la informacin elaborada en la definicin de los C.U. y estructurar las clases
de anlisis siguiendo criterios funcionales con el fin de modelar la lgica del negocio.
Habitualmente en el anlisis no se introducen conceptos especficos de una determinada arquitectura de
Software. Es decir, el anlisis debera ser independiente de Java, .NET, PHP o cualquier otra tecnologa.
Las clases de anlisis son clases UML que han sido estereotipadas para representar un determinado elemento
del sistema. Hay tres estereotipos predefinidos:
- Boundary (frontera): establece el punto de interaccin entre el actor y el interior del S.I.
- Control (control): identifica un elemento de gestin del sistema que permite el acceso a los datos
del sistema a travs de fronteras.
- Entity (entidad): es un almacn persistente de informacin, habitualmente una BBDD o una tabla de
una BBDD.
Como se puede apreciar en la siguiente imagen, los estereotipos modifican la representacin visual de las
clases de anlisis (algunas herramientas no modifican dicha representacin o permiten ambas
representaciones).
Modelado de anlisis de las clases vinculadas al proceso de login.
De izq. a dcha. clases estereotipadas como boundary, control y entity.
21
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
i
648
Anlisis del caso prctico
Para nuestra tienda online, debemos detallar los C.U. obtenidos en la captura de requisitos, en este punto
ya deberamos tener la ficha de C.U. detallada para todos los C.U. del sistema.
RUP propone que para este tipo de tarea desarrollemos un diagrama de clases de anlisis y simultnea o
posteriormente un diagrama de colaboracin por cada flujo de cada C.U.
Por ejemplo si desarrollamos el C.U. Aadir al carrito el diagrama de clases de anlisis seria el siguiente
Y el diagrama de colaboracin para el flujo primario seria el siguiente:
22
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
i
649
A continuacin realizaramos diagramas de colaboracin o de secuencia para los flujos primarios y secundarios
de todos los C.U. existentes. Muchos de los mensajes entre objetos se traducirn en mtodos sobre las clases
de anlisis (en el diagrama de la parte superior seran por ejemplo los mensajes 2, 3, 5 y 6).
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.
23
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
i
650
Diseo del caso prctico
Para el diagrama de clases de anlisis que realizamos anteriormente tendremos ahora que generar diagramas
de clases de diseo, es decir diagramas de clases especficos de la arquitectura desarrollada.
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
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
651
Dependiendo de la capacidad y experiencia de los anlisis y diseadores el sistema ser ms o menos modular,
reutilizable, mantenible, estructurado y por lo tanto, econmico en el corto, medio y largo plazo.
Las decisiones de anlisis y diseo que hayamos tomado afectarn a toda la vida del sistema.
Implementacin
La implementacin es la fase del proyecto donde se transforman en cdigo los diagramas generados durante
las fases anteriores.
Adems se pueden emplear diagramas de componentes y de despliegue para indicar los elementos de
software y hardware que van a integrar el sistema. Incluso se pueden combinar cuando el nmero de nodos
de hardware
En la mayora de sistemas el mayor volumen de trabajo con UML no se encuentra en la implementacin, sino
que se usan herramientas especficas de cada arquitectura (habitualmente java o .net).
Implementacin del caso prctico
Existen herramientas que a partir de un diagrama de clases de diseo nos generan el esqueleto de las clases
para codificar los mtodos de las mismas. Estas herramientas sin embargo no se suelen adaptar a las
necesidades concretas de cada proyecto.
Un diagrama de componentes y otro u otros de despliegue suelen ayudar en esta fase del proyecto, a veces
si el nmero de nodos de hardware es reducido se combinan en uno solo como es el caso de la tienda online.
25
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
i
652
Resumen de la aplicacin prctica de RUP
Aunque lo hemos visto en el desarrollo del caso prctico vamos a resumir los pasos principales de la
metodologa RUP.
En un proyecto que siga la metodologa RUP, el punto de partida son los C.U. que reflejan en detalle los
requisitos del sistema.
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.
26
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
i
653
Una vez elaborados los diagramas de clases de anlisis y de secuencia o de colaboracin que el analista
considere oportunos podemos pasar al diseo, elaborando diagramas de clases de diseo que reflejarn
elementos especficos de la arquitectura seleccionada.
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.
27
PROGRAMACION ORIENTADA A OBJETOS CON JAVA
i
654
Mdulo: PROGRAMACION ORIENTADA A OBJETOS CON JAVA Caso prctico
Indica en menos de 10 lneas qu mdulos formaran un sistema informtico empleado en un
aeropuerto. Esta aplicacin debera permitir gestionar los aviones, las pistas, los despegues, la
recepcin de las maletas, la carga de las mismas en el avin, en definitiva, todos los aspectos
relativos a la gestin de un aeropuerto.
Ten en cuenta que los mdulos deben estar cohesionados consigo mismos y no acoplados entre s.
PROGRAMACION ORIENTADA A OBJETOS
CON JAVA Caso prctico
1
655
Mdulo: PROGRAMACION ORIENTADA A OBJETOS CON JAVA Caso prctico
Disea un diagrama DER que modele la estructura de BBDD de una clnica veterinaria incluyendo todos
los datos que sea pertinente almacenar.
PROGRAMACION ORIENTADA A OBJETOS
CON JAVA Caso prctico
1
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
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.
3
EXCEPCIONES
i
660
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
EXCEPCIONES
661
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.
5
EXCEPCIONES
i
662
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();
}
6
EXCEPCIONES
i
663
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).
7
EXCEPCIONES
i
664
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.
8
EXCEPCIONES
i
665
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.
9
EXCEPCIONES
i
666
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.
}
10
EXCEPCIONES
i
667
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.
11
EXCEPCIONES
i
668
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
EXCEPCIONES
669
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
EXCEPCIONES
670
3. Resumen
Has llegado al final de este recurso formativo que denominamos Excepciones Java
En esta leccin hemos estudiado los siguientes contenidos:
14
EXCEPCIONES
i
671
CONTROL DE
EXCEPCIONES.
EXCEPCIONES
PERSONALIZADAS
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
Control de Excepciones. Excepciones personalizadas
3
1. Utilizacin de los bloques try, catch y finally
Descripcin genrica de excepciones: try/catch/finally
Una vez visto el manejo de excepciones de un modo prctico, repasemos la estructura try, catch y finally.
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.
674
i
Control de Excepciones. Excepciones personalizadas
4
Catch: El bloque o los bloques catch, van a manejar cada uno el tipo de excepcin al que hace referencia si
esta ocurre en el bloque try. Su argumento debe ser del tipo Throwable o una subclase de ste. La excepcin
la coger la primera clusula catch cuyo argumento ser del mismo tipo que la excepcin ocurrida. Puede
haber todos los bloques catch que sean necesarios, igualmente puede no haber ninguno. Por ello, podemos
deducir que no debe haber un bloque catch por cada tipo de excepcin que pueda ocurrir.
La clusula finally
Puede darse el caso que tengamos que hacer una determinada accin necesariamente. Para asegurarnos que
se va a realizar conviene crear una excepcin, para ello es conveniente usar una clusula dentro de la
sentencia try que est diseada con este propsito: la clusula finally.
algunaClaseArchivo f = new algunaClaseArchivo();
if (f.open("/a/file/name/path")) { // instruccin para abrir un fichero try {
algunMetodoExcepcional();
}
finally {
f.close();
// instruccin para cerrar un fichero
}
}
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.
675
Esta forma de trabajar se comporta mejor que la siguiente:
algunaClaseArchivo f = new algunaClaseArchivo();
if (f.open("/a/file/name/path")) {
try {
algunMetodoExcepcional();
}
catch (Throwable t) {
f.close();
throw t;
}
}
Caractersticas de la clusula finally
Para conocer las caractersticas de la clusula finally, pulsa sobre cada una de las flechas:
- La clusula finally se usa generalmente para la limpieza del sistema (cierre de ficheros, liberacin
de recursos, etc.).
- Una propiedad importante del bloque finally es que siempre se va a ejecutar aunque slo se ejecutase
una porcin de try y se saltase con un break o return.
- El orden establecido de ejecucin de la estructura completa es: ejecutar try y si ocurre alguna
excepcin se salta a los catch. Una solucin es que se coja aqu la excepcin y se trate, otra es
pasrsela para que la coja el nivel superior subiendo en la jerarqua. Despus de esto siempre se
ejecutara el bloque finally.
- Una utilidad de la pareja try/finally, y salindonos de las excepciones, est en usar try como etiqueta
para un conjunto de sentencias y finally como bloque de liberacin de recursos despus de que stas
se ejecutaran siempre, haya o no dentro del try breaks continues o returns.
5
Control de Excepciones. Excepciones personalizadas
i
676
Repaso
Para asentar los conocimientos, repasemos algunos trminos as como su significado:
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:
6
Control de Excepciones. Excepciones personalizadas
i
677
IOException (operaciones de entrada / salida)
RunTimeException (excepciones ms comunes de Java)
RuntimeExceptions: Generadas durante la ejecucin del cdigo Java, reflejan una condicin que nosotros
tendremos que manejar explcitamente, otras veces y ms a menudo reflejan un error de codificacin y
muestran un mensaje de error impreso. Errores derivados de RunTimeException:
AritmethicException > Error aritmtico, divisin por 0 o d negativo.
ClassCastException > Convertir una ref. base a una derivada.
NullPointerException > Indirecionada una ref. nula.
IndexOutOfBoundsException > Nos salimos de los lmites del array.
NegativeArraySizeException > Se produce un ndice negativo.
7
Control de Excepciones. Excepciones personalizadas
i
678
2. La lista de throws
Si un mtodo es capaz de provocar una excepcin que no cubre, deber especificar este comportamiento en
el prototipo para que los mtodos que le llaman puedan protegerse frente a la posible excepcin.
<tipo Retorno> <Nombre Mtodo> (<Lista Parmetro>)
throws <Lista Throws>
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();
}
}
8
Control de Excepciones. Excepciones personalizadas
i
679
Enlace Dinmico
Cuando se redefine un mtodo las excepciones que lance el mtodo redefinido tienen que ser como mximo
las excepciones de la base (Enlace Dinmico).
- Si en la derivada se lanza una excepcin no prevista en la base se va a producir un error.
- Se pueden quitar excepciones de la lista.
- Los constructores tambin pueden llevar lista de throws y en caso de que se produzca la excepcin
en el constructor, el objeto se crea pero a la referencia no se asigna el objeto, con lo cual, el Sistema
de Recogida de Java liberar la memoria del objeto creado.
9
Control de Excepciones. Excepciones personalizadas
i
680
3. Crear excepciones personalizadas
Crear tipo de excepciones personalizadas
Se crearn derivadas de Exception para los errores. Ser bueno crear dentro de la derivada el constructor y
el mtodo toString.
Ejemplo
class ExcepcPersonal extends Exception { //Deriva de Exception.
private int valor;
ExcepcPersonal (int valor) { this.valor = valor; }
String toString() {
return El valor +valor es demasiado grande.;
}
} // fin de clase
public class ExcepcionDemo {
static void contar (int a) throws ExcepcPersonal {
System.out.println (Llamada contar con valor +a);
if (a > 10) throw new ExcepcPersonal (a);
System.out.println (Salida normal +a);
}
public static void main (String [] args) {
try { contar(1);
contar(20);
}
catch(ExcepcPersonal ex) {
System.out.println(Excepcin capturada +a);
}
}
} // Fin de clase.
10
Control de Excepciones. Excepciones personalizadas
i
681
Ventajas
La ventaja del uso de excepciones frente al manejo tradicional de errores, es que el manejo de errores en
el uso tradicional estaba dentro de la lgica del problema mientras que con el tratamiento de excepciones
existe una separacin clara entre el manejo de la misma y la lgica del problema.
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;
}
11
Control de Excepciones. Excepciones personalizadas
i
682
Manejo de e Excepciones
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.
12
Control de Excepciones. Excepciones personalizadas
i
683
AclNotFoundException
ActivationException
AlreadyBoundException
ApplicationException
ArrayOutOfBoundsException
AWTException
BackingStoreException
BadLocationException
BatchUpdateException
CertificateException
ChangedCharSetException
CharacterCodingException
CharConversionException
ClassNotFoundException
CloneNotSupportedException
ClosedChannelException
DataFormatException
DestroyFailedException
EOFException
ExpandVetoException
FileLockInterruptionException
FileNotFoundException
FontFormatException
GeneralSecurityException
GSSException
IIOException
IllegalAccessException
InstantiationException
InterruptedException
InterruptedIOException
IntrospectionException
InvalidMidiDataException
InvalidPreferencesFormatException
InvocationTargetException
IOException
LastOwnerException
LineUnavailableException
MalformedURLException
MidiUnavailableException
MimeTypeParseException
NamingException
NegativeArraySizeException
NoninvertibleTransformException
NoSuchElement
NoSuchFieldException
NoSuchMethodException
NotBoundException
NotOwnerException
NumberFormatException
ObjectStreamException
ParseException
ParserConfigurationException
PrinterException
PrintException
PrivilegedActionException
PropertyVetoException
ProtocolException
RefreshFailedException
RemarshalException
RemoteException
RuntimeException
SAXException
ServerNotActiveException
SocketException
SQLException SQLEXCEPTION
SQLWarning
SSLException
SyncFailedException
TooManyListenersException
TransformerException
UnknownHostException
UnknownServiceException
UnsupportedAudioFileException
UnsupportedCallbackException
UnsupportedEncodingException
UnsupportedFlavorException
UnsupportedLookAndFeelException
UnsupportedOperationException
URISyntaxException
UserException
UTFDataFormatException
XAException
ZipException
13
Control de Excepciones. Excepciones personalizadas
i
Listado con algunas de las excepciones ms usadas en Java.
684
3. Resumen
Has llegado al final de este recurso formativo que denominamos Control de Excepciones. Excepciones
personalizadas
En esta leccin hemos estudiado los siguientes contenidos:
14
Control de Excepciones. Excepciones personalizadas
i
685
Mdulo: EXCEPCIONES Caso prctico
Realiza un programa Java que provoque una excepcin de tipo NullPointerException.
Tendrs que ir comprobando que el cdigo que est por debajo de la lnea que provoca la excepcin
no se ejecuta. Tendrs que incorporar una clusula finally para comprobar que siempre se ejecuta.
EXCEPCIONES Caso prctico
1
686
Mdulo: EXCEPCIONES Caso prctico
Realiza un programa Java que cree un mtodo llamado metodo1(), en el cual se lance una excepcin
de forma manual. Dicha excepcin tendr que ser capturada en el mtodo y adems ser lanzada
por la pila de funciones para que llegue hasta el mtodo main (), donde tambin ser capturada para
evitar que dicha excepcin provoque la parada del programa.
EXCEPCIONES Caso prctico
1
687

Mdulo 7:
Aplicaciones basadas en
entorno grfico


688
APLICACIONES
BASADAS EN
ENTORNO
GRFICO
Applets
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
1. Caractersticas de un Applet. Ciclo de vida
Objetivos
1. Conocer qu es un Applet y cmo se crea.
2. Reconocer la inclusin de un Applet en una pgina web.
3. La clase Graphics: texto, fuente y color.
Presentacin del Applet en Java
Lo primero que hay que hacer es diferenciar una aplicacin de un Applet. Las aplicaciones Java funcionan
por s solas usando el interprete java.exe. Sin embargo, los Applets Java deben ejecutarse desde un browser
(un navegador) del WWW. Los Applets son llamados desde documentos HTML en el navegador.
Debido a que los Applets viajan a todas partes, pudiendo portar virus que podran daar los sistemas de
archivos de ordenadores clientes, la JVM define sobre los Applets algunas restricciones de seguridad
(SANDBOX SECURITY MODEL).
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.
3
APLICACIONES BASADAS EN ENTORNO GRFICO
i
691
Creacin de Applet
Para crear un Applet hemos de crear una subclase de la clase Applet que est dentro del paquete java.applet.
La sintaxis es:
import java.applet.Applet;
public class nombreClase extends Applet {
...
}
La clase original debe ser pblica.
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.
4
APLICACIONES BASADAS EN ENTORNO GRFICO
i
692
Los principales mtodos a tener en cuenta son:
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:
public void init() {
...
}
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() {
...
}
5
APLICACIONES BASADAS EN ENTORNO GRFICO
i
693
3.- Parada:
Ocurre cuando el usuario abandona la pgina que incluye este Applet o cuando llamamos nosotros a stop():
public void stop() {
...
}
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:
public void destroy() {
...
}
6
APLICACIONES BASADAS EN ENTORNO GRFICO
i
694
Mtodos del Applet
Otro de los principales mtodos es el mtodo paint().
Define cmo un Applet dibuja algo en la pantalla. Este proceso puede ocurrir cientos de veces en la vida del
Applet.
El mtodo a sobreescribir es:
public void paint(Graphics g) {
...
}
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:
public void paint(Graphics g)
{
g.drawString (Hola desde java, 10,10);
}
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).
7
APLICACIONES BASADAS EN ENTORNO GRFICO
i
695
2. Inclusin de un Applet en una pagina web. Paso de parmetros
La etiqueta <APPLET>
Para incluir un Applet en una pgina web hay una etiqueta especifica; la etiqueta <APPLET>.
Dentro del cuerpo de nuestra pagina web y all donde nos interese, pondramos el Applet como:
<APPLET CODE="NombreApplet.class" WIDTH=200 HEIGHT=60>
Texto Alternativo
</APPLET>
- 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.
8
APLICACIONES BASADAS EN ENTORNO GRFICO
i
696
Atributos de la etiqueta <APPLET>
La etiqueta APPLET tiene varios atributos que se colocaran dentro de la misma etiqueta <APPLET .....
atributos> </APPLET>.
Los atributos son:
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.
9
APLICACIONES BASADAS EN ENTORNO GRFICO
i
697
Para alinear en vertical usaremos:
ALIGN=TEXTTOP
Alinea la parte superior del Applet con la parte superior del texto en lnea.
ALIGN=TOP
Alinea la parte superior del Applet con la parte superior del texto/imagen en lnea.
ALIGN=ABSMIDDLE
Alinea el centro del Applet con el centro del texto/imagen en lnea.
ALIGN=MIDDLE
Alinea el centro del Applet con la base del texto en lnea.
ALIGN=BASELINE
Alinea la parte inferior del Applet con la base del texto en lnea.
ALIGN=BOTTOM
Equivale a ALIGN=BASELINE.
ALIGN=ABSBOTTOM
Alinea la parte inferior del Applet con la parte ms baja del texto/imagen/Applet en lnea.
HSPACE y VSPACE
HSPACE Espacio horizontal en pxeles entre un Applet y el texto adjunto. Es el valor que deja tanto a izquierda
como a derecha.
VSPACE Espacio vertical en pxeles entre un Applet y el texto adjunto. Es el valor que deja tanto arriba como
abajo.
10
APLICACIONES BASADAS EN ENTORNO GRFICO
i
698
En definitiva, es como si la porcin ocupada por el Applet fuera:
Anchura: HSPACE+WIDTH+HSPACE
Altura: VSPACE+HEIGHT+VSPACE
CODE y CODEBASE
CODE sirve para indicar la clase del Applet si sta est en el mismo directorio que el archivo HTML en uso.
CODEBASE es similar, pero dando la URL de donde se encuentra el Applet, bien absoluta o bien relativa, al
archivo HTML actual. Es decir, haramos:
<APPLET CODE="nombreClase.class" CODEBASE="clases"
WIDTH=100 HEIGHT=100> Java Applet Here </APPLET>
NAME y ALT
NAME sirve para nombrar el Applet en caso de tener varios y tener que trabajar con ellos.
ALT se utiliza opcionalmente para indicar un texto alternativo por si no se carga el Applet (es lo mismo que
el texto sustitutivo antes comentado).
La etiqueta <EMBED>
Actualmente los nicos archivos ejecutables embebidos en documentos HTML son los Applets de Java y los
controles Actives de Microsoft. Debido a que pronto surgirn nuevos ejecutables en nuevos lenguajes de
programacin, stos para estar embebidos en los HTML tendran una nueva etiqueta al igual que Java tiene
<APPLET>.
Para unificar criterios se define una etiqueta genrica denominada <EMBED> para representar a cualquier
recurso que pueda ser cargado dentro del documento HTML.
11
APLICACIONES BASADAS EN ENTORNO GRFICO
i
699
i
Ejemplo:
<APPLET CODE="nombreClase.class" CODEBASE="clases"
WIDTH=100 HEIGHT=100> Java Applet </APPLET>
Utilizando la etiqueta <EMBED> escribiramos:
<EMBED SCR="clases/nombreClase.class"
WIDTH=100 HEIGHT=100> Java Applet </EMBED
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.
12
APLICACIONES BASADAS EN ENTORNO GRFICO
i
700
Los parmetros en un Applet van en dos partes: un nombre y su valor. La etiqueta especial del lenguaje HTML
es <PARAM>.
Su uso es:
<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");
...
}
13
APLICACIONES BASADAS EN ENTORNO GRFICO
i
701
Si el parmetro no est especificado
Hemos de tener presente que el lenguaje es case-sensitive. Si el parmetro que esperamos no est
especificado en el fichero HTML, el mtodo getParameter() devuelve null, por ello es interesante y ante una
respuesta null, que nuestro programa utilice un valor por defecto:
if (nombre == null) {
nombre = "Luis";
}
Si por ejemplo queremos hacer una conversin de String a entero:
int tamao;
String s = getParameter("tamao");
if (s == null) {
tamao = 12; // valor por defecto
}
else { tamao = Integer.parseInt(s); }
14
APLICACIONES BASADAS EN ENTORNO GRFICO
i
702
3. Ejecutar Applets. La clase Graphics
Desarrollando y ejecutando un Applet
Para desarrollar y ejecutar un Applet primeramente realizamos el fichero Java con el cdigo del Applet.
Despus de construir el fichero .java se compila como siempre con javac: C:> javac MiApplet.java.
Luego, construimos el archivo MiApplet.htm e insertamos la clase (fichero.class) en el atributo code.
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
}
}
15
APLICACIONES BASADAS EN ENTORNO GRFICO
i
703
MiApplet.htm:
<html>
<body>
<applet code="MiApplet.class" width="200" height="200">
</applet>
</body>
</html>
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
16
APLICACIONES BASADAS EN ENTORNO GRFICO
i
704
La clase Graphics
Para dibujar algo en nuestro Applet, no tenemos que crear siempre un objeto de esta clase, sino que vamos
a hacer uso del objeto Graphics de la funcin paint(), y dibujando sobre este objeto, el resultado aparecer
en nuestro Applet.
Este objeto es pasado desde el navegador al propio Applet
Para hacer uso de la clase Graphics en nuestro Applet debemos incluir, al principio de nuestro Applet, como
ya dijimos, el paquete que contiene a esta clase:
import java.awt.Graphics;
El origen de coordenadas del sistema de grficos tiene su origen (0,0) en la esquina superior izquierda.
- Los valores positivos crecen hacia abajo y hacia la derecha.
- Los pxeles tienen asociados valores enteros, nunca fraccionarios.
17
APLICACIONES BASADAS EN ENTORNO GRFICO
i
705
Dibujar lneas
Para dibujar lneas basta usar el mtodo drawLine(). Se le pasan 4 argumentos, las coordenadas del punto
origen x1, y1 y las del punto destino x2 e y2.
Ejemplo
public void paint(Graphics g) {
g.drawLine(x1,y1,x2,y2);
...
}
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
18
APLICACIONES BASADAS EN ENTORNO GRFICO
i
706
19
APLICACIONES BASADAS EN ENTORNO GRFICO
i
707
Dibujar un polgono
Para dibujar un polgono necesitamos de un set de puntos (x,y). El mtodo dibuja lneas de punto a punto
siguiendo el orden dado.
Como ocurra en los rectngulos, podemos dibujar y tambin rellenar:
drawPolygon();
fillPolygon();
El mtodo drawPolygon() no cierra el polgono, as si queremos que se cierre hemos de incluir el primer
punto como ltimo punto tambin. El mtodo fillPolygon() s une el primer punto con el ultimo.
Los argumentos se le pueden pasar de dos formas dado que tenemos el mtodo sobrecargado:
a. Tres argumentos: array con las coordenadas x, array con las coordenadas y, valor entero con el
numero de puntos totales.
b. Un argumento: un objeto polgono, perteneciente a la clase Polygon.
Un objeto polgono se puede crear con la directiva new:
Polygon poli = new Polygon();
Polygon poli = new Polygon(vectorx,vectory,numPuntos);
y podemos aadirle puntos al polgono:
poli.addPoint(xNueva,yNueva);
20
APLICACIONES BASADAS EN ENTORNO GRFICO
i
708
Dibujar elipses y crculos
Para dibujar elipses y crculos, los parmetros que se le pasan vienen a ser los mismos que para dibujar
rectngulos planos:
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.
21
APLICACIONES BASADAS EN ENTORNO GRFICO
i
709
Ejemplo
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
}
}
22
APLICACIONES BASADAS EN ENTORNO GRFICO
i
710
Grficos
Finalmente y en relacin con los grficos, es posible copiar una porcin de un grfico o borrarlo.
Los mtodos son:
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:
xnueva = x + distx
ynueva = y + disty
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:
g.clearRect(0,0,size().width,size().height); Devuelve el ancho del Applet
size().width: Devuelve el alto del Applet
size().height:
23
APLICACIONES BASADAS EN ENTORNO GRFICO
i
711
Texto y fuentes
Un objeto fuente se caracteriza por su nombre, su estilo y su nmero de puntos.
- Fuentes: "TimesRoman", "Courier", "Helvetica", ...
- Estilos: Font.PLAIN, Font.BOLD, Font.ITALIC, ...
- Tamao: 12, 24, 36, ...
Los estilos se pueden combinar y crear un nuevo estilo:
Font.BOLD + Font.ITALIC Texto en negrita y cursiva
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
APLICACIONES BASADAS EN ENTORNO GRFICO
712
Caracteres y Cadenas
Para dibujar caracteres y cadenas usaremos los mtodos:
drawChars();
drawString();
Los dos valores numricos x e y indican la posicin donde comienza a dibujarse la cadena de caracteres.
El mtodo drawChars funciona anlogamente, pero se la pasa un array de caracteres. Tiene 5 argumentos:
g.drawChars(array,intFirst,intLast,x,y);
Los nuevos valores intFirst e intLast indican el primer y el ltimo elemento del array que se va a dibujar.
- Existen una serie de mtodos que nos proporcionan informacin sobre las fuentes
- Existe otra clase denominada FontMetrics que da informacin ms especifica sobre una fuente. Para
crear un objeto de este tipo haremos:
Font f = new Font("TimesRoman", Font.BOLD, 24);
FontMetrics fmetrics = getFontMetrics(f);
g.setFont(f);
25
APLICACIONES BASADAS EN ENTORNO GRFICO
713
Ejemplo
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.
26
APLICACIONES BASADAS EN ENTORNO GRFICO
i
714
Mtodo de la clase color
Para dibujar en un cierto color, en el mtodo paint(), por ejemplo, haremos referencia a ste como sigue:
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);
Adems de configurar los colores, podemos leer sus valores:
getColor(); Devuelve el color
getBackground(); Devuelve el color de fondo
getForeground(); Devuelve el color del primer plano
27
APLICACIONES BASADAS EN ENTORNO GRFICO
i
715
4. Resumen
Has llegado al final de este recurso formativo que denominamos Applets
En esta leccin hemos estudiado los siguientes contenidos:
28
APLICACIONES BASADAS EN ENTORNO GRFICO
i
716
APLICACIONES
BASADAS EN
ENTORNO
GRFICO
717
MDULO 7. APLICACIONES BASADAS EN ENTORNO GRFICO
Ms sobre Applets.Interfaz AppletContext. Java Plugg-Ins
Son programas que se utilizan cuando la lgica del problema que hay que resolver es demasiado complicada
para realizarla con HTML o JavaScript.
Estos programas, por la seguridad que tiene la Java Virtual Machina (Mquina Virtual de Java), no dejan
acceder a la mquina del cliente. El cliente con los applets est protegido.
Hay que tener en cuenta que los applets ralentizan la ejecucin de una pgina Web ya que cuando el
navegador se encuentra con un applet entonces arranca la JVM. Los navegadores no arrancan la JVM hasta
que lo necesitan.
Los applets son ficheros .class que se colocan en el servidor Web y se ejecutan cuando lo pide el cliente.
No es la nica tecnologa que existe, se encuentran otras como la ActiveX. Son programas que se ejecutan
bajo el sistema operativo Windows. Son bastantes rpidas, pero la seguridad es bastante mala.
Por defecto el Applet es UNTRUSTED esto quiere decir que no est certificado y no puede entrar en las
mquina cliente donde se ejecuta. Cuando es TRUSTED, es decir certificado, si podr acceder a la mquina
cliente.
Para crear un applet por el usuario como requisito imprescindible es que herede de la clase Applet.
2
APLICACIONES BASADAS EN ENTORNO GRFICO
i
718
Tambin habr que importar los paquetes applet y awt:
import java.applet.*;
import java.awt.*;
Para introducir el applet en una pgina HTML se tiene el marcador <APPLET>:
<APPLET code=nombre.class
width=150
height=25>
</APPLET>
import java.applet.*;
import java.awt.*;
public class AppletMinimo extends Applet {
public void paint (Graphics g) {
g.setColor(Color.red);
g.setFont(new Font (Arial,Font.ITALIC,20));
g.drawString(Hola Mundo de JAVA otra vez,20,20);
}
}
3
APLICACIONES BASADAS EN ENTORNO GRFICO
i
719
<HTML>
<HEAD>
<TITTLE> Applet Mnimo </TITTLE>
</HEAD>
<BODY>
A continuacin va el Applet: <BR>
<APPLET code=AppletMinimo.class
width=300
height=25>
</APPLET>
</BODY>
</HTML>
Marcador <APPLET>
Formato del marcador Applet:
<APPLET
[codebase=URLBaseCodigo]
[code=FicheroApplet]
[archive=FicheroJava]
[alt=TextoAlternativo]
[name=NombreInstanciaApplet]
height=pixels
width=pixels
[align=left | center | right | top | middle | bottom]
[vspace=pixels]
[hspace=pixels]
[<PARAM name=NombreParametro1 value=NombreValor1>]
4
APLICACIONES BASADAS EN ENTORNO GRFICO
i
720
[<PARAM name=NombreParametro2 value=NombreValor2>]
. . .
[HTML que se visualiza en ausencia de Java]>
</APPLET>
codebase: es donde est el directorio de la URL, el directorio no tiene que coincidir con el del
fichero HTML.
code: fichero .class.
archive: fichero comprimido (.jar) donde se introducen varios ficheros .class del applet en el
caso del que el applet tenga ms de un fichero.
alt: texto alternativo.
name: nombre del applet, sirve para la comunicacin entre applets.
width, height: tamao de la ventana de ejecucin del applet medido en pixels.
align: alineacin del applet slo puede tomar uno de los valores referenciados
anteriormente.
vspace, hspace: indica el margen vertical y el margen horizontal respectivamente.
<PARM>: sirve para pasar parmetros desde la pgina HTML al applet.
HTML: sive para el caso en que el navegador no entiende Java.
Ejemplo del pase de parmetros:
En la pgina HTML:
<APPLET code=AppletPrueba.class height=200 width=200>
<PARAM name=usuario value=Pedro>
<PARAM name=tamano value=200>
<PARAM name=velocidad value=3.5>
</APPLET>
5
APLICACIONES BASADAS EN ENTORNO GRFICO
i
721
En el Applet:
String <Applet>.getParameter(String name)
String usuario = this.getParameter(usuario)
// retorna en usuario el valor Pedro.
int tamano = Integer.parseInt(this.getParameter(tamao);
// retorna en tamanoo el valor 200.
float velocidad =
(new Float(getParameter(velocidad)).floatValue();
// retorna en velocidad el valor 3.5.
URL <Applet>.getDocumentBase()
Devuelve la pgina donde est en el applet
URL <Applet>.getCodeBase()
Devuelve el directorio donde est situado el applet.
Constructor de URL: URL(String url)
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
6
APLICACIONES BASADAS EN ENTORNO GRFICO
i
722
PAGINA HTML
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.
7
APLICACIONES BASADAS EN ENTORNO GRFICO
i
723
Tcnicas de depuracin de Applets
- Con el mtodo:
void <AppletContext>.ShowStatus(String msg)
- Utilizando la consola de depuracin del browser.
- Utilizando el appletviewer del JDK.
Ciclo de vida del Applet
El applet se puede controlar en el momento en que se est ejecutando a partir de una serie de mtodos:
public class Applet {
public void init() { . . . }
public void start() { . . . }
public void paint(Graphics g) { . . . }
public void stop() { . . . }
public void destroy() { . . . }
}
init: se ejecuta en el momento en el que el applet se ha ejecutado en memoria.
start: se ejecuta cuando anteriormente se ha ejecutado un stop. Se vuelve al applet..
paint: pinta el applet
stop: se ejecuta cuando se sale de la pgina o cuando se minimiza.
destroy: se ejecuta cuando el navegador se cierre que es cuando la pgina se descarga de memoria.
8
APLICACIONES BASADAS EN ENTORNO GRFICO
i
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>
9
APLICACIONES BASADAS EN ENTORNO GRFICO
i
725
import java.applet.*;
import java.awt.*;
public class AppletEstado extends Applet {
private String descripcion = ;
public void init () { descripcion += init()...; }
public void start () { descripcion += start()...; }
public void stop () { descripcion += stop()...; }
public void destroy () { descripcion += destroy()...; }
public void paint (Graphics g) {
descripcion += paint()...;
g.setColor(Color.blue);
g.drawString(descripcion,20,20);
}
} // fin de clase
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.
10
APLICACIONES BASADAS EN ENTORNO GRFICO
i
726
- Plug-in para el navegador Explorer:
<OBJECT classid=CLSID:8AD9C840-044E-11D1-B3E9-00805F499D93
width=200 height=200 align=baseline
(1) codebase=http://java.sum.com/products/plugin/1.2.2./
jinstall-1_2_2-wm.cab#version=1.2.2>
<PARAM name=code value=Propiedades.class> Oligatorio
<PARAM name=codebase value=/ejemplos/> No es obligatorio
<PARAM name=type value=application/x-java-applet;
version=1.2.2> Obligatorio
<PARAM name=lista value=Todo> Opcional, ejemplo para pasar
parmetros al applet.
Su browser no tiene instalado el plug-in
</OBJECT>
(1) Apunta al URL donde est el componente de ActiveX. Si el usuario no lo tiene le pregunta si quiere
instalarlo.
Plug-in para el navegador Netscape:
<EMBED type=application/x-java-applet;version=1.2.2
width=300 height=300 align=baseline
code=Propiedades.class
pluginpage=http://java.sum.com/products/plugin/1.2.1/
plugin-install.html>
<NOEMBED>
Su browser no tiene instalado el plug-in
</NOEMBED>
</EMBED>
11
APLICACIONES BASADAS EN ENTORNO GRFICO
i
727
- Plug-in para ambos navegadores (Explorer y Netescape):
<OBJECT . . .> Explorer
. . .
<COMMENT> Explorer
<EMBED> Netescape
<NOEMBED> Netescape
...
<APPLET . . .> Explorer y Netescape
</NOEMBED>
</EMBED>
</COMMENT>
</OBJECT>
import java.applet.*;
import java.awt.*;
import java.util.*;
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));
12
APLICACIONES BASADAS EN ENTORNO GRFICO
i
728
// Se calcula el lleno del bidon en pixels.
lleno = (lleno * alto) / 100;
// Se extrae el ancho y alto del applet.
anchoapplet = size().width;
altoapplet = size().height;
// Se calcula el punto de inicio del bidon.
x = (anchoapplet - ancho) / 2;
y = (altoapplet - alto) / 2;
//Actualizacin de punteros entre Applets.
Enumeration e = getAppletContext().getApplets();
while (e.hasMoreElements()) {
AppletBidon a = (AppletBidon) e.nextElement();
if (this != a) { // Compara direcciones de memoria.
otro = a; // Apunta otro al primero.
otro.otro = this; // Apunta otro del primero al segundo.
}
}
}
public void paint (Graphics g) {
g.drawRect (x, y, ancho, alto);
g.fill3DRect (x+1, y+alto-lleno+1, ancho-2, lleno-2, true);
}
public boolean mouseUp (Event ev, int x, int y) {
int cuantopasar; //lquido a pasar al otro bidon.
13
APLICACIONES BASADAS EN ENTORNO GRFICO
i
729
if (lleno >= 20) cuantopasar = 20;
else cuantopasar = lleno;
if (otro.alto - otro.lleno < cuantopasar)
cuantopasar = otro.alto - otro.lleno;
lleno -= cuantopasar;
otro.lleno += cuantopasar;
repaint(); // repinta el applet.
otro.repaint(); // repinta el otro applet.
return true; // Se ha procesado el evento.
}
}
<HTML>
<HEAD>
<TITTLE> Applet con Bidom </TITTLE>
</HEAD>
<BODY>
<TABLE align=center> <TR>
<TD align=center>
<APPLET name = bidon1 code=AppletBidon.class
width=300 height=300>
<PARAM name=ancho value=100>
<PARAM name=alto value=200>
<PARAM name=lleno value=50>
</APPLET>
</TD>
<TD align=center>
14
APLICACIONES BASADAS EN ENTORNO GRFICO
i
730
<APPLET name = bidon2 code=AppletBidon.class
width=300 height=300>
<PARAM name=ancho value=100>
<PARAM name=alto value=200>
<PARAM name=lleno value=50>
</APPLET>
</TD>
</TR> </TABLE>
</BODY>
<HTML>
Acceso a Java desde JavaScript
Desde el Applet se va a poder acceder a JavaScript y viceversa:
1. Desde Javascript a Java (Applet):
Se va utilizar el objeto packages, el cual puede acceder a cualquier elemento de Java:
var sol = packages.java.lang.Math.sqrt(4);
Se va a poder tambin acceder a un applet una pgina Web, existen dos formas:
document.applets[<indice>].<nombreMetodo>();
<APPLET code=Javaservidor.class name=ElApplet>
document.ElApplet.<nombreMetodo>();
15
APLICACIONES BASADAS EN ENTORNO GRFICO
i
731
El mtodo que se indica en ambos caso debe ser pblico.
Si se utiliza el plugin el Explorer habr que hacerlo de la siguiente forma:
<OBJECT . . .>
<PARAM name=scriptable value=true>
</OBJECT>
En el caso del Netescape 6 todava no funciona.
import java.applet.*;
import java.awt.*;
import java.util.*;
public class AppletAccedido extends Applet {
// Atributos.
private String mensaje;
public void init () {
mensaje = getParameter(mensaje);
}
public void ponerMensaje (String mensaje) {
this.mensaje = mensaje;
repaint();
}
public void paint (Graphics g) {
g.drawString(mensaje,10,20);
}
}
16
APLICACIONES BASADAS EN ENTORNO GRFICO
i
732
<HTML>
<HEAD>
<TITTLE> Acceso a Java desde JavaScript </TITTLE>
<SCRIPT language=JavaScript>
<!
function CambiarMensaje() {
var nuevo=document.forms[0].mensaje.value;
document.ElApplet.ponerMensaje(nuevo);
}
>
</SCRIPT>
</HEAD>
<BODY>
<FORM>
<P> Escribe un mensaje:
<INPUT type=text name=mensaje value=Hola Mundo
size=40>
</P>
<P>
<APPLET code=AppletAccedido.class name =ElApplet
width=300 height=100>
<PARAM name=mensaje value=Hola Mundo>
</APPLET>
</P>
<INPUT type=button value=Cambiar Mensaje
onclick=CambiarMensaje(); return false;> <BR>
</FORM>
</BODY>
</HTML>
17
APLICACIONES BASADAS EN ENTORNO GRFICO
i
733
2. Desde Java a Javascript:
Se va a utilizar la clase netscape.javascript.JSObject
Funciona tanto en Explorer como en Netscape.
Habr que importarlo de la siguiente forma java40.jar
Se tendr que introducir el marcador <APPLET> con el atributo mayscript:
<APPLET . . . mayscript>
Reglas de conversin de Java a Javascript:
1. Todos los objetos de Javascript se representan con instancias de JSObject.
2. Se puede pasar cualquier tipo de dato numrico a Javascript. Pero Javascript siempre devolver objetos
de tipo FLOAT.
3. Los tipos de datos boolean y String permanecen sin cambios.
Se deber obtener una referencia de window. Se tiene la siguiente funcin:
static Object <JSObject>.getWindow(Applet ap)
JSObject window = (JSObject) JSObject.getWindow(this);
18
APLICACIONES BASADAS EN ENTORNO GRFICO
i
734
Se irn accediendo a las partes de window, Se tiene el siguiente mtodo:
Object <JSObject>.getMember(String name)
JSObject doc = (JSObject) Jsobject.getMember(document);
JSObject formpedido = (JSObject) doc.getMember(formpedido);
JSObject caja = (JSObject) formpedido.getMember(nombre);
Caja.setMember (value,Fernando);
A veces ocurre que los objetos de la pgina son arrays. Para ello se tiene el siguiente mtodo:
Object <JSObject>.getSlot(int index)
void <JSObject>.setSlot(int index, Object value)
Ejecutar mtodos de Javascript:
Object <JSObject>.call (String method, Object [] args)
document.write(Hola);
doc.call(write,{Hola});
static Object <JSObject>.eval(String command)
doc.eval(document.write(Hola));
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import netscape.javascript.*;
19
APLICACIONES BASADAS EN ENTORNO GRFICO
i
735
public class AppletColores extends Applet
implements ActionListener {
// Atributos
private List lbColor = new List();
private Label etiqueta = new Label(Elija Color de Fondo:);
public void init() {
lbColor.add(White); lbColor.add(Red);
lbColor.add(Green); lbColor.add(Yellow);
lbColor.add(Pink); lbColor.add(Black);
add(etiqueta);
add(lbColor);
lbColor.addActionListener(this);
}
public void actionPerformed (ActionEvent ev) {
String color = ev.getActionCommand();
JSObject doc = (JSObject) JSObject.getWindow(this).
getMember(document);
doc.setMember(bgColor,color);
}
}
<HTML>
<HEAD>
<TITTLE> Acceso a JavaScript desde Java </TITTLE>
</HEAD>
<BODY>
<APPLET code=AppletColores.class width=200 height=150
mayscript>
</APPLET>
</BODY>
</HTML>
20
APLICACIONES BASADAS EN ENTORNO GRFICO
i
736
APLICACIONES
BASADAS EN
ENTORNO
GRFICO
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
1. Ventanas AWT y componentes
Objetivos
- Ventanas
- Barras de men
- Botones
- Contenedores que incluirn otros componentes
Ventanas AWT y sus componentes
Una ventana Java es bsicamente, un conjunto de componentes anidados.
Estos componentes pueden ser ms ventanas, barras de mens, botones y/o
contenedores que incluirn otros componentes.
stos son el grupo de componentes que usaremos dentro del AWT:
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.
Componentes de construccin de una ventana.
Incluye ventanas, frames, barras de men y dilogos
3
APLICACIONES BASADAS EN ENTORNO GRFICO
i
739
Jerarqua de clases AWT
La jerarqua de clases del AWT queda definida en la siguiente figura:
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)
4
APLICACIONES BASADAS EN ENTORNO GRFICO
i
740
3. Le asignamos una localizacin. Por defecto se colocara en el centro del panel y se aplica la regla
de aadir los nuevos componentes de izquierda a derecha y en filas (uno detrs de otro).
4. Asignarle una funcin/mtodo al evento asociado a la activacin del componente.
Etiquetas
Las Etiquetas son cadenas de texto que sirven para nombrar o etiquetar los otros componentes. La ventaja
respecto al texto propiamente es que no tenemos que repintarlas nosotros y adems se alinean en el panel.
Para crear una etiqueta usaremos uno de los siguientes constructores:
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
APLICACIONES BASADAS EN ENTORNO GRFICO
741
Botones
Botones son los elemento que sirven para realizar una accin cuando son pulsados.
Para crear un botn usaremos uno de estos constructores:
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.
6
APLICACIONES BASADAS EN ENTORNO GRFICO
i
742
Las checkboxes pueden ser utilizadas de dos formas:
- Checkboxes no exclusivas
- Cualquiera de un grupo puede estar seleccionada o no.
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.
7
APLICACIONES BASADAS EN ENTORNO GRFICO
i
743
Ejemplo
import java.awt.*;
import java.applet.Applet;
public class Cajas extends Applet
{
Label l1=new Label("Comedia");
Label l2=new Label("Oeste");
Label l3=new Label("Terror");
Checkbox c1=new Checkbox();
Checkbox c2=new Checkbox();
Checkbox c3=new Checkbox();
public void init()
{
setBackground(Color.yellow);
add(l1);
add(c1);
add(l2);
add(c2);
add(l3);
add(c3);
}
}
8
APLICACIONES BASADAS EN ENTORNO GRFICO
i
Cdigo HTML:
<html>
<body>
<applet
code="Cajas.class"
width=200
height=200>
</applet>
</body>
</html>
744
RadioButtons
RadioButton son un grupo de checkboxes exclusivas.
Para crearlos utilizaremos el siguiente constructor mediante un ejemplo.
CheckboxGroup cbg = new CheckboxGroup();
add(new Checkbox("Rojo",cbg,true));
add(new Checkbox("Azul",cbg,false));
add(new Checkbox("Verde",cbg,false));
add(new Checkbox("Amarillo",cbg,false));
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));
}
}
9
APLICACIONES BASADAS EN ENTORNO GRFICO
Cdigo HTML:
<html>
<body>
<applet
code="RadiosButons.class
width=200
height=200>
</applet>
</body>
</html>
745
Mens de seleccin
Los mens de seleccin son mens desplegables que permiten seleccionar un tem. Despus el men
representa ese tem en la pantalla.
Para crear un choice menu creamos un objeto de la clase Choice, luego aadimos los tems y finalmente
incluimos el men en el panel:
Choice c = new Choice();
c.addItem("Manzanas");
c.addItem("Naranjas");
c.addItem("Platanos");
c.addItem("Melocotones");
add(c);
Estos mens solo permiten una seleccin por men.
Mas mtodos para este componente son:
10
APLICACIONES BASADAS EN ENTORNO GRFICO
i
746
Campos de texto
Los campos de texto son componentes que nos permiten incluir valores en forma de texto.
Para crear una campo de texto, el constructor toma varias formas.
Despus de crear el campo de texto lo sumamos al panel.
Ejemplo
TextField tf = new TextField("Hola desde Java",30);
add(tf);
El campo de texto solo incluye el campo editable y no incluye ninguna etiqueta. Seremos nosotros los que
incluyamos la nueva etiqueta.
Los campos de texto slo ocupan una lnea y estn limitados a diferencia de las reas de texto que hasta
pueden tener barras de scroll.
Adems podemos crear el campo de texto tpico de las contraseas que esconda el texto. Para ello crearemos
el campo de texto como tal y despus teclearemos el setEchoCharacter('*').
TextField tf = new TextField("Escribe algo",30);
tf.setEchoCharacter('*');
add(tf);
11
APLICACIONES BASADAS EN ENTORNO GRFICO
747
2. Paneles y Layouts
Queremos saber ahora cmo se representan, todos los componentes que hemos metido en el panel, en
pantalla.
Java dispone de administradores de layout para que cada componente pueda ser mandado a pantalla.
No hemos de dibujar los componentes, el sistema AWT lo hace por nosotros, solo tendremos que dibujar las
imgenes, grficos, y animaciones que creamos.
Cada panel puede tener su propio administrador de layout.
El AWT nos proporciona cinco administradores bsicos de layout:
Administrador de layouts
Para crear un administrador de layout utilizaremos el mtodo setLayout() en el mtodo init().
public void init() {
setLayout(new FlowLayout());
...
}
12
APLICACIONES BASADAS EN ENTORNO GRFICO
i
748
Una vez el administrador de layout est creado podemos comenzar a aadir componentes al panel.
El orden de adicin de los componentes es a menudo insignificante, dependiendo de qu administrador est
activo.
Veamos ahora los administradores de Layout.
La clase Flowlayout
Usando el flow layout los componentes se aaden al panel uno cada vez y fila a fila.
Si un componente no ajusta en una fila se pasa a la siguiente.
Tambin realiza un alineamiento centrado por defecto de cada fila.
Para crear un layout bsico con alineamiento centrado, usaremos la siguiente lnea de cdigo en nuestro
mtodo init():
setLayout(new FlowLayout());
y si queremos otro alineamiento:
setLayout(new FlowLayout(FlowLayout.LEFT));
setLayout(new FlowLayout(FlowLayout.RIGHT));
y si queremos separaciones distintas de tres pixeles entre elementos que son los que hay por defecto haramos
(ejemplo para 10 pixeles en horizontal y en vertical):
setLayout(new FlowLayout(FlowLayout.RIGHT), 10, 10);
13
APLICACIONES BASADAS EN ENTORNO GRFICO
i
749
El layout GridLayout
El layout Grid ofrece un control ms preciso a la hora de emplazar dentro del panel los componentes.
Ahora se divide el panel en filas y columnas y cada uno de los componentes se sita en una celda en orden
de izquierda a derecha y de arriba a abajo.
Para crear un layout de tipo Grid llamaremos en init() a:
setLayout(new GridLayout(3,4));
Si aadimos separaciones entre elementos en horizontal y vertical (10 y 15 respectivamente):
setLayout(new GridLayout(3, 4, 10, 15);
Mediante este ejemplo, se obtiene un Layout de 3 filas y 4 columnas con elementos separados 10 pixeles en
horizontal y 15 en vertical.
Con el GridLayout se obtiene siempre una rejilla con tamaos de celda iguales.
Ejemplo
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
APLICACIONES BASADAS EN ENTORNO GRFICO
750
El layout GridBagLayout
Los layouts de la clase GridBagLayout son una variacin de la clase GridLayout pero permiten variar la
presentacin de cada elemento en la rejilla. stos usan una clase de ayuda denominada GridBagConstraints
para indicar cmo debe ser formateado cada elemento en la rejilla.
El GridBagLayout es un administrador de layout ms flexible que el GridLayout ya que nos permite alinear
los componentes en vertical y horizontal en una rejilla de celdas de tamao variable para cada elemento.
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.
15
APLICACIONES BASADAS EN ENTORNO GRFICO
i
751
Variables del objeto constrains
Para controlar estos parmetros daremos el valor de inters a las siguientes variables del objeto constraints.
Presiona sobre cada uno de los nmeros para conocerlas:
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).
16
APLICACIONES BASADAS EN ENTORNO GRFICO
i
752
5. fill:
Sirve para adecuar el tamao del componente a su rea de representacin. Los valores de esta variable son:
GridBagConstranits.
NONE (0) hace que el componente no se deforme. Es el valor por defecto.
GridBagConstranits.
HORIZONTAL (2) ensancha el componente en horizontal para completar el rea de representacin en anchura.
No modifica la altura.
GridBagConstranits.
VERTICAL (3) ensancha el componente en altura para completar el rea que ocupa el componente en altura.
No modifica la anchura del mismo.
GridBagConstranits.BOTH
ensancha en altura y en anchura.
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.
17
APLICACIONES BASADAS EN ENTORNO GRFICO
i
753
9. anchor:
Sirve para situar el componente dentro de su rea de representacin cuando sta es mayor a lo que ocupa
el componente. Los valores posibles son:
GridBagConstranits.CENTER (10)
GridBagConstranits.NORTH (11)
GridBagConstranits.NORTHEAST (12)
GridBagConstranits.EAST (13)
GridBagConstranits.SOUTHEAST (14)
GridBagConstranits.SOUTH (15)
GridBagConstranits.SOUTHWEST (16)
GridBagConstranits.WEST (17)
GridBagConstranits.NORTHWEST (18)
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.
18
APLICACIONES BASADAS EN ENTORNO GRFICO
i
754
Ejemplo de uso de GridBagLayout
Como ejemplo de uso de GridBagLayout, hemos definido primero un mtodo llamado addComp(), que crea
el objeto GridBagConstraints y asigna valores a las variables caractersticas, antes comentadas, para luego
aadir el componente al GridBagLayout que le indiquemos.
El hacerlo de este modo resulta prctico cuando vayamos a poner bastantes componentes en el layout y
queramos caractersticas particulares para cada uno de ellos.
Ejemplo
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
APLICACIONES BASADAS EN ENTORNO GRFICO
755
Aqu hemos definido un FlowLayout como panel principal al que le iremos aadiendo paneles que podrn
tener distintos layouts.
En este caso slo le aadimos un panel (panel1) que hemos definido como un GridBagLayout que contiene
cuatro elementos: dos etiquetas y dos campos de texto.
BorderLayouts
Cuando aadimos un nuevo componente al panel que usa un layout de borde nosotros indicamos su
emplazamiento geogrfico como...
north, south, west, east o center
Los elementos del borde ocupan el espacio que necesiten y el central ocupa el espacio restante.
20
APLICACIONES BASADAS EN ENTORNO GRFICO
i
756
Para crear un border layout hemos de teclear:
setLayout(new BorderLayout());
Despus aadimos los elementos con un mtodo add() algo especial pues tiene dos argumentos, un string
indicando la posicin y un campo de texto.
add("North", new TextField("Titulo",50));
add("South", new TextField("Estado",50));
Tambin podemos crear un border layout con separacin entre elementos.
setLayout(new BorderLayout(10,10));
Ejemplo
import java.awt.*;
import java.applet.Applet;
public class Border extends Applet
{
Button b1=new Button ("Norte");
Button b2=new Button ("Sur");
Button b3=new Button ("Este");
Button b4=new Button ("Oeste");
Button b5=new Button ("Cento");
public void init()
{
setLayout(new BorderLayout());
add("North",b1);
add("South",b2);
add("East",b3);
add("West",b4);
add("Center",b5);
}
}
21
APLICACIONES BASADAS EN ENTORNO GRFICO
i
757
CardLayouts
Si tratamos con Cardlayouts, los componentes del panel no son representados a la vez en el panel. Se
representan uno cada vez dando la sensacin de tener una diapositiva.
Normalmente cuando creamos un Cardlayout sus componentes suelen ser otros contenedores de elementos,
normalmente paneles.
Y podemos usar diferentes layouts para cada "card" individual. Cuando aadamos un nuevo "card" al panel
podemos darle un nombre.
Usando los mtodos de la clase CardLayout podemos mover hacia atrs y hacia delante en la pantalla los
diferentes "cards".
Presiona en el botn para ver un ejemplo de creacin de un Card layout .
Ejemplo
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");
22
APLICACIONES BASADAS EN ENTORNO GRFICO
i
758
Insets
Los insets se utilizan para fijar los mrgenes en horizontal y vertical entre los limites del panel y los
elementos.
La clase insets nos proporciona valores para los insets:
top bottom left right
superior inferior izquierda derecha
Para incluir un inset en cualquier layout sobreescribimos el mtodo insets() en nuestra clase:
public Insets insets() {
return new Insets(vsup, vinf, vizq, vder);
}
Donde vsup, vinf, vizq y vder son los enteros que queramos.
23
APLICACIONES BASADAS EN ENTORNO GRFICO
i
759
3. Ms componentes GUI
reas de texto
Las reas de texto son similares a los campos de texto pero tienen ms
funcionalidad para manejar mayores cantidades de texto.
Las reas de texto tienen scrollbars por defecto. Veamos cmo crear un rea de texto:
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.
TextArea(String, int, int)
crea un rea de texto con el string dado y de tamao el numero de filas y columnas pasado.
Los componentes reas de texto tienen mtodos predefinidos.
24
APLICACIONES BASADAS EN ENTORNO GRFICO
i
760
Listas scroll
Las listas scroll son como un men de seleccin pero no es desplegable, podemos definirla para elegir una o
varias opciones, la lista puede ser larga y tener scrollbar. Para crearlas:
List() crea una lista scroll vaca que permite solo una seleccin.
List(int,boolean) crea una lista con el numero de lneas visibles que le pasamos. El valor boolean indica a true
que es no-exclusiva o a false que es exclusiva.
Despus de crear la lista scroll le aadiremos tems mediante el mtodo additem().
Como ejemplo puede valer el siguiente cdigo:
List lst = new List(5,true);
lst.addItem("Asturias");
lst.addItem("Castilla ");
lst.addItem("Baleares");
lst.addItem("Extremadura");
lst.addItem("Centro");
Las listas scroll tienen mtodos predefinidos para trabajar con ellas.
25
APLICACIONES BASADAS EN ENTORNO GRFICO
i
761
Scrollbars y sliders
Podemos tambin crear scrollbars y sliders individuales para manipular rangos de valores o para seleccionar
un valor dentro de un rango predeterminado. Para cambiar dichos valores podemos utilizar tres facilidades:
a. Flechas de incremento/decremento.
b. Un rango en el medio.
c. Una caja en el medio para incrementar/decrementar.
Para este componente no hemos de manejar ningn evento, slo fijar los valores mximo y mnimo. Para crear
una scrollbar:
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
Scrollbar(int, int, int, int, int)
crea la scrollbar y cada int indica y en este orden:
Orientacin Scrollbar.HORIZONTAL o Scrollbar.VERTICAL
Valor inicial (debe estar entre el mximo y el mnimo)
Anchura del rango total mostrada
Mnimo valor
Mximo valor
26
APLICACIONES BASADAS EN ENTORNO GRFICO
i
762
Mtodos scrollbar
Los mtodos ya definidos para las scrollbar son:
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;
}
}
27
APLICACIONES BASADAS EN ENTORNO GRFICO
i
763
Lienzos
Los lienzos permiten crear animaciones y dibujar imgenes dentro de ellos.
Para crear y aadir al panel un canvas haremos:
Canvas can = new Canvas();
add(can);
Creacin del panel layout principal
Para la creacin del panel layout principal cargamos los paquetes necesarios:
import java.awt.*;
Engloba la clase que da nombre al Applet.
Crearemos las variables instancia que sean necesarias. Puede que aqu creemos variables de alguna clase que
mas adelante vayamos a definir.
Comenzamos con el mtodo init(), aqu inicializamos lo bsico y definimos los
layouts:
- Fijar el layout principal: setLayout()
- Creacin de los componentes del panel principal: new
- Aadir los componentes al Applet (panel principal): add()
- Inicializar los valores por defecto.
- Puede sernos til sobrecargar el mtodo insets()
28
APLICACIONES BASADAS EN ENTORNO GRFICO
i
764
4. Resumen
Has llegado al final de este recurso formativo que denominamos El paquete Java.awt
En esta leccin hemos estudiado los siguientes contenidos:
29
APLICACIONES BASADAS EN ENTORNO GRFICO
i
765
APLICACIONES
BASADAS EN
ENTORNO
GRFICO
766
MDULO 7. APLICACIONES BASADAS EN ENTORNO GRFICO
Ms sobre AWT. Nuevo Modelo de Eventos EDM (Event Delegation Model). Componentes avanzados
Componentes AWT versus Swing la nueva librera de componentes java
Dibujar todos los componentes (light weight components). Librera Swing
Aprovechar los componentes del Sistema Operativo (heavy weight components).
Librera AWT. Es la librera ms antigua.
Los componentes de Swing no se pueden mezclar con los componentes de AWT ya que estos ltimos
prevalecen sobre los primeros.
Los componentes de AWT son ms rpidos que los componentes Swing.
AWT se utiliza para Applets mientras que Swing se utilizan sobre todo para las aplicaciones.
Etiquetas
Label (String text)
Label (String text, int alignament)
Valores para alignament:
static final int <Label>.LEFT;
static final int <Label>.CENTER;
static final int <Label>.RIGHT;
2
APLICACIONES BASADAS EN ENTORNO GRFICO
i
767
Mtodos asociados:
String <Label>.getText();
void <Label>.setText(String text);
Referente al texto de la etiqueta.
int <Label>.getAlignament();
void <Label>.setAlignament(int alignament);
Referente a la alineacin del texto.
Se puede comprobar que Label y Applet estn relacionados mediante la herencia:
(*) 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.
3
APLICACIONES BASADAS EN ENTORNO GRFICO
i
768
void <Container>.add (Component c)
Permite aadir dentro del contenedor cualquier componente.
import java.applet.*;
import java.awt.*;
public class AppletEtiqueta extends Applet {
public AppletEtiqueta() {
this.add(new Label (Es una etiqueta,Label.LEFT));
// this.add(new Button (Aceptar));
// this.add(new Button (Cancelar));
}
} // Fin de clase
<HTML>
<HEAD>
<TITLE> Applet con Etiqueta </TITLE>
</HEAD>
<BODY>
<APPLET code=AppletEtiqueta.class width=200 height=200>
</APPLET>
</BODY>
</HTML>
4
APLICACIONES BASADAS EN ENTORNO GRFICO
i
769
Botones
Constructores:
Button (String text)
Texto del botn.
Mtodos:
String <Button>.getLabel()
void <Button>.setLabel(String Label)
Referente al texto del botn.
Gestin de Eventos
Existen dos tipos de gestin de eventos:
Inherence Model (JDK 1.0):
Cuando un componente no procesa un evento se lo pasa a la clase base y si la clase base tampoco procesa
el evento se lo pasa al contenedor del componente. Si el contenedor no lo trata el evento entonces se pierde.
La forma de procesar el evento es redefinirlo en la clase derivada.
Hay tres eventos habituales:
boolean <Component>.mouseDown(Event ev, int x, int y)
Cuando se ha pulsado sobre el ratn. Devuelve true si se ha procesado el evento y false en caso contrario.
Cuando no se procesa se sigue la regla y pasa a la clase base.
5
APLICACIONES BASADAS EN ENTORNO GRFICO
i
770
boolean <Component>.action(Event ev, Object what)
Cuando se captura el evento por defecto (Botn > Pulsar, Lista > Seleccionar un elemento, ...)
boolean <Component>.handleEvent(Event ev)
Sirve para procesar cualquier evento que se produzca. Es el mtodo que ejecuta el S.O. para informar al
componente de que se ha producido un evento. Comprueba qu evento se ha producido y en funcin de ello
ejecuta un evento u otro.
Estos mtodos se denominan mtodos de respuesta o callback.
class Applet {
public boolean handleEvent (Event ev) {
. . .
if (ev.id == Event.MOUSE_DOWN) {
if (this.mouseDown( . . .)) return true;
return getPareent().handleEvent(); // Padre
}
}
}
class AppletBidon extends Applet {
. . .
public boolean mouseDown (Event ev, ...) {
}
}
Las libreras AWT y MFC utilizan el inherence model.
6
APLICACIONES BASADAS EN ENTORNO GRFICO
i
771
Event Delgation Model (JDK 1.1.x):
El problema que existe en el inherence model es que para tratar un evento de un componente haba que
desarrollar la derivada del componente. Esto resulta bastante tedioso.
Cuando el componente produce un evento, todos envan el evento a un mismo receptor y ese receptor es un
objeto de una clase que normalmente va a ser la clase principal (formulario). Con lo cual el programdor slo
tiene que desarrollar una clase que reciba todos los eventos.
Los mtodos que reciben lo eventos se les denomina Mtodos de Respuesta.
Para tratar objetos se tienen los siguientes objetos:
source object, el objeto que produce los eventos.
listener object, el objeto que gestiona los eventos.
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):
7
APLICACIONES BASADAS EN ENTORNO GRFICO
i
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.
8
APLICACIONES BASADAS EN ENTORNO GRFICO
i
773
Object <ActionEvent>.getSource()
Devuelve el objeto source que ha producido el evento.
Dentro de actionPerformed:
if (ev.getSource() == boton1) { ... }
if (ev.getSource() == boton2) { ... }
9
APLICACIONES BASADAS EN ENTORNO GRFICO
i
774
Ejemplo:
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class AppletSemana extends Applet
implements ActionListener {
private String [] semana = {Lunes ,
Martes ,
Miercoles,
Jueves ,
Viernes ,
Sabado ,
Domingo };
private int dia;
private Label etiqueta = new Label (semana[0]);
private Button boton = new Button (Nuevo Dia);
public AppletSemana () {
this.add(etiqueta); //Se le aade la etiqueta al Applet.
this.add(boton); //Se le alade el botn al Applet.
boton.addActionListener(this);//Applet funciona como contenedor.
//del botn y de la etiqueta.
}
10
APLICACIONES BASADAS EN ENTORNO GRFICO
i
775
public void actionPerformed (ActionEvent ev) {
dia = (dia >= 6)? 0 : dia+1;
etiqueta.setText(semana[dia]); // Cambia el texto de la etiqueta.
}
} // Fin de clase AppletSemana
<HTML>
<HEAD>
<TITLE> Applet con Etiqueta </TITLE>
</HEAD>
<BODY>
<APPLET code=AppletSemana.class width=200 height=200>
</APPLET>
</BODY>
</HTML>
Los eventos de AWT
Representa cualquier tipo de evento.
Representa los eventos de AWT.
11
APLICACIONES BASADAS EN ENTORNO GRFICO
i
776
Constructor:
EventObject (Object source)
AWTEvent (Object source, int type)
Donde source representa el objeto que produce el evento.
La variable type representa el cdigo producido del S.O.
protected Object <EventObject>.source
Como es protegida no se va a poder acceder desde fuera de la clase, para acceder habr que hacer la
derivada.
Tambin se va a poder acceder a travs del siguiente mtodo:
12
APLICACIONES BASADAS EN ENTORNO GRFICO
i
777
Adapater class
interface MouseListener { // interface para controlar el ratn.
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()+]);
}
13
APLICACIONES BASADAS EN ENTORNO GRFICO
i
778
public void mousePressed (MouseEvent ev) {};
public void mouseReleased (MouseEvent ev) {};
public void mouseEntered (MouseEvent ev) {};
public void mouseExited (MouseEvent ev) {};
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>
14
APLICACIONES BASADAS EN ENTORNO GRFICO
i
779
Existen ms clases para no tener que realizar las derivadas:
xxxListener xxxAdapter
MouseListener (interface) mouseAdapter (clase)
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
15
APLICACIONES BASADAS EN ENTORNO GRFICO
i
780
<HTML>
<HEAD>
<TITLE> Applet con Etiqueta </TITLE>
</HEAD>
<BODY>
<APPLET code=AppletRaton2.class width=200 height=200>
</APPLET>
</BODY>
</HTML>
Tambin se utilizan los Adapter con clase annimas (una clase annima se crea como derivada de otra y que
a la vez que se crea se instancia un objeto de la clase).
Ejemplo:
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class AppletRaton3 extends Applet {
public void init () {
this.addMouseListener (
new MouseAdapter () {
public void mouseClicked(MouseEvent ev) {
System.out.println ([+ev.getX()+ , +ev.getY()+]);
}
} // fin de clase annima
);
} // fin de init.
} // fin de clase
16
APLICACIONES BASADAS EN ENTORNO GRFICO
i
781
<HTML>
<HEAD>
<TITLE> Applet con Etiqueta </TITLE>
</HEAD>
<BODY>
<APPLET code=AppletRaton3.class width=200 height=200>
</APPLET>
</BODY>
</HTML>
Componente y Contenedores
17
APLICACIONES BASADAS EN ENTORNO GRFICO
i
782
Component <Container>.add (Component c)
Component <Container>.add (String contrains, Component c)
Component <Container>.add (Component c, int index)
Aaden componentes y en que posicin se quiere poner utilizando constrains o index.
Devuelven un Component por si se quiere hacer algo con l:
Button b= (button) this.add(new Button(Pulsame));
void <Container>.remove(int index)
void <Container>.removeall() Para eliminar componentes del contenedor.
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.
18
APLICACIONES BASADAS EN ENTORNO GRFICO
i
783
BorderLayout: North, South, East, West y Center.
CardLayout, un elemento encima y el resto de los componentes estn debajo del primero.
FlowLayout, coloca los componentes en el orden normal del flujo de escritura.
GridLayout, todos los componentes ocupan el mismo espacio.
GridBagLayout, sera una tabla en la que algunas celdas pueden tener varios tamaos.
void <Container>getLayout (LayoutManager mgr)
Pone al contenedor un Layout.
This.setLayout (new BorderLayout));
BorderLayout
void <Container>.add (String constrains, Component c)
this.add(South, new Button (Botn 1));
void <Container>.add (Component c, int index)
this.add(new Label (Hola), BorderLayout.SOUTH);
Ejemplo:
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
19
APLICACIONES BASADAS EN ENTORNO GRFICO
i
784
public class AppletLayout1 extends Applet {
public void init () {
Panel p1 = new Panel();
Panel p2 = new Panel();
this.setLayout(new BorderLayout());
this.add(North,p1);
this.add(South,p2);
p1.setLayout(new BorderLayout());
p2.setLayout(new BorderLayout());
p1.add(East,new Button(Boton 2));
p1.add(West,new Button(Boton 1));
p2.add(East,new Button(Boton 4));
p2.add(West,new Button(Boton 3));
}
}
<HTML>
<HEAD>
<TITLE> Applet con Etiqueta </TITLE>
</HEAD>
<BODY>
<APPLET code=AppletLayout1.class width=200 height=200>
</APPLET>
</BODY>
</HTML>
20
APLICACIONES BASADAS EN ENTORNO GRFICO
i
785
CardLayout
void <Container>.add (String name, Component c)
Este mtodo sirve para introducir elementos en el CardLayout
this.add (Herramientas,panelHeramientas);
this.add (Opciones, panelOpciones);
this.add (Configuaracion, panelConfiguracion);
void <CardLayout>.first (Container c)
void <CardLayout>.next (Container c)
void <CardLayout>.previous (Container c)
void <CardLayout>.last (Container c)
void <CardLayout>.show (String name, Container c)
Hacen visible el CardLayout
Ejemplo:
class Applet {
// Atributos
CardLayout l = new CardLayout();
public void init () {
. . .
this.setLayout(l);
. . .
}
21
APLICACIONES BASADAS EN ENTORNO GRFICO
i
786
public void actionPerformed (ActionEvent ev) {
. . .
l.first(this);
. . .
}
} // fin de clase
FlowLayout
Por defecto alinean lo componentes al centro. Pero este comportamiento puede ser cambiado, para ello se
utiliza el constructor:
FlowLayout () // Al centro (por defecto).
FlowLayout (int alignament) // A donde se indique en alignament
La variable alignament puede tomar los siguientes valores:
FlowLayout.LEFT
FlowLayout.CENTER
FlowLayout.RIGHT
this.setLayout (new FlowLayout(FlowLAyout.LEFT)); // iaquierda.
void <Container>.add (Component c)
Para introducir elementos dentro del FlowLayout.
22
APLICACIONES BASADAS EN ENTORNO GRFICO
i
787
GridLayout
Constructor:
GridLayout (int rows, int cols)
Por defecto los componentes ocupan todo el espacio de la celda. Si se quiere que no se ocupe todo el espacio
de la celda se tiene un segundo constructor:
GridLayout (int rows, int cols, int horiz_gap, int verti_gap)
Los parmetros horiz_gap y vert_gap representan el espacio entre el componente y el borde de la celda,
ambas estn medidas en pixels.
El nmero de filas o de columnas pueden ser 0. Donde el valor cero representa tantas celdas como haga
falta.
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)
23
APLICACIONES BASADAS EN ENTORNO GRFICO
i
788
this.setLayout(null);
Label hola = new Label (Hola desde la posicin (10,20));
hola.setLocation (10, 20);
this.add(hola);
Point <Component>.getLocation()
Posicin del componente.
Rectangle <Component> getBounds()
Posicin del componente y tamao del mismo.
Caja de Texto (TextComponent, TextArea y TextField)
TextField, representa una caja de texto de una sola lnea.
TextArea, representa una caja de texto con ms de una lnea.
24
APLICACIONES BASADAS EN ENTORNO GRFICO
i
789
TextComponent
No se puede instanciar, el constructor est protegido.
String <TextComponent>.getText()
void <TextComponent>.setText(String text)
Referente al texto de la caja de texto.
void <textComponent>.setEditable(boolean b)
Si se permite escribir o no en la caja de texto.
int <textComponent>.getSelectionStart()
int <textComponent>.getSelectionEnd()
Para seleccionar inicio y fin de texto de la caja de texto.
Si no se ha seleccionado nada ambas devuelven el valor 1.
void <textComponent>.select(int from, int to)
Para seleccionar texto (desde, hasta).
void <textComponent>.selectAll()
Para seleccionar todo el texto.
int <textComponent>.getCaretPosition()
void <textComponent>.setCaretPosition(int pos)
Referente al caret (cursor dentro de la caja de texto).
25
APLICACIONES BASADAS EN ENTORNO GRFICO
i
790
TextField
Constructores:
TextField()
TextField(int max_char) // n mximos de caract.
TextField(String text)
Mtodos:
void <TextField> setEchoChar(char c)
Para proteger en la entrada de la caja de texto. Donde c es el carcter de echo.
BotonPassword.setEchoChar (*);
BotonPassword.setEchoChar (\0); //Desactiva el echo.
TextArea
Constructores:
TextArea()
TextArea(int rows, int cols)
TextArea(String text, int rows, int cols)
TextArea(String text, int rows, int cols, int scrollbars)
Constantes para el parmero scrollbars:
TextArea.SCROLLBARS_NONE
TextArea.SCROLLBARS_BOTH
TextArea.SCROLLBARS_VERTICAL_ONLY
TextArea.SCROLLBARS_HORIZONTAL_ONLY
26
APLICACIONES BASADAS EN ENTORNO GRFICO
i
791
Eventos de las Caja de Textos
TextEvent
Se produce cada vez que se modica algo del contenido de la caja de texto.
El objeto Listener tendr que implementar el interface TextListener:
interface TextListener {
public void textValueChanged (TextEvent ev);
}
El objeto Source tendr el mtodo siguiente par enviar el evento:
Void <TextComponent>.addTextListener (TextListener l)
ActionEvent
Slo para TextField, se produce cuando se pulsa enter dentro de la caja de texto.
El objeto Listener tendr que implementar ActionListener:
interface ActionListener {
public void actionPerformed (ActionEvent ev)
}
El objeto source tendr el siguiente mtodo para envia el evento:
void <TextField>.addActionListener (actionListener l)
27
APLICACIONES BASADAS EN ENTORNO GRFICO
i
792
Ejemplo:
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class AppletCalculadora extends Applet
implements ActionListener {
// Atributos
Button botonSumar = new Button (+);
Button botonClear = new Button (C);
TextField cajaMarcador = new TextField(0);
Button botonesNumeros [] = new Button[10];
int acumulador = 0;
boolean empezar = true;
public void init() {
//Creacin de los botones numricos.
for (int i=0; i < 10; i++)
botonesNumeros[i] = new Button (String.valueOf(i));
// Se colocan los componentes en el contenedot.
this.setLayout(new BorderLayout());
this.add(North,cajaMarcador);
Panel p = new Panel();
this.add(Center,p);
p.setLayout(new GridLayout(4,3,5,5));
28
APLICACIONES BASADAS EN ENTORNO GRFICO
i
793
for (int i=1; i < 10; i++)
p.add(botonesNumeros[i]);
p.add(botonesNumeros[0]);
p.add(botonSumar);
p.add(botonClear);
// Para enviar los eventos de los Source al Listener
for (int i=0; i < 10; i++)
botonesNumeros[i].addActionListener(this);
botonSumar.addActionListener(this);
botonClear.addActionListener(this);
cajaMarcador.addActionListener(this);
}
// Tratamiento de eventos.
public void actionPerformed (ActionEvent ev) {
// Recogemos la fuente del evento.
Object ob = ev.getSource();
// Descomponemos los diferentes problemas.
if (ob == botonSumar || ob == cajaMarcador)
sumar();
else
if (ob == botonClear) clear();
else pulsadoNumero((Button) ob);
}
29
APLICACIONES BASADAS EN ENTORNO GRFICO
i
794
private void pulsadoNumero(Button boton) {
if (empezar) {
cajaMarcador.setText(boton.getLabel());
empezar = false;
}
else
cajaMarcador.setText(cajaMarcador.getText()+boton.getLabel());
}
private void sumar() {
try {
int parcial = Integer.parseInt(cajaMarcador.getText());
acumulador += parcial;
cajaMarcador.setText(String.valueOf(acumulador));
}
catch (NumberFormatException ex) {
cajaMarcador.setText(E);
}
finally {
empezar = true;
}
}
private void clear() {
acumulador = 0; empezar = true;
cajaMarcador.setText(0);
}
} // fin de clase
30
APLICACIONES BASADAS EN ENTORNO GRFICO
i
795
<HTML>
<HEAD>
<TITLE> Applet con Etiqueta </TITLE>
</HEAD>
<BODY>
<APPLET code=AppletCalculadora.class width=200 height=200>
</APPLET>
</BODY>
</HTML>
Checkbox y Radiobutton
Checkbox
Constructores:
Checkbox (String label)
Checkbox (String label, Boolean selected)
Con el parmetro selected se le indica si el Checkbox est seleccionado o no.
Mtodos:
boolean <Checkbox>.getState()
Devuelve el estado del Checkbox.
31
APLICACIONES BASADAS EN ENTORNO GRFICO
i
796
void <Checkbox>.setState (boolean selected)
Con este mtodo se cambia el estado del Checkbox.
Eventos:
ItemEvent, se produce cada vez que se cambia el estado del Checkbox.
El objeto Listener mplementa ItemListener:
interface ItemListener {
public void itemStateChanged (ItemEvent ev);
}
El objeto Source tien el siguiente mtodo para enviar los eventos al objeto Listener:
void <Checkbox>.addItemListener (ItemListener l)
Radiobutton
32
APLICACIONES BASADAS EN ENTORNO GRFICO
i
797
Para crear un radiobutton se har mediante la clase CheckboxGroup.
Se crarn los objetos de tipo Checkbox y se relacionarn mediante un objeto CheckboxGroup.
Formas de asociar los Checkbox al CheckboxGroup:
Utilizando el siguiente constructor del Checkbox:
Checkbox (String label, bolean selected, CheckboxGroup c)
Utilizando el siguiente mtodo
void <Checkbox>.setChekboxGroup (CheckboxGroup c)
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);
33
APLICACIONES BASADAS EN ENTORNO GRFICO
i
798
Mtodos:
Checkbox <CheckboxGroup>.getSelectedCheckbox()
Devuelve el Checkbox seleccionado.
Eventos:
ItemEvent, solo se produce cuando se selecciona y no cuando no se selecciona.
Choice y List
Choice
Constructor:
Choice()
Mtodos:
void <Choice>.add (String item)
Aade elementos a un Choice.
void <Choice>.insert (String item, int index)
Inserta elementos en un Choice en la posicin indicada en el parmetro index.
void <Choice>.remove (String item)
void <Choice>.remove (int index)
void <Choice>.removeAll()
Elimina elementos del Choice.
34
APLICACIONES BASADAS EN ENTORNO GRFICO
i
799
int <Choice>.getItemCount()
Devuelve el nmero de elementos incluidos en el Choice.
String <Choice>.getItem(int index)
Devuelve el elemento que est en la posicin indicada por el parmetro index.
int <Choice>.getSelectedIndex()
Devuelve la posicin del el elemento seleccionado.
String <Choice>.getSelectedItem()
Devuelve el elemento seleccionado.
void <Choice>.select(int index)
Selecciona el elemento a partir de la posicin indicada en el parmetro index.
Eventos:
ItenEvent, se produce cada vez que se elige un elemento del Choice.
Para el objeto Listener implementa ItemListener:
interface ItemListener {
public void itemStateChanged (ItemEvent ev)
Para enviar el evento del objeto Source al objeto Listener se tiene el siguiente mtodo:
void <Choice>.addItemListener (ItemListener l)
35
APLICACIONES BASADAS EN ENTORNO GRFICO
i
800
List
Constructores:
List ()
List (int rows)
List (int rows, Boolean multiselect)
Mtodos:
void <List>.add (String item)
void <List>.add (String item, int index)
Aade elementos a la lista.
int <List>.getItemCount ()
Nmero total de elementos de la lista.
int <List>.getRows ()
Nmero de elementos que se visualizan en el List.
void <List>.makeVisible (int index)
Visualiza un elemento indicado la posicin a travs del parmetro index.
void <List>.select (int index)
Selecciona el elemento a partir de la posicin indicada por el parmetro index.
String <List>.getSelectedItem ()
Devuelve el elemento seleccionado.
36
APLICACIONES BASADAS EN ENTORNO GRFICO
i
801
int <List>.getSelectedIndex ()
Devuelve la posicin del elemento seleccionado.
boolean <List>.getSelectIndex ()
Devuelve la posicin del objeto seleccionado.
boolean <List>.isIndexSelected (int index)
Devuelve true si el elemento de la posicin que se pasa por parmetro est seleccionado, de
lo contrario el mtodo devuelve false.
int [] <List>.getSelectedIndexes ()
String []<List>.getSelectedItems ()
Cuando el objeto List tiene multiseleccin.
Eventos:
ItemEvent, se produce cuando se selecciona un elemento de la lista.
ActionEvent, cuando se realiza doble clic sobre un elemento de la lista.
Ejemplo:
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class AppletTraductora extends Applet
implements ActionListener {
// Atributos.
TextField cajaPalabra = new TextField(,8);
Button botonTraducir = new Button(Traducir);
37
APLICACIONES BASADAS EN ENTORNO GRFICO
i
802
Label etiquetaTraduccion = new Label( );
List listaPalabrasParecidas = new List ();
CheckboxGroup g = new CheckboxGroup ();
Checkbox inglesEspanol = new Checkbox(Ingls-Espaol, true, g);
Checkbox espanolIngles = new Checkbox(Espaol-Ingls, false, g);
String [][] palabras = {{cat,gato},
{dog,perro},
{horse,caballo},
{mouse,raton},
{panther,pantera},
{woman,mujer},
{man,hombre},
{house,casa},
{lyon,leon},
{tiger,tigre}};
public void init() {
// Pintar el Applet
this.setLayout(new BorderLayout());
this.add (Center,listaPalabrasParecidas);
Panel panelArriba = new Panel ();
this.add (North,panelArriba);
panelArriba.setLayout(new GridLayout(3,1));
38
APLICACIONES BASADAS EN ENTORNO GRFICO
i
803
Panel p = new Panel (new FlowLayout(FlowLayout.LEFT));
p.add(new Label (Palabra:));
p.add(cajaPalabra);
p.add(botonTraducir);
panelArriba.add(p);
p = new Panel (new FlowLayout(FlowLayout.LEFT));
p.add(new Label (Traduccin: ));
p.add(etiquetaTraduccion);
panelArriba.add(p);
p = new Panel (new GridLayout (3,1));
p.add(inglesEspanol);
p.add(espanolIngles);
p.add(new Label(Palabras Parecidas:));
panelArriba.add(p);
// Tratamiento de Eventos
botonTraducir.addActionListener(this);
listaPalabrasParecidas.addActionListener(this);
}
public void actionPerformed (ActionEvent ev) {
Object obj = ev.getSource();
int col = 0;
if (inglesEspanol.getState())
col = 0;
else
col = 1;
39
APLICACIONES BASADAS EN ENTORNO GRFICO
i
804
if (obj == botonTraducir)
traducirPalabra (cajaPalabra.getText(), col);
else
traducirPalabra (listaPalabrasParecidas.getSelectedItem(), col);
}
private void traducirPalabra (String palabra, int col) {
listaPalabrasParecidas.removeAll();
for (int i = 0; i <= palabras.length; i++) {
if (palabras[i][col].startsWith(palabra))
listaPalabrasParecidas.add(palabras[i][col]);
if (palabras[i][col].equals(palabra))
etiquetaTraduccion.setText(palabras[i][1-col]);
}
}
} // fin de clase
<HTML>
<HEAD>
<TITLE> Applet con Etiqueta </TITLE>
</HEAD>
<BODY>
<APPLET code=AppletTraductora.class width=200 height=200>
</APPLET>
</BODY>
</HTML>
40
APLICACIONES BASADAS EN ENTORNO GRFICO
i
805
Scrollbars
Constructores:
Scrollbar (int orientation)
Scrollbar.HORIZONTAL
Scrollbar.VERTICAL
Scrollbar (int orientation, int value, int visible_area, int minimum,
int maximum)
visible_area => tamao del tirador (el cuadrado que se desplaza).
minimum= 0
maximum=255
Para saber la posicin de la barra:
int <Scrollbar> getValue()
void <Scrollbar> setValue(int value)
Incremento de unidad: cunto se modifica la barra cuando pinchamos en las flechas.
void <Scrollbar> setUnitIncrement (int unit)
Incremento de bloque: cunto se modifica la barra cuando pinchamos en la barra.
void <Scrollbar> setBlockIncrement (int block)
Los eventos que producen las barras son de tipo: AdjustmentEvent y se producen cada vez que modificamos
la posicin de la barra.
41
APLICACIONES BASADAS EN ENTORNO GRFICO
i
806
Para capturar el evento, hay que indicar al objeto Sourcer a que Objeto Listener enviar los eventos y para
esto tenemos el mtodo:
void <Scrollbar> addAdjustmentListener
El objeto Listener debe implementar la interface:
interface AdjustmentListener {
public void adjustmentValueChanged(AdjustmentEvent ev);
}
int <AdjustmentEvent> getAdjustmentType()
Devuelve una constante indicando lo que ha ocurrido:
AdjustmentEvent.TRACK // ARRASTRANDO EL TIRADOR
AdjustmentEvent.UNIT_INCREMENT
AdjustmentEvent.UNIT_DECREMENT
AdjustmentEvent.BLOCK_INCREMENT
AdjustmentEvent.BLOCK_DECREMENT
int <AdjustmentEvent> getValue();
Para saber en que posicin ha quedado la barra despus de producirse un evento
El contenedor Scrollpane
Es un panel con barras de Scrollbar. Gestiona los eventos de las barras de Scroll.
Constructores:
ScrollPane()
ScrollPane(int scrollBarDisplayPolicy)
42
APLICACIONES BASADAS EN ENTORNO GRFICO
i
807
Indicamos cuando queremos que aparezcan las barras de Scroll. Hay tres posibles valores:
Constantes del objeto Scrollpane:
ScrollPane.SCROLLBARS_AS_NEEDED // Cuando se necesiten
ScrollPane.SCROLLBARS_ALWAYS // Siempre
ScrollPane.SCROLLBARS_NEVER // Nunca
Ese ScrollPane tiene asociado un rea scrollable (total de superficie que podemos ver en ese ScrollPane), que
ser la suma de todos los componentes que hayamos metido. No podemos indicar el tamao del rea
scrollable, pero si podemos indicar el tamao del ScrollPane, con:
void <Component> setSize(int width, int height)
void <ScrollPane> setScrollPosition(int x, int y);
Para indicar el punto de origen del ScrollPane(Esquina superior izq)
Desarrollo de Aplicaciones Grficas con AWT
Cmo crear ventanas
43
APLICACIONES BASADAS EN ENTORNO GRFICO
i
808
Frame es la ventana principal y Dialog es una ventana de auxiliar.
Para crear una ventana:
1. Creamos un objeto de tipo Window.
2. Dar tamao a la ventana (hay dos formas):
void <Window> setSize(int width, int height);
void <Window> setBounds(int x, int y, int width, int height);
void <Window> pack()
Delega en los layout en dar el tamao, y los layaout lo asignarn segn el tamao preferido de los
componentes (la suma). Para poder utilizar pack() nuestra ventana debe tener componentes; y si lo usamos
nuestra ventana slo tendr la barra de ttulo.
3. Mostrar la ventana:
void <window> show()
Por un lado hace visible la ventana y realiza la reserva de recursos del S.O. Crea un hilo que se encargar
de ir recogiendo los mensajes del S.O. y ir ejecutando los mtodos de respuesta correspondientes en el
objeto.
4. Cerrar la ventana:
void <window> dispose()
Libera los recursos del S.O.; pero el hilo que se crea con show sigue ejecutndose. Para matar ese hilo
debemos utilizar:
44
APLICACIONES BASADAS EN ENTORNO GRFICO
i
809
System.exit(0)
(Para la ventana principal). De esta forma el hilo se quedar dormido y no se perder hasta que no cerremos
el programa.
5. Hacer invisible una ventana para luego poderla utilizar:
void <Window> setVisible(boolean b)
Frame
Tiene dos posibles constructores:
Frame();
Frame(String title);
Mtodos:
void <Frame> setTitle(String text);
Para cambiar el ttulo de la ventana
void <Frame> setResizable(boolean b)
Para que no se pueda cambiar el tamao.
void <Component> setCursor (int type)
Cuando pase por encima de un objeto el cursor ser distinto. type puede tomar los valores definidos en la
clase Cursor:
Cursor.DEFAULT_CURSOR
Cursor.CROSSHAIR_CURSOR
Cursor.HAND_CURSOR
45
APLICACIONES BASADAS EN ENTORNO GRFICO
i
810
void <Frame> setIconImage(Image image)
Establece el icono de la esquina superior izquierda. No funciona en todos los S.O.
Dialog
Representa un cuadro de dilogo; que se clasifican en modales (una vez que salen se apoderan del foco y no
lo pierden hasta que lo cerramos) y amodales (no se apoderan del foco).
Tiene dos constructores:
Dialog (Frame parent, boolean modal) // Frame asociado a la ventana
Dialog (Frame parent, String title, boolean modal)
Eventos de las ventanas WindowEvent
A la ventana se le dir a que objeto Listener enviarlo con el siguiente mtodo:
void <Window> addWindowListener(WindowListener l)
interface WindowListener {
public void windowOpened (WindowEvent ev)
Cuando se abre la ventana.
public void windowClosing (WindowEvent ev)
Cuando se va a cerrar
public void windowClosed (WindowEvent ev)
Cuando se cierra la ventana.
46
APLICACIONES BASADAS EN ENTORNO GRFICO
i
811
public void windowIconified (WindowEvent ev)
Se miniminiza la ventana.
public void windowDeiconified(WindowEvent ev)
Se maximiza la ventana.
public void windowActivated (WindowEvent ev)
Pasa a primer plano.
public void windowDeactivated(WindowEvent ev)
Se cambia de ventana.
}
Para este caso ser ms cmodo utilizar WindowApadter para no tener que definir todos estos mtodos.
Ejemplo:
import java.awt.*;
import java.awt.event.*;
public class VentanaColores extends Frame {
// Atributos
Scrollbar barraRojo = new Scrollbar(Scrollbar.HORIZONTAL,255,64,0,255);
Scrollbar barraVerde = new Scrollbar(Scrollbar.HORIZONTAL,255,64,0,255);
Scrollbar barraAzul = new Scrollbar(Scrollbar.HORIZONTAL,255,64,0,255);
VentanaColores() {
super(Color?);
47
APLICACIONES BASADAS EN ENTORNO GRFICO
i
812
GridBagLayout layout = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
this.setLayout(layout);
Label l =new Label(Rojo);
layout.setConstraints(l,c);
this.add(l);
c.gridwidth = GridBagConstraints.REMAINDER;
c.fill=GridBagConstraints.HORIZONTAL;
c.weightx = 1.0;
layout.setConstraints(barraRojo,c);
this.add(barraRojo);
c.gridwidth= 1;
c.fill= GridBagConstraints.NONE;
c.weightx = 0.0;
l=new Label (Verde);
layout.setConstraints(l,c);
this.add(l);
c.gridwidth = GridBagConstraints.REMAINDER;
c.fill=GridBagConstraints.HORIZONTAL;
c.weightx = 1.0;
layout.setConstraints(barraVerde,c);
this.add(barraVerde);
c.gridwidth= 1;
c.fill= GridBagConstraints.NONE;
48
APLICACIONES BASADAS EN ENTORNO GRFICO
i
813
c.weightx = 0.0;
l=new Label (Azul);
layout.setConstraints(l,c);
this.add(l);
c.gridwidth = GridBagConstraints.REMAINDER;
c.fill=GridBagConstraints.HORIZONTAL;
c.weightx = 1.0;
layout.setConstraints(barraAzul,c);
this.add(barraAzul);
}
public static void main (String [] args) {
VentanaColores v = new VentanaColores();
v.pack();
v.show();
}
} // fin de clase
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);
49
APLICACIONES BASADAS EN ENTORNO GRFICO
i
814
// Para cada componente que vayamos a aadir
layout.setContraints(componente,c);
panel.add(componente);
Los atributos que tiene GridBagConstraints:
gridx,gridy > Indica la fila y la columna donde se va a aadir el componente.
GridBagConstraints.RELATIVE > Indica que se aaden en orden.
gridwidth, gridweight > Nmero de filas y columnas que ocupa el componente, por defecto es 1.
GridBagConstraints.REMAINDER> Lo que sobre hasta el final.
GridBagConstraints.RELATIVE > Lo que sobre hasta la penltima.
fill > Indica si se ajusta o no el componente cuando la celda es ms grande que el componente.
GridBagConstraints.NONE > Lo que ocupe.
GridBagConstraints.VERTICAL > Ocupe toda la vertical.
GridBagConstraints.HORIZONTAL> Ocupe toda la horizontal.
GridBagConstraints.BOTH > Lo rellene todo.
ipadx,ipady (Internal Padding)
Indica cuntos pxeles estirar el componente respecto a su tamao preferido.
inset (External Padding)
Indica el espacio mnimo entre los bordes del componente y la rejilla, en pxeles.
anchor
Cuando el componente es mayor que la casilla, se usa para indicar en qu lado ponerlo, hay una serie de
constantes, en la clase GridBagConstraints:
50
APLICACIONES BASADAS EN ENTORNO GRFICO
i
815
NORTH
NORTHEAST
EAST
SOUTHEAST
SOUTH
SOUTHWEST
WEST
NORTHWEST
weightx,weighty
Indica el porcentaje que estiramos un componente cuando el contenedor cambia de tamao. El valor estar
comprendido entre 0.0 y 1.0.
Ejemplo:
import java.awt.*;
import java.awt.event.*;
public class VentanaColores extends Frame
implements AdjustmentListener {
//Atributos
Label etiquetaRoja= new Label(Rojo);
Label etiquetaVerde= new Label(Verde);
Label etiquetaAzul= new Label(Azul);
Scrollbar barraRojo= new
Scrollbar(Scrollbar.HORIZONTAL,255,64,0,255);
Scrollbar barraVerde= new
Scrollbar(Scrollbar.HORIZONTAL,255,64,0,255);
51
APLICACIONES BASADAS EN ENTORNO GRFICO
i
816
Scrollbar barraAzul= new
Scrollbar(Scrollbar.HORIZONTAL,255,64,0,255);
// Constructor
VentanaColores() {
super(Ventana para colores);
GridBagLayout layout= new GridBagLayout();
GridBagConstraints c1= new GridBagConstraints();
GridBagConstraints c2= new GridBagConstraints();
c2.gridwidth= GridBagConstraints.REMAINDER;
c2.fill= GridBagConstraints.HORIZONTAL;
c2.weightx= 1.0;
setLayout(layout);
layout.setConstraints(etiquetaRoja,c1);
this.add(etiquetaRoja);
layout.setConstraints(barraRojo,c2);
this.add(barraRojo);
layout.setConstraints(etiquetaVerde,c1);
this.add(etiquetaVerde);
layout.setConstraints(barraVerde,c2);
this.add(barraVerde);
layout.setConstraints(etiquetaAzul,c1);
this.add(etiquetaAzul);
52
APLICACIONES BASADAS EN ENTORNO GRFICO
i
817
layout.setConstraints(barraAzul,c2);
this.add(barraAzul);
this.addWindowListener( //Eventos los envia a la cl. annima.
new WindowAdapter () {
public void windowCLosing (WindowEvent ev) {
dispose();
System.exit(0);
}
}
);
barraRojo.addAdjustmentListener(this);
barraVerde.addAdjustmentListener(this);
barraAzul.addAdjustmentListener(this);
}//Constructor
public void adjustmentValueChanged (AdjustmentEvent ev) {
Color c = new Color (barraRojo.getValue()+64,
barraVerde.getValue()+64,
barraAzul.getValue()+64);
this.setBackground(c);
etiquetaRoja.setBackground(c);
etiquetaVerde.setBackground(c);
etiquetaAzul.setBackground(c);
}
53
APLICACIONES BASADAS EN ENTORNO GRFICO
i
818
public static void main(String []args) {
VentanaColores v= new VentanaColores();
v.setSize(200,200);
v.show();
}
}//Fin clase
Cuadros de dilogo comunes
Los Sistemas Operativos tienen ya implementados algunos cuadros de dilogo denominados comunes.
En el caso de Java se tiene la siguiente clase que implementa:
Constructor:
FileDialog (Frame frame)
FileDialog (Frame frame, String title)
FileDialog (Frame frame, String title, int kind)
54
APLICACIONES BASADAS EN ENTORNO GRFICO
i
819
El parmetro kind representa el tipo de FileDialog que se quiere abrir:
FileDialog.LOADPara ficheros que existan en disco.
FileDialog.SAVE Para ficheros que no existan.
Mtodos:
void <FileDialog>.show()
Visualiza el FileDialog. Es un mtodo asncrono o bloqueante, el hilo se queda dormido hasta que se sale del
mtodo. Es un mtodo modal.
String <FileDialog>.getFile()
Devuelve el nombre del fichero seleccionado en el FileDialog. Si no se selecciona ninguno devuelve null.
String <FileDialog>.getDirectory()
Devuelve el path del fichero seleccionado en el FileDialog. Si no se selecciona ninguno devuelve null.
FileDialog es una forma de pedir al usuario un nombre de fichero, no realiza operaciones sobre ficheros.
Filtros: para permitir seleccionar ficheros de un determinado tipo desde el FileDialog
UNIX
.txt / .gif
WINDOWS
Mac
Tipo Mime > text/plain text/html text/css image/gif
BeOS
Interface FilenameFilter {
public bolean accept (File dir, String name)
}
55
APLICACIONES BASADAS EN ENTORNO GRFICO
i
820
Este mtodo (accept) se ejecuta una vez por cada fichero del directorio preguntando si se acepta o no.
void <FileDialog>.setFilenameFilter(FilenameFilter f)
Indica cul es el filtro.
Ejemplo:
import java.awt.*;
import java.io.*;
import java.awt.event.*;
public class VentanaDialogo extends Frame
implements FilenameFilter{
Label etiqueta = new Label();
VentanaDialogo () {
super (Ventana Dialogo);
FileDialog Fd = new FileDialog(this, Abrir);
Fd.setFilenameFilter(this);
Fd.show();
add(etiqueta);
etiqueta.setText(Fd.getDirectory() + Fd.getFile());
}
public static void main (String [] args) {
VentanaDialogo v= new VentanaDialogo();
v.setSize(500,500);
v.show();
}
56
APLICACIONES BASADAS EN ENTORNO GRFICO
i
821
public boolean accept(File dir, String name) {
System.out.println(name);
if (name.endsWith(.java)) return true;
else return false;
}
} // fin de clase
Mens
57
APLICACIONES BASADAS EN ENTORNO GRFICO
i
822
MenuBar
Mtodos:
void <MenuBar>.add(Menu m)
Aade una persiona al Menubar.
void <MenuBar>.remove(Menu m)
Aade una persiona al Menubar.
int <MenuBar>.getMenuCount()
Devuelve el nmero de mens incluidos en el MenuBar.
Menu <MenuBar>.getMenu(int index)
Devuelve un Men que ocupa la posicin indicada por el parmetro index.
For (int i=0;i < barra.GetMenuCount(); i ++) {
Menu m = barra.getMenu(i);
// Proceso
}
void <Frame>.setMenuBar(MenuBar mb)
Se inserta una barra de Menus en un frame.
MenuItem
Representa cualquier elemento del men. Puede representar:
- Una persiana (MenuBar).
- Una opcin de men.
- Un separador (ser un MenuItem cuyo texto se -).
58
APLICACIONES BASADAS EN ENTORNO GRFICO
i
823
Producen eventos ActionEvent.
Para fijar el objeto Listener se tiene el mtodo:
void <MenuITem>addActionListener (ActionListener l)
Mtodos:
void <MenuItem>.setEnable(Boolean b)
Activa o desactiva las opciones de men.
CheckboxMenuItem
Representa una opcin de men con marca de chequeo para indicar que la opcin est activada o no.
Constructor:
CheckboxItem (String Label, bolean state)
Produce eventos ItemEvent (tambin los produce los Checkbox) y tambin ActionEvent.
Para indicar el Listener tiene el siguiente mtodo:
Void <CheckboxMenuItem>.addItemListener (ItemListener l)
Mtodos:
void <CheckboxMenuItem>.getState()
Para saber si una opcin est o no seleccionada.
void <CheckboxMenuItem>.setState()
Activa o desactiva un MenuItem.
59
APLICACIONES BASADAS EN ENTORNO GRFICO
i
824
Menu
Mtodos:
void <Menu>.add(MenuItem mi)
Aade un MenuItem a un objeto Menu.
MenuShortcut
Para el acceso rpido a mens se tienen dos formas de acceder:
- Tecla Rpida.
- Tecla Aceleradora.
En AWT no se tienen teclas rpidas pero s se tienen aceleradoras (combinacin de teclas).
Constructores:
MenuShortcut (int key) > Ctrl + key
Menushortcut (int key, boolean shift) // Shift + Ctrl + key
El parmetro key representa el cdigo de la tecla virtual (clase KeyEvent)
El parmetro shift con valor true ser la combinacin indicada anteriormente.
Mtodos:
void <MenuShortcut>.setShotcut(MenuShortcut s)
Asocia a un objeto MenuItem una tecla aceleradora.
60
APLICACIONES BASADAS EN ENTORNO GRFICO
i
825
APLICACIONES
BASADAS EN
ENTORNO
GRFICO
Gestin de eventos
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
1. Manejando acciones UI y eventos
Objetivos
- Manejar acciones UI y eventos
- Conocer los eventos y paneles anidados
- Identificar el evento El ratn
- Identificar los eventos del teclado
- Reconocer el manejador de eventos del AWT
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.
public boolean action(Event evt, Object obj) {
...
}
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.
3
APLICACIONES BASADAS EN ENTORNO GRFICO
i
828
Por ejemplo, y salvo las etiquetas que no generan acciones, podemos destacar las siguientes:
1. Los botones crean acciones al ser pulsados y el argumento es la etiqueta del botn.
2. Las checkboxes, tanto las exclusivas como las no-exclusivas generan una accin cuando el elemento
es marcado y el argumento es siempre true.
3. Los mens de eleccin crean una accin cuando un tem es seleccionado y el argumento es ese
tem.
4. Los campos de texto crean acciones cuando el usuario pulsa return dentro del campo de texto y no
si sale de ste sin pulsar.
Variable evt.target y operador instanceof
Mltiples objetos y de distinto tipo se juntaran en el mtodo action()
Para tratar con ellos y de forma individualizada habremos de testear el tipo de objeto que ha creado el
evento dentro del cuerpo de nuestro mtodo action(). Para ello haremos uso de la variable evt.target y del
operador instanceof, para preguntar si un objeto pertenece a una determinada clase.
Segn el componente llamaremos a otro mtodo (con los argumentos que sean necesarios) fuera de aqu
para tratar lo que se debe hacer para cada componente del panel (para no hacer demasiado grande el mtodo
action()).
4
APLICACIONES BASADAS EN ENTORNO GRFICO
i
829
No nos olvidemos que el mtodo action() devuelve un valor boolean.
public boolean action(Event evt, Object arg) {
if (evt.target instanceof TextField) {
manejaText(evt.target);
}
else if (evt.target instanceof Choice) {
manejaChoice(arg);
}
...
return true;
}
Donde manejaText() y manejaChoice() seran dos mtodos que despus definiramos para la gestin del
elemento en particular.
Ejemplo:
Un applet que pone el color de fondo, segn el botn que pulsemos. Se elige entre cinco colores.
import java.awt.*;
public class BotonAccion extends java.applet.Applet {
public void init() {
add(new Button("Rojo"));
add(new Button("Azul"));
add(new Button("Verde"));
add(new Button("Blanco"));
add(new Button("Negro"));
}
public boolean action(Event evt, Object obj) {
if (evt.target instanceof Button) {
changeColor((String)obj);
}
return true;
}
void changeColor(String bname) {
if (bname.equals("Rojo")) { setBackground(Color.red); }
else if (bname.equals("Azul")) { setBackground(Color.blue); }
else if (bname.equals("Verde")) { setBackground(Color.green); }
else if (bname.equals("Blanco")) { setBackground(Color.white); }
else { setBackground(Color.black); }
repaint();
}
}
5
APLICACIONES BASADAS EN ENTORNO GRFICO
830
2. Anidando paneles
Los Applets se hacen interesantes cuando comenzamos a anidar paneles.
Es as como creamos diferentes layouts en nuestro Applet.
Podemos aislar fondos y planos principales de distintos colores para cada panel, y lo mismo con las fuentes.
La superclase de la clase Panel es la clase Container y proporciona un comportamiento genrico para manejar
otros componentes dentro de ella.
Adems la clase Applet es una subclase de Panel.
Por ejemplo para anidar un nuevo panel vamos a crear un nuevo panel y a aadirlo al Applet como si fuera
otro componente.
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:
6
APLICACIONES BASADAS EN ENTORNO GRFICO
i
831
panel1.setLayout(new FlowLayout());
panel1.add(newButton("Arriba");
panel1.add(newButton("Abajo");
panel2.setLayout(new GridLayout());
panel2.add(newButton("Hola");
panel2.add(newButton("Adios");
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.
7
APLICACIONES BASADAS EN ENTORNO GRFICO
i
832
Event ID
La forma ms general de manejar eventos contina siendo el mtodo ya visto handleEvent(), y para manejar
los eventos de los componentes UI redefinamos el mtodo action().
Para eventos relacionados con scrollbars y listas scroll la nica forma de manejarlos es mediante el mtodo
handleEvent(). Para interceptar estos eventos lo que haremos ser testear los ID's asociados.
Los ID definidos en la clase Event nuevos son los siguientes:
8
APLICACIONES BASADAS EN ENTORNO GRFICO
i
833
3. Clicks del ratn
El ratn
El evento click del ratn ocurre siempre que el usuario pulsa dentro del rea de nuestro Applet. Podemos usar
este evento para mltiples acciones.
El evento del click del ratn se desglosa en dos eventos:
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():
public boolean mouseDown(Event evt,int x, int y) {
...
}
9
APLICACIONES BASADAS EN ENTORNO GRFICO
i
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():
public boolean mouseUp(Event evt,int x, int y) {
...
}
Al mtodo se le pasan los tres parmetros de antes. El manejo del valor resultado se hace de forma anloga
al mtodo mouseDown().
10
APLICACIONES BASADAS EN ENTORNO GRFICO
i
835
Ejemplo: Vamos a hacer un Applet para que cuando pinchemos con el ratn en cualquier rea del mismo
aparezca un mensaje en las coordenadas 10,10 diciendo: Has pulsado el ratn...
import java.awt.*;
import java.applet.Applet;
public class Raton extends Applet
{
public void init()
{
setBackground(Color.yellow);
}
public boolean mouseDown(Event e , int x,int y)
{
Graphics g=getGraphics();
g.drawString(Has pulsado el ratn...",10,10);
return true;
}
}
11
APLICACIONES BASADAS EN ENTORNO GRFICO
i
Cdigo HTML:
<html>
<body>
<applet
code="Raton.class"
width=200
height=200>
</applet>
</body>
</html>
836
Movimientos del ratn
Cada vez que el ratn se mueve se genera un evento de movimiento del ratn. Hay dos eventos relacionados
con el movimiento del puntero del ratn:
1. Movimiento del ratn sin pulsar el botn.
2. Arrastre del ratn (drag), que es el movimiento del ratn a la vez que se mantiene el botn pulsado.
Para usar estos eventos se carga el paquete Event y el Point dado que se suele trabajar con puntos para
almacenar las coordenadas del ratn:
import java.awt.Event;
import java.awt.Point;
Movimiento del ratn.
El movimiento del ratn da lugar al evento mouseMove. Para tratar este evento se sobrecargara el mtodo
mouseMove():
public boolean mouseMove(Event evt,int x, int y) {
...
}
Arrastre del ratn.
El arrastre del ratn da lugar al evento mouseDrag. Para tratar este evento se sobrecargara el mtodo
mouseDrag():
public boolean mouseDrag(Event evt,int x, int y) {
...
}
12
APLICACIONES BASADAS EN ENTORNO GRFICO
i
837
Ejemplo: Un applet que permite dibuja lneas con el ratn:
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;
}
13
APLICACIONES BASADAS EN ENTORNO GRFICO
i
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);
}
}
}
14
APLICACIONES BASADAS EN ENTORNO GRFICO
i
839
mouseEnter() y mouseExit()
Hay otros mtodos relacionados con el movimiento del ratn.
A estos mtodos que son mouseEnter() y mouseExit() se accede cuando el puntero del ratn entra y sale del
rea del Applet.
Son tiles en programas que usen interfaces.
La sintaxis de ambos es similar a los ltimos mtodos vistos:
public boolean mouseEnter(Event evt,int x, int y) {
...
}
public boolean mouseExit(Event evt,int x, int y) {
...
}
15
APLICACIONES BASADAS EN ENTORNO GRFICO
i
840
4. Eventos del teclado
Los eventos del teclado se generan siempre que pulsamos una tecla de nuestro teclado. Podemos tratar las
teclas pulsadas o para entradas de datos como caracteres.
Para capturar un evento de pulsacin en el teclado se sobrecargara el mtodo keyDown():
public boolean keyDown(Event evt,int key) {
...
}
El argumento key es un entero representando el carcter ASCII pulsado, incluyendo nmeros, alfanumricos,
teclas de funcin, ...
Para usarlos como caracteres basta hacer una conversin de tipos:
teclapulsada = (char)key;
Mtodo KeyUp()
Anlogamente a como ocurra con el botn del ratn para capturar un evento de soltado, en el teclado se
sobrecargara el mtodo keyUp():
public boolean keyUp(Event evt,int key) {
...
}
16
APLICACIONES BASADAS EN ENTORNO GRFICO
i
841
La clase evento nos proporciona un conjunto de variables para referirse a algunas teclas no-alfanumricas.
Podemos as testear el nombre de estas teclas en nuestro programa en lugar de sus valores ASCII. Si hemos
de utilizar teclas conviene utilizar stas.
Por ejemplo si queremos comprobar si la tecla UP (flecha hacia arriba) ha sido pulsada haremos:
if (key == Event.UP) {
...
}
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 > Tecla pulsada
Event.HOME > HOME
Event.END > END
Event.PGUP > PAGE UP
Event.PGDN > PAGE DOWN
Event.UP > UP Flecha
Event.DOWN > DOWN Flecha
Event.LEFT > LEFT Flecha
Event.RIGHT > RIGHT Flecha
17
APLICACIONES BASADAS EN ENTORNO GRFICO
i
842
El carcter RETURN (line feed) es el nmero 10 y el carcter ENTER (retorno de carro) es el nmero 13.
Dependiendo del sistema se trabaja con un carcter u otro.
Si queremos que nuestro programa pueda trabajar en plataformas distintas debemos testear ambos
caracteres.
Ejemplo: Vamos a hacer un Applet que visualice en la coordenada 10,10 la letra que pulsamos desde el
teclado.
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;
}
}
18
APLICACIONES BASADAS EN ENTORNO GRFICO
i
843
Teclas modificadoras
Las teclas SHIFT, CTRL y META (normalmente ALT) son modificadoras y la tecla pulsada tiene un significado
que va a depender de si stas estaban o no pulsadas.
Podemos manejar estos eventos aadiendo al tratamiento del pulsado una comprobacin de si esta pulsada,
por ejemplo, SHIFT. Vemoslo:
public boolean mouseDown(Event evt,int x, int y) {
if (evt.shiftDown()) {
// manejo si SHIFT pulsada
} else {
// manejo si SHIFT no pulsada
}
}
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()
19
APLICACIONES BASADAS EN ENTORNO GRFICO
i
844
5. El manejador de eventos del AWT
Existe un mtodo genrico que realiza el manejo de los eventos vistos. Es el mtodo handleEvent().
public boolean handleEvent(Event evt) {
...
}
En el mtodo por defecto, lo que se hace es llamar a los mtodos vistos antes.
Si queremos tratar de forma distinta los eventos hemos de sobreescribir el mtodo handleEvent().
Es bastante til usar la estructura switch para tratar los eventos.
Para esto examinaremos la variable instancia ID que es un entero y adems la clase Event que define un
conjunto de eventos ID como variables de clase para que nosotros podamos testearlas en el cuerpo de dicho
mtodo.
Pulsa en el botn ejemplo, para ver cmo se podra definir el mtodo.
Ejemplo
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
APLICACIONES BASADAS EN ENTORNO GRFICO
845
Mtodo handleEvent
Hay ms identificadores. En total podemos relacionar los siguientes:
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.
21
APLICACIONES BASADAS EN ENTORNO GRFICO
i
846
22
APLICACIONES BASADAS EN ENTORNO GRFICO
i
847
5. Resumen
Has llegado al final de este recurso formativo que denominamos Gestin de eventos
En esta leccin hemos estudiado los siguientes contenidos:
23
APLICACIONES BASADAS EN ENTORNO GRFICO
i
848
APLICACIONES
BASADAS EN
ENTORNO
GRFICO
El paquete javax.swing
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
1. Los contenedores y componentes de la clase Swing
Objetivos
- Conocer la librera Swing.
- Reconocer Los contenedores y componentes de la clase Swing.
- Conocer los Botones JButton, JCheckBox, JRadioButton y JToggleButton
- Saber cmo manejar los mens de la clase Swing.
Librera JFC (Java Foundation Classes)
La librera JFC es un conjunto de libreras destinadas a hacer la parte grfica de Java.
Java Foundation Class:
- AWT
- Swing
- Java 2D y 3D
- Drag & Drop
- Accesibility
Aunque la Swing es ms grande que la AWT, se considera un subconjunto de AWT porque se basa en ella.
3
APLICACIONES BASADAS EN ENTORNO GRFICO
i
851
La Clase JComponent
La Clase JComponent va a ser la base de todas las clases de Swing.
Todos los elementos de la Swing son contenedores y pueden contener componentes.
JDialog, JFrame y JApplet son las nicas clases que no derivan de JComponent.
Son ventanas del Sistema Operativo. Contenedores de primer nivel.
4
APLICACIONES BASADAS EN ENTORNO GRFICO
i
852
Los contenedores de primer nivel
Los contenedores de primer nivel tienen 3 paneles:
RootPane: raz o principal; dentro de l tenemos el panel de la barra de men; y el ContentPane.
El RootPane tiene un Layout de tipo BorderLayout; y est creado automticamente.
void <JRootPane>.setJMenuBar(JMenuBar menu)
Para aadir la barra de Men.
JRootPane <JDialog>.getRootPane()
<JApplet>
<JFrame>
5
APLICACIONES BASADAS EN ENTORNO GRFICO
i
853
RootPane
Existe un mtodo para establecer la barra de men sin tener que coger primero el RootPane:
void <JFrame>.setJMenuBar (JMenuBar menu)
<JDialog>
<JApplet>
this.setJMenuBar(barra_menu);
void <JTootPane>.getContentPane()
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)
6
APLICACIONES BASADAS EN ENTORNO GRFICO
i
854
Aadir elementos al ContentPane
Para aadir elementos al ContentPane.
a. Si se realiza algo como:
ventana.add(componente); // Se produce excepcin.
b. Para evitarlo:
ventana.getContentPane().add(componente); //Corr.
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 => BorderLayout
Panel, Applet => Flowlayout
En Swing
JFrame, JDialog, JApplet => BorderLayout
JPanel => FlowLayout
7
APLICACIONES BASADAS EN ENTORNO GRFICO
i
855
Como crear un Jframe
Los Jframe se crean parecidos a AWT, pero a la hora de aadir se utiliza el mtodo:
ventana.getContentPane().add(componente);
Otra diferencia es que en Swing, cuando se pulsa el botn de cerrar la ventana, la ventana se hace invisible
pero no se destruye. Con esto podemos hacerla visible si lo requerimos ms adelante. Cuando est invisible
el hilo est dormido.
void <JFrame> setDefaultCloseOperation(int op);
Sirve para controlar qu debe ocurrir cuando se pulse el botn de cerrar
interface WindowConstants {
public static final int DISPOSE_ON_CLOSE;
public static final int DO_NOTHING_ON_CLOSE;
public static final int HIDE_ON_CLOSE;
}
DISPOSE_ON_CLOSE, libera el recurso.
DO_NOTHING_ON_CLOSE, no hace nada.
HIDE_ON_CLOSE, Oculta el recurso.
Esta interface est implementada por JFrame y JDialog.
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
8
APLICACIONES BASADAS EN ENTORNO GRFICO
i
856
2. Los Botones JButton, JCheckBox, JRadioButton y JToggleButton.
Los Botones:
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 > Botn pinchable
JChekBox > CheckBox
JRadioButton > Radio Button
JToggleButton > Un botn que cuando se pincha se aplasta y cuando se vuelve a pinchar se levanta.
9
APLICACIONES BASADAS EN ENTORNO GRFICO
i
857
Los botones: JButton
Los constructores de JButton son los siguientes:
JButton()
JButton(String text)
JButton(Icon icon)
JButton(String text, Icon icon)
Se le indica al formulario cul es el botn por defecto
void <JRootPane> setDefaultButton(JButton boton)
Para indicar la posicin del texto respecto al icono
void <AbstractButton> setVerticalTextPosition(int pos)
AbstractButton.CENTER (defecto)
AbstractButton.TOP
AbstractButton.BOTTOM
void <AbstractButton>.setHorizontalTextPosition(int pos)
AbstractButton.LEFT
AbstractButton.CENTER
AbstractButton.RIGHT (defecto)
10
APLICACIONES BASADAS EN ENTORNO GRFICO
i
858
Eventos de JButton
Se podr poner una etiqueta personalizada en HTML a JLabel y JButton:
JButton b = new JButton
("<HTML> compre <FONT size=+2> ahora
</FONT>");
Para cambiar el color del texto
void <Component>.setForeground(Color c)
Para cambiar el color del fondo
void <Component>.setBackground(Color c)
Eventos:
- ActionEvent
11
APLICACIONES BASADAS EN ENTORNO GRFICO
i
859
Los botones: JcheckBox
Los constructores de JcheckBox son:
JCheckBox()
JCheckBox(String text)
JCheckBox(String text,Icon icon)
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)
12
APLICACIONES BASADAS EN ENTORNO GRFICO
i
860
Se aadirn los RadioButton
JRadioButton rojo = new JRadioButton("rojo");
JRadioButton verde = new
JRadioButton("verde",true);
JRadioButton azul = new JRadioButton("azul");
ButtonGroup grupo = new ButtonGroup();
grupo.add(rojo);
grupo.add(verde);
grupo.add(azul);
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:
void <ButtonGroup> add(AbstractButton b)
Eventos:
- ItemEvent Para el cambio de estado.
- ActionEvent Para la accin de pulsar.
Cmo usar Icon:
Es una interface que representa iconos. Hay una clase que la implementa, muy usada, ImageIcon que sirve
para crear un icono a partir de un fichero .GIF o .JPEG.
Constructores:
ImageIcon(String filename); // path absoluto o relativo
ImageIcon(URL url)
13
APLICACIONES BASADAS EN ENTORNO GRFICO
861
Los botones: JToggleButton
La forma de crear un botn al que le ponemos un icono sera:
ImageIcon i = new ImageIcon ("open.gif");
JButton b = new JButton("Abrir",i);
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.
}
Retornamos el tamao del icono y en PaintIcon se pintar.
14
APLICACIONES BASADAS EN ENTORNO GRFICO
i
862
Ejemplo
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
APLICACIONES BASADAS EN ENTORNO GRFICO
863
i
3. Los mens
En Swing los mens no estn hechos con los mens nativos del Sistema Operativo, sino que son ventanas
dibujadas por Swing pero usando ventanas del Sistema Operativo, por lo que no son componentes ligeros, sino
elementos pesados.
En AWT no derivan de Component. En Swing si derivan de Component e incluso de JComponent.
16
APLICACIONES BASADAS EN ENTORNO GRFICO
i
864
Mtodos de los mens
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:
void <JMenuBar> add(JMenu m)
void <JMenu> add(JMenuItem mi)
Una vez que se ha colocado, se tiene que aadir la barra de men con el mtodo:
void <JFrame> setJMenuBar(JMenuBar bar)
Para aadir opciones a una persiana:
JMenuItem <JMenu> add (String title)
17
APLICACIONES BASADAS EN ENTORNO GRFICO
i
865
Ejemplo 1:
JMenuItem abrir = new JMenuItem("Abrir");
persianaArchivo.add(abrir);
Ejemplo 2:
JMenuItem abrir = persianaArchivo.add(abrir);
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:
void <JMenu> addSeparator()
Los eventos que producen los Mens son ActionEvent
18
APLICACIONES BASADAS EN ENTORNO GRFICO
i
866
Estos dos tipos de opciones de Men, tambin producen eventos del tipo ItemEvent.
Las opciones podrn tener:
- un texto
- un icono
- una tecla rpida (aparece subrayada)
void <AbstractButton> setMnemonic (char ch)
- una tecla aceleradora (combinacin de teclas)
void <JMenuItem> setAccelerator(KeyStroke ks)
KeyStroke
Los objetos de tipo KeyStroke se piden al sistema utilizando la funcin esttica:
static KeyStroke <KeyStroke> getKeyStroke(int key_code, int modifiers)
Key_code
Cdigo de tecla virtual (dentro de la clase KeyEvent)
Modifiers
ALT_MASK, CONTROL_MASK (dentro de la clase KeyEvent)
19
APLICACIONES BASADAS EN ENTORNO GRFICO
i
867
Ejemplo:
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:
void <JToolBar> setFloatable(boolean b)
Para aadir componentes a una barra:
void <Container> add(Component c)
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
APLICACIONES BASADAS EN ENTORNO GRFICO
868
Cmo hacer un Applet con Swing
Los Applet en Swing estn representados por la clase JApplet.
Son parecidos a los Applet excepto porque:
- Pueden tener men
- A la hora de aadir componentes al Applet, antes hacamos algo como:
mi_applet.add(componente); // AWT
y ahora haremos:
mi_applet.getContentPane().add(componente); // SWING
Por defecto tiene puesto un BorderLayout; y en AWT tena un FlowLayout.
21
APLICACIONES BASADAS EN ENTORNO GRFICO
i
869
Los paneles en Swing
Los paneles en Swing estn representados por JApplet.
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)
22
APLICACIONES BASADAS EN ENTORNO GRFICO
i
870
Como referirse el tamao de los componentes
Todos los componentes tendrn:
- Tamao mnimo.
- Tamao preferido.
- Tamao mximo.
Estos tamaos los utilizar el Layout para determinar dnde y de qu tamao colocar los componentes. Para
que el Layout pueda preguntar por estos tamaos, se tienen los siguientes mtodos:
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.
23
APLICACIONES BASADAS EN ENTORNO GRFICO
i
871
i
CardLayout y GridLayout
CardLayout y GridLayout no hacen caso de los tamaos del componente, ocupan todo el espacio del Layout.
GridBayLayout utiliza, por defecto, el tamao mnimo del componente. Aunque se puede modificar luego el
tamao del componente.
Ejemplo
JButton b = new JButton ("Aceptar") {
public Dimension getPreferredSize() {
Dimesion d = super.getPreferredSize();
d.height+= 10;
return d;
}
};
Panel p = new Panel (new FlowLayout());
p.add(b);
this.add(p);
Estos mtodos se pueden utilizar en Swing pero existen otros mtodos para no tener que desarrollarlo como
en el ejemplo anterior:
void <JComponent>.setMinimumSize (Dimension d)
void <JComponent>.setPreferredSize(Dimension d)
void <JComponent>.setMaximumSize (Dimension d)
24
APLICACIONES BASADAS EN ENTORNO GRFICO
i
872
JComponent deriva de Component
Con los mtodos expuestos, el ejemplo anterior quedara optimizado de la siguiente manera>>
JButton b = new JButton("Aceptar);
Dimension d = b.getPreferredSize();
d.height+=10;
b.seSizePreferred(d);
Parmetro Align
El parmetro Align, en cuanto a los tamaos del componente, nunca hace caso al mximo y se utiliza en el
caso de usar BoxLayout.
Los componentes adems tendrn alineacin vertical y horizontal respecto al contenedor.
void <JComponent>.setAlignamentX (float align)
void <JComponent>.setAlignamentY (float align)
El parmetro Align se define con las siguientes constantes:
TOP_ALIGNAMENT
(0.0)
LEFT_ALIGNAMENT CENTER_ALIGNAMENT RIGHT_ALIGNAMENT
(0.0) (0.5) (1.0)
BOTTOM_ALIGNAMENT
(1.0)
Slo el BoxLayout tiene en cuenta estos alineamientos. Los antiguos Layouts no los toman en cuenta.
25
APLICACIONES BASADAS EN ENTORNO GRFICO
i
873
El Layout BoxLayout
Layout BoxLayout slo lo utiliza Swing y permite colocar los componentes en filas o en columnas.
Respeta tanto el mnimo como el mximo y el preferred. Tambin permite la alineacin vertical y horizontal.
Constructor:
BoxLayout (Container c, int axis)
Donde el parmetro Axis toma el valor de las siguientes constantes:
BoxLayout.X_AXIS
BoxLayout.Y_AXIS
Reglas para colocar los componentes en la vertical:
Intenta dar a los componentes su tamao preferido, pero intentado conseguir que todos los
componentes ocupen toda la vertical.
Si los componentes no ocupan toda la vertical redimensiona los componentes para que ocupen
toda la vertical pero siempre respetando el MaximumSize y el MinimumSize.
Respecto a la horizontal:
Intenta dar a los componentes el ancho del componente ms ancho, pero de nuevo respeta el
MinimumSize y el MaximumSize. De forma que si algn componente no puede hacelo ms ancho
no lo hace.
En el caso de que algn componente no se pueda hacer todo lo ancho que se necesite entra en
juego las alineaciones X e Y.
26
APLICACIONES BASADAS EN ENTORNO GRFICO
i
874
Los Paneles Deslizanes (JScrollPane)
Los paneles deslizantes (JScrollPane) son paneles con barras de scroll dentro de los cuales se pueden colocar
componentes ms grandes. La parte que se ve del componente dentro del JScrollPane se llama viewpart.
Se utilizan mucho para poner barra de scroll a los componentes Swing, ya que los componentes Swing por s
solos no tienen barras de scrolls.
JTextArea no tiene barra de scroll.
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)
27
APLICACIONES BASADAS EN ENTORNO GRFICO
i
875
Estn implementados por clases y las clases ms conocidas son las siguientes:
javax.swing.plaf.metal.MetalLookAndFeel
com.sun.java.swing.plaf.motif.MotifLookAndFeel // Para UNIX.
com.sun.java.swing.windows.WindowsLookAndFeel // Para Window.
com.sun.java.swing.plaf.beos.BeOSLookAndFeel // Para BeOs.
Para hacerlo al principio del programa (main o init):
try {
UIManager.setLookAndFeel (
new com.sun.java.swing.plaf.windows.WindowsLookAndFeel());
}
catch (Exception ex) { }
Para realizarlo en otra parte del programa se tiene la siguiente funcin:
static void <SwingUtilities>.updateComponentTreeUI (Component c)
28
APLICACIONES BASADAS EN ENTORNO GRFICO
i
876
4. Resumen
Has llegado al final de este recurso formativo que denominamos El paquete javax.swing
En esta leccin hemos estudiado los siguientes contenidos:
29
APLICACIONES BASADAS EN ENTORNO GRFICO
i
877
Mdulo: APLICACIONES BASADAS EN ENTORNO GRFICO Caso prctico
Realiza un programa Java consistente en la realizacin de un men de Windows.
El Men tendr la opcin Base de Datos, con las subopciones Conectar, Desconectar y Salir. Entre la
opcin Desconectar y Salir se introducir una barra de separacin.
La distribucin de la ventana ser una BorderLayout, y en la zona sur aadiremos un label (Estado:)
que nos ir informando de la opcin pulsada a medida que vayamos pulsando en cada opcin de men.
La informacin ser cambiar el texto del Label.
APLICACIONES BASADAS EN ENTORNO
GRFICO Caso prctico
1
878
Mdulo: APLICACIONES BASADAS EN ENTORNO GRFICO Caso prctico
Realiza un programa Java que sea un Applet en el que tengamos la opcin de poder pintar sobre l como
si se tratase de un Paint de Windows. El ratn ser el pincel. Con l pintaremos sobre la superficie del
Applet.
Tendremos 3 botones para elegir el color del pincel ( rojo, verde o azul) y tambin tendremos una caja
de texto para elegir el grosor del pincel con el que pintamos, pondremos el tamao y pulsaremos en
un botn Ok.
APLICACIONES BASADAS EN ENTORNO
GRFICO Caso prctico
1
879

Mdulo 8:
Acceso a datos en Java


880
ACCESO A DATOS
EN JAVA
881
Fundamentos del lenguaje SQL
LMD (Lenguaje de manipulacin de datos)
SELECT
SELECT[DISTINCT]<lista_columnas>|*
FROM<lista_tablas>
[WHERE<predicado>]
EJ:VisualizartodoslosvuelosquetengancomoorigenodestinoCceres.
SELECT*
FROMVUELOS
WHEREORIGEN=CACERES
ORDESTINO=CACERES
EJ:VisualizartodoslosvuelosquetengancomoorigenMadridoLondresycomodestinoLondresoMadrid.
SELECT*
FROMVUELOS
WHERE(ORIGEN=MADRID
ANDDESTINO=LONDRES)
OR(ORIGEN=LONDRES
ANDDESTINO=MADRID)
Clasula IN
Expresalapertenenciadelvalordeunacolumnaaundeterminadoconjuntodevalores.
EJ:SeleccionaraquellosvuelosquetengancomoorigenMadrid,BarcelonaoSevilla.
SELECT*
FROMVUELOS
WHEREORIGENIN(MADRID,BARCELONA,SEVILLA)
Otambin
SELECT*
FROMVUELOS
WHEREORIGEN=MADRIDORORIGEN=BARCELONAORORIGEN=SEVILLA
ACCESOADATOSENJAVA
2
882
EJ:VisualizartodoslosvuelosexistentesexceptoaquellosquelleganaLondresoaCopenhague.
SELECT*
FROMVUELOS
WHEREDESTINONOTIN(LONDRES,COPENHAGUE)
Clasula BETWEEN
Sirveparaestableceroexpresarunrangodevalores.Obedecealasiguientesintaxis:
<nombre_columna>BETWEENvalor1ANDvalor2
Elrangoser[valor1,valor2],extremosincluidos.
EJ:Recuperartodoslosvuelosquesalganentrelas6ylas12delamaana.
SELECT*
FROMVUELOS
WHEREHORA_SALIDABETWEEN06.00.00
AND12.00.00
tambin
SELECT*
FROMVUELOS
WHEREHORA_SALIDA>=06.00.00
ANDHORA_SALIDA<=12.00.00
EJ: En la columna NUM_VUELO representar los vuelos con 6 caracteres. Los dos primeros caracteres
indicarnlacompaaalaquepertenececadavuelo(IBIberia,BABritishAirways),loscuatrocaracteres
siguientescorrespondernalnmerodevuelo.Bajoestascondicionesrecuprensetodoslosvuelosqueno
pertenecenaIBERIA.
SELECT*
FROMVUELOS
WHERENUM_VUELONOTBETWEENIB0000
ANDIB9999
ACCESOADATOSENJAVA
3
883
Clasula LIKE
Sirve para especificar, con la ayuda de metasmbolos, cadenas de caracteres que comparten ciertos
caracteresencomn.Losmetasmbolosquesernutilizadosson:
%Equivaleaunacadenadecaracteresdelongitudcomprendidaentre0yn.
AB%AB,ABCDE,AB497
_Equivaleaunnicocarcter
A_BAB,A4B,AJB
EJ:RecuperartodoslosvuelospertenecientesalacompaaIBERIA.
SELECT*
FROMVUELOS
WHERENUM_VUELOSLIKEIB%
Otambin
SELECT*
FROMVUELOS
WHERENUM_VUELOSLIKEIB____
Expresiones aritmticas
+,-,*,/
PuedenserutilizadastantodespusdeSELECTcomodespusdeWHERE.Enelprimercasotrabajaransobre
columnasyenelsegundosobrefilas.
EJ:Visualizarlalongitudylaenvergaduradetodoslosaviones,expresandolasmagnitudesenpies(enlabase
dedatosestalmacenadoenmetros,parapasar1metroapiessehademultiplicarpor3.28),ylavelocidad
decruceroenmph (estenKm/h,habrquedividirpor1.6).
SELECTLONGITUD*3.28,ENVERGADURA*3.28,VELO_CRUC/1.6
FROMAVIONES
Etiquetas
-
-
-
ACCESOADATOSENJAVA
4
884
EnDB/2deIBMlasetiquetastomanlosnombresdelascolumnas(col1,col2,col3)
EnSQL-SERVERlasetiquetasquedaranas(LONGITUD*3.28,ENVERGADURA*3.28,VELO_CRUC/1.6)
EJ:Relacinentrelalongitudylaenvergaduradetodoslosaviones.
SELECTLONGITUD/ENVERGADURA
FROMAVIONES
EJ:Seleccionaraquellosavionescuyalongitudsupereasuenvergaduraenmsdeun10%.
SELECT*
FROMAVIONES
WHERELONGITUD>ENVERGADURA*1.10
Funciones de columna
SonfuncionesqueoperancontodaslasfilasquecumplenlacondicinexpuestaenlaclasulaWHERE.Su
resultadoesunnicovalor.Sintaxis:
1)<f_columna>([DISTINCT]<nombre_columna>)
2) <f_columna> (<expresin>), donde <expresin> es una expresin aritmtica en la cual debe
participar,almenos,unacolumna.
3)COUNT(*)
Funciones
<f_columna>:
MIN:Calculaelvalormnimodeunacolumna.
MAX:Calculaelvalormximodeunacolumna.
AVG:Calculalamediaaritmticadeunacolumna.
SUM:Calculalasumadetodosloscamposdeunacolumna.
COUNT:Cuentaelndefilasdeunacolumna.
ACCESOADATOSENJAVA
5
885
COUNT(A)=COUNT(B)
COUNT(A)=4,COUNT(B)=4
ElCOUNTdedoscolumnasdeunamismatablaesigual.COUNT(*)sirveparaobtenerelndefilas.
EJ:Seleccionarlosvaloresmnimoymximodelacolumnaquealmacenalasvelocidadesdecrucero.
SELECTMIN(VELO_CRUC),MAX(VELO_CRUC)
FROMAVIONES
EJ:AveriguaraquhoraparteelprimervuelohaciaMadrid.
SELECTMIN(HORA_SALIDA)
FROMVUELOS
WHEREDESTINO=MADRID
Regla que cumplen las funciones de columna
LafuncindecolumnaslopodrespecificarsedetrsdelaparticulaSELECToenlaclasulaHAVING,pero
nuncadentrodelaclasulaWHERE.
EJ:Sedeseasaberculeselvueloquetienelamnimahoradesalida.
SELECT*
FROMVUELOS
WHEREHORA_SALIDA=(SELECTMIN(HORA_SALIDA)FROMVUELOS)
Clasula GROUP BY-HAVING
Sirveparadividirunatablaengruposdefilasquecompartencaractersticascomunes.Lasintaxises:
SELECT<lista_columnas>,<funciones_de_columna>
FROM<lista_tablas>
[WHERE<predicado>]
[GROUPBY<lista_columnas>]
[HAVING<predicado>]
ACCESOADATOSENJAVA
6
886
EJ:EfecteseunaSELECTquevisualiceelmnimovalordehoradesalidaparacadaunodelosdiferentes
destinos.
SELECTDISTINCTDESTINO
FROMVUELOS
SELECTMIN(HORA_SALIDA)
FROMVUELOS
WHEREDESTINOLIKE%
Acontinuacinsemuestraunejemplodeloquenosedebehacer:
SELECTMIN(HORA_SALIDA)
FROMVUELOS
WHEREDESTINOIN(SELECTDISTINCTDESTINO
FROMVUELOS)
SentenciaGROUPBY:
SELECTDESTINO,MIN(HORA_SALIDA)
FROMVUELOS
GROUPBYDESTINO
TablaVUELOSTablaauxiliarTablaxMADRID
WHEREGROUPBYDESTINOTablayBARCELONA
TablazSEVILLA
<f_columna>
GROUP BY crea una serie de subtablas compuestas por filas con el mismo valor para la columna de
agrupamiento(enesteejemplolacolumnaDESTINO).Seaplicarnacontinuacinfuncionesdecolumna
sobrecadasubtabladeformaindependiente.
MADRID,x
BARCELONA,y
SEVILLA,z
ACCESOADATOSENJAVA
7
887
NosepuedeponerenGROUPBYuncampoquenosehayaincluidoenlasentenciaSELECT.
EJ:Obtenerelorigendelvueloparacadaunodelosvuelosquetienenlamnimahoradesalidaparacada
unodelosdestinos.
EJ:Obtenerelnmerodevuelosqueexistenparacadaunodelosorgenes.
SELECTORIGEN,COUNT(*)
FROMVUELOS
GROUPBYORIGEN
Clasula HAVING
Permiteelegiraquellosgruposquesequierenvisualizar.
EJ:Visualizarlosgruposquetienenparacadaunodelosorgeneslamnimahoradesalidasiendoanterior
alas12horas.
SELECTORIGEN,MIN(HORA_SALIDA)
FROMVUELOS
GROUPBYORIGEN
HAVINGMIN(HORA_SALIDA)<12.00
HAVINGnointerferirenlaagrupacinporfilasdeGROUPBY.
EJ:Sedeseaseleccionarlahoradesalidamstempranaparacadaorigenydestino.
SELECTORIGEN,DESTINO,MIN(HORA_SALIDA)
FROMVUELOS
GROUPBYORIGEN,DESTINO
EJ:Visualizarlosorgenesquetenganmsdedosvuelos.
SELECTORIGEN
FROMVUELOS
GROUPBYORIGEN
HAVINGCOUNT(*)>2
ACCESOADATOSENJAVA
8
888
EJ:VisualizarlosvuelosdeIBERIAquetenganmsde150plazaslibres.
SELECTNUM_VUELO,SUM(PLAZAS_LIBRES)
FROMRESERVAS
GROUPBYNUM_VUELO
HAVINGNUM_VUELOLIKEIB%
ANDSUM(PLAZAS_LIBRES)>150
Otambin
SELECTNUM_VUELO,SUM(PLAZAS_LIBRES)
FROMRESREVAS
WHERENUM_VUELOLIKEIB%
GROUPBYNUM_VUELO
HAVINGNUM_VUELOIB%
ANDSUM(PLAZAS_LIBRES)>150
ACCESOADATOSENJAVA
9
889
TRATAMIENTO DE NULOS
Operaciones aritmticas
Cualquieroperacinaritmticasobreuncamponulonosdevolvercomoresultadounvalornulo.
Tomemoscomoejemplolasiguientetabla:
NULOS
SELECTCOL_A+COL_B
FROMNULOS
COL_A+COL_B
25
70
NULL
NULL
NULL
117
93
NULL
NULL
ACCESOADATOSENJAVA
10
890
Funciones de columna
IgnoranloscamposNULL,exceptuandolafuncinCOUNT.
SELECTAVG(COL_A)
SELECTSUM(COL_A)/COUNT(*)
AVG(COL_A)=46
SUM(COL_A)/COUNT(*)=25.5
Comparaciones
Dosvaloresnulosnosonigualesnisondistintos,sinoindeterminados.
SELECT*
FROMNULOS
WHERECOL_A=COL_B
COL_ACOL_B
3535
SELECT*
FROMNULOS
WHERECOL_A<>COL_B
COL_ACOL_B
1510
140NULL
NULL100
7110
3360
SELECT*
FROMNULOS
WHERECOL_AISNULL
EstaordenvisualizatodaslasfilasenlasqueelcampopertenecientealacolumnaCOL_Aesnulo.
ACCESOADATOSENJAVA
11
891
Ordenacin
Dependiendodelsistemagestorenusolosvaloresnulossernlosdemayorolosdemenorpeso.
DB/2deIBM:
NULLMayorpeso.Enordenacinascendentesernlosltimos.
SELECTCOL_A
FROMNULOS
ORDERBYCOL_A
COL_A
7
15
33
35
140
NULL
NULL
NULL
NULL
SQL-SERVER:
NULLMenorpeso.Enordenacinascendentesernlosprimeros.
SELECTCOL_A
FROMNULOS
ORDERBYCOL_A
COL_A
NULL
NULL
NULL
NULL
7
15
33
33
140
ACCESOADATOSENJAVA
12
892
DISTINCT
Noeliminalosvaloresnulosrepetidos.
SELECTDISTINCTCOL_A
FROMNULOS
COL_A
15
35
140
NULL
NULL
7
33
NULL
NULL
ndices nicos
Sobreunacolumnadendicenicosloestpermitidalaexistenciadeunvalornulo.
CREATEUNIQUEINDEXIXNULOS
ONNULOS
(COL_A)
Devolveraunerror,yaqueexistemsdeuncampoconNULL.
Paraestecasolosnulosseinterpretancomovaloresiguales.
GROUP BY
Todoslosnulosquedarnagrupadosenelmismogrupo.
SELECTCOL_A,COUNT(*)
FROMNULOS
GROUPBYCOL_A
ACCESOADATOSENJAVA
13
893
COL_ACOUNT(*)
15 1
35 1
140 1
NULL 4
7 1
33 1
TodoslosvaloresNULLseagrupanyCOUNTdevuelveelnmerodefilasquetenanNULLenCOL_A.
SUBSELECT
Respondealasiguientesintaxis:
SELECT<lista_columnas>
FROM<lista_tablas>
WHERE<nombre_columna><CONCATENADOR>(SELECT<nombre_columna>
FROM<lista_tablas>
WHERE<Predicado>)
<CONCATENADOR>
PuedeserunoperadordecomparacinolaclasulaIN
Operadoresdecomparacin:>,<,>=,<=,=,<>
Restricciones:hadeexigirsequeelresultadodelaSubselectseaunnicovaloralusarcomoconcatenador
unoperadordecomparacin.SiusamosINpuededevolvermsdeunvalor.
CadaSelectseejecutaunanicavez,desdelamsinterna,hastalamsexterna.
EJ:SedesearecuperarlasplazaslibresquehayencadavueloMADRID-LONDRESdelda20/02/92.
{Lasplazaslibresesuncampodelatabladereservas.Enlatabladevuelostenemoselorigenyeldestino
decadavuelo.}
SELECT*
FROMRESERVAS
WHEREFECHA_SALIDA=20.02.1992
ANDNUM_VUELOIN(SELECTNUM_VUELO
FROMVUELOS
WHEREORIGEN=MADRID
ANDDESTINO=LONDRES)
ACCESOADATOSENJAVA
14
894
ANY, ALL
Seusanparapoderutilizaroperadoresdecomparacinconsubselectsquenosdevuelvanmsdeunvalor
nicocomoresultado.
SELECT<lista_columna>
FROM<lista_tablas>
WHERE<nombre_columna><CONCATENADOR>{ANY/ALL}(<Subselect>)
UnaexpresinANYesciertasiloesparaalgnvalordelosquedevuelvelaSubselect.
UnaexpresinALLesciertasiloesparatodoslosvaloresquedevuelvelaSubselect.
3>ANY(2,5,7)Cierto
3=ANY(2,5,7)Falso
3>ALL(2,5,7)Falso
3<ALL(9,10,11)Cierto
EJ:Sequierenrecuperarlosavionescuyalongitudseamayorquelaenvergaduradetodosellos.
SELECT*
FROMAVIONES
WHERELONGITUD>ALL(SELECTENVERGADURA
FROMAVIONES)
Otambin
SELECT*
FROMAVIONES
WHERELONGITUD>(SELECTMAX(ENVERGADURA)
FROMAVIONES)
=ANYeINtienenlamismafuncin.
3=ANY(2,3,5)y3IN(2,3,5)devuelvenambosCierto.
ACCESOADATOSENJAVA
15
895
Subselects correlacionadas
Sonuntipoespecialdesubselect.Lasintaxisessimilar:
SELECT<lista_columnas>
FROM<nombre_tabla_externa>
WHERE<nombre_columna><CONCATENADOR>(SELECT<nombre_columna>
FROM<nombre_tabla_interna>
WHERE<Predicado>)
En<Predicado>habrunasentenciadeltipo
<nombre_columna_tabla_interna><operador><nombre_columna_tabla_externa>
Las formas de ejecutar una subselect ordinaria y unas correlacionadas son diferentes. Las subselects
correlacionadasobedecenalsiguientealgoritmo:
ALGORITMOSubselect_Correlacionada
1.Seleccionarfiladetablaexterna
2.EjecutarSELECTinterno
3.EvaluarlacondicindelWHEREexterno
-Cierto:lafilaseleccionadaen1serunafiladesalida
4.Siexistealgunafilamsenlatablaexternairalpaso1
EJ:Sedesearecuperarlasreservascuyonmerodeplazaslibresseamayorquelamediaparaesemismo
vuelo.
SELECT*
FROMRESERVAS,A
WHEREPLAZAS_LIBRES>(SELECTAVG(PLAZAS_LIBRES)
FROMRESERVAS
WHERENUM_VUELO=A.NUM_VUELO)
RESERVAS
NUM_VUELOFECHA_SALIDAPLAZAS_LIBRES
IB740 20.02.92 5
IB740 25.02.92 15
IB740 03.03.92 10
AVG(PLAZAS_LIBRES)=10
ACCESOADATOSENJAVA
16
896
Alias
Esunsobrenombrequeseledaaunatablayquedebesernicoparatodalaconsulta.Seescribedejando
unblancodetrsdelnombredelatablaalacualsevaacalificar.
EJ:Sequiererecuperarlosavionesquetienenmenosde1horaycuartoderecorridocomotrminomedio.
VUELOS
NUM_VUELO ORIGEN DESTINO DISTANCIA
B747 MADRID LONDRES 10000
B747 MADRID PARIS 4000
AVIONES
NUM_VUELO VELO_CRUC
............ ............
v=e/t,t>e/v,1.25>e/v,v*1.25>AVG(DISTANCIA)
SELECTAVIONESSELECTVUELOS
SELECT*
FROMAVIONES
WHERE1.25*VELO_CRUC>(SELECTAVG(DISTANCIA)
FROMVUELOS
WHERENUM_VUELO=AVIONES.NUM_VUELO)
EXISTS-NOT EXISTS
SedefineparacomprobarlaexistenciaoausenciadelvalordevueltoporunaSubselect.Unaexpresincon
EXISTdevuelveCiertosilaSubselectnosdevuelvealmenosunvalor.
WHEREEXISTS(<Subselect>)Cierto
ACCESOADATOSENJAVA
17
897
EJ:SeleccionartodalainformacindevuelosparaaquellosquetenganorigenMadridyenlosquequeden
plazaslibres.
SELECT*
FROMVUELOS
WHEREORIGEN=MADRID
ANDEXISTS(SELECT*
FROMRESERVAS
WHEREPLAZAS_LIBRES>0
ANDNUM_VUELO=VUELOS.NUM_VUELO)
EJ:Obtenerlostiposdeavinycapacidadesparaaquellosenlosquequedenmenosde30plazaslibres
(JOIN).
ORDER BY
Sedefineparaordenarlasalidadeunaconsultaporloscamposqueseespecifiquenacontinuacin.
Sintaxis:
SELECT
FROM
WHERE
GROUPBY
HAVING
ORDERBY
ORDERBY<especificacindecolumna><orden>{,<especificacindecolumna><orden>}
<especificacindecolumna>=<nombredecolumna>|<posicindecolumna>
<orden>=ASC|DESC
Ej:Obtenerelnmerodeplazaslibresquequedanparacadavueloyordenarelresultadodemsamenos
plazaslibres.Paraigualnmerodeplazasordnesepornmerodevuelo.
SELECTNUM_VUELO,SUM(PLAZAS-LIBRES)
FROMRESERVAS
GROUPBYNUM_VUELO
ORDERBY2DESC,NUM_VUELO
ACCESOADATOSENJAVA
18
898
UNION-UNION ALL
Sedefinepararecuperar,usandounanicaconsulta,informacinqueseobtieneapartirdemsdeuna
consulta.
Sintaxis:
<SELECT>
UNION[ALL]
<SELECT>
{UNION[ALL]
<SELECT>}
Caractersticas:
CadaSELECTdevuelveunconjuntodefilas.Launinserlatablaresultado.
CondicionesdecadaestructuraSELECT:
-Todasdebenserigualesocompatiblesunaauna.Estosuponequeporcadacolumnatengamosunnicotipo
dedato.
-Puedensercompletas(WHERE,GROUPBY,...),exceptuandolaclusulaORDERBY,queseubicaralfinal
delaltimaSELECT.
UNIONsinALLproporcionaunresultadosinfilasduplicadas.
Ej:Sacarunalistadetodasaquellasciudadesparalasquehayavuelo,ordenadasalfabticamente.
SELECTORIGEN
FROMVUELOS
UNION
SELECTDESTINO
FROMVUELOS
ORDERBY1
ACCESOADATOSENJAVA
19
899
Catlogo del sistema o diccionario de datos:
Eselalmadeunsistemagestor.Sedefinecomounconjuntodetablasqueformanunabasededatos,yson
definidasymantenidasautomticamenteporelsistemagestor.Sirvenparaalmacenarinformacinsobrelos
objetosdefinidosporlosusuarios.
SELECT*
FROMVUELOS
1-ElsistemabuscaenelcatlogosiexistelatablaVUELOS.
2-Verificasielusuariotieneaccesoaesainformacin.
3-SepreguntaculesycuntascolumnastienelatablaVUELOS.
DB2IBM:
SYSTABLES:unafilaporcadatabladefinidaenlainstalacin.
SYSCOLUMNS:unafilaporcadacolumnadefinida.
SYSINDEXES:unafilaporcadandicedefinido.
SYSVIEW:unafilaporcadavista.
SYSTABAUTH:unafilaporcadaautorizacindefinida.
Todaslastablassondirectamenteconsultadasporusuariosautorizados.
ADM(Administrador):eslapersonaqueconcedeautorizacionesalosusuarios.
Unusuarioautorizadopuedeefectuaroperacionesdeltipo:
SELECT*
FROMSYSTABLES
WHERENAME=RESERVAS
NAME DBNAME CARD
RESERVAS AEROPUERTO ..........
DBNAME:nombredelaBdDalaquepertenecelatabla.
CARD:ndefilasdelatabla.
OWNER:usuariocreadordelatabla.
SELECT*
FROMSYSCOLUMNS
WHEREDBNAME=RESERVAS
ACCESOADATOSENJAVA
20
900
Nosdalainformacinsobretodaslascolumnasquepertenecenalatablareservas.
NAME TBNAME COL_NO COL_TYPE LENGTHNULLS
NUM_VUELO RESERVAS 1 CHAR 6 N
FECHA_SALIDARESERVAS 2 DATE 8 N
TBNAME:nombredelatabla.
COL_NO:posicindelacolumnaenlatabla.
COL_TYPE:tipodedato
LENGTH:longituddeldatodelacolumna.
NULLS:indicasisepermitevalornulo.
Ej:Obtngaselaltimahoradesalidaparacadadestinodelosvuelosrealizadosporavionescapacesde
almacenarmscombustiblequeunterciodelamediaquepuedenalmacenarlosdemsaviones.
SELECTDESTINO,MAX(HORA_SALIDA)
FROMVUELOS
WHERETIPO_AVIONIN(SELECTTIPO
FROMA
WHERECOMBUSTIBLE>1/3*(SELECTAVG(COMBUSTIBLE)
FROMAVIONES
WHERETIPO<>A.TIPO)
Ej:CrearunavistasobrelatablavuelosconlascolumnasORIGENyDESTINOparaaquellosvuelosquenosean
deIBERIA.VisualizarelcontenidodelalistaparalosvuelosquenopartandeMadrid.Borrarlavista.
CREATEVIEWV_VUELOS
(V_ORIGEN,V_DESTINO)
ASSELECTORIGEN,DESTINO
FROMVUELOS
WHERENUM_VUELONOTLIKEIB%
SELECT*
FROMV_VUELOS
WHEREV_ORIGEN<>MADRID
DROPVIEWV_VUELOS
ACCESOADATOSENJAVA
21
901
Ej:Visualicelostiposdeavin,eldobledesulongitudylamitaddesuenvergadura,paraaquellosaviones
conenvergaduramayorquelamediayquerealizanvuelosdesdeohaciaBarcelona,ordenndolosdemayor
amenorlongitud.
SELECTTIPO_AVION,2*LONGITUD,.5*ENVERGADURA
FROMAVIONES,VUELOS
WHEREENVERGADURA>(SELECTAVG(ENVERGADURA)
FROMAVIONES)
AND
AVIONES.TIPO_AVION=VUELOS.TIPO_AVION
AND
(ORIGEN=BARCELONAORDESTINO=BARCELONA)
ORDERBY2DESC
Ej:Visualicelastresprimerasletrasdelosorgenesydestinosdelosvuelosrealizadosporavionescon
longitudmayorconlongitudmayorquelamediayenvergaduramenorque2/3delamximaenvergadura,
ordenadosalfabticamentepordestino.
SUBSTRING(SQL)
(SUBSTRNG),(DB2)
SUBSTRING(string,posicin,ncaracteres)

nom_col/cadenaconcomillas()
SELECTSUBSTRING(ORIGEN,1,3),SUBSTRING(DESTINO,1,3)
FROMVUELOS
WHERETIPO_AVIONIN(SELECTTIPO
FROMAVIONES
WHERELONGITUD>(SELECTAVG(LONGITUD)
FROMAVIONES)
ANDENVERGADURA*3/2<(SELECTMAX(ENVERGADURA)
FROMAVIONES)
ORDERBY2
ACCESOADATOSENJAVA
22
902
Ej:VisualiceeltotaldeplazaslibrespornmerodevueloparaaquellosrealizadosdesdeMadridaBarcelona
o Sevilla y que recorran una distancia mayor que la media de todos los vuelos que salen de Madrid,
ordenndolosdemenoramayor.
SELECTSUM(PLAZAS_LIBRES),NUM_VUELO
FROMRESERVAS,VUELOS
WHERERESERVAS,NUM_VUELO=VUELOS.NUM_VUELO
ANDORIGEN=MADRID
ANDDESTINOIN(BARCELONA,SEVILLA)
ANDDISTANCIA>(SELECTAVG(DISTANCIA)
FROMVUELOS
WHEREORIGEN=MADRID)
ORDERBY1
Ej:Obtenerparacadanmerodevueloeltotaldeplazaslibresdelosvuelosquerecorrandistanciasmenores
que2/3delamediadelasdistanciasrecorridasporvuelosdeotrascompaas.
SELECTNUM_VUELOS,SUM(PLAZAS_LIBRES)
FROMRESERVAS,VUELOSV
WHERERESERVAS.NUM_VUELO=VUELOS.NUM_VUELOS
ANDDISTANCIA*3/2<(SELECTAVG(DISTANCIA)
FROMVUELOS
WHERESUBSTRING(NUM_VUELO,1,2)<>
SUBSTRING(VUELOS.NUM_VUELO,1,2)
ACCESOADATOSENJAVA
23
903
TEORIA DE LA NORMALIZACION
Introduccin:
Nosbasaremosenlasiguientetabla:
Bibliografa:DiseoyGestindeBasesdeDatos.AngleLucas.
Seplanteanunaseriedeproblemas:
Redundancia:cuandounautortienevarioslibros,serepitelanacionalidad.
Anomalasdemodificacin:siAd.Mig.yMa.Piat.deseancambiardeeditor,semodificaenlos2lugares.A
priorinopodemossabercuntosautorestieneunlibro.Loserroressonfrecuentesalolvidarlamodificacin
deunautor.Sepretendemodificarenunslositio.
Anomalasdeinsercin:sedeseadardealtaunautorsinlibros,enunprincipio.NOMBREyCOD_LIBson
camposclave,unaclavenopuedetomarvaloresnulos.
Teora de la normalizacin: la teora de la normalizacin ofrece una serie de reglas para efectuar una
modelizacinptima.
ACCESOADATOSENJAVA
24
904
Latablaanteriordeberadividirseen3tablas:
AUTORES(NOMBRE,NACION)
LIBROS(COD_LIB,TITULO,EDITOR)
ESCRIBE(NOMBRE,COD_LIB)
Enlosaos70Coddcrelasbasesdelateoradelanormalizacin.Acadaregladelateoraladenomin
formanormal.Coddcrelasformasnormales1,2y3.La3formanormaloriginproblemas.Boyceayudo
asolventarlosconlaf.n.deBoyce-Codd(FNBC).Afinalesdelos70Fagincrelasformasnormales4y5.
Lasformasnormalessebasanenelconceptodedependencia,quecomprendelasrestriccionesdefinidas
sobrelosatributosdeunarelacin.Existendiferentestiposdedependencia:
-Dependenciasfuncionales(Formasnormales1,2y3yFNBC)
-Dependenciasmultivaluadas(4formanormal)
-DependenciadeJOIN(5formanormal)
Formas normales
1 forma normal:esunarestriccininherentedelmodelorelacional.Sedicequeunatablaesten1forma
normalsinoexistenenellagruposrepetitivos.
Unatablanopuedetenerenuncampomsdeunvalor.
TITULO AUTOR
CyD Ad.Mig.
Ma.Piat.
Hayungruporepetitivo.Deestemodolatablanoesplanaynoesten1formanormal.Paraconvertirlaa
1formanormal:
TITULO AUTOR
CyD Ad.Mig.
CyD Ma.Piat.
ACCESOADATOSENJAVA
25
905
2 forma normal: partimosdelaideadedependenciafuncional:unatributooconjuntodeatributosB
dependefuncionalmentedeAslosiacadavalordeAlecorrespondeunnicovalordeB:
AB<=>acadavalordeAlecorrespondeunnicovalordeB
A B
x1 y1
x2 y2
x3 y3
Ej:DNIdependefuncionalmentedeNOMBREyNOMBREdeDNI
DNINOMBRE
NOMBREDNI
NOMBREDNI
Ej:DIRECCIONdependefuncionalmentedeDNI,peroDNInodependefuncionalmentedeDIRECCION
DNIDIRECCION
DIRECCION-/DNI
Ej:TITULO,LIBROnodependenfuncionalmentedeDNI,AUTOR,porqueunautorpuedeescribirvarioslibros
DNI,AUTOR-/TITULO,LIBRO
Ej:Setieneunabasededatosdepluriempleados:
Atributos:DNI,EMPRESA,SUELDO
DNI-/EMPRESA
DNI-/SUELDO
Sepuedeconcatenaratributos,obteniendo:
DNI,EMPRESASUELDO
ACCESOADATOSENJAVA
26
906
Sueldo es el atributo implicado que depende de DNI y EMPRESA juntos, que son atributos implicantes.
Tambin:
DNINOMBRE,DIRECCION
Las3primerasformasnormalesmslaformanormaldeBoyce-Coddsebasanendependenciasfuncionales
obedeciendoalsiguienteteorema:
DadaunarelacinRconunconjuntodeatributosAquecumpleR(A),xy,esposibleunadescomposicinen
dostablasdelasiguientemanera:
R(A), xy
R(x,y) es una relacin compuesta por los atributos que forman la dependencia funcional
R(A-y) es una relacin compuesta por los atributos de R excluyendo el atributo implicado
R(A)=R(x, y) R(A-y) el JOIN de ambas forma la relacin original.
Lasrelacionesapartirdeahorasedefinirncomounconjuntodeatributoscondependenciasfuncionales
R(A,DF).
Paranormalizarlatablahabrqueconocertodaslasdependenciasfuncionales,peroenlarelacinquenos
denslotendremosalgunas,apartirdelascualespodremoshallarelresto.
Aplicaremoslaspropiedadesdelasdependenciasfuncionalesparaobtenertodoelconjuntodeposibles
dependenciasfuncionalesquepuedanexistirenlarelacin.
AlconjuntoinicialdedependenciasfuncionaleslollamaremosF,conjuntoapartirdelcualobtendremosel
restodedependenciasfuncionales.AcadanuevadependenciafuncionalobtenidaapartirdeFlallamarf.
AlnuevoconjuntoquecontengatodaslasdependenciasfuncionalesqueobtengalellamarF+.Unavez
halladoF+podraplicarlasformasnormalesdelateoradelanormalizacin.
Dependenciafuncionalderivada
DadounconjuntoFdedependenciasfuncionalessedicequefderivadeF(F f)sifseobtieneapartirde
F.
Cierredeunconjuntodedependenciasfuncionales
SedefineCierre(F+)comoelconjuntodetodaslasdependenciasfuncionalesimplicadasporFo
halladasapartirdeF.
ACCESOADATOSENJAVA
27
907
Propiedades de las dependencias funcionales
a)Axiomas
b)Propiedadespropiamentedichas
a)Axiomas
a.1)Axiomareflexivo
SiYestincluidoenXentoncesXY(SiYcX=>XY)
Ej:CODPROVcCODPOSTAL
CODPOSTALCODPROV
Auncdigopostallecorrespondeunnicocdigodeprovincia.
a.2)Aumentatividad
SiXYyZcW=>XWYZ
Sedemuestradelsiguientemodo:ZcWequivaleaWZ.SitenemosXYyWZ podemos
afirmarqueXWYZ
a.3)Transitividad
SiXYyYZ=>XZ
b)Propiedadespropiamentedichas
b.1)Unin
XYyXZ=>XYZ
Demostracin:
SiXY(aumentatividadconX)=>XXY
SiXZ(aumentatividadconY)=>XYXZ
SiXXYyXYYZ(transitividad)=>XYZ
ACCESOADATOSENJAVA
28
z
908
b.2)Pseudotransitividad
XYyWYZ=>WXZ
Demostracin:
SiXY(aumentatividadconW)=>WXWY
SiWXWYyWYZ(transitividad)=>WXZ
b.3)Descomposicin
XYyZcY=>XZ
Demostracin:
SiZcY(axiomareflexivo)=>YZ
SiXYyYZ(transitividad)=>XZ
Dependencia funcional total
ElconjuntodeatributosYtienedependenciafuncionaltotalconXsiYtienedependenciafuncionalconX(X
Y) y adems no existe ningn subconjunto Z de X (Z c X) con el cualY tenga dependencia funcional
(Z-/Y).
Diagramas de dependencias funcionales
Sonunaherramientaquesirveparatenerunavisingeneraldelosdatosydelasdependenciasfuncionales
entreellos.Serepresentaenformadegrafoconlosimplicantesdelasdependenciasfuncionalesenun
rectngulo,delosquesalenflechashacialosimplicados.
Ej:Dado: ABCMNS
MN
BCOPR
OP
CQ ,obtenereldiagramadedependenciasfuncionales.
A C ABC
B BC
ACCESOADATOSENJAVA
29
909
Esunadependenciafuncionaltotal.
Ej:Hallarsilassiguientesdependenciasfuncionalessontotales:
a)DNI,EMPRESASUELDO
b)DNI,EMPRESANOMBRE
SUPERCLAVE Y CLAVE
Superclave(SK):eselatributooconjuntodeatributostalesqueenunarelacinR(A,DF)secumplequeSK
A.SKeselimplicantecapazdeimplicaralatablacompleta.
Ej:EnunatablacompuestaporX,Y,ZyW,siWessuperclavesecumpleque:
WX
WY
WZ
Clave(K):eselatributooconjuntodeatributostalesqueenunarelacinR(A,DF)essuperclaveyadems
noexisteningnsubconjuntoKcKtalqueKA
K,R(A,DF),K SK/\noexisteKcK/KA
Debetenerunadependenciafuncionaltotalconlosatributosdelatabla.Sitenemos:
WZA
WZB
WZC
pero
Z-/A
Z-/B
Z-/C
Laclaveeslamnimasuperclave,nodescomponibleenclavesmenores.
ACCESOADATOSENJAVA
30
910
2formanormal:sedicequeunarelacinesten2formanormalsicumplelassiguientescondiciones:
1)Esten1formanormal
2)Cadaatributonoprincipalosecundario(noformapartedelaclave),tieneunadependenciafuncionaltotal
conlaclave.
Ej:ABC
BD
A C
B D
D depende funcionalmente de B slo y debera depender de AB para estar en 2 forma normal. Para
convertirloen2formanormalsedescomponeen2tablas:
Tabla1:clavecondependenciastotales
Tabla2:partedelaclaveimplicantecondependenciasparciales
A
C B D
B
Estocumpleelteorema1enunciadoenelcaptulo(DescomposicinporJOIN)
Ej:Pasara2formanormallasiguientetabla:
DNI NOMBRE
EMPLEADO SUELDO
DNI
SUELDO DNI NOMBRE EMPLEADO
ACCESOADATOSENJAVA
31
911
Dependenciafuncionaltransitiva:secumplesi:
AB
B-/A => AC
BC
Grficamente:
3formanormal:sedicequeunatablaesten3formanormalsiesten2formanormalyademscumple
queningnatributonoprincipaldependetransitivamentedelaclave.
Ej:Pasara3formanormal:
AB BA CD
AC BC CE
AD BD
AE BE
AyBsonclavescandidatasaprincipales.Elegimosunadelas2,porejemploA.
B
A C
D
E
B
A D
C
E
Noesten3formanormalporqueexistenatributosnoprincipalesquedependentransitivamentedela
clavedelarelacin.
ACCESOADATOSENJAVA
32
912
Parapasarloa3formanormallodescompongoen2tablas:
1tabla:clavecondependenciasnotransitivas.
B
A
C
2tabla:clavecondependenciastransitivas.
D
C
E
Ej:TenemoslassiguientesdependenciasdelatablaALUMNOS:
NMATRICULAAULA,GRUPO
GRUPOAULA
Pasarloa3formanormal.
Descomponemosen2tablas:
1tabla:clavecondependenciasnotransitivas.
B
A
C
2tabla:dependenciastransitivas.
D
C
E
ACCESOADATOSENJAVA
33
913
Ej:Pasara3formanormallassiguientesdependenciasdelatablaalumnos:
NMATRICULAAULA,GRUPO
GRUPOAULA
FormanormaldeBoyce-Codd:Trataderesolverlosproblemasqueoriginala3formanormal.Sediceque
unarelacinRestenFNBCslositododeterminanteotodoimplicante(conjuntodeatributosalaizquierda
delarelacin)esclave.
Ej:
A
C
B
Esten3formanormal,peronoenFNBC.
ABC
CB
ABB
ParapasaraFNBCunarelacinRenlacualexisteunadependenciadeltipoXYsiendoXunatributono
principalysiendoYunatributoprincipal,descomponemosRen2proyecciones:
R1formadaporlosatributosXeYR1=(X,Y)
R2formadaportodoslosatributosdeRexceptuandoYR2=(A-Y)
Obtenemos:
C B
A
C
ACCESOADATOSENJAVA
34
914
Ej:Tenemosunatabladeuncallejero:
CALLEJERO(DIRECCION,CIUDAD,C_POSTAL)
C_POSTALCIUDAD
DIRECCION,CIUDADC_POSTAL
C_POSTAL CIUDAD
DIRECCION
C_POSTAL
CIUDAD DIRECCION
C_POSTAL
Dependenciamultivaluada:
SeanAyBdossubconjuntosdistintosdeatributosdeunatablaTsedicequeAtieneunadependencia
multivaluadaconBqueAmultideterminaaBqueBdependemultivaluadamentedeA(AB)aspara
cadavalordeAtenemosunconjunto,bienseadevaloresdeBquesonindependientesdelosdemsatributos,
olarelacin.
1.A<=B
2.IndependientementedelrestodeatributosdeA
Ej:
Losprofesoresdeunafacultadimpartenvariasasignaturasyunaasignaturaesimpartidaporvarios
profesores.
Unaasignaturatienevariostextosyuntextopuedeutilizarseenvariasasignaturas,
independientementedelprofesorquelasimparte.
ACCESOADATOSENJAVA
35
915
AsignaturaProfesor
a)Cadaasignaturatienedefinidosvariosprofesores
b)Secumple
AsignaturaTexto
a)Cadaasignaturatieneasignadomsdeuntexto
b)Secumple
SiemprequesedunadependenciaXYtienequedarseunadependenciaXA-(XUY).
Paraqueseddebetenermsde2atributos.
Profesor/Texto
a)Paracadaprofesorhaydefinidosmsdeuntexto
b)DependedeAsignatura
ProfesorAsignatura
a)Unprofesortieneasignadasvariasasignaturas
b)Nosepuededarporunaseriedeteoremasmatemticos
4 Forma Normal: una tabla est en 4FN si est en 3FN y se cumple que las nicas dependencias
multivaluadasexistentessonlasexistentesconlosatributossecundarios.
Cuandonoexistendependenciasmultivaluadasylatablaesten3FNparapasara4FNtendremosencuenta
elteoremadeFAGIN:UnatablaTconlosatributosA,B,Csepuededescomponersinprdidadeinformacin
en2proyecciones:T1conlosatributosAyByT2conlosatributosAyC,slosiAmultideterminaaByC(A
B/C).
Parapasara4FNsiexisteunadependenciamultivaluadaXYladividimosen2tablas.
1.R1(x,y)
2.R2(A-y)
R1(x,y)
R:xy
R2(A-y)
ACCESOADATOSENJAVA
36
916
Ej:
AsignaturaTexto
AsignaturaProfesor
(asignatura,texto) (asignatura,profesor)
R(Asignatura,Texto,Profesor)
1.AsignaturaTexto,x
2.AsignaturaProfesor,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
proyeccionesT1,T2,...,TnsiT=T1T2T3...Tn
ACCESOADATOSENJAVA
37
917
La4fila(a2,b1,c2)esunatuplaintrusaoespuria.
Hayotraproyeccinquehacequesecumpla:
T=T1T2T3
5FormaNormal:sedicequeunatablaesten5FNsiesten4FNyademstodadependenciadeJOINest
implicadaporlasclavesdelatabla.Lascolumnasdeenlacedebenserlosatributosquecomponenlaclave.
Enlasiguientetablanoexistendependenciasfuncionales.Bebida-/Camarero.
DependenciasdeJOIN:
T=T1T2T3
Columnaenlace:T1T2=Cliente
Lostresatributosformanlaclave.Tnoesten5formanormal.Silascolumnasdeenlacesonlascolumnas
delaclaveentoncesesten5formanormal.Parapasarloa5formanormalhabrquedescomponerTen
susproyecciones.
ACCESOADATOSENJAVA
38
918
EMPLEADOS(DNI,NOMBRE,DIRECCION,NSS,FISS,CATEGORIA)
T1(DNI,NOMBRE,DIRECCION)
T2(DNI,NSS,FISS)
T3(DNI,CATEGORIA)
EMPLEADO=T1t2t3
Testen5formanormal,anasesfactibledescomponerlaensusproyecciones.
Ej:Competiciones
Enunapruebahayvariosrbitros.
Unrbitropuedearbitrarendiferentespruebas.
Unatletapuedecompetirendiferentespruebas.
Enunnicopasnopuedenexistirndepasaportesiguales,perossisondepasesdiferentes.
Puedenexistirdistintosatletasconelmismonombre.
Atributos:
NPa: Ndepasaportedelatleta
Na: Nombredelatleta
da: Direccindelatleta
dpa: Direccinpostaldelatleta
ca: Ciudaddelatleta
Pra: Provinciadelatleta
Pa: Pasdelatleta
cpa: Cdigodepasdelatleta
Fn: Fechadenacimientodelatleta
Sa: Sexodelatleta
cp: Cdigodelaprueba
np: Nombredelaprueba
ma: Marcadelatleta
NPar: Ndepasaportedelrbitro
Nar: Nombredelrbitro
ACCESOADATOSENJAVA
39
919
Ej:Barcodepasajeros
Unbarcoperteneceaunpropietario.
Seconstruyeenunsloastillero.
Elcdigoesnicodentrodelpas.
Puedenexistirbarcosdiferentesconelmismocdigosisondedistintospases.
Unbarcoesdeunslotipo.
Losmarinerosdelbarcoslotienenunadireccinyuncdigodentrodelbarco.
Unmarineropuedetenervariostelfonos.
Noexistenciudadesrepetidas.
Dospasajerospuedentenerelmismocamaroteenunbarco.
Unpasajeropuedeembarcarenvariosbarcosendistintasfechas.
Dosbarcospuedenhabertenidoaunmismomarinero,peronuncaalmismotiempo.
Ej:Coleccionistasdesellos
Elcdigodeselloparticularesnicoparalacoleccindelpropietario.
Elcdigointernacionalesnicoparacadatipodeselloemitido,delcualpuedenexistirvariosejemplares.
Doscoleccionistaspuedentenerejemplaresdeunmismotipodesello,perocadaunotendruncdigo
particulardelselloquepodraserelmismo.
Noexisten2DNIs,ciudades,provinciasopasesiguales.
Puedenexistirnombresiguales.
Unpropietariopudetenervariostelfonos.
Atributos:
CS: Cdigoparticulardelselloparaelpropietarioactual
CI: Cdigointernacionaldelsello
PS: Pasdelsello
CP: Cdigodelpas
VE: Valordeemisindelsello
AE: Aodeemisindelsello
EP: Estadopolticodelpasenelaodeemisindelsello
CE: Cdigodelestadopoltico
CLS: Clasedesello
CCL: Cdigodelaclasedesello
EC: Estadodeconservacindelsello
ACCESOADATOSENJAVA
40
920
CC: Cdigodelestadodeconservacindelsello
DNIP: DNIdelpropietariodelsello
NP: Nombredelpropietariodelsello
DP: Direccindelpropietariodelsello
CiP: Ciudaddelpropietariodelsello
CPP: Cdigopostaldelpropietariodelsello
PP: Provinciadelpropietariodelsello
PaP: Pasdelpropietariodelsello
TP: Telfonodelpropietariodelsello
DNIA: DNIdelantiguopropietariodelsello
SQL Embedido
1.SQLautocontenido
2.SQLembedido
SQLembedido:
SentenciadeSQLqueseutilizadentrodeunprogramallamadoanfitrin,escritoencualquierlenguaje.
Tendremostablascondatosdeentradaydesalida.
LassentenciasdeSQLsernsentenciasembebidasenelprogramaanfitrin.
Caractersticas:
*TodaslassentenciasSQLvanaestarenmarcadaspor:
EXECSQL
<sentencias>
END-EXEC
*AntesdeutilizaruncompiladorparamanejarSQLembebidoesnecesariopasarelprogramafuenteporun
precompilador:
PROG precompilador PROGFUENTE compilador PROG LINKER
FUENTE MODIFICADO OBJETO
-sintaxissentenciasSQL
-comentarsentenciasSQL(paraquelasignoreelcompilador)
-sustituirsentenciasSQLporllamadasarutinasdelibreras
ACCESOADATOSENJAVA
41
921
*ManejodevariablesdeprogramadentrodesentenciasSQL:
Seponedospuntos(:)delantedelnombredelavariable.
Ej:Paraunvuelo,visualizarplazaslibresyndevuelo(datosdesalida),sabiendoelorigen,destino,hora
desalidayfechadesalida(datosdeentrada).
INICIO
escribirIntroducirORIGEN,DESTINO,FECHA,HORA
leerORIGEN,DESTINO,FECHA,HORA
EXECSQL
SELECTRESERVAS.NUM_VUELO,PLAZAS_LIBRES
INTO:VUELO,:PLAZAS
FROMRESERVAS,VUELOS
WHERERESERVAS.NUM_VUELO=VUELOS.NUM_VUELO
ANDORIGEN=:ORIGEN
ANDDESTINO=:DESTINO
ANDFECHA=:FECHA
ANDHORA=:HORA
END-EXEC
escribirVUELO,PLAZAS
FIN
INTOsirveparadeterminarlasvariablesdesalida.
Devuelveenlasalidaunasolafila.Encasodequelasalidadevuelvamsdeunafilatendremosloscursores.
Cursor:
- Es una estructura de datos tabular (en forma de tabla) que sirve para almacenar un nmero
indeterminadodefilas.
-Slopermitemanejarunanicafilaalavez,medianteunpuntero.
-ParamanejarcursoresenSQLembebidohay4etapas:
1)Definicindelcursor
Sedefinejuntoaladeclaracindevariablesdelprogramaanfitrin:
EXECSQL
DECLARE
<nom_cursor>CURSOR
FOR
<sent_select>
END-EXEC
ACCESOADATOSENJAVA
42
922
2)Abrircursor
Rellenadefilaslaestructuradelcursor:
EXECSQL
OPEN<nom_cursor>
END-EXEC
3)Recuperarfilas(1)
EXECSQL
FETCH<nom_cursor>{avanzaelpunterounaposicin}
INTO<lista_variables>{unasolavariableporcolumna}
END-EXEC
CuandosehaceunOPENserellenalaestructurayelpunteroseposicionaanterioralaprimerafila.Elprimer
FETCHposicionaelcursorenlaprimerafila.
4)Cerrarcursor
EXECSQL
CLOSE<nom_cursor>{liberandomemoria}
END-EXEC
Ej: Realizar un programa que presente todos aquellos vuelos existentes entre un origen y un destino
determinados.
Pasos:
1.Declaracindevariables
2.Peticindeinformacindeorigenydestino
3.Abrircursor
4.Recuperarprimerafiladelcursor
5.Comprobarsiexistealgunafila.Sinoexisteira9
6.Escribirfilaenpantalla
7.Recuperarsiguientefila
8.Ira5
9.Fin
ACCESOADATOSENJAVA
43
923
VARIABLES
ORIGEN,DESTINO,HORA,VUELO:STRING
EXECSQL
DECLARElista_vuelosCURSOR
FORSELECTNUM_VUELO,HORA_SALIDA
FROMVUELOS
WHEREORIGEN=:ORIGEN
ANDDESTINO=:DESTINO
END-EXEC
INICIO
ESCRIBIRINTRODUZCAORIGENYDESTINO
LEERORIGEN,DESTINO
EXECSQL
OPENlista_vuelos
END-EXEC
EXECSQL
FETCHlista_vuelos
INTO:VUELO,:HORA
END-EXEC
{VariablepredefinidaSQL-CODE:nosdainformacinsobrelaejecucindecadasentenciaenSQL:
SQL-CODE<0Error
SQL-CODE=100CURSORvaco
SQL-CODE>0Warning}
MIENTRASSQL-CODE<>100
ESCRIBIRVUELO,HORA
EXECSQL
FETCHlista_vuelos
INTO:VUELO,:HORA
END-EXEC
FIN_MIENTRAS
EXECSQL
CLOSElista_vuelos
END-EXEC
FIN
ACCESOADATOSENJAVA
44
924
INTEGRIDAD E INTEGRIDAD REFERENCIAL
1. Introduccin
2. Integridad referencial
2.1 DDL
2.2 DML
3. Disparadores
4. Reglas semnticas
1. INTRODUCCION
Integridad:caractersticaquenospermitetenercoherenciayveracidadenlainformacin.
ExistenciertasoperacionesdeSQLquepuedenhacerpeligrarlaintegridaddelaoperacin:
-Insercin
-Borrado
-Modificacin
T.PADREEMPLEADO DNI ClavePrincipal
depende
cod_fam
T.HIJA FAMILIARES DNI_EMP ClaveAjena
Puedequeborremosunempleadoyolvidemoseliminarlosfamiliares.
Tiposdeintegridad:
Integridaddedominio:restringimoslosvaloresquepuedetomarunatributorespectoasudominio,por
ejemploEDAD18-65.
Integridaddeentidad:laclaveprimariadeunaentidadnopuedetenervaloresnulosysiempredeberser
nica,porejemploDNI.
Integridadreferencial:lasclavesajenasdeunatablahijasetienenquecorresponderconlaclaveprimaria
delatablapadreconlaqueserelaciona.Porejemplo,enfamiliaresnecesitaremoselDNIdeempleado,que
eslaclaveajenadelatabla.
ACCESOADATOSENJAVA
45
925
2. INTEGRIDAD REFERENCIAL
Claveprincipal:conjuntodeatributoscapazdediferenciarcadatupladelatabla.
Claveajena:Claveenlatablapadre.
2.1 DDL
Sebasaenladefinicindelaclaveprincipalydelaclaveajenadelatabla.
CREATETABLEEMPLEADO
(PRIMARYKEYDNI,
DNICHAR(8)NOTNULL,
NOMBREVARCHAR(30)NOTNULL,{columnasdelatabla,claveincluida}
...
)
CREATETABLEFAMILIARES
(PRIMARYKEYCOD_FAMILIAR,
COD_FAMILIARCHAR(4)NOTNULL,
NOM_FAMILIARCHAR(30)NOTNULL,
DNI_EMPLCHAR(8)NOTNULL,
...
)
FOREIGNKEYREL_EMPL_FAM
DNI_EMPLREFERENCEEMPLEADO
RESTRICT
ONDELETE CASCADE
SETNULL
ACCESOADATOSENJAVA
46
926
2.2 DML
Tendremosunaseriedereglaspara:
2.2.1 Insercin
2.2.2 Actualizacin
Implcitasodeterminadasporelsistema.
2.2.3 Borrado
Explcitaodefinidaporelusuariodetresqueproporcionaelsistema.
2.2.4 Regla de insercin
Seejecutasobrelatablahija.
Slosepodrinsertarunafilaenlatablahijasielvalordeclaveajenadeesafilaesunvalornuloounvalor
delosexistentesenlaclaveprimariadelatablapadre.
2.2.5 Regla de actualizacin
Seejecutasobrelastablaspadreohija.
Tablapadre:nosepuedemodificarelvalordeclaveprimariadelatablapadresiexistealgunafilaenlatabla
hijaqueloreferencieenlaclaveajena.
Tablahija:elvalordeclaveajenadelatablahijaslosepuedemodificarsielnuevovalorquevaaadoptar
esunvalornulooesigualaunvalordeclaveprimariadelatablapadre.
2.2.6 Regla de borrado
Estareglaseespecificaalcrearlatablapadreyseactivarcuandoseintenteeliminarunafiladelatabla.
CREATETABLE
...
FOREIGNKEY
...
RESTRICT
ONDELETECASCADE
SETNULL
ACCESOADATOSENJAVA
47
927
Esunareglaexplcita,yaqueelusuariopuedeelegirlaregladeborradoquedesee,apartirde3reglasque
nosvaaproporcionarelsistema.
a)RESTRICT
Nosepuedeborrarunafiladelatablapadresiexistenfilasenlatablahijacuyosvaloresdeclaveajenasean
igualesavaloresdeclaveprimariadelafilaquequeremosborrar.
b)CASCADE
Cadavezqueseborreunafiladelatablapadreseeliminarnaquellasfilasdelatablahijaquetengan
comovalordeclaveajenaelmismovalorqueeldelaclaveprimariadelafilaquesequiereborrar.
c)SETNULL
Cadavezqueseelimineunafiladelatablapadreseactualizarnloscamposdelaclaveajenadelatabla
hijaavaloresnulosparaaquellasfilasquetenganenelcampodelaclaveajenaelmismovalorquelaclave
primariadelafiladelatablapadrequesequiereborrar.
Casosespecficosdeintegridad:
Integridadauto-referencial
Unatablaesalmismotiempopadreehijadesimisma.
Ej:DadalatablaT_EMPconlassiguientescolumnas:
COD_EMP NOMBRE COD_EMP_JEFE
Todos los valores que aparezcan en la ltima columna existirn tambin en la primera, por tanto
COD_EMP_JEFEseconvierteenclaveajenadelatabla.
Ciclosdeintegridadreferencial
Conjuntodetablasquefuncionarcomotablaspadresehijasunasdeotras,formandouncaminocerrado.
ACCESOADATOSENJAVA
48
928
Ej:Tenemos3tablas:
COCHES(MATRICULA,MARCA,COD_DIRECTOR)
DIRECTORES(COD_DIRECTOR,NOMBRE_DIR,COD_SECRETARIA)
SECRETARIAS(COD_SECRETARIA,NOMBRE_SEC,MATRICULA)
COCHESestablahijadeDIRECTORES
DIRECTORESestablahijadeSECRETARIAS
SECRETARIASestablahijadeCOCHES
COCHES
DIRECTORES SECRETARIAS
Formaunciclodeintegridadreferencial.
Por haber ciclos debemos incorporar restricciones de borrado, para un correcto funcionamiento de la
integridadreferencial.
Restriccionesdeborrado
a)Integridadauto-referencial
Siemprequetengamosunatablaconintegridadauto-referencialdebemosdefinirunborradoencascada.
TablaEMPLEADO
ACCESOADATOSENJAVA
49
929
DELETEFROMEMPLEADO
WHERECOD_EMP_JEFE>=B01
ConRESTRICTnosepuedeborrarla3fila,porqueC02,claveprimaria,estsiendoreferenciadaenlafila
4comoclaveajena.Saltaala4filaylaborra.
DELETEFROMEMPLEADO
WHERECOD_EMP_JEFEISNULL
ConSETNULLborraralaprimerafila,porquesuclaveajenaesNULL,pasaraala2ycomosuclaveajena
esigualalaclaveprimariadelafilaborradapondralaclaveajenaaNULL.Comolehemosdichoqueborre
aquellasfilasquetenganporclaveajenaunvalornulo,ahoraborraraestafilayassucesivamentehasta
eliminarlatablacompleta.
b)Ciclosdeintegridadreferencial
DELETEFROMT3
WHEREFKT2ISNULL
Restriccionesdeborradoenciclos:
CICLODE2TABLAS:ningunadeellaspodrtenerdefinidalaopcindeborradoencascada.
CICLODEMASDE2TABLAS:Slounadelastablaspodrtenerlaopcindeborradoencascada.
Elesquemaanteriornocumplelasrestriccionesexpuestas.
c)Tablasconectadaspormltiplescaminos(conmsdeunatablapadre)
DELETEFROMT2
WHEREPKT2=T2A
Restriccionesdeborradoentablasconectadaspormltiplescaminos:
Losdoscaminosquelleganaunatabladebentenerdefinidasiemprelamismaregladeborrado,quedebe
serRESTRICToCASCADE.
ACCESOADATOSENJAVA
50
930
Enelejemplofuncionarabienporelprimercamino,peroporelsegundohayrestriccin.
Ej.PrubesequocurrirasientreT3yT1haySETNULLyentreT2yT1haySETNULL.
Ventajas del uso de las reglas de integridad referencial proporcionadas por el sistema frente a la
implementacindestasporpartedelusuario.
1.Alusarlasproporcionadasporelsistemalosanalistastienenmenorresponsabilidad.
2.Habrunincrementoenlaproductividadyundecrementoenloscostesdelaaplicacin,porqueel
nmerodepruebasarealizarsermenorsilaintegridadreferencialesimplementadaporelpropio
sistema,elcualnosgarantizarelcorrectofuncionamientodelasreglasdeintegridadreferencial.
Eltiempodedesarrollodelaaplicacinsermenor.
3.Lainformacinsermscoherente,yaqueestgarantizadoquetodaslasfilasdelastablascumplen
lasnormasdeintegridadreferencial.
3. DISPARADORES O TRIGGERS
Sonunconjuntodesentenciasqueelsistemaejecutaalahoradeefectuarunainsercin,actualizacino
borradoenunatabla.ParadefinirunTRIGGERnecesitamos:
-Nombredelatablasobrelaqueactuareltrigger
-Sentenciaqueactivareltrigger(insercin,actualizacinoborrado)
-Accionesquerealizareltrigger
DB2noincorporalaposibilidaddedefinirtriggers,peroSQLs.Lasreglasdeintegridadreferencialseemulan
enSQLmediantelaimplementacindetriggers.
EmulacindeinsercinentablahijamedianteelusodetriggerenSQL:
Segnlaregladeintegridadreferencial,nosepuedeefectuarunainsercinenunatablahijaamenosque
existaunvalordeclaveprimariaigualaldeclaveajenadelafilaquesedeseainsertar.
ACCESOADATOSENJAVA
51
931
Definicindeltrigger:
DEFINETRIGGERinsercion
ONINSERTOFHIJA
Eltriggercompararelvalordeclaveajenadelafilaainsertarconelvalordeclaveprimariadelatabla
hijacadavezqueseintenteinsertarunafila.
Implementacindeltrigger:
(if(SELECTCOUNT(#)
FROMPADRE,INSERTED
WHEREPADRE.CL_PRIMARIA=INSERTED.CL_AJENA)=0)Condicinqueactivaeltrigger
begin
PRINTERROR
ROLLBACKTRANSACTIONAccionesqueejecutaeltriggersiseactiva
end
SELECTCOUNTdevuelveelnmerodefilasdelatablapadreconunvalordeclaveprimariaigualalaclave
ajenadelafilaainsertar.
Elsistemaproporcionaunatabladealmacenamientotemporal(INSERTED)dondeseguardarnlasfilasa
insertar.
SiCL_AJENA=CL_PRIMARIA,permitelainsercin,encasocontrariodeshacelaoperacinconROLLBACK
TRANSACTION.
Eltriggercorrespondientealaoperacindeactualizacinserasimilar.
ACCESOADATOSENJAVA
52
932
ACCESO A DATOS
EN JAVA
La tecnologa JDBC
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
1. Drivers JDBC
Objetivos
1. Conocer los DriversJDBC de bases de datos
2. Identificar las clases para establecer la conexin con la base de
datos: API JDBC
3. Saber cmo ejecutar sentencias SQL
4. Reconocer sentencias SQL precompiladas (PREPARED STATEMENT)
5. Saber cmo se realiza el Uso de transacciones
Drivers de bases de datos
Existen varios drivers de bases de datos:
- BDE (Borland Database Engine)
- ODBC (Open Database Connectivity)
Para JAVA se tiene el JDBC, el cual est escrito en JAVA. Para programar con el JDBC se utilizarn los mtodos
propios para acceder a la base de datos.
Javasoft ha definido cuatro tipos de drivers:
3
ACCESO A DATOS EN JAVA
i
935
JDBC-ODBC bridge driver
Esta solucin lo que hace es pasar por ODBC para acceder a la base de datos.
PROGRAMA Driver nativo SQLServer
JAVA Tipo 1 ODBC nativo Access
(JDBC) nativo dBase
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
Native API partly Java driver
Se conectan con el servidor de base de datos utilizando el protocolo nativo de la base de datos.
PROGRAMA Driver
JAVA Tipo nativo Oracle
Oracle
Driver
Tipo nativo SQLServer
SQLServer
4
ACCESO A DATOS EN JAVA
i
936
Ventajas:
- Es ms rpido que el Tipo 1, ya que se habla el protocolo nativo de la base de datos.
Inconvenientes:
- Igual que el primero est escrito parte en JAVA y en parte en DDL por lo cual no se puede utilizar en
la red y no se pueden construir con el APPLETS.
JDBC-Net pure Java driver
Se utiliza un driver totalmente escrito en JAVA. El driver se va a conectar con lo que se denomina un servidor
de acceso a la base de datos.
El servidor de acceso a la base de datos es un programa (en cualquier lenguaje) que se encarga de recibir
las peticiones del driver y de trasladarlas a la base de datos.
PROGRAMA Driver Servidor de acceso odbc Sybase
JAVA Tipo 3 a la base de datos odbc Access
Odbc Interbase
Ventajas:
- Se puede utilizar para disear APPLETS
Native protocol pure Java driver
Son drivers totalmente diseados en Java y que se comunican con la base de datos utilizando el protocolo
nativo de la base de datos.
Driver
PROGRAMA Oracle nativo Oracle
JAVA Tipo 4
5
ACCESO A DATOS EN JAVA
i
937
Ventajas:
- Es ms rpido que el Tipo 3 ya que se utiliza el protocolo nativo de la base de datos.
Inconvenientes:
- Se necesita el driver del fabricante de la base de datos.
Configuracin del cliente y el servidor
Ahora veremos cmo se puede conectar cada uno de los 4 tipos de driver:
JDBC-ODBC bridge driver
Slo se sabe conectar en local, aunque luego el ODBC del cliente puede saber conectarse a una base de
datos remota (no en Access pero si por ejemplo en Oracle).
CLIENTE Programa Driver ODBC BDD
Tipo1
6
ACCESO A DATOS EN JAVA
i
938
En este caso la base de datos puede estar en otro servidor solamente si ODBC sabe conectarse:
CLIENTE Programa Driver ODBC
Tipo1
SERVIDOR BDD Remota
-------------------------------------
Native API partly java driver
Se podr conectar a una base de datos local o a una base de datos remota, dependiendo lo que sepa hacer
el driver.
CLIENTE Driver Programa Driver
Oracle java Access nativo Access
Tipo 2 Tipo 2
SERVIDOR Oracle
------------------------------------
JDBC-Net pure Java driver
CLIENTE Programa Driver Servidor de acceso BDD
java Tipo 3 de la base de datos
SERVIDOR (LAN) BDD
SERVIDOR (LAN) Servidor de acceso BDD
de la base de datos
SERVIDOR (WAN) Servidor de acceso BDD
de la base de datos
------------------------------------
Native protocol pure Java driver
La base de datos puede ser local o remota.
7
ACCESO A DATOS EN JAVA
i
939
2. El API JDBC
Clases para establecer la conexin con la base de datos
Hay dos versiones para establecer la conexin con la base de datos
- JDBC 1.0 (JDK 1.1)
- JDBC 2.0 (JDK 1.2)
En JDK 1.0 no existe JDBC.
El paquete se denomina java.sql.* (import java.sql.*).
Para acceder a una base de datos habr que conectarse primeramente a ella, los pasos son los siguientes:
- Cargar el driver de la base de datos.
static Class <Class>.forName (String className)
throws ClassNotFoundException
Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");
Lo que hace esta funcin es registrar el driver en un subsistema de la JVM denominado DriverManager.
8
ACCESO A DATOS EN JAVA
i
940
Interface Connection
Obtener una conexin a la base de datos. Estn representadas por la interface Connection:
Connection
Access Connection Oracle Connection
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:
static Connection <DriverManager> getConnection
(String url) throws SQLException
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:
"jdbc:<driver>:<parametros>"
Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conexion = DriverManager.getConnection
("jdbc:odbc:DSNBanco");
9
ACCESO A DATOS EN JAVA
i
941
Configuracin de una conexin odbc
Para crear conexiones en la base de datos habr que crear lo que se denomina DSN (Data Source Name).
Un DSN es un conjunto de parmetros que configuran la conexin a la base de datos y a los que se da un
nombre.
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.
10
ACCESO A DATOS EN JAVA
i
942
3. Ejecutar sentencias SQL
Sentencias SQL
Para ejecutar setencias SQL se va a necesitar un objeto Statement que es un interface.
Para obtener una Statement habr que pedirlo a Connection, se tiene el siguiente mtodo:
Statement <Connection>.createStatement() throws SQLException
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
ACCESO A DATOS EN JAVA
943
Para ejecutar las sentencias anteriores se utiliza el siguiente mtodo:
int <Statement>.executeUpdate (String sql)
throws SQLException
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:
SELECT Nombre, Direccion FROM Clientes
WHERE (Saldo > 25000)
Para ejecutar las sentencias de consulta se tiene el siguiente mtodo:
ResultSet <Statement>.excuteQuery (String sql)
throws SQLException
12
ACCESO A DATOS EN JAVA
i
944
Un ResultSet es el resultado de la consulta compuesto por filas y columnas.
Tras obtener el Resultset habr que tratar la informacin contenida en l. Para ello se tienen los siguiente
mtodos:
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.
13
ACCESO A DATOS EN JAVA
i
945
Tambin se pueden recoger los Metadatos del Resultset. Los Metadatos es la informacin de la estructura del
sistema de almacenamiento. Se tienen los siguientes mtodos:
<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.
String <ResultSetMetaData>.getColumnName(int col)
muestra el texto inferior (sin negrita) en casilla lateral, como modelo
Devuelve el nombre de la columna a partir del ndice de la columna.
14
ACCESO A DATOS EN JAVA
i
946
int <ResultSetMetaData>.getColumnType(int col)
muestra el texto inferior (sin negrita) en casilla lateral, como modelo
Devuelve el tipo de la columna a partir del ndice de la columna. Se encuentra dentro de Types.
boolean <Statement>execute(String sql)
throws SQLException
muestra el texto inferior (sin negrita) en casilla lateral, como modelo
Devuelve true si la sentencia SQL es consulta y false si es una sentencia de actualizacin.
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.
15
ACCESO A DATOS EN JAVA
i
947
4. Sentencias SQL Precompiladas (PREPARED STATEMENT)
Sentencias SQL precompiladas
Las sentencias SQL Precompiladas (PREPARED STATEMENT) son:
CLIENTE SELECT * FROM Clientes) SERVIDOR BD
------------------------------------> Compilar
<----------------------------------- Ejecutar
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
16
ACCESO A DATOS EN JAVA
i
948
Parmetros de las sentencias SQL precompiladas
En vez de mandar la sentencia de nuevo se enviar slo el cdigo. ste es devuelto por la base de datos.
Todas las sentencias pueden ser sentencias precompiladas y adems se podrn paremetrizar:
INSERT INTO CLIENTES VALUE (?,?,?,?)
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
17
ACCESO A DATOS EN JAVA
i
949
Ambas sentencias sirven para fijar los parmetros de la sentencia precompilada.
Todas estas sentencias sirven para la ejecucin de las sentencias SQL precompiladas.
Estos mtodos se diferencian de los mtodos de Statement en que en estas sentencias no se les pasa la
sentencia SQL ya que se le ha pasado anteriormente en el mtodo prepareStatement
ResultSet <PreparedStatement>.executeQuery()
throws SQLException
int <PreparedStatement>.excuteUpdate() throws SQLException
boolean <PreparedStatement>.execute() throws SQLException
18
ACCESO A DATOS EN JAVA
i
950
5. Uso de transacciones
La transaccin y sus propiedades
Una transaccin es un conjunto de operaciones que se quiere enviar a la base de datos de forma que se
ejecute toda la transaccin o que no se ejecute nada.
Una transaccin se puede definir como un cambio de estado de la base de datos.
Este cambio de estado no se puede realizar ya que no existe ninguna instruccin de SQL para realizarla sino
que hay que usar varias instrucciones.
Las transacciones tienen tres propiedades:
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.
19
ACCESO A DATOS EN JAVA
i
951
El auto commit mode
En Java, cuando se realiza la conexin con la base de datos, el sistema se encuentra en auto commit mode,
esto quiere decir que cada sentencia que se enve se considera una transaccin.
Para realizar varias sentencias en SQL como una sola transaccin habr que desactivar el auto commit mode.
Esto se realiza con el siguiente mtodo:
void <Connection>.setAutoCommit (boolean autoCommit)
Cuando se quieran ejecutar todas las sentencias SQL lanzadas contra la base de datos habr que ejecutar el
siguiente mtodo:
void <Connection>.commit() throws SQLException
Si no se confirma la transaccin se deshace la transaccin.
Si se quiere deshacer la transaccin se tiene el siguiente mtodo.
void <Connection>.rollback() throws SQLException
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)
20
ACCESO A DATOS EN JAVA
i
952
Cuando se abre una transaccin se bloquean registros de la base de datos, esto hay que tenerlo en cuenta.
Siempre es aconsejable que el ordenador realice todas las operaciones de la transaccin.
setAutoCommit
El auto commit mode no se activa tras realizar el mtodo comit sino que habr que activarlo mediante el
mtodo setAutoCommit.
Ejemplo de programa con transacciones:
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);
21
ACCESO A DATOS EN JAVA
i
953
Niveles de aislamiento I
Las bases de datos tienen lo que se llaman niveles de aislamiento (Isolation Levels). Los niveles de aislamiento
informan de cunto tiempo est una transaccin aislada del resto de transacciones.
Para trabajar con el nivel de aislamiento se tienen los siguientes mtodos:
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.
22
ACCESO A DATOS EN JAVA
i
954
Niveles de aislamiento II
A continuacin se muestran los niveles de aislamiento:
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)
Programa Driver Servidor de acceso Base de Datos
Java Tipo3 a la base de datos
CLIENTE (Browser) SERVIDOR
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.
23
ACCESO A DATOS EN JAVA
i
955
Esta restriccin se da por seguridad ya que el Applet entonces podra acceder al cliente y aprovechar por
ejemplo su direccin IP.
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
SET CLASSPATH= %CLASSPATH%;c:\IDSServer\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");
24
ACCESO A DATOS EN JAVA
i
956
2. Se monta la cadena de conexin:
String url = "jdbc:ids://localhost:12/conn?dbtype=odbc&dsn='DSNxxx'";
Connection conexion = DriverManager.getConnection(url);
- 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 Driver de Servidor de acceso
Java Tipo 4 a la base de datos InterBase
InterClient InterServer
25
ACCESO A DATOS EN JAVA
i
957
Procedimientos almacenados (Stored Procedures)
Los procedimientos almacenados son un conjunto de instrucciones de base de datos que se van a ejecutar
en la base de datos del servidor. Con esto se gana CPU en el cliente pero se pierde CPU en el servidor.
- Una ventaja importante es que al ejecutarse todo en el servidor no hay que realizar transporte de
informacin por lo tanto se acelera el proceso ya que slo se realiza una peticin por el cliente y el
resultado producido por el servidor.
- Los procedimientos almacenados son funciones de java que van a tener parmetros de entrada (IN)
y parmetros de salida (OUT).
- Tambin existen parmetros INOUT, donde se les pasa un parmetro de entrada y en el mismo
parmetro se produce la salida.
La nica diferencia que existe con las funciones es que los procedimientos almacenados pueden tener varios
parmetros de salida.
Los procedimientos almacenados varan dependiendo el uso de la base de datos.
26
ACCESO A DATOS EN JAVA
i
958
Ejecucin de procedimientos almacenados
Para realizar la ejecucin de procedimientos almacenados desde Java se necesitar un objeto del tipo
CallableStatement (interface).
Para preparar el procedimiento almacenado a ejecutar.
Satement <---- PreparedStatement <---- CallableStatement
CallableStatemnt <Connection>.prepareCall (String sql)
throws SQLException
Formato de SQL:
"{call Anade Cliente (?,?,?,?)}" --> IN
"{? call SumaSaldos()}" -->OUT
Tras haber preparado el procedimiento almacenado se cargarn los parmetros de entrada, si existen, con
los mtodos set (setInt, setString, ...) :
c.SetInt (1,8);
c.SetString (2,"Pedro Perez");
c.SetString (3,"C/ Alcantara S/N");
c SetInt (4,80000);
27
ACCESO A DATOS EN JAVA
i
959
Procedimientos Almacenados : Parmetros de salida
En el caso de que el procedimiento almacenado tenga parmetros de salida habr que registrarlos antes de
ejecutar el procedimiento almacenado. Se tiene el siguiente mtodo:
void <CallableStatement>.registerOutParameter
(int parameterIndex, int sqlType) throws SQLException
El parmetro parameterIndex comenzar por 1.
El parmetro sqlType se corresponde con los Types de java.sql.Types.
Para realizar la ejecucin de un procedimiento almacenado.
ResultSet <CallableStatement>.executeQuery()
int <CallableStatement>.executeUpdate()
boolean <CallableStatement>execute()
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) . . .
Se le pasa el ndice del parmetro de entrada.
28
ACCESO A DATOS EN JAVA
i
960
Fichero interclient.jar
Para abrir la conexin con la base de datos se debe utilizar el fichero interclient.jar (driver de tipo 4).
Dependiendo de si es un Applet o un programa, la ejecucin ser distinta.
Si es un programa se introducir dentro del CLASSPATH:
SET CLASSPATH= %CLASSPATH%;c:\....\interclient.jar
Si es un Applet, se deber descomprimir en el directorio donde est el Applet.
Para cargar los drivers de INTERBASE:
Class.forName("interbase.interclient.Driver");
Connection conexion = DriverManager.getConnection
("jdbc:interbase://localhost/c:\xxx\xxx\xxx.gdb",
user,password);
29
ACCESO A DATOS EN JAVA
i
961
6. Resumen
Has llegado al final de este recurso formativo que denominamos La tecnologa JDBC
En esta leccin hemos estudiado los siguientes contenidos:
30
ACCESO A DATOS EN JAVA
i
962
ACCESO A DATOS
EN JAVA
963
XML como almacenamiento de datos
Nacimiento del XML
XML es un lenguaje de Marcado, tal como lo es HTML. Los dos comparten un mismo origen, el SGML, el SGML
(Standard Generalized Markup Language o Lenguaje estandarizado y generalizado de Marcado) es un estndar
internacional (ISO 8879) que naci con la necesidad de publicar documentos extensos, originalmente
manuales de mantenimiento de aeronaves, su inventor fue Charles F. Goldfarb en 1974. La principal
caracterstica del lenguaje SGML era y es la de crear elementos personalizados y desarrollar vocabularios que
pueden ser utilizados por otras aplicaciones. En definitiva, lo que SGML permite es crear otros lenguajes de
marcado personalizados. Esto es lo que Tim Berners-Lee hizo al crear el lenguaje HTML (Hipertext Markup
Language), a partir de SGML cre su propio lenguaje de Marcado.
Esto nos lleva a la primera conclusin, que probablemente destierre alguna de las ideas que podamos tener
acerca del lenguaje XML. El lenguaje XML no es una evolucin de HTML ni es una versin extendida de ste.
HTML y XML comparten el mismo origen, puesto que los dos estn basados en SGML.
Cuando el W3C (World Wide Web Consortium), pens que era hora de poner orden en el galimatas que
representaba el sinfn de tecnologas derivadas de HTML, que los distintos fabricantes de software para la
red haban realizado a partir de sus interpretaciones personales y objetivos empresariales de distinto signo,
decide que va ha realizar un nuevo lenguaje que d soporte a la red tanto en el presente como en el futuro.
Para ello, una de las primeras premisas que se fij en W3C fue la escalabilidad.
El W3C en esta ocasin jugaba con ventaja, ya que dispona de la suficiente informacin y experiencia basada
en lo que actualmente representaba, para lo bueno y para lo malo, el lenguaje de marcado HTML. Es por esto
que tambin se plantearon los problemas que presentaba el lenguaje HTML para darles una solucin. Entre
otros, y a grandes rasgos, el lenguaje HTML presentaba y presenta problemas como que es un lenguaje que
est basado ms en la definicin de la presentacin que en el contenido. HTML, adems, presenta problemas
significativos de internacionalizacin, posee una estructura catica (ms adelante veremos por qu, al definir
la estructura de los documentos XML en comparacin con HTML). La interpretacin del HTML tambin es
ambigua, dependiendo del software que se utilice. Adems, el lenguaje HTML no es fcilmente procesable,
y slo posee un uso, el de las pginas Web.
ACCESO A DATOS EN JAVA
2
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.
ACCESO A DATOS EN JAVA
3
965
La diferencia con un lenguaje de marcado es que su principal funcin es la de la descripcin del contenido
de un documento, mientras que XML se encarga del formato de ese contenido. XML, adems, puede ser
ejecutado desde cualquier sistema operativo o plataforma. Describe informacin, por ello, es ideal para el
intercambio de datos en la red o fuera de ella, por ejemplo entre aplicaciones, ste es el caso de la suite
de Microsoft Office que utiliza XML para intercambiar datos entre las distintas aplicaciones, como por ejemplo
entre Word, Excel y Access, as como la transformacin de documentos entre distintos formatos, por ejemplo
de RTF (Rich Text Format) a HTML.
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).
ACCESO A DATOS EN JAVA
4
966
XML versus HTML
XML no sustituir a HTML, ms bien XML complementar a HTML, permitiendo de esta manera poder realizar
aplicaciones para la red ms robustas y escalables. Esto no quiere decir que XML hipotticamente podra
sustituir a HTML en un futuro, incluso el W3C ha definido el modelo de objeto de documento (DOM Document
Object Model) de HTML en el que estn basados los navegadores de acuerdo al lenguaje XML (con estructura
XML), pero la implantacin de DOM HTML en los navegadores es opcional.
Pero, sin duda, el mayor freno que tiene la sustitucin de HTML por XML est basado en el xito que HTML
tiene y ha tenido, que hace prcticamente imposible y econmicamente inviable la migracin de millones y
millones de pginas WEB, que actualmente estn en la red, adems HTML seguir siendo un lenguaje fcil y
asequible para todas aquellas personas que desean publicar pginas web sencillas, y que no justifican la
necesidad de aprender otro lenguaje ms potente, como XML.
Soporte XML
En un futuro no muy lejano los navegadores soportarn nativamente XML, de hecho, a da de hoy Microsoft
Explorer y Netscape lo soportan. Pero, la forma de interpretarlo en el lado del cliente puede ser distinta
dependiendo del navegador, es por ello que hoy en da la utilizacin de XML en la red se restringe a su uso
de lado del servidor, y a corto plazo es donde tiene un mayor xito, y lo tendr sin duda pero, no olvidemos
que da a da se encuentran nuevos usos y funcionalidades para el lenguaje XML, por lo que seguramente en
un futuro prximo podremos encontrar XML por todas partes.
En XML se separa, como se dijo anteriormente, la presentacin del contenido, hablando en este caso de la
creacin de documentos para la red. Por ejemplo, de un mismo documento XML podramos crear diferentes
interpretaciones de visualizacin, como por ejemplo la ya conocida de HTML, WML (Wireless Markup
Language, lenguaje de marcado, que utiliza la tecnologa WAP para las telecomunicaciones mviles), RTF o
PDF (formato utilizado para documentos por Adobe Acrobat), etc. y en todos ellos podramos ver la misma
informacin.
Adems, XML est diseado para ser utilizado con cualquier tipo de conjunto de caracteres y, por
consiguiente, cualquier tipo de lenguaje o idioma. XML se presenta como el formato ideal para el intercambio
de documentos, a travs de la red o a travs de cualquier otro mtodo. Algunas de las utilidades que se ven
beneficiadas por el uso de XML son, entre otras, las transacciones entre empresas en la red, las tcnicas de
extraccin de datos, como DATAMINING o DATAMARK y, por supuesto, la creacin de nuestros propios lenguajes
de marcado para dotar a nuestras aplicaciones de herramientas que permitan el intercambio de datos entre
distintas aplicaciones.
ACCESO A DATOS EN JAVA
5
967
En XML las reglas de composicin de un documento son estrictas, no pueden ser dejadas al libre albedro tal
y como sucede en HTML, ms adelante ampliaremos esta caracterstica.
Partes que forman un documento XML
Los documentos XML estn formados por varias partes, que son:
El elemento
Es la parte fundamental de la estructura del documento XML. Se identifica mediante el nombre del elemento.
Se corresponde con la etiqueta (tag) que podemos encontrar en HTML
HTML XML
<HEAD> <VEHICULO>
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 XML
<HEAD> <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>
ACCESO A DATOS EN JAVA
6
968
El atributo
Forma parte del elemento, su funcin es la de aportar mayor informacin acerca del elemento.
<VEHICULO MARCA=OPEL> M-9999-ZZ </VEHICULO>
Un elemento puede contener ms de un atributo, o ninguno.
<VEHICULO MARCA=OPEL MODELO=CORSA>
M-9999-ZZ
</VEHICULO>
Dentro del atributo encontramos dos partes, el nombre del atributo y el valor del atributo. En los ejemplos
anteriores:
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.
ACCESO A DATOS EN JAVA
7
969
La excepcin a esta regla es el elemento raz, del que parten todos los dems elementos.
<VEHICULO>
</VEHICULO>
Los elementos adems deben estar anidados.
<VEHICULO>
<PROPIETARIO>
<NOMBRE>
</NOMBRE>
</PROPIETARIO>
</VEHICULO>
Orden de los elementos
Los elementos no pueden estar superpuestos
INCORRECTO CORRECTO
<VEHICULO> <VEHICULO>
<PROPIETARIO> <PROPIETARIO>
</VEHICULO> </PROPIETARIO>
</PROPIETARIO> </VEHICULO>
Los elementos, obligatoriamente, deben estar cerrados
INCORRECTO CORRECTO
<VEHICULO> <VEHICULO>
<PROPIETARIO> <PROPIETARIO>
</PROPIETARIO>
</VEHICULO> </VEHICULO>
ACCESO A DATOS EN JAVA
8
970
Slo puede existir un elemento raz del que parten los dems
INCORRECTO CORRECTO
<VEHICULO> <VEHICULO>
</VEHICULO> <PROPIETARIO>
<PROPIETARIO> </PROPIETARIO>
</PROPIETARIO> </VEHICULO>
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 CORRECTO
<Elemento> <elemento>
<elemento2> <elemento2>
</elemento2> </elemento2>
</elemento> </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.
ACCESO A DATOS EN JAVA
9
971
Marcado y datos
Las marcas se corresponden con las que comienzan por < y terminan con >. Evidentemente, los elementos
que anteriormente hemos visto son marcas o mark-up.
El texto que encontramos entre las marcas o etiquetas son los datos del documento propiamente dicho.
En las referencias de entidad se utiliza el carcter ampersand (&), y finalmente el punto y coma (;).
Prlogo
El prlogo es opcional, pero generalmente comienza especificando que se trata de un documento XML y la
versin de XML que contiene. Tambin, a veces, encontramos referencia a la codificacin de caracteres con
la que est realizada el documento.
<?xml version = 1.0?>

<?xml version = 1.0 encoding = UTF-7?>


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;
> &gt;
< &lt;
&apos;
&quot;
ACCESO A DATOS EN JAVA
10
972
Documentos XML bien formados (well formed)
Los documentos XML bien formados son aquellos que cumplen las reglas arriba descritas. Para que un
documento sea un documento XML tiene obligatoriamente que ser un documento bien formado.
Adems de las reglas arriba escritas existen caracteres que no pueden ser utilizados para formar parte del
nombre de elementos o atributos. Tampoco se pueden utilizar acentos, ni otros elementos de puntuacin.
Que un documento XML est bien formado no significa que sea un documento vlido, tal como veremos ms
adelante.
Un ejemplo xml
En el siguiente ejemplo se muestra un documento XML.
<?xml: version=1.0?>
<!Ejemplo 1>
<libro>
<titulo>Un titulo cualquiera</titulo>
<capitulos>
<capitulo>
<titulo> Capitulo 1 </titulo>
<prrafo nmero = 1>
Un prrafo
</prrafo>
</capitulo>
<capitulo>
<titulo> Capitulo 2 </titulo>
</capitulo>
</capitulos>
</libro>
ACCESO A DATOS EN JAVA
11
973
Comencemos a describir el documento por la primera lnea.
<?xml: version=1.0?>
Todos los documentos XML deben comenzar con una lnea como la anterior, donde especificamos que el
documento es un documento XML y que se corresponde con la versin 1.0.
Esta lnea es necesaria en los documentos XML y sirve para que los navegadores o analizadores XML detecten
que el fichero que estn leyendo es un documento XML, y que se corresponden con la versin 1.0 de las
especificaciones propuestas por el consorcio w3c.
<!Ejemplo 1>
En el caso de la segunda lnea, si conoce algo de HTML reconocer fcilmente que se trata de un comentario,
todos los comentarios en XML deben comenzar con <! y finalizar con >.
<! Esto es un comentario XML >
Si el texto que forma parte del comentario tiene ms de una lnea no supone ningn problema, siempre que
empecemos y terminemos el comentario con los caracteres de comienzo y fin, respectivamente.
<! Esto es un comentario XML que
ocupa ms de una lnea >
Se pueden utilizar los comentarios en cualquier parte del documento, excepto dentro de las etiquetas,
declaraciones o dentro de otros comentarios.
<libro>
Es el primer elemento que encontramos en el documento XML, por esto se corresponde con el elemento raz
del documento, lo que quiere decir que todos los dems elementos estarn contenidos en el elemento raz
<libro>.
<titulo>Un ttulo cualquiera</titulo>
Un nuevo elemento que parte directamente de la raz del documento, el elemento <titulo> ttulo tiene como
valor Un ttulo cualquiera y, finalmente, est cerrado </titulo>, lo que quiere decir que el elemento
ttulo no tiene ningn otro subelemento o elemento que dependa de l.
<capitulos>
ACCESO A DATOS EN JAVA
12
974
Un nuevo elemento que parte directamente de la raz del documento.
<capitulo>
Un elemento que depende del elemento <capitulos>
<titulo> Captulo 1 </titulo>
<titulo> es un nuevo elemento, pero se diferencia del elemento <titulo>, que vimos anteriormente, en que
ste no depende de la raz, sino que en este caso depende del elemento <capitulo>, se trata de dos elementos
totalmente diferentes. Captulo 1 es el valor del elemento y </titulo> se corresponde con el cierre del
elemento.
<prrafo nmero = 1>
Un prrafo
</prrafo>
<prrafo> es un nuevo elemento, que al igual que el anterior parte o est incluido dentro del elemento
<capitulo>, tambin se diferencia del anterior en que este elemento posee un atributo nmero y se le
asigna un valor a ese atributo 1; por lo dems, es igual al anterior, el elemento tiene un valor Un prrafo,
y finalmente encontramos una etiqueta de cierre </parrafo>.
</capitulo>
Cerramos el elemento <capitulo> con la etiqueta de cierre </capitulo>.
<capitulo>
Abrimos nuevamente un elemento <parrafo>, como en el caso del anterior elemento prrafo ste se
encuentra dependiente de la raz, y por tanto se encuentra al mismo nivel que el anterior, por lo que el
analizador lo detectar como el segundo valor correspondiente al elemento <capitulo>. Este caso es
completamente diferente del que veamos anteriormente con <titulo>, ya que como veamos antes el
elemento ttulo no se encontraba en el mismo nivel que el otro elemento <titulo>, que dependa del elemento
raz del documento.
<titulo> Captulo 2 </titulo>
ACCESO A DATOS EN JAVA
13
975
Segundo valor de la etiqueta <titulo> dependiente de <capitulo>.
<capitulo>
Abrimos un nuevo elemento <capitulo>.
</capitulos>
Cerramos el elemento <capitulos>
</libro>
Cerramos el elemento raz. Al cerrar este elemento (el raz) el documento se da por finalizado, a partir de
este momento no podemos abrir o cerrar ningn otro elemento, s podramos, por supuesto, incluir
comentarios; en caso de que abrisemos un nuevo elemento no nos dara como resultado un documento bien
formado, y como consecuencia un error.
Este otro ejemplo sera incorrecto (no estara bien formado).
<?xml: version=1.0?>
<!Ejemplo 1>
<libro>
<titulo>Un titulo cualquiera</titulo>
<capitulos>
<capitulo>
<titulo> Capitulo 1 </titulo>
<prrafo nmero = 1>
Un prrafo
</prrafo>
</capitulo>
<capitulo>
<titulo> Capitulo 2 </titulo>
</capitulo>
</capitulos>
</libro>
<autor>
el autor del libro
</autor>
ACCESO A DATOS EN JAVA
14
976
La incorreccin de este ejemplo est fundamentada en que no existe elemento raz. Para que el ejemplo
estuviese bien formado debera escribirse de esta otra manera:
<?xml: version=1.0?>
<!Ejemplo 1>
<libro>
<titulo>Un titulo cualquiera</titulo>
<capitulos>
<capitulo>
<titulo> Capitulo 1 </titulo>
<prrafo nmero = 1>
Un prrafo
</prrafo>
</capitulo>
<capitulo>
<titulo> Capitulo 2 </titulo>
</capitulo>
</capitulos>
<autor>
el autor del libro
</autor>
</libro>
Atributos
Se puede dar el caso de que nos decidamos por elementos que no tengan valor ni subelementos, pero que
asignen distintos valores a atributos que pertenezcan al elemento.
<elemento atributo=valor del atributo> </elemento>
Aunque un elemento no contenga ningn valor, tal como hemos visto, tiene obligatoriamente que ser cerrado
como cualquier otro elemento, pero en un caso como ste podemos abrir la etiqueta del elemento y cerrar
el elemento dentro de la misma etiqueta de esta otra manera:
<elemento atributo=valor del atributo/>
Recordemos que el valor de los atributos siempre debe encerrase entre comillas simples () o comillas
dobles ().
ACCESO A DATOS EN JAVA
15
977
Esto es correcto:
<elemento atributo = valor del atributo/>
Esto no es correcto
<elemento atributo = valor del atributo />
Secciones CDATA
Hay ocasiones en las que el autor del documento XML debe incorporar texto como valor y que este texto
contenga caracteres no permitidos, ya que podran ser confundidos con marcado del documento XML tal
como vimos en las entidades predefinidas (&,>,<,,). Para que el analizador XML tome el texto como simple
texto y no intente analizarlo, para ello encerramos el texto en lo que llamamos una seccin CDATA
(Character Data).
En este ejemplo, el contenido de la etiqueta <etiqueta1> es cdigo HTML, que como sabemos tambin utiliza
los caracteres < y > para sealar las etiquetas o tags HTML.
Sin seccin CDATA:
<etiqueta1>
&lt;HTML&gt;
&lt;HEAD&gt;
&lt;TITLE&gt;
Esta es la Cabecera del Documento HTML
&lt;/TITLE&gt;
&lt;/HEAD&gt;
</etiqueta1>
Con Seccin CDATA:
<etiqueta1>
<![CDATA[
<HTML>
<HEAD>
<TITLE>
Esta es la Cabecera del Documento HTML
</TITLE>
</HEAD>
]]>
</etiqueta1>
ACCESO A DATOS EN JAVA
16
978
Evidentemente, existe una excepcin que se corresponde con el final de la seccin CDATA ]]>, al utilizarse
estos caracteres para sealar el final de la seccin CDATA no pueden ser utilizados dentro de la seccin
CDATA. Si los utilizramos el analizador de XML los confundira con el final de la seccin.
Definicin de documentos y documentos vlidos
No es suficiente para que un documento sea un documento XML que est bien formado, adems el documento
tiene que ser vlido. Pero, qu significa que un documento sea vlido? Si tuvisemos que hacer una
definicin, diramos que un documento XML es vlido cuando est bien formado, y adems cumple las
definiciones propuestas en su definicin de documento o DTD (Document Type Definition).
La DTD de un documento XML no es ni ms ni menos que la definicin de cada uno de los elementos y atributos
que forman parte del documento XML. Como veremos ms adelante esta DTD puede estar incluida (a nivel
fsico) en un fichero aparte con la extensin DTD o en el mismo fichero del XML. Realmente, lo que hacemos
al crear la DTD es definir las etiquetas y atributos de nuestro lenguaje de marcado, especificando qu
elementos forman parte de l, qu atributos, de qu tipo son, etc...
Si nos paramos a pensar, hay un paralelismo entre esto y el cdigo HTML, ya que el HTML procede del SGML,
pero tiene sus etiquetas especficas que han sido propuestas en una DTD, en la DTD del lenguaje HTML.
As las etiquetas <HTML> o <HEAD> o <B> estn incluidas dentro de esa DTD del lenguaje HTML.
La DTD no slo se limita a presentar o definir los elementos y atributos del documento XML, tambin puede
definir reglas de combinacin de stos.
Evidentemente, podemos crear documentos XML sin DTD, y probablemente funcionen correctamente, pero
en este caso, como dijimos anteriormente, no son documentos vlidos, en este caso seran tan slo
documentos bien formados.
Pasamos ahora a ver un pequeo ejemplo:
<?xml versin = 1.0?>
<!DOCTYPE midocumento [
<!ELEMENT midocumento (elemento1, elemento2)>
<!ELEMENT elemento1 (#PCDATA)>
<!ELEMENT elemento2 (#PCDATA)>
]>
<midocumento>
<elemento1> contenido del elemento1 </elemento1>
<elemento2> contenido del elemento2 </elemento2>
</midocumento>
ACCESO A DATOS EN JAVA
17
979
En este ejemplo, podemos ver un documento XML con su DTD definida incluida en el propio documento. La
DTD define la estructura del documento midocumento, que coincide con el elemento raz del documento:
<!DOCTYPE midocumento [
Despus de declarar, el documento pasa a definir los elementos del mismo:
<!ELEMENT midocumento (elemento1, elemento2)>
Define el elemento mi documento, y seala que est formado por dos subelementos, elemento1 y elemento2.
<!ELEMENT elemento1 (#PCHAR)>
Define el elemento 1, y como no est formado por ningn otro subelemento, directamente seala el tipo de
informacin que contendr el elemento, en este caso caracteres (#PCHAR).
<!ELEMENT elemento2 (#PCHAR)>
Define el elemento2 tal como lo hemos hecho con el elemento1.
]>
Cierra la declaracin de tipo de documento (DTD).
En el caso en el que la DTD no est incluida en el propio documento XML, debemos hacer referencia a ella
desde el documento XML. Quedara de esta manera, tomando el ejemplo anterior:
<?xml versin = 1.0?>
<!DOCTYPE midocumento SYSTEM c:\midocumento.dtd>
<midocumento>
<elemento1> contenido del elemento1 </elemento1>
<elemento2> contenido del elemento2 </elemento2>
</midocumento>
ACCESO A DATOS EN JAVA
18
980
LA DTD externa tendra este aspecto (fichero c:\midocumento.dtd):
<!ELEMENT midocumento (elemento1, elemento2)>
<!ELEMENT elemento1 (#PCDATA)>
<!ELEMENT elemento2 (#PCDATA)>
Declaracin de elementos en la dtd
Como los elementos son la base de los documentos XML, stos deben estar definidos de manera correcta para
que el documento XML pueda ser vlido. Como hemos visto anteriormente en el ejemplo, los elementos se
declaran con la etiqueta <!ELEMENT.
Al declarar los elementos debemos declarar tambin su contenido. Tal como vimos en el ejemplo anterior si
el elemento contiene otros elementos o subelementos, stos deben estar definidos en la declaracin del
elemento, de esta manera, definimos la estructura en rbol del documento XML.
<!ELEMENT midocumento (elemento1, elemento2)>
En el ejemplo, declaramos un elemento midocumento y definimos su contenido, en este caso el contenido
de midocumento es otro elemento el elemento1 y el elemento2.
Segn esta declaracin del elemento midocumento, el siguiente documento XML sera vlido:
<midocumento>
<elemento1> contenido del elemento1 </elemento1>
<elemento2> contenido del elemento2 </elemento2>
</midocumento>
Sin embargo, este otro no lo sera:
<midocumento>
<elemento1> contenido del elemento1 </elemento1>
<elemento2> contenido del elemento2 </elemento2>
<elemento3> contenido del elemento3 </elemento3>
</midocumento>
ACCESO A DATOS EN JAVA
19
981
Para que este documento XML fuese vlido tendra que tener una declaracin como esta:
<!ELEMENT midocumento (elemento1, elemento2, elemento3)>
Al hacer la declaracin del elemento midocumento no hemos definido los elementos elemento1 y
elemento2, slo hemos dicho que el contenido de midocumento est formado por elemento1 y
elemento2, es por esto que tenemos que declarar tambin los elementos que forman parte de
midocumento:
<!ELEMENT elemento1 (#PCDATA)>
<!ELEMENT elemento2 (#PCDATA)>
Esta vez el contenido de los elementos elemento1 y elemento2 no son elementos, en este caso el
contenido es una cadena de texto que define el tipo (#PCDATA).
Al definir el contenido de un elemento este puede ser de varios tipos:
Empty
Es un tipo de contenido para el que el elemento puede no tener contenido, generalmente este tipo es
utilizado para declarar atributos.
<!ELEMENT elementovacio EMPTY>
Any
Con este tipo, sealamos que nuestro elemento puede contener cualquier tipo de informacin, generalmente
no se usa, ya que es conveniente poseer una perfecta definicin de nuestro documento.
<!ELEMENT cualquiera ANY>
Mixed
El tipo mixed seala que el elemento puede contener caracteres de texto, pero tambin elementos.
<!ELEMENT elementoN (#PCDATA | elementoN1)*>
Element
El elemento en cuestin slo puede contener elementos:
<!ELEMENT midocumento (elemento1, elemento2)>
ACCESO A DATOS EN JAVA
20
982
Modelos de contenido en la declaracin de elementos
El modelo de contenido dentro de la declaracin de elementos, va a definir la forma en la que debemos
encontrar los elementos dentro de nuestro documento XML.
Con el modelo de contenido definimos el orden de los elementos, la obligatoriedad o no de ellos, elementos
opcionales, etc....
Comenzamos con el ms bsico:
<!ELEMENT midocumento (elemento1)>
El ejemplo muestra la declaracin del elemento midocumento, y seala que midocumento debe incluir
el elemento elemento1 en su interior.
<!ELEMENT midocumento (elemento1, elemento2)>
Esta otra declaracin seala que el elemento midocumento est formado por elemento1, seguido de
elemento2, lo que denota el orden de los elementos. El orden de los elementos se define por medio de la
,.
(elemento1, elemento2, elemento3)
elemento1, seguido de elemento2 y elemento2 seguido de elemento3.
<!ELEMENT midocumento (elemento1 | elemento2)>
En este caso, hemos sustituido la , por |, con esta declaracin estamos indicando opcin. El elemento
midocumento puede estar formado por elemento1 o por elemento2.
Tambin se pueden combinar:
<!ELEMENT midocumento (elementoN, (elemento1 | elemento2))>
El elemento midocumento est formado por el elemento elementoN, seguido por un elemento1 o un
elemento2. Las combinaciones tambin pueden ser agrupadas:
<!ELEMENT
midocumento
(elementoN, (elemento1|(elemento2,elemento2-1)))>
ACCESO A DATOS EN JAVA
21
983
El elemento midocumento est formado por un elemento elementoN, seguido por un elemento1 o, un
elemento2, seguido por un elemento2-1. Tambin, mediante el modelo de contenido podemos hacer
referencia a la frecuencia con la que deben aparecer los elementos.
<!ELEMENT midocumento (elemento1?)>
Esta declaracin utiliza smbolo ? para indicar que el elemento es opcional, el elemento elemento1 se
puede repetir 0 1 veces.
<!ELEMENT midocumento (elemento1+)>
Esta otra utiliza el smbolo + para indicar que el elemento es obligatorio, y que se puede repetir ms de
una vez. El elemento elemento1 es obligatorio y puede ser repetido tantas veces como queramos.
<!ELEMENT midocumento (elemento1*)>
El smbolo * indica que el elemento es opcional y repetible, el elemento elemento1 puede existir una o
ms veces o no existir. Como en los ejemplos anteriores, podemos hacer distintas combinaciones con la
frecuencia de los elementos, como en el siguiente ejemplo:
<!ELEMENT
midocumento
(elementoN?,(elemento1|(elemento2,elemento2-1))*)>
Esta declaracin indica que midocumento puede estar formado o no por elementoN, seguido de 0 o n
combinaciones de elemento1 o elemento2, seguido de elemento2-1.
Declaracin de atributos
La declaracin de los atributos se diferencia de la declaracin de los elementos, sobre todo, en que los
atributos no pueden contener a su vez sub-atributos.
Como vimos en la unidad en la que presentbamos las diferentes partes de un documento XML, los atributos
se usan para complementar o aadir informacin a un elemento. Generalmente, la informacin que se incluye
en los atributos suele ser una informacin corta y que no est estructurada.
ACCESO A DATOS EN JAVA
22
984
Otra de las reglas a la hora de declarar Atributos es que los atributos slo pueden ser declarados una sola
vez, y en el orden que queramos.
Las declaraciones de los atributos en la DTD se realizan con <!ATTLIST, seguido por el nombre del elemento
al que pertenece el atributo, el nombre del atributo y, por ltimo, el tipo del atributo y el valor por defecto
del mismo.
Veamos un ejemplo:
<?xml version=1.0?>
<monitores>
<monitor marca=Fujitsu> 23456723 </monitor>
<monitor marca=SONY> 15556723 </monitor>
</monitores>
La DTD de este ejemplo ser:
<!ELEMENT monitores (monitor)+>
<!ELEMENT monitor (#PCDATA)>
<!ATTLIST monitor marca CDATA #REQUIRED>
En el ejemplo, el atributo monitor puede contener texto, esto es lo que especificamos con CDATA, y adems
especificamos que no tiene valor por defecto y que es obligatorio especificar el valor del atributo.
De otra manera, podramos haber incluido un valor por defecto en el atributo marca.
<!ATTLIST monitor marca SONY>
Tambin podemos especificar varios valores alternativos de esta otra forma:
<!ATTLIST monitor marca (SONY | FUJITSU)>
Con esta declaracin, estamos especificando que el valor del atributo marca del elemento monitor ser o bien
SONY o bien FUJITSU, pero no otro. Es posible aadir a la declaracin anterior un valor por defecto:
<!ATTLIST monitor marca (SONY | FUJITSU) SONY>
ACCESO A DATOS EN JAVA
23
985
En este caso como en el anterior, el valor del atributo marca que pertenece al elemento monitor puede
ser o bien SONY o bien FUJITSU, y por defecto es SONY, si no especificamos el valor del atributo. Se puede
dar el caso de que no especifiquemos el valor del atributo, pero no queramos que el atributo adopte el valor
por defecto, para ello utilizamos #IMPLIED.
<!ATTLIST monitor marca CDATA #IMPLIED>
Tipos de atributos
Podemos definir atributos con diferentes tipos, para as disponer de un perfecta esquematizacin de la
informacin que nuestro documento XML contiene. Los tipos de atributos son:
CDATA
NMTOKEN
ENUMERADOS
ID
IDREF
Los atributos CDATA ms comunes, son aquellos que pueden contener cualquier cosa (exceptuando los
caracteres y palabras reservadas de XML). Son los que se usan con mayor asiduidad dentro de los ficheros XML
para contener valores de tipo alfanumrico.
<!ATTLIST monitor marca CDATA #REQUIRED>
Los atributos NMTOKEN son parecidos a los CDATA, pero slo pueden contener letras, nmeros, puntos,
guiones, subrayados, y los dos puntos.
<|ATTLIST monitor marca NMTOKEN #REQUIRED>
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)>
ACCESO A DATOS EN JAVA
24
986
Los atributos ID son aquellos que tienen como funcin servir de identificador de referencia, para que sea
llamado desde otro elemento que posea un atributo de tipo IDREF y, por lo tanto, debe contener un valor
nico.
<!ATTLIST monitor marca ID #REQUIRED>
El atributo IDREF es el atributo con el que definimos que el valor del atributo es utilizado para localizar un
elemento con un atributo de tipo IDREF.
<!ATTLIST monitor marca IDREF #REQUIRED>
Veamos un ejemplo del uso conjunto de atributos de tipo ID e IDREF:
<!ELEMENT monitor EMPTY>
<!ATTLIST monitor marca ID #REQUIRED>
<!ELEMENT repuesto EMPTY>
<!ATTLIST repuesto marca IDREF #REQUIRED>
En el ejemplo vemos cmo el atributo marca del elemento repuesto tiene un valor para hacer referencia al
atributo marca del elemento monitor.
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.
ACCESO A DATOS EN JAVA
25
987
Las entidades en la DTD se declaran con <!ENTITY
Las entidades se agrupan en:
INTERNAS / EXTERNAS
ANALIZADAS / NO ANALIZADAS
GENERALES / PARMETRO
Entidades generales internas
Son abreviaturas que se usan dentro del documento XML, y son siempre analizadas, es decir, por medio de
la declaracin de la entidad declaramos una abreviatura y por medio del nombre de la entidad hacemos
referencia al contenido de la entidad, el analizador entonces sustituye el nombre de la entidad o abreviatura
con el valor de la entidad, y una vez sustituida por el analizador, lo analiza sintcticamente como cualquier
otro texto.
Veamos un ejemplo completo:
<?xml version=1.0?>
<!DOCTYPE [
<!ELEMENT monitores (monitor)*>
<!ELEMENT monitor (#PCDATA)>
<!ATTLIST monitor marca CDATA #REQUIRED>
<!ENTITY VGA Visual Graphics Adapter>
]>
<monitores>
<monitor marca=Fujitsu>
23456723 &VGA
</monitor>
</monitores>
ACCESO A DATOS EN JAVA
26
988
Este ejemplo sera interpretado por el analizador como:
<?xml version=1.0?>
<!DOCTYPE [
<!ELEMENT monitores (monitor)*>
<!ELEMENT monitor (#PCDATA)>
<!ATTLIST monitor marca CDATA #REQUIRED>
]>
<monitores>
<monitor marca=Fujitsu>
23456723 Visual Graphics Adapter
</monitor>
</monitores>
Entidades generales externas analizadas
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>
ACCESO A DATOS EN JAVA
27
989
<!ENTITY MANUAL SYSTEM c:\manual.doc>
]>
<monitores>
<monitor marca=Fujitsu>
23456723 &MANUAL
</monitor>
</monitores>
En la declaracin de la entidad podemos observar la utilizacin de la palabra reservada SYSTEM, que es la
que indica que el contenido de la entidad va ha ser obtenido fuera del documento.
Despus de la palabra clave SYSTEM debemos hacer referencia al documento por medio de una URI (Universal
Resource Identifier), que puede hacer referencia a un documento dentro de la mquina, o bien, entre otras,
a travs de la red.
<!ENTITY MANUAL SYSTEM http//:www.miwebsite.com/manual.doc>
Tal como hemos visto en los tipos anteriores de entidades, en este caso, despus de ser sustituido el valor
de la entidad, ste es analizado por el analizador XML de manera transparente, luego es ANALIZADA.
Entidades no analizadas
Imaginemos el caso en el que la declaracin de la entidad haga referencia a un fichero externo, cuyo
contenido sea una imagen o un sonido, en este caso, el analizador de XML intentar analizarlo de manera
transparente, tal como hemos visto en los tipos anteriores, pero la diferencia es que si el tipo de recurso al
que hace referencia la entidad no puede ser analizado, entonces el analizador no intentar analizarlo.
La forma de declarar entidades no analizadas es exactamente igual que para las analizadas.
<!ENTITY IMAGEN SYSTEM http//:www.miwebsite.com/miimagen.gif>
Entidades parmetro internas
Este tipo de entidades slo se declaran para ser utilizadas exclusivamente dentro de la DTD, y no en el
documento XML. Para hacer referencia a ellas no utilizamos el smbolo &, sino %, tambin utilizamos el
smbolo % para declararlas.
ACCESO A DATOS EN JAVA
28
990
<?xml version=1.0?>
<!DOCTYPE [
<!ELEMENT monitores (monitor)*>
<!ELEMENT monitor (#PCDATA)>
<!ATTLIST monitor marca CDATA #REQUIRED>
<!ENTITY % mielemento <!ELEMENT elemento1 (#PCDATA)>
%mielemento;
]>
En este ejemplo, hemos declarado una entidad de tipo parmetro llamada mielemento, que se corresponde
con la declaracin de un elemento, por ello, cada vez que tengamos que declarar un elemento como
elemento1, bastar con hacer referencia a la entidad mielemento para que sea sustituida por la
declaracin del elemento.
Sin utilizar la entidad el ejemplo anterior quedara de la siguiente manera:
<!DOCTYPE [
<!ELEMENT monitores (monitor)*>
<!ELEMENT monitor (#PCDATA)>
<!ATTLIST monitor marca CDATA #REQUIRED>
<!ELEMENT elemento1 (#PCDATA)>
]>
Entidades parmetro externas
De igual manera que los otros tipos de entidades, las entidades de tipo parmetro pueden ser externas, y
para hacer referencia a ellas utilizaremos la palabra clave SYSTEM, como en la declaracin de las otras
entidades externas.
<?xml version=1.0?>
<!DOCTYPE [
<!ELEMENT monitores (monitor)*>
<!ELEMENT monitor (#PCDATA)>
<!ATTLIST monitor marca CDATA #REQUIRED>
<!ENTITY % mielemento SYSTEM c:\elemento1.dat>
%mielemento;
]>
ACCESO A DATOS EN JAVA
29
991
Lenguaje de estilo extendido XSL
XSL es un lenguaje para realizar hojas de estilo. El conjunto del lenguaje XSL est formado por tres partes:
- XLST (XSL Transformations): un lenguaje para transformar documentos XML.
- XPATH (XML Path Language): un lenguaje de expresiones para acceder a las diferentes partes de un
documento XML.
- Un vocabulario XML para el formateo semntico de expresiones. (XSL Formating Objects)
Una hoja de estilo XSL especifica las reglas de presentacin de un determinado documento XML.
XPATH
El lenguaje XPATH es una sintaxis, que nos ayuda a construir cadenas de texto para localizar determinados
recursos dentro de documentos XML.
Usamos el lenguaje XPATH cuando queremos hacer referencia a determinado contenido de un elemento en
un documento XML. La base de la utilizacin del lenguaje XPATH se centra en la estructura en rbol de los
elementos de un documento XML, y cmo estos elementos mantienen entre s una relacin jerrquica. Cada
elemento representa una estructura jerrquica de elementos por s mismo.
XPATH no es ni ms ni menos que un conjunto de reglas semnticas para representar la estructura jerrquica
de un determinado elemento. XPATH puede recordarnos a la manera de moverse por los directorios que se
utiliza en UNX o MSDOS.
Veamos un ejemplo:
Select=monitor
En este ejemplo se indica al analizador que seleccione el elemento, o elementos monitor, pero tenemos
que tener en cuenta que slo seleccionar el elemento monitor que dependa directamente del elemento
en el que estamos situados en este mismo momento.
ACCESO A DATOS EN JAVA
30
992
En el siguiente documento:
<?xml version=1.0?>
<!DOCTYPE [
<!ELEMENT monitores (monitor)*>
<!ELEMENT monitor (#PCDATA)>
<!ATTLIST monitor marca CDATA #REQUIRED>
]>
<monitores>
<monitor marca=Fujitsu> 23456723 </monitor>
</monitores>
Si estamos situados en el elemento raz monitores, entonces s encontrar el elemento monitor, pero si
estamos situados en el elemento monitor no encontrar ningn elemento monitor, ya que el elemento
monitor no posee ningn subelemento.
Como sealamos anteriormente el XPATH es un lenguaje que guarda un gran parecido con el URI (Universal
Resource Identifier), as si queremos hacer referencia a un elemento contenido dentro de otro elemento
utilizaremos la /, tal como lo hacemos en URI.
<?xml version=1.0?>
<!DOCTYPE [
<!ELEMENT perif (monitores,impresoras)>
<!ELEMENT monitores (monitor)*>
<!ELEMENT monitor (#PCDATA)>
<!ATTLIST monitor marca CDATA #REQUIRED>
<!ELEMENT impresoras (impresora)*>
<!ELEMENT impresora (#PCDATA)>
<!ATTLIST impresora marca CDATA #REQUIRED>
]>
ACCESO A DATOS EN JAVA
31
993
<perif>
<monitores>
<monitor marca=Fujitsu>
23456723
</monitor>
</monitores>
<impresoras>
<impresora marca=Epson>
2345674423
</impresora>
</impresoras>
</perif>
As en el ejemplo mostrado, si estamos situados en la raz del documento XML y queremos referirnos al
contenido de impresora lo haremos de la siguiente manera:
Select=impresoras/impresora
Pero, XPATH adems nos brinda la posibilidad de referirnos a determinada repeticin de un elemento concreto
de un documento XML. As, si el documento XML fuera como el que sigue:
<?xml version=1.0?>
<!DOCTYPE [
<!ELEMENT perif (monitores+,impresoras+)>
<!ELEMENT monitores (monitor)*>
<!ELEMENT monitor (#PCDATA)>
<!ATTLIST monitor marca CDATA #REQUIRED>
<!ELEMENT impresoras (impresora)*>
<!ELEMENT impresora (#PCDATA)>
<!ATTLIST impresora marca CDATA #REQUIRED>
]>
ACCESO A DATOS EN JAVA
32
994
<perif>
<monitores>
<monitor marca=Fujitsu>
23456723
</monitor>
</monitores>
<impresoras>
<impresora marca=Epson>
2345674423
</impresora>
</impresoras>
<impresoras>
<impresora marca=Nec>
234474423
</impresora>
<impresora marca=Hp>
23456785674423
</impresora>
</impresoras>
<impresoras>
<impresora marca=Epson>
25674423
</impresora>
<impresora marca=Nec>
234114423
</impresora>
<impresora marca=HP>
234567113
</impresora>
<impresora marca=Lexmark>
5674423
</impresora>
</impresoras>
</perif>
ACCESO A DATOS EN JAVA
33
995
Con esta sentencia XPATH
Select=impresoras[3]/impresora[2]
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
ACCESO A DATOS EN JAVA
34
996
completamente diferente de la estructura de origen (rbol origen). Durante la construccin de la estructura
resultante los elementos de la estructura origen pueden ser reordenados, filtrados, adems de aadir otro
tipo de estructuras arbitrarias en la construccin.
A la transformacin expresada en el lenguaje XSLT es a lo que llamamos hoja de estilo.
Estructura de la hoja de estilo XSLT
El elemento stylesheet.
<xsl:stylesheet version=1.0
xmlns:xsl=http://www.w3.org/1999/XSL/Transform>
</xsl:stylesheet>
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>
ACCESO A DATOS EN JAVA
35
997
En este caso, los dos ejemplos son iguales y perfectamente vlidos, ya que <xsl:stylesheet> tiene el mismo
significado que <xsl:transform> para el analizador.
El elemento xsl:stylesheet puede contener cualquiera de los siguientes elementos:
- xsl:import
- xsl:include
- xsl:strip-space
- xsl:preserve-space
- xsl:output
- xsl:key
- xsl:decimal-format
- xsl:namespace-alias
- xsl:attribute-set
- xsl:variable
- xsl:param
- xsl:template
Estos elementos son tambin llamados elementos top-level. Veamos un ejemplo donde se declaran todos
estos elementos:
<xsl:stylesheet version=1.0 xmlns:xsl=http://www.w3.org/1999/XSL/Transform>
<xsl:import href=.../>
<xsl:include href=.../>
<xsl:strip-space elements=.../>
<xsl:preserve-space elements=.../>
<xsl:output method=.../>
<xsl:key name=... match=... use=.../>
<xsl:decimal-format name=.../>
<xsl:namespace-alias stylesheet-prefix=... result-prefix=.../>
<xsl:attribute-set name=...>
ACCESO A DATOS EN JAVA
36
998
...
</xsl:attribute-set>
<xsl:variable name=...>...</xsl:variable>
<xsl:param name=...>...</xsl:param>
<xsl:template match=...>
...
</xsl:template>
<xsl:template name=...>
...
</xsl:template>
</xsl:stylesheet>
El orden en el que los elementos top_level sean declarados no es significante, y es transparente para los
analizadores.
Existe tambin una sintaxis simplificada para aquellas hojas de estilo que tengan como funcin extraer
valores a partir del elemento raz del documento XML. Para ello, utilizamos la etiqueta <xsl:value-of select>,
tal como podemos ver en el ejemplo:
<xsl:version=1.0
xmlns:xsl=http://www.w3.org/1999/XSL/Transform
xmlns=http://www.w3.org/TR/xhtml1/strict>
<html>
<head>
<title>Informe Resumen de Gastos</title>
</head>
<body>
<p>Total Amount:
<xsl:value-of select=informe-gastos/total/></p>
</body>
</html>
ACCESO A DATOS EN JAVA
37
999
En el ejemplo podemos observar, en primer lugar, cmo estamos ya insertando HTML dentro de la hoja de
estilo, y cmo entre el cdigo HTML podemos encontrar los elementos XSL, como el elemento <xsl:value-of
select=informe-gastos/total/>, que es el encargado de extraer del documento XML el valor correspondiente
al elemento informe-gastos/total. Por supuesto, hacemos referencia a determinado valor, utilizando las
reglas semnticas del lenguaje XPATH.
El ejemplo anterior tambin podramos haberlo realizado de esta otra forma:
<xsl:stylesheet version=1.0
xmlns:xsl=http://www.w3.org/1999/XSL/Transform
xmlns=http://www.w3.org/TR/xhtml1/strict>
<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.
ACCESO A DATOS EN JAVA
38
1000
Veamos ahora un sencillo ejemplo completo:
El documento XML:
<?xml version=1.0?>
<?xml-stylesheet href=sitios.xsl type=text/xsl?>
<sitiosweb>
<sitioweb> www.disney.com </sitioweb>
<sitioweb> www.sony.com </sitioweb>
<sitioweb> www.fox.com </sitioweb>
<sitioweb> www.dreamworks.com </sitioweb>
</sitiosweb>
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>
ACCESO A DATOS EN JAVA
39
1001
Lo primero que tenemos que tener en cuenta es que siempre llamamos al fichero XML, y que es ste el que
se encarga de realizar la llamada a la hoja de estilo, tal como vimos en el ejemplo anterior:
<?xml version=1.0?>
<?xml-stylesheet href=sitios.xsl type=text/xsl?>
En el documento XML nos encontramos con varios elementos sitioweb, que se repiten, y que contienen
distintos valores. Si lo que pretendemos es que la hoja de estilo muestre los distintos valores, hemos de
realizar un bucle para que el navegador lea los distintos valores del elemento, tal como vemos:
<xsl:for-each select=sitiosweb/sitioweb>
<b>
<xsl:value-of />
</b><br/>
</xsl:for-each>
En el ejemplo podemos ver cmo creamos un bucle con la sentencia for-each del elemento
sitiosweb/sitioweb, recordemos el uso de XPATH en XSL. En la sentencia anterior habamos hecho un
template match=/, que nos situaba en la raz del rbol del documento XML, por tanto, al realizar el bucle
debemos situarnos en el nodo correcto del rbol.
Veamos ahora otro ejemplo:
El documento XML:
<?xml version=1.0?>
<?xml-stylesheet href=sitios2.xsl type=text/xsl?>
<sitiosweb>
<sitioweb href=http://www.disney.com
titulo=Disney/>
<sitioweb href=http://www.sony.com
titulo=Sony pictures/>
<sitioweb href=http://www.fox.com
titulo=Twenty Century Fox/>
<sitioweb href=http://www.dreamworks.com
titulo=Dreamworks/>
</sitiosweb>
ACCESO A DATOS EN JAVA
40
1002
El documento XSL:
<?xml version=1.0?>
<xsl:stylesheet xmlns:xsl=http://www.w3.org/TR/WD-xsl>
<xsl:template match=/>
<HTML>
<HEAD>
<TITLE> </TITLE>
</HEAD>
<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.
ACCESO A DATOS EN JAVA
41
1003
Elementos XSL
Veamos ahora los elementos ms importantes del lenguaje XSL:
<xsl:stylesheet> </xsl:stylesheet>
Como hemos visto con anterioridad, es el elemento raz de cualquier hoja de estilo XSL.
<xsl:template match=....> </xsl:template>
Tiene como funcin la definicin de un patrn de bsqueda para un elemento determinado o conjunto de
ellos.
<xsl:apply-template select=.....> </xsl:apply-template>
Hace que el procesador XML busque la plantilla adecuada para el nodo seleccionado.
<xsl:value-of select=....> </xsl:value-of>
Recoge el valor como texto del nodo seleccionado.
<xsl:attribute name=...> </xsl:attribute>
Crea un atributo dentro del documento XSL.
<xsl:element name=....> </xsl:element>
Crea un elemento dentro del documento XSL.
<xsl:for-each order-by=.... select=...> </xsl:for-each>
Crea un bucle de repeticin del nodo seleccionado. Tomemos como ejemplo el siguiente documento XML:
<clientes>
<cliente>
<nombre>...</nombre>
<pedido>...</pedido>
<pedido>...</pedido>
</cliente>
<cliente>
<nombre>...</nombre>
<pedido>...</pedido>
<pedido>...</pedido>
</cliente>
</clientes>
ACCESO A DATOS EN JAVA
42
1004
El siguiente documento XSL transformara la informacin contenida en el documento XML en un documento
HTML formateado, donde la informacin se incluira en filas de una tabla.
<xsl:template match=/>
<html>
<head>
<title>Clientes</title>
</head>
<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>
ACCESO A DATOS EN JAVA
43
1005
Crea un condicional (la condicin se sita en el valor del atributo test). El siguiente ejemplo pondra color
a una tabla, fila s, fila no, con el color amarillo.
<xsl:template match=elemento1>
<tr>
<xsl:if test=position() mod 2 = 0>
<xsl:attribute
name=bgcolor>yellow</xsl:attribute>
</xsl:if>
<xsl:apply-templates/>
</tr>
</xsl:template>
<xsl:choose> </xsl:choose>
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>
ACCESO A DATOS EN JAVA
44
1006
Tambin, dentro del elemento choose podemos encontrar el elemento <xsl:otherwise> </xsl:otherwise> para
referirnos a las opciones que no coincidan con ninguna de las condiciones contenidas en el elemento
choose.
<xsl:choose>
<xsl:when test=...> </xsl:when>
<xsl:when test=...> </xsl:when>
<xsl:when test=...> </xsl:when>
<xsl:otherwise> </xsl:otherwise>
</xsl:choose>
El siguiente ejemplo muestra cmo enumerar diferentes elementos en una lista ordenada, usando nmeros,
letras o nmeros romanos, dependiendo de la profundidad a la que se encuentre el nodo.
<xsl:template match=listaordenada/elementosimple>
<fo:list-item indent-start=2pi>
<fo:list-item-label>
<xsl:variable name=level select=
count(ancestor::listaordenada) mod 3/>
<xsl:choose>
<xsl:when test=$level=1>
<xsl:number format=i/>
</xsl:when>
<xsl:when test=$level=2>
<xsl:number format=a/>
</xsl:when>
<xsl:otherwise>
<xsl:number format=1/>
</xsl:otherwise>
</xsl:choose>
<xsl:text>. </xsl:text>
</fo:list-item-label>
ACCESO A DATOS EN JAVA
45
1007
<fo:list-item-body>
<xsl:apply-templates/>
</fo:list-item-body>
</fo:list-item>
</xsl:template>
<xsl:copy> </xsl:copy>
El elemento xsl:copy constituye una manera sencilla para copiar el nodo actual. Simplemente, haciendo
una llamada al elemento, el nodo actual es copiado, as como el nombre del nodo actual, pero los atributos
y subelementos del nodo actual no son copiados automticamente.
<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>
ACCESO A DATOS EN JAVA
46
1008
En el caso de que no especifiquemos una posicin mediante el atributo value=posicin(), entonces el
resultado ser introducido en la posicin actual del nodo del rbol de resultados.
El elemento xsl:number tiene adems otros atributos, como level, count y from.
El ejemplo siguiente numerar todos los elementos H4 con una etiqueta de texto dividida en tres partes:
<xsl:template match=H4>
<fo:block>
<xsl:number level=any from=H1 count=H2/>
<xsl:text>.</xsl:text>
<xsl:number level=any from=H2 count=H3/>
<xsl:text>.</xsl:text>
<xsl:number level=any from=H3 count=H4/>
<xsl:text> </xsl:text>
<xsl:apply-templates/>
</fo:block>
</xsl:template>
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 />
ACCESO A DATOS EN JAVA
47
1009
<xsl:apply-templates/>
</fo:block>
</xsl:template>
<xsl:template match=apendice//titulo>
<fo:block>
<xsl:number level=multiple
count=apendice|seccion|subseccion
format=A.1 />
<xsl:apply-templates/>
</fo:block>
</xsl:template>
<xsl:sort> </xsl:sort>
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>
<nombre>
<nombredepila>Juan</nombredepila>
<apellido>Perez</apellido>
</nombre>
...
</empleado>
</empleados>
ACCESO A DATOS EN JAVA
48
1010
Para obtener como salida una lista de empleados ordenada por nombre:
<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))
ACCESO A DATOS EN JAVA
49
1011
- key(string, object)
Permite a los documentos XML, que contienen atributos del tipo ID, IDREF, IDREFS realizar referencias
cruzadas.
<xsl:key name=idkey match=div use=@id/>
- format-number(number, string, string?)
Realiza la conversin de un nmero a una cadena, utilizando un formato dado.
<xsl:decimal-format
name = qname
decimal-separator = char
grouping-separator = char
infinity = string
minus-sign = char
NaN = string
percent = char
per-mille = char
zero-digit = char
digit = char
pattern-separator = char />
- current()
Devuelve el nodo actual donde estamos situados. Este ejemplo:
<xsl:value-of select=current()/>
Es igual a este otro:
<xsl:value-of select=./>
- unparsed-entity-uri(string)
Devuelve el URI de una determinada entidad dentro del nodo actual.
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.
ACCESO A DATOS EN JAVA
50
1012
Mensajes
<xsl:message
terminate = yes | no>
<! Content: template >
</xsl:message>
La instruccin xsl:message enva un mensaje para que sea interpretado por el analizador de XSLT.
Generalmente, el procesador XSLT lanzar una pantalla de alerta al recibir la instruccin xsl:message.
<xsl:template name=mensajepuntual>
<xsl:param name=nombremensaje/>
<xsl:message>
<xsl:value-of select=
$mensajes/mensaje[@name=$nombremensaje]/>
</xsl:message>
</xsl:template>
ACCESO A DATOS EN JAVA
51
1013
MDULO: ACCESO A DATOS EN JAVA Caso prctico
Realiza un programa Java que va a consistir en la realizacin de una Aplicacin de Base de Datos. La
interfaz grfica de usuario principal ser la siguiente:
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
ACCESO A DATOS EN JAVA
Caso prctico
1
1014
MDULO: ACCESO A DATOS EN JAVA Caso prctico
Implementar las opciones del men principal:
Consultas:
Actualizar: abrir una ventana Swing con el siguiente formato:
El botn Guardar, almacena un registro en la tabla.
Query: realiza una consulta de la tabla y la vuelca en un TextArea
ACCESO A DATOS EN JAVA
Caso prctico
1
1015
Transacciones:
Commit: realiza la insercin de un registro (el que tu quieras) sobre la tabla Articulos (usando el
comando commit)
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.
ACCESO A DATOS EN JAVA
Caso prctico
2
1016
Dado el siguiente documento XML, determina los elementos que forman parte del mismo.
<coches>
<coche marca=Mercedes modelo=C320 color=verde>
M-9999-XU
</coche>
<coche marca=Opel modelo=Vectra color=Blanco>
M-8888-VO
</coche>
</coches>
ACCESO A DATOS EN JAVA
Caso prctico
1
1017
Dado el siguiente documento XML, determina los atributos que forman parte del elemento coche.
<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>
ACCESO A DATOS EN JAVA
Caso prctico
1
1018
Dados los siguientes documentos XML, determina las diferencias que existen entre ellos.
Documento 1:
<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>
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>
ACCESO A DATOS EN JAVA
Caso prctico
1
1019
Realiza el documento XML que coincida con la estructura que se detalla a continuacin.
ACCESO A DATOS EN JAVA
Caso prctico
1
1020
Representa las siguientes entidades y sus valores en un documento XML.
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
ACCESO A DATOS EN JAVA
Caso prctico
1
1021
Dado el siguiente documento XML, escribe su correspondiente DTD.
<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>
ACCESO A DATOS EN JAVA
Caso prctico
1
1022
Dada la siguiente DTD escribe un documento XML vlido y bien formado, que coincida con la DTD.
<?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>
]>
ACCESO A DATOS EN JAVA
Caso prctico
1
1023
Dado el siguiente documento XML escribe su DTD.
<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>
ACCESO A DATOS EN JAVA
Caso prctico
1
1024
ACCESO A DATOS
EN JAVA
Acceso a ficheros
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
1. Manejo de Ficheros
Objetivos
- Conocer cmo se realiza el manejo de ficheros.
- Identificar en qu consiste el Filtro de Streams y las clases para
construir filtros.
- Conocer cmo serializar objetos.
File
La clase que define los ficheros es File. Esta clase representa un fichero o directorio dentro del sistema de
ficheros.
1: File f1 = new File (c:\\windows\\win.exe);
2: File dir = new File (c:\\windows);
3: File f2 = new File (dir,win.exe);
Los constructores de File son los siguientes:
3
ACCESO A DATOS EN JAVA
i
1027
Tiene las siguientes constantes a nivel de clase y contienen respectivamente los smbolos que se utilizan
para separar los paths dependiendo de la plataforma en que se est.
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
String <File>.GetCanonicalPath() throws IOException
Devuelve el path normalizado. Lanza excepciones ya que comprueba la existencia del fichero o directorio
dentro del sistema de ficheros.
4
ACCESO A DATOS EN JAVA
i
1028
boolean <File>.isFile()
Devuelve true si es fichero.
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>.renameTo (String name)
Renombra el fichero o directorio.
boolean <File>.delete()
Elimina el fichero o directorio.
5
ACCESO A DATOS EN JAVA
i
1029
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:
1: FileInputStream (String Filename) throws FileNotFoundException
2: FileInputStream (File Filename) throws FileNotFoundException
Los mtodos ms importantes que describen esta clase son los siguientes:
int <InputStream>.read() throws IOException:
Realiza la lectura del fichero.
Protected <FileInputStream>.finalize() throws IOException:
redefine este mtodo que procede de 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.
6
ACCESO A DATOS EN JAVA
i
1030
FileOutputStream
La clase FileOutputStream tambin sirve para acceder al contenido de los ficheros. Realiza la escritura de
los datos del fichero.
Los constructores son los siguientes:
1: FileOutputStream (String Filename) throws IOException.
Con este constructor se empieza desde el principio en el fichero, aunque el fichero tenga datos.
2: FileOutputStream(String Filename, boolean append) throws IOException.
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
7
ACCESO A DATOS EN JAVA
i
1031
i
Ejemplo
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.
8
ACCESO A DATOS EN JAVA
i
1032
SequenceInputStream
La clase SequenceInputStream permite concatenar varios Streams en uno solo, de forma que cuando
recorremos el Stream resultante, se leer consecutivamente uno detrs de otro.
Para concatenar tienen dos constructores:
1: SequenceInputStream (InputStream s1, InputStream s2):
Concatena dos cadenas.
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();
}
9
ACCESO A DATOS EN JAVA
i
1033
2. Filtro de Streams
Los Filtros de Streams permiten modificar los datos que estn dentro del Stream. Para construir filtros se
tienen las siguientes clases:
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).
10
ACCESO A DATOS EN JAVA
i
1034
Para realizar el acceso de estas clases se utilizan los siguientes atributos que apuntan al Stream ya creado:
- protected InputStream <FileInputStream> in;
- protected OutputStream <FileOutputStream> out;
Los atributos son protected para que slo puedan acceder las clases FilterOutputStream y FilterInputStream
y sus derivadas.
BufferedInputStream y BufferedOutputStream
Las clases BufferedInputStream y BufferedOutputStream sirven para poner un buffer (memoria RAM) tanto
para los Streams de entrada como para los de salida, antes de pasarlo al dispositivo final.
En el constructor de estas clases se pasa el Stream y al Stream se le aade un buffer:
- protected byte [] <BufferedOutputStream> buf; Array de datos a cargar en el buffer.
- protected int <BufferedOutputStream> count;Indica hasta dnde est cargado el buffer.
Cuando el buffer est lleno se envan automticamente los datos cargados, al fichero.
11
ACCESO A DATOS EN JAVA
i
1035
Utilizacin de buffers
Para forzar que se vace de informacin el buffer se tiene el mtodo flush() de la clase base.
- protected [] byte <BufferedInputStream> buf; Array de datos del buffer.
- protected int <BufferedInputStream> count; Indica hasta dnde est cargado el buffer.
- protected int <BufferedInputStream> pos; Indica la siguiente posicin a liberar del buffer.
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.
12
ACCESO A DATOS EN JAVA
i
1036
DataInputStream y DataOutputStream
DataInputStream y DataOutputStream son filtros que permiten solucionar el problema de escribir y leer datos
que no sean del tipo fundamental byte.
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.
13
ACCESO A DATOS EN JAVA
i
1037
Pipes de Streams
Pipes de Streams es una forma de comunicar hilos. Para la comunicacin con pipes existen 2 tipos de hilos:
1. Hilo productor que enva datos al pipe.
2. Hilo consumidor que recibe datos del pipe.
Constructores de la Pipes de Streams
Los Pipes de Stream tienen los siguientes constructores:
Con estos constructores se puede enlazar de la siguiente forma:
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
ACCESO A DATOS EN JAVA
1038
Ejemplo
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.
15
ACCESO A DATOS EN JAVA
i
1039
3. Serializacin de Objetos
Como hemos visto anteriormente, en un flujo se pueden escribir datos fundamentales. Ahora tambin se
podrn enviar y recoger objetos de un Stream. Para hacer esto, habr que serializar el objeto, es decir,
convertir el objeto en una serie de bytes. Posteriormente se podr introducir en el Stream.
Se tienen dos clases de persistencias:
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.
16
ACCESO A DATOS EN JAVA
i
1040
NotSerializableException
No se permite por defecto serializar los objetos ya que cualquiera puede serializarlos. Para que un objeto
se pueda serializar tiene que implementar el interface Serializable.
Interface Serializable {}
Acta nicamente como un flag para comprobar si un objeto se quiere o no serializar.
Class Punto implements Serializable { // Objeto Serializable.
. . .
}
Si el objeto no es serializable y se intenta serializar en ejecucin se lanza la siguiente excepcin:
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.
17
ACCESO A DATOS EN JAVA
i
1041
Se puede comprobar que se utiliza el operador cast con el mtodo readObject ya que este mtodo devuelve
un objeto tipo Object.
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
ACCESO A DATOS EN JAVA
1042
- Mtodos para serializar y deserializar de forma estndar: recogen los atributos
de la clase y operan con ellas.
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
19
ACCESO A DATOS EN JAVA
i
1043
Cuando se serializa un objeto de clase derivada, primero se serializan los atributos de la base y
posteriormente los atributos de la derivada.
Cuando se deserializa un objeto de clase derivada, primero se hace con los atributos de la base y
seguidamente con los atributos de la derivada.
Cuando hay una clase base que implementa Serializable todas las derivadas implementarn Serializable
(Agregacin). Si la derivada implementa Serializable la base puede implementarla o no.
Gestin de Versiones
En Java, por defecto, si la clase de serializacin y la clase de deserializacin no coinciden no se puede
recoger el objeto. La excepcin que se lanza cuando se produce este error es la siguiente:
InvalidCastException
Ejemplo
class Prueba implements Serializable {
int numero = 0;
. . .
}
. . . se modifica la clase . . .
class Prueba implements Serializable {
int numero = 0;
void NoHaceNada () {};
}
A pesar de que el nmero de atributos no ha cambiado, las clases se consideran incompatibles.
20
ACCESO A DATOS EN JAVA
i
1044
Para comprobar las versiones de las clases en Java, Java dispone del nmero SUID (Serial Unique ID) que es
diferente para cada una de las clases que se crean.
Este nmero SUID lo genera a partir de los bytecode de la clase utilizando la funcin hash(). Si se modifica
algo en una clase ya generada la funcin hash() genera un nuevo nmero SUID para la clase modificada.
C:\> serialver <Clase> Devuelve el nmero SUID de una clase
Para mantener la compatibilidad entre las distintas versiones de una clase, habr que declarar la siguiente
constante dentro de la clase:
static final long serialVersionUID = 6290341731103L; // serialver
El valor de serialVersionUID se corresponder con la primera versin de la clase. Normalmente el nmero SUID
se pone desde la primera clase generada.
Las clases Reader y Write
Las clases Reader y Write sirven para trabajar con Streams de UNICODE. Normalmente se utilizan para
Streams de texto. Todos los anteriores sirven para flujo binario.
Caractersticas:
- Reader y Writer son clases abstractas.
- Reader se corresponde con InputStream, tiene todos los mtodos descritos anteriormente en
InputStream.
Adems tiene el siguiente mtodo:
boolean <Reader>.ready()
- Devuelve true en caso de que la prxima lectura de un solo byte se quede bloqueada.
- Writer se corresponde a OutputStream.
21
ACCESO A DATOS EN JAVA
i
1045
4. Clases para trabajar con array de caracteres y objetos String
CharArrayReader y CharArrayWriter
CharArrayReader y CharArrayWriter sirven para trabajar con array de caracteres.
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.
22
ACCESO A DATOS EN JAVA
i
1046
StringReader y StringWriter
StringReader y StringWriter son igual que los anteriores slo que trabajan con objetos String.
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.
23
ACCESO A DATOS EN JAVA
i
1047
i
InputStreamReader y OutputStreamReader
En la conversin de cdigo UNICODE a ASCII y viceversa, las clases InputStreamReader y OutputStreamReader,
actan como filtro para la traduccin.
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);
24
ACCESO A DATOS EN JAVA
i
1048
OutputStreamReader
Realiza la conversin de UNICODE a ASCII.
- OutputStreamWriter (OutputStream os)
- OutputStreamWriter (OutputStream os, String encode)
Igual que lo definido en InputStreamReader.
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
ACCESO A DATOS EN JAVA
1049
5. Resumen
Has llegado al final de este recurso formativo que denominamos Acceso a Ficheros
En esta leccin hemos estudiado los siguientes contenidos:
26
ACCESO A DATOS EN JAVA
i
1050
A travs del siguiente documento realiza su correspondiente documento XSL, de manera que la salida
en el navegador sea una tabla en la que la primera columna se corresponda con el ttulo de la cancin,
y la segunda columna con el autor de la cancin, para todas las canciones contenidas en el documento
XML.
<?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>
ACCESO A DATOS EN JAVA
Caso prctico
1
1051
Para el siguiente documento XML escribe su correspondiente hoja de estilo, de manera que se pueda
visualizar en el navegador una tabla con el ttulo de la cancin, el autor y el ao por cada uno de los
discos incluidos en el documento XML.
<?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/>
ACCESO A DATOS EN JAVA
Caso prctico
1
1052
<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>
<discos titulo=MAGICAL MISTERY TOUR discografica=EMI agno=1967>
<canciones>
<cancion id= b1 titulo=Magical Mistery Tour agno=1967 autor=Lennon/>
<cancion id= b2 titulo=The fool on the hill agno=1967 autor=Mcartney/>
<cancion id= b3 titulo=Flying agno=1967 autor=Lennon/>
<cancion id= b4 titulo=Blue Jay Way agno=1967 autor=Harrison/>
<cancion id= b5 titulo=Your Mother should know agno=1967 autor=Lennon/>
<cancion id= b6 titulo=I am the walrus agno=1967 autor=Lennon/>
<cancion id= b7 titulo=Hellow Goodbye agno=1967 autor=Lennon/>
<cancion id= b8 titulo=Strawberry Fields Forever agno=1967 autor=Mcartney/>
<cancion id= b9 titulo=Penny Lane agno=1967 autor=Lennon/>
<cancion id= b10 titulo=Baby youre a rich man agno=1967 autor=Mcartney/>
<cancion id= b11 titulo=All you need is love agno=1967 autor=Mcartney/>
</canciones>
</discos>
</beatles>
ACCESO A DATOS EN JAVA
Caso prctico
2
1053
Este libro fue distribuido por cortesa de:
Para obtener tu propio acceso a lecturas y libros electrnicos ilimitados GRATIS
hoy mismo, visita:
http://espanol.Free-eBooks.net
Comparte este libro con todos y cada uno de tus amigos de forma automtica,
mediante la seleccin de cualquiera de las opciones de abajo:
Para mostrar tu agradecimiento al autor y ayudar a otros para tener
agradables experiencias de lectura y encontrar informacin valiosa,
estaremos muy agradecidos si
"publicas un comentario para este libro aqu".
INFORMACIN DE LOS DERECHOS DEL AUTOR
Free-eBooks.net respeta la propiedad intelectual de otros. Cuando los propietarios de los derechos de un libro envan su trabajo a Free-eBooks.net, nos estn dando permiso para distribuir dicho
material. A menos que se indique lo contrario en este libro, este permiso no se transmite a los dems. Por lo tanto, la redistribucin de este libro sn el permiso del propietario de los derechos, puede
constituir una infraccin a las leyes de propiedad intelectual. Si usted cree que su trabajo se ha utilizado de una manera que constituya una violacin a los derechos de autor, por favor, siga nuestras
Recomendaciones y Procedimiento de Reclamos de Violacin a Derechos de Autor como se ve en nuestras Condiciones de Servicio aqu:
http://espanol.free-ebooks.net/tos.html

You might also like