You are on page 1of 1053

Pro ram cin ogr mac n en Ja a n ava

V Volme 1 en

Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

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.

Desarro ollador de S oftware Especialista en Tecnolog as Java (IFCD04TIC) S e g )

Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

INTRODUCCIN
MODALIDAD
Presencial

TOTAL DAS
4

DA
1 2 3 4

CONTENIDOS TERICOS
Introduccin del curso y sistemas de evaluacin. Explicacin de los contenidos tericos Explicacin de los contenidos tericos Explicacin de los contenidos tericos

Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

MODALIDAD
TELEFORMACION

TOTAL DAS 38

CONTENIDOS TERICOS

MDULO 1. TCNICAS DE PROGRAMACIN ESTRUCTURADA


1. LA INFORMTICA Y EL MANEJO DE LA INFORMACIN. 1.1. 1.2. 1.3. 1.4. 1.5. 1.6. La informacin y el tratamiento mecanizado de la informacin: La informtica. El ordenador y sus componentes. Procesamiento de la informacin. Tipos de datos bsicos. Sistemas de Numeracin. 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. 3.2. 3.3. 3.4. Mtodos de diseos deductivos e inductivos. Diseo TOP DOWN. Instrucciones secuenciales. Instrucciones alternativas (bifurcaciones). Instrucciones repetitivas (bucles).

Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

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.

Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

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. 3.2. 3.3. 3.4. 3.5. El Java Development Kit JDK 6.0. Configuracin de variables de entorno. Nociones bsicas de sintaxis Java. Creacin del primer programa Java. Utilizacin de un entorno de desarrollo IDE.

Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

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. 6.2. 6.3. 6.4. 6.5. Definicin formal de clase y objeto. Creacin de objetos a partir de clases. Implementacin de mtodos y atributos de una clase. Mtodos estticos. Modificadores de acceso.

7. CLASES DE TIPO JAVABEANS. 8. TIPOS GENRICOS. 8.1. 8.2. 8.3. 8.4. La clase Object y las conversiones de tipos. Definicin de tipos genricos. Ventajas. Comodines y restricciones de tipos. Mtodos genricos.

Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

MDULO 4. UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


1. IMPORTAR CLASES Y PAQUETES EXTERNOS. 2. EL PAQUETE JAVA.LANG. 2.1. 2.2. 2.3. 2.4. Manipulacin de cadenas con la clase String. Operaciones matemticas con la clase Math. Clases de envoltorio. 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. 4.2. 4.3. 4.4. La clase PrintStream para salida de datos. Lectura de caracteres con InputStream. Lectura de cadenas con BufferedReader. Lectura de datos con la clase Scanner.

5. GESTIN DE COLECCIONES. 5.1. Las clases de coleccin Java.util.ArrayList y Java.util.Hashtable. 5.2. Enumeraciones e iteraciones.

10

10

Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

MDULO 5. PROGRAMACIN ORIENTADA A OBJETOS CON JAVA


1. CONSTRUCTORES. 2. SOBRECARGA DE MTODOS. 3. HERENCIA. 3.1. 3.2. 3.3. 3.4. 3.5. 3.6. 3.7. Concepto de herencia. Caractersticas de la herencia en Java. Ejecucin de constructores en la herencia. Uso de super y this. Sobreescritura de mtodos. Uso de modificadores final y protected. Herencia y tipos genricos.

4. CLASES ABSTRACTAS. 5. POLIMORFISMO. 6. INTERFACES.

11

11

Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

MDULO 6. EXCEPCIONES
1. CLASES DE EXCEPCIN. 2. EXCEPCIONES MARCADAS Y NO MARCADAS. 3. CONTROL DE EXCEPCIONES. 3.1. Utilizacin de los bloques try, catch, finally. 3.2. Declaracin de una excepcin. 3.3. Lanzamiento de excepciones. 4. EXCEPCIONES PERSONALIZADAS.

12

12

Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

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

13

Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

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. 3.2. 3.3. 3.4. Creacin de conexiones. Ejecucin de consultas SQL. Manipulacin de resultados. 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

14

Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

TUTORA
MODALIDAD
Presencial

TOTAL DAS
2

DA
42 43

CONTENIDOS TERICOS
Resolucin de dudas Resolucin de dudas

15

15

Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

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. 2.2. 2.3. 2.4. Herencia de la clase Thread. Sobreescritura del mtodo run(). Inicio de una tarea. Utilizacin de la interfaz Runnable.

3. PRINCIPALES MTODOS PARA EL CONTROL DE LA MULTITAREA. 4. SINCRONIZACIN DE PROCESOS.

16

16

Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

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. 3.2. 3.3. 3.4. 3.5. Creacin de un socket. La clase Socket. Lectura y escritura a travs de un socket. Creacin de sockets de servidor. La clase ServerSocket. Escucha de peticiones en un socket del servidor. Principales mtodos de la clase ServerSocket.

17

17

Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

MDULO 11. ARQUITECTURA DE APLICACIONES JAVA EE


1. EL MODELO DE TRES CAPAS EN INTERNET. 1.1. 1.2. 1.3. 1.4. Caractersticas de las aplicaciones de tres capas. Interaccin cliente capa intermedia. El Protocolo HTTP. 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

18

Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

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. 5.2. 5.3. 5.4. La etiqueta <form> y sus atributos principales. Los controles de texto. Los controles de seleccin. Controles tipo botn.

6. INCLUSIN DE SCRIPTS EN UNA PGINA WEB. 7. SINTAXIS BSICA DE JAVASCRIPT. 7.1. 7.2. 7.3. 7.4. 7.5. Variables Operadores. Instrucciones de control. Funciones del lenguaje. Principales Objetos Java Script.

19

19

Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

MDULO 13. DESARROLLO DE APLICACIONES WEB CON SERVLETS


1. CARACTERSTICAS DE UN SERVLET. 2. CREACIN DE UN SERVLET. 2.1. 2.2. 2.3. 2.4. Extensin de la clase HttpServlet. Sobreescritura de los mtodos del ciclo de vida de un servlet. Creacin del primer servlet. 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

20

Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

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

21

Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

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

22

Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

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

23

Desarrollador de Software Especialista en Tecnologas Java (IFCD04TIC)

TUTORA
MODALIDAD
Presencial

TOTAL DAS
1

DA
64

CONTENIDOS TERICOS
Resolucin de dudas

24

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

La informtica y el manejo de la informacin


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.

i
3
29

La informtica y el manejo de la informacin


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

i
4
30

La informtica y el manejo de la informacin


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,

i
5
31

La informtica y el manejo de la informacin


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

i
6
32

La informtica y el manejo de la informacin


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.

i
7
33

La informtica y el manejo de la informacin


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).

i
8
34

La informtica y el manejo de la informacin


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.

i
9
35

La informtica y el manejo de la informacin


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.

i
10
36

La informtica y el manejo de la informacin


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.

i
11
37

La informtica y el manejo de la informacin


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

i
12
38

La informtica y el manejo de la informacin


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.

i
13
39

La informtica y el manejo de la informacin


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).

i
14
40

La informtica y el manejo de la informacin


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.

Datos en memoria antes de la ejecucin del programa

Datos en memoria despus de la ejecucin del programa

i
15
41

La informtica y el manejo de la informacin


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:

i
16
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

Sistemas de numeracin y codificacin de la informacin


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. 0123456789

i
3
45

Sistemas de numeracin y codificacin de la informacin


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:

i
4
46

Sistemas de numeracin y codificacin de la informacin


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: 0123456789 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:

i
5
47

Sistemas de numeracin y codificacin de la informacin


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

i
6
48

Sistemas de numeracin y codificacin de la informacin


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.

i
7
49

Sistemas de numeracin y codificacin de la informacin


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

i
8
50

Sistemas de numeracin y codificacin de la informacin


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
51

Sistemas de numeracin y codificacin de la informacin


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
52

Sistemas de numeracin y codificacin de la informacin


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.

i
11
53

Sistemas de numeracin y codificacin de la informacin


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.

i
12
54

Sistemas de numeracin y codificacin de la informacin


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

i
13
55

Sistemas de numeracin y codificacin de la informacin


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
56

Sistemas de numeracin y codificacin de la informacin


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.

i
15
57

Sistemas de numeracin y codificacin de la informacin


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:

i
16
58

Sistemas de numeracin y codificacin de la informacin


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

i
17
59

Sistemas de numeracin y codificacin de la informacin

Otro ejemplo de transformacin directa apoyndonos en la tabla de equivalencias de arriba, 4 bits por cada hexadecimal.

i
18
60

Sistemas de numeracin y codificacin de la informacin


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.

i
19
61

Sistemas de numeracin y codificacin de la informacin


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.

i
20
62

Sistemas de numeracin y codificacin de la informacin


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.

i
21
63

Sistemas de numeracin y codificacin de la informacin


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
64

Sistemas de numeracin y codificacin de la informacin


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.

i
23
65

Sistemas de numeracin y codificacin de la informacin


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.

i
24
66

Sistemas de numeracin y codificacin de la informacin


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
67

Sistemas de numeracin y codificacin de la informacin

Cmo se traduce la informacin en Cdigos ASCII y EBCDIC A continuacin veamos cmo se traduce la informacin en los diferentes cdigos que acabamos de ver. La siguiente tabla nos muestra cmo est subdividido un OCTETO de cara a la construccin de los distintos valores de los distintos cdigos existentes:

i
26
68

Sistemas de numeracin y codificacin de la informacin


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

i
27
69

Sistemas de numeracin y codificacin de la informacin


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.

i
28
70

Sistemas de numeracin y codificacin de la informacin


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:

i
29
71

Sistemas de numeracin y codificacin de la informacin


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 + = Signo = Signo absoluto =

C D F

1100 1101 1111

i
30
72

Sistemas de numeracin y codificacin de la informacin


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).

i
31
73

Sistemas de numeracin y codificacin de la informacin


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: 4 Octetos: 8 Octetos: Media palabra (de 1 a 4 dgitos) Una palabra (de 5 a 9 dgitos) 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:

i
32
74

Sistemas de numeracin y codificacin de la informacin


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.

i
33
75

INTRODUCCIN A LA PROGRAMACIN

76

NDICE
INTRODUCCIN A LA PROGRAMACIN
1. Estructura de un Programa: Datos e Instrucciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 2. Flujogramas y Pseudocdigos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 3. Elementos bsicos de programacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15 4. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .29

77

Introduccin a la programacin
1. Estructura de un Programa: Datos e Instrucciones
Objetivos

A lo largo de ste te mostraremos qu es un programa y sus caractersticas. Programas del ordenador Un ordenador, bsicamente es capaz de realizar solo tres cosas: operaciones aritmticas muy bsicas, operaciones de tipo lgico (comparar dos valores) y almacenar o recuperar (copiar) informacin. Estas tres operaciones convenientemente ligadas entre s forman lo que llamamos programas.

i
3
78

Introduccin a la programacin
Un programa en definitiva es un conjunto de rdenes que ejecuta el ordenador para conseguir un objetivo. Las rdenes se dan a travs de un lenguaje de programacin (cdigos). Esencialmente un programa es un conjunto de instrucciones destinadas a realizar una tarea. De forma general este conjunto de instrucciones toma unos datos de entrada y devuelve unos datos de salida, unos resultados. Un ordenador funciona bajo control de un programa que debe estar almacenado en la unidad de memoria masiva, como puede ser un disco duro, un disquete, un disco ptico, etc. Este software, o parte de l, es cargado en la memoria electrnica del ordenador para su posterior ejecucin. Fases del diseo y creacin de programas Puesto que el objetivo de un programa es realizar una tarea, sta debe ser hecha en un tiempo finito. Adems es razonable pensar que dados unos mismos datos de entrada al programa siempre se obtengan unos mismos datos de salida, ya que el programa est destinado a realizar una tarea definida explcitamente. As pues, para nuestros propsitos, un programa debe cumplir con el algoritmo a partir del cual se diseo. Cualquier conjunto de instrucciones que no cumpla esto ser considerado como un programa incorrecto o simplemente no ser considerado como tal.

i
4
79

Introduccin a la programacin
Especificaciones de los programas El programador debe establecer el conjunto de especificaciones que debe contener el programa y las entradas, salidas y algoritmos de resolucin que incluirn las tcnicas para obtener las salidas a partir de las entradas. Se debe establecer de dnde provienen las entradas al programa, es decir, los dispositivos de entrada como el teclado, disco, etc. Las salidas de datos se deben presentar en dispositivos de salida como impresora, monitor o disco.

i
5
80

Introduccin a la programacin
Instrucciones de los programas El proceso de algoritmo o de codificacin del programa consiste en definir las acciones o instrucciones que resolvern el problema. Las instrucciones se deben escribir y almacenar en memoria en el mismo orden en el que han de ejecutarse es decir en secuencia. Un programa puede ser lineal o no lineal, el lineal es el que las instrucciones se den en secuencia sin bifurcacin, no lineal es si tienen bifurcacin. Tipos de instrucciones Las instrucciones son las acciones bsicas que se pueden implementar de manera general en un algoritmo y que esencialmente soportan todos los lenguajes (son independientes del lenguaje de codificacin). Instrucciones Instrucciones Instrucciones Instrucciones de de de de inicio/fin asignacin lectura escritura

Para disear o crear nuestros programas podemos recurrir a dos herramientas bsicas, los diagramas de flujo y los pseudocdigos que veremos a continuacin.

i
6
81

Introduccin a la programacin
2. Flujogramas y Pseudocdigos
Diagrama de flujo: Ordinograma Uno de los procedimientos ms conocidos y utilizados para resolver problemas se llama Diagrama de Flujo o Flujogramas. Hasta la dcada de los 90 era uno de las ms usados y an cuando en la actualidad esta tcnica no es la ms adecuada, debido a su sencillez es una de las ms utilizadas. Uno de los diagramas de flujos ms utilizado es el ordinograma.

Ordinograma es un diagrama de flujos que muestra la secuencia lgica y detallada de las operaciones que necesitamos para la realizacin de un programa.

En programacin, antes de escribir un programa en un lenguaje de programacin especfico (C, Pascal, COBOL, etc.), es conveniente disear un algoritmo para definir los pasos o acciones que debe llevar a cabo el programa en cuestin. Pues bien, dicho algoritmo se suele disear utilizando pseudocdigo o, tambin, un ordinograma. Mediante un ordinograma se puede representar el mismo algoritmo, pero, de manera grfica. Como suele decirse una imagen vale ms que mil palabras.

i
7
82

Introduccin a la programacin
Caractersticas de un Ordinograma El Ordinograma es independiente del lenguaje de programacin que usemos y debe estar compuesto por:

Los elementos bsicos para crear Ordinogramas, son bastante intuitivos y se entienden con bastante facilidad. Observa el resumen de los smbolos ms importantes.

i
8
83

Introduccin a la programacin
Reglas de un Ordinograma A la hora de hacer un Ordinograma, se deben respetar ciertas reglas: - Todos los smbolos utilizados deben estar unidos por lneas de flujo solo horizontales y/o verticales. - No se pueden cruzar las lneas de flujo. Evitar los cruces. - No deben quedar lneas de flujo sin conectar. - A un smbolo de proceso pueden llegarle varias lneas de flujo pero slo puede salir una de l. - Al smbolo de inicio no puede llegarle ninguna lnea de flujo - De un smbolo de fin no puede salir ninguna lnea de flujo pero s le pueden llegar varias. - Se deben trazar los smbolos de manera que se pueda leer de arriba abajo y de izquierda a derecha.

Este smbolo se utiliza para representar la pantalla del ordenador

i
9
84

Introduccin a la programacin
Ejemplo de un Ordinograma Veamos otro ejemplo de diseo utilizando diagramas de flujo para dar solucin al algoritmo de calcular reas de tringulos. En este ejemplo, suponemos que a partir de un fichero con informacin de Identificacin del tringulo adems de la base y la altura de distintos tringulos, se irn leyendo los distintos registros con esta informacin y se ir grabando en el dispositivo de salida el rea de cada uno de esos tringulos. El proceso continuar hasta que se terminen de leer todos los registros del fichero.

i
10
85

Introduccin a la programacin
Veamos cmo quedara el mismo algoritmo diseado con un algoritmo rudimentario:

Tipos de instrucciones usando Ordinogramas A continuacin se muestran los tres tipos de instrucciones que usaremos para disear todos nuestros programas utilizando los ordinogramas.

i
11
86

Introduccin a la programacin
Y aqu tenemos dos formatos de instrucciones repetitivas:

Flujograma v/s Pseudocdigo Cuando logremos habilidad para desarrollar programas, es posible que no recurramos a los diagramas de flujo y que en su lugar prefiramos hacer directamente el pseudocdigo del programa. Flujograma Cuando sabemos cmo resolver un problema podemos planificar y dibujar grficamente la lgica de la alternativa seleccionada que da solucin al problema. Eso es precisamente un diagrama de flujo: la representacin grfica de una secuencia lgica de pasos a cumplir por el ordenador para producir un resultado esperado. Pseudocdigo La experiencia nos ha demostrado que resulta muy til trasladar esos pasos lgicos planteados en el diagrama a frases que indiquen lo mismo, es decir, hacer una codificacin del programa pero utilizando instrucciones en espaol, como si le estuviramos hablando al ordenador, ordenndole qu es lo que tiene que hacer. Esto es lo que denominamos Pseudocdigo. El pseudocdigo utiliza palabras que nos indicarn el proceso a realizar.

i
12
87

Introduccin a la programacin
Ventajas del Pseudocdigo y Flujograma En la programacin estructurada, la tcnica desarrollada para la resolucin de problemas es el pseudocdigo y es la herramienta base de diseo en la programacin actual. Ventajas del uso de un Pseudocdigo en un diagrama de flujo No se requieren smbolos ni lneas de flujo. Cada instruccin es expresada en lenguaje cotidiano. Ocupa menos espacio en una hoja de papel. Las alteraciones en la secuencia del algoritmo son reflejadas por medio de palabras reservadas. Permite representar en forma fcil operaciones repetitivas complejas. - Es muy fcil pasar el pseudocdigo a un programa en alguno de los lenguajes de programacin actuales. - Fcil comprensin, fcil seguimiento y fcil correccin y modificacin. Si se siguen las reglas se puede observar claramente los niveles que tiene cada operacin. Ventajas del uso de un Flujograma en un Pseudocdigo - Cuando se tiene poca experiencia en programacin, es mucho ms claro y ms intuitivo. - Una imagen vale ms que mil palabras. Son ms fciles de entender. Ejemplo comparativo Veamos un ejemplo para clarificar esta comparativa entre flujograma y pseudocdigo:

i
13
88

Introduccin a la programacin
Diseo del algoritmo Pseudocdigo 1. 2. 3. 4. 5. 6. 7. Flujograma Inicio Escribir rea de un triangulo Leer a, b, c Calcular s=(a+b+c)/2 Calcular A= (s(s-a)(s-b)(s-c)) Escribir A Fin

i
14
89

Introduccin a la programacin
3. Elementos bsicos de programacin
En ste recordaremos los elementos tpicos de los lenguajes de programacin y los tipos de operadores, entre otros. Como hemos visto a lo largo de este curso, para el diseo de programas son necesarios una serie de elementos. Recordemos cules son stos:

A continuacin haremos una breve revisin de cada uno de ellos.

i
15
90

Introduccin a la programacin
Palabras claves e identificadores Recordemos en qu consisten las palabras claves e identificadores. Las palabras claves son caractersticas de cada lenguaje de programacin, aunque muchas son comunes a muchos lenguajes. Todos los lenguajes tienen palabras reservadas y su utilizacin tiene un misin previamente establecida. Veamos como ejemplo las 32 palabras reservadas que utiliza el lenguaje C, muchas de las cuales son comunes a JAVA. Palabras claves:

Identificadores:

i
16
91

Introduccin a la programacin
Identificadores son palabras escogidas por el programador para nombrar elementos particulares del programa. Podemos considerar que son sinnimos de los datos. Todos los lenguajes tienen unas reglas para dar nombres vlidos a los datos. Suelen ser combinaciones de letras y nmeros que comienzan por una letra. Pueden usarse guiones para aportar claridad. Veamos algunos ejemplos tanto vlidos como invlidos para la mayora de los lenguajes. Datos Los datos constituyen la informacin que procesar el programa. Podemos nombrar datos de cualquier lenguaje de programacin: numricos, alfanumricos o de carcter y lgicos (booleano), y estn identificados gracias a: - LUGAR DE ALOJAMIENTO: Nombre, longitud del campo. - CARACTERISTICAS: Clase o tipo, formato y uso del dato. - Y PERTENENCIA: A qu familia de datos pertenece para datos compuestos. Los datos se pueden subdividir en los siguientes campos: - Simples -Compuestos o registros

i
17
92

Introduccin a la programacin

Constantes y variables Constantes Las constantes son datos que no modifican su valor a lo largo del programa. Todas las constantes tienen un nombre y un valor asociado.

i
18
93

Introduccin a la programacin
Variables Las Variables son datos cuyo valor se va modificando a lo largo del programa. Su valor cambia o vara durante los procesos del algoritmo. Toda variable tiene un nombre y un valor asociado.

Las variables dentro de un programa pueden tener muchas utilidades. Por ello, en funcin de qu uso les demos pueden clasificarse como: - Variables de trabajo. - Contadores. - Acumuladores. - ndices o indicadores. - Switch o interruptores. Operadores Los Operadores son smbolos que representan las distintas operaciones que se pueden realizar con los datos: aritmticas, alfanumricas, de asignacin, relacionales, lgicos, etc.

i
19
94

Introduccin a la programacin
Orden de prioridad de todos los operadores Los operadores no los utilizamos aisladamente, sino que solemos utilizar ms de uno en una misma expresin compleja. En este caso tendremos que tener en cuenta las normas de preferencia para no encontrarnos con resultados no deseados. Estas normas dependen del lenguaje utilizado, pero de forma general se puede establecer de mayor a menor prioridad de la siguiente forma: 1. 2. 3. 4. 5. Parntesis (comenzando por los ms internos) Signo Potencia Producto, divisin y mdulo Suma y resta 6. Concatenacin 7. Relacionales 8. Negacin NOT 9. Conjuncin AND 10. Disyuncin OR

20
95

Introduccin a la programacin
Instruccin o sentencia Las instrucciones o sentencias, son elementos que realizan alguna accin en concreto, es decir, son expresiones que por s solas llevan a cabo una tarea. Sern instrucciones secuenciales, alternativas o bucles. Las expresiones son una combinacin de palabras claves, datos y operadores. Una expresin en cualquier lenguaje de programacin es cualquier combinacin de operadores, constantes y variables. Existen distintos tipos de expresiones: - Aritmticas - Relacionales - Lgicas Expresiones aritmticas En el mundo real tenemos que trabajar con las matemticas, y por ello debemos saber cmo las distintas proposiciones y formulas matemticas se introducen en el ordenador para que las ejecute correctamente. Los operadores son expresiones que nos permiten manipular los datos que les pasamos, cada uno de los datos que se le pasa a un operador se llama operando, y segn el nmero de operandos de que disponga un operador estaremos hablando de un operador unario (un operando), binario (dos operandos), ternario... A continuacin se muestran los operadores matemticos ms normales:

i
21
96

Introduccin a la programacin
Expresiones aritmticas algortmicas Observa la siguiente expresin algebraica, en ella se pretende obtener la solucin de una ecuacin de segundo grado.

Veamos otro ejemplo. La expresin algortmica correcta a partir de la siguiente expresin algebraica:

Expresiones relacionales En ocasiones en los programas se necesitan realizar comparaciones entre distintos valores. Esto se realiza utilizando los operadores relacionales.

i
22
97

Introduccin a la programacin
Los operadores de comparacin son operadores en su mayora binarios que nos permiten comparar variables devolviendo un valor booleano a 1 (TRUE), si se cumple la condicin que expresan y a 0 (FALSE), en el caso contrario. Estos operadores se usan mayormente como condicin para las estructuras de control (instrucciones alternativas o repetitivas. Pulsa sobre los botones para ver algunos ejemplos. Ejemplo 1 Ejemplo 2

i
23
98

Introduccin a la programacin
Expresiones y operadores lgicos Los operadores lgicos permiten combinar los resultados de los operadores relacionales, y as ver si se cumplen varias condiciones simultneamente o slo alguna de ellas. Las funciones lgicas son aquellas que nos van a permitir dar a conocer la relacin entre dos condiciones, y en funcin de si el resultado es verdadero o falso se pueden realizar acciones diferentes. Estas expresiones devuelven siempre un valor 1 (true) o 0 (false). Los operadores lgicos son: i, NOT, no: Negacin (lo contrario) (1) (2)

&&, AND, y: Conjuncin: todas las relaciones han de ser verdad. II, OR, o: Disyuncin: alguna relacin ha de ser cierta.

Los operadores lgicos se fundamentan en conceptos electrnicos. Recordemos que los ordenadores estn construidos por chips o puertas lgicas las cuales dan lugar a poder construir fcilmente los operadores lgicos. 1. Operador AND (&&): Operador lgico o funtor PRODUCTO. REGLA: todas las condiciones simples han de ser verdaderas para que la compuesta tambin lo sea. Slo en tal caso se ejecuta la parte THEN del IF. 1*1*1*1=1 1*0*1*1=0

i
24
99

Introduccin a la programacin
2. Operados OR (||): Operador lgico o funtor SUMA. REGLA: basta con que una condicin sea cierta para que la condicin compuesta tambin lo sea. En tal caso se ejecutarn las declaraciones de la parte THEN. 0+0+1+0=1 Roll over Operadores lgicos 0+0+0+0=0

i
25
100

Introduccin a la programacin
Expresiones y operadores lgicos: condiciones Las condiciones pueden ser simples o compuestas. Son compuestas si aparecen varios operadores lgicos relacionados y su formato simplificado es el siguiente:

Orden de evaluacin de condiciones 1 PARENTESIS (si hay varios niveles, de dentro hacia fuera) 2 Operadores de RELACION 3 Operador lgico NOT 4 Operador lgico AND 5 Operador lgico OR 6 A IGUALDAD de operadores, de izquierda a derecha Ejemplo en JAVA: if ( (b > c) && (c > d) ) || (c == e) || (e == b) Ejemplo en COBOL: IF ( (b > c) AND (c > d) ) OR (c == e) OR (e == b)

i
26
101

Introduccin a la programacin
Codificacin de condiciones y Leyes Morgan El operador lgico NOT, se usa para negar una condicin simple (de relacin, de clase o de nombre de condicin), o una condicin compuesta y se puede codificar delante de la condicin completa encerrada entre parntesis. As pues: A OR B es lo contrario de NOT (A OR B) y viceversa. C AND D es lo contrario de NOT (C AND D) y viceversa NOT A AND NOT B es lo contrario de NOT (NOT A AND NOT B) NOT C OR D es lo contrario de NOT (NOT C OR D)

Una condicin compuesta puede simplificarse o si se prefiere negarse directamente, aplicando las LEYES DE MORGAN. Veamos cmo quedara la parte de la derecha del ejemplo de arriba, simplificando o negando estas condiciones: Simplificando las condiciones NOT NOT NOT NOT (A OR B) (C AND D) (NOT A AND (NOT C OR es igual que NOT A AND NOT B es igual que NOT C OR NOT D NOT B) es igual que A OR B D) es igual que C AND NOT D

Negando las condiciones A OR B es lo contrario de NOT A AND C AND D es lo contrario de NOT C OR NOT A AND NOT B es lo contrario de A NOT C OR D es lo contrario de C AND NOT B NOT D OR B NOT D

27
102

Introduccin a la programacin
Asignacin de valores a las variables En programacin una de las instrucciones ms comunes es la de asignacin de valores a las variables y constantes. Veamos algunos ejemplos de asignacin sin centrarnos en ningn lenguaje en particular. Ejemplos: A = 50 A <= 50 MOVER 50 => A Queremos decir que el valor 50 se va a copiar a la variable A. A= B+C A := B + C Calcular A = B + C El valor de la suma de a B y C copiar a la variable A perdindose el valor anterior que pudiera tener la variable A. Frase = Soy programador Mover Soy programador a Frase.

i
28
103

Introduccin a la programacin
4. Resumen
Has llegado al final de esta leccin de formacin que denominamos Introduccin a la programacin. A continuacin te invitamos a realizar un repaso de los contenidos estudiados a lo largo de la misma.

i
29
104

ARRAYS Y TABLAS

105

NDICE
ARRAYS Y TABLAS
1. Aspectos Generales de Tablas o Arrays. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 2. Operaciones Tpicas con Tablas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8 3. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .23

106

Arrays y Tablas
1. Aspectos Generales de Tablas o Arrays.
Conceptos Bsicos

Antes de comenzar, revisemos algunos conceptos bsicos que necesitas conocer, para el posterior diseo de Tablas o Arrays.

Estructura de datos constituida por un nmero fijo de elementos, todos ellos del mismo tipo y ubicados en direcciones de memoria fsicamente contiguas.

i
3
107

Arrays y Tablas
Clasificacin de las Tablas Las Tablas pueden clasificarse segn su estructura, dimensin, valores y nmero de elementos.

i
4
108

Arrays y Tablas
Representacin Grfica de Tablas Unidimensionales Las Tablas Unidimensionales tambin son conocidas como vectores. Representacin Grfica Los elementos se almacenan en posiciones contiguas adyacentes en la memoria principal de un ordenador.

Acceso Individual a los Elementos de Tablas Unidimensionales En las Tablas Unidimensionales, los elementos se almacenan en posiciones contiguas adyacentes en la memoria principal de un ordenador. Es suficiente su nombre seguido de 1 ndice: - Nombre_tabla(ndice) - Nombre_Elemento(ndice) NOTA: Algunos lenguajes consideran que el primer elemento se direcciona con valor de ndice 0 (cero) y otros con valor de ndice 1.

i
5
109

Arrays y Tablas
Ejemplo Tabla Nmeros: Nombre de la Tabla: Nmeros Tipo: Numrico entero Tamao: 6 Elementos de la tabla: Numros (1) 2 Numros (2) 4 Numros (3) 6 Numros (4) 8 Numros (5) 10 Numros (6) 12 Numros (1) 2 Dimensin: 1 Representacin Grfica de Tablas BIidimensionales Las Tablas Bidimensionales tambin son conocidas como matrices. Cada elemento o alguno se sus campos es, a su vez, una tabla. Representacin Grfica

i
6
110

Arrays y Tablas
Acceso Individual a los Elementos de Tablas Biidimensionales En las Tablas Bidimensionales, los elementos se almacenan en posiciones contiguas adyacentes en la memoria principal de un ordenador. Para acceder a uno de los elementos de una tabla es necesario utilizar 2 ndices: el 1 marca la fila, el 2 la columna: Nombre_tabla(ndice_fila, ndice_columna) Ejemplo:

Tabla Notas:Alumnos del 1 al 10: Nombre de la Tabla: Notas Tipo: Numrico entero Elementos de la tabla: Notas (4,1) Nota del alumno 1 en Filosofa Notas (1,3) Nota del alumno 3 en Matemticas Notas (1,9) Nota del alumno 9 en Matemticas Dimensin: 2 ASIGNATURAS (Matemticas, Fsica, historia y Filosofa)

i
7
111

Arrays y Tablas
2. Operaciones Tpicas con Tablas

A partir de aqu, veremos un ejercicio de programacin a partir de un Array de una dimensin (vector) de 7 elementos que contendr los gastos de cada uno de los 7 das de la semana. Para esto, desarrollaremos algunas de las tareas habituales que se suele necesitar realizar en la mayora de los programas con este tipo de datos. - Inicializar o preparar Tablas - Cargar una Tabla - Recorrido o acceso secuencial a una Tabla. - Bsqueda de un contenido dentro de uno de los elementos: - En tablas ordenadas - En tablas desordenadas - Ordenar una tabla por cualquier mtodo. - Insertar elementos en una tabla: - Al final de la tabla - En una tabla ordenada en su sitio en funcin del orden. - Borrar elementos de una tabla.

i
8
112

Arrays y Tablas
Inicializar o Preparar Tablas A partir de dicha TABLA de una dimensin (vector) de 7 elementos que contendr los gastos de cada uno de los 7 das de la semana. Inicializar con el valor cero en cada uno de los elementos. PROGRAMA DE INICIALIZAR TABLAS Inicio Definicin de Datos TablaGastosDia(7) Dia=1 creacin sin inicializar TablaGastosDia(7)= 1,2,3,4,5,6,7 creacin con contenido Indice para apuntar a cada uno de los dias

1 forma con DO WHILE y test antes

i
9
113

Arrays y Tablas
2 forma con DO WHILE y test despus

3 forma con FOR

i
10
114

Arrays y Tablas
4 forma con DO UNTIL y test antes

5 forma con DO UNTIL y test despus

i
11
115

Arrays y Tablas
Programas de Cargar/Rellenar Tablas Una tabla se puede cargar/rellenar/inicializar en el momento de su definicin, para ello, lgicamente, se deben conocer los datos con los que se quiere rellenar la tabla en el momento de su creacin: TablaGastosDia(7) = 40, 29, 90, 71, 28, 93, 100

Cargar una Tabla desde el Teclado (terminal) A partir de dicho array de una dimensin (vector) de 7 elementos que contendr los gastos de cada uno de los 7 das de la semana.

CARGAR UNA TABLA DESDE EL TECLADO Inicio Definicin de Datos TablaGastosDia(7)= 40, 29, 90, 0, 0, 0, 0 Dia= 1 Indice para apuntar a cada elemento CantidadTecleada= 0 ContinuarSiNo= S

i
12
116

Arrays y Tablas
1 forma con DO WHILE y test antes

2 forma con FOR

i
13
117

Arrays y Tablas
Cargar una Tabla desde un Fichero En una tabla de una dimensin (vector) de 7 elementos que contendr los gastos de cada uno de los 7 das de la semana. Definicion de Datos TablaGastosDia(7)= 40, 29, 90, 0, 0, 0, 0 Dia integer, Reg_E String, FinFichero=NO Pseudocodigos Abrir FICHERO c:\gastos.txt LEER_FICHERO( ) rellena el registro Reg_E desde fichero Dia=1 , (HAYA ELEMENTOS VACIOS EN TABLA) y (HAYA REGISTROS QUE CARGAR DESDE EL FICHERO) DO WHILE ( Dia <= 7 AND FinFichero <> NO ) TablaGastosDia(Dia) = Reg_E Dia = Dia + 1 LEER_FICHERO( ) LOOP IF ( Dia = 8 AND FinFichero=SI ) Then Imprimir (OK) LA TABLA est totalmente LLENA Imprimir (OK) Fichero cargado completamente ELSEIF ( Dia = 8 AND FinFichero=NO ) Then Imprimir ERROR Tabla pequea, quedan regs. en fichero ELSEIF ((((( Dia < 7 AND FinFichero = SI )))) Imprimir OK Fich.cargado y quedan elementos vacios END IF Cerrar FICHERO c:\gastos.txt fin

i
14
118

Arrays y Tablas
Recorrer Secuencialmente una Tabla A partir de dicho array de una dimensin (vector) de 7 elementos que contendr los gastos de cada uno de los 7 das de la semana. Una vez cargado con los gastos de cada uno de los das de la semana, imprimir el contenido de cada uno de los elementos y la suma total de todos ellos.

RECORRER SECUENCIALMENTE UNA TABLA Inicio Definicin de Datos 1 2 Dia= 1 3 4 5 6 7 TablaGastosDia(7)= 40, 29, 90, 71, 28, 93, 100 Indice para apuntar a cada elemento TotalSemana= 0

1 forma con DO WHILE

i
15
119

Arrays y Tablas
2 forma con FOR

Recorrer Secuencialmente una Tabla de Izquierda a Derecha De izquierda a derecha, mostrando/imprimiendo el valor de cada elemento. Suponemos que la tabla puede no estar completa.

i
16
120

Arrays y Tablas
Suponemos que la tabla est completa.

Recorrer Secuencialmente una Tabla de Derecha a Izquierda Suponemos que la tabla esta completa, si no tendremos que averiguar previamente cul es el ltimo elemento con contenido Suponemos que la tabla est completa.

Buscar un Contenido Determinado Buscar un contenido determinado dentro de uno de los elementos, a partir de dicha TABLA de una dimensin (vector) de 7 elementos que contendr los gastos de cada uno de los 7 das de la semana.

i
17
121

Arrays y Tablas
Una vez cargado con los gastos de la semana, BUSCAR secuencialmente o dicotmicamente un determinado valor introducido desde el terminal por el usuario, sabiendo que el contenido de la tabla puede no estar ordenado en ascendente o descendente o que el contenido de la tabla si que est con toda seguridad ordenado. En ambos casos se imprimir la posicin (el ndice) donde se encuentra el valor que se desea buscar, as como su contenido para comprobar que la bsqueda ha sido efectiva. A continuacin buscaremos un contenido en: En Tablas Desordenadas: - Recorrido Secuencial hasta encontrar lo que buscamos En Tablas Ordenadas: - Recorrido Secuencial hasta encontrar lo que buscamos - Recorrido Secuencial hasta encontrar lo que buscamos o hasta encontrar un valor Mayor que el que buscamos. - Bsqueda Binaria o Dicotmica.

i
18
122

Arrays y Tablas
Buscar un Contenido Determinado en una Tabla Desordenada Veamos como buscar un contenido determinado dentro de uno de los elementos en la Tabla que puede estar desordenada.

RECORRER SECUENCIALMENTE UNA TABLA Definicion de Datos 1 2 3 4 5 6 7 TablaGastosDia(7)= 40, 29, 90, 71, 28, 93, 100 Dia=1 Indice para apuntar a cada elemento ValorBuscado= 0

1 forma con DO WHILE

i
19
123

Arrays y Tablas
2 forma con FOR

Buscar un Contenido Determinado en una Tabla Ordenada Veamos como buscar un contenido determinado dentro de uno de los elementos en la Tabla que puede estar desordenada.

RECORRER SECUENCIALMENTE UNA TABLA Definicion de Datos 1 2 3 4 5 6 7 TablaGastosDia(7)= 29, 48, 90, 98, 156, 3769, 32767 Dia=1 ValorBuscado= 0

i
20
124

Arrays y Tablas
1 forma con DO WHILE

2 forma con FOR

( con

> solo )

(El IF de abajo se podra meter aqui dentro antes del EXIT FOR sin el ELSE)

i
21
125

Arrays y Tablas
Bsqueda Binaria o Dicotmica de Tablas Veamos como realizar una bsqueda binaria o dicotmica de Tablas, slo para Tablas Ordenadas.

RECORRER SECUENCIALMENTE UNA TABLA Definicion de Datos 1 2 3 4 5 6 7 TablaGastosDia(7)= 29, 48, 90, 98, 156, 3769, 32767 Centro=0 Izqda=1 Decha=7 ((el ltimo elemento)) ValorBuscado= 0 Encontrado=NO ((esto es un swtich))

Pseudocodigo

i
22
126

Arrays y Tablas
3. Resumen

Enhorabuena! Has llegado al final de esta leccin de formacin que denominamos Arrays y Tablas. En esta leccin hemos estudiado los siguientes contenidos:

i
23
127

FUNCIONES Y PROCEDIMIENTOS

128

NDICE
FUNCIONES Y PROCEDIMIENTOS
1. Teora y Funciones con Funciones y Procedimientos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 2. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20

129

Funciones y Procedimientos
1. Teora y Funciones con Funciones y Procedimientos
Funciones y Procedimientos
A lo largo ste te mostraremos diferentes clculos que puedes realizar con los distintos lenguajes de programacin

- Funcin de cada mdulo - Realizar una operacin independiente de los restantes desde el punto de vista funcional, pero este puede estar relacionado con otros procedimientos y funciones para el intercambio de valores de variables. - Cualquier algoritmo se puede transformar en un procedimiento para ser utilizado dentro de otro algoritmo mayor.

i
3
130

Funciones y Procedimientos
Parmetros Formales y Actuales

Entre los procedimientos, funciones y su entorno se producen una relacin en base a un intercambio de valores de las variables. Variables Globales y Locales La Variable global es aquella que puede ser utilizada (leda, modificada, etc.) a lo largo de todo el algoritmo principal y tambin por cualquiera de los sub-algoritmos (entindase funciones y procedimientos) que componen el algoritmo en s.

Variable local Aquella que slo puede ser referenciada dentro del sub-algoritmo en el cual ha sido declarada

i
4
131

Funciones y Procedimientos
Funciones y mbitos de las Variables Para ver las funciones y el mbito de las variables presiona cada botn FUNCIONES

AMBITO DE LAS VARIABLES

i
5
132

Funciones y Procedimientos
Funciones y Procedimientos. Representacin Grafica Analice la representacin grafica de las Funciones y Procedimientos.

i
6
133

Funciones y Procedimientos
Llamadas a Procedimientos A travs del esquema siguiente podr ver como se realizan las llamadas a procedimientos.

i
7
134

Funciones y Procedimientos
Esquema Bsico de llamadas a Procedimientos Ahora veremos el esquema bsico de llamadas a procedimientos.

i
8
135

Funciones y Procedimientos
Formato de Funciones en Visual Basic Analizaremos en este punto el formato de funciones en visual basic.

i
9
136

Funciones y Procedimientos
Formatos de Funciones en JAVA , C y C++ En esta pantalla se presenta el esquema de FORMATOS DE FUNCIONES EN JAVA , C y C++

i
10
137

Funciones y Procedimientos
Suma de dos nmeros. Mtodos
METODO 1) Sin necesidad de procedimientos. Todo en el programa principal

i
11
138

Funciones y Procedimientos
METODO 2) Usando variables GLOBALES dentro del procedimiento.

i
12
139

Funciones y Procedimientos
METODO 3) Usando variables LOCALES dentro del procedimiento..

i
13
140

Funciones y Procedimientos
METODO 4) Pasndole los valores de las variables GLOBALES al procedimiento y ejecutndose dentro del mismo con variables LOCALES.

i
14
141

Funciones y Procedimientos
METODO 5) Pasndole los valores de las variables GLOBALES a la Funcin y ejecutndose el proceso dentro de la misma con variables LOCALES y una vez ejecutado se devuelve el resultado al mdulo principal .

i
15
142

Funciones y Procedimientos
METODO 6) Pasndole los valores de las variables GLOBALES a la Funcin y ejecutndose el proceso dentro de la misma con variables LOCALES y una vez ejecutado se devuelve el resultado al mdulo principal .

i
16
143

Funciones y Procedimientos
Anexo Tablas y Procedimiento Versin 1 Estudia el siguiente pseudocdigo y elige las salidas correctas del procedimiento:

POSIBLES SOLUCIONES: a)2, 4, b)4, 6, c)1, 2, d)10, 9, 6, 8, 10, 12, 14, 16, 18, 20 12, 16, 21, 27, 34, 42, 51, 61 3, 4, 5, 6, 7, 8, 9, 10 8, 7, 6, 5, 4, 3, 2, 1

i
17
144

Funciones y Procedimientos
Anexo Tablas y Procedimiento Versin 2 Estudia el siguiente pseudocdigo y elige las salidas correctas del procedimiento:

POSIBLES SOLUCIONES: e) 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 f) 4, 6, 12, 16, 21, 27, 34, 42, 51, 61 g) 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 h) 10, 9, 8, 7, 6, 5, 4, 3, 2, 1

i
18
145

Funciones y Procedimientos
Anexo Tablas y Procedimiento Versin 3 Estudia el siguiente pseudocdigo y elige las salidas correctas del procedimiento:

POSIBLES SOLUCIONES: i) 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 j) 4, 6, 12, 16, 21, 27, 34, 42, 51, 61 k) 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 l) 10, 9, 8, 7, 6, 5, 4, 3, 2, 1

i
19
146

Funciones y Procedimientos
2. Resumen
Enhorabuena! Has llegado al final de esta leccin de formacin que denominamos Arrays y Tablas. En esta leccin hemos estudiado los siguientes contenidos:

i
20
147

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

LA INFORMTICA Y EL MANEJO DE LA INFORMACIN


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.

150

LA INFORMTICA Y EL MANEJO DE LA INFORMACIN


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.

151

LA INFORMTICA Y EL MANEJO DE LA INFORMACIN


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.

152

LA INFORMTICA Y EL MANEJO DE LA INFORMACIN


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.

153

LA INFORMTICA Y EL MANEJO DE LA INFORMACIN


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:

154

LA INFORMTICA Y EL MANEJO DE LA INFORMACIN


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.

155

LA INFORMTICA Y EL MANEJO DE LA INFORMACIN


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.

156

LA INFORMTICA Y EL MANEJO DE LA INFORMACIN


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.

10

157

LA INFORMTICA Y EL MANEJO DE LA INFORMACIN


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

11

158

LA INFORMTICA Y EL MANEJO DE LA INFORMACIN


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.

12

159

LA INFORMTICA Y EL MANEJO DE LA INFORMACIN


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.

13

160

LA INFORMTICA Y EL MANEJO DE LA INFORMACIN


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.

14

161

LA INFORMTICA Y EL MANEJO DE LA INFORMACIN


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

15

162

LA INFORMTICA Y EL MANEJO DE LA INFORMACIN

Diseo interno de un microprocesador La Unidad de control (UC). Es el centro nervioso de la computadora; desde ella se controla y gobiernan todas las operaciones (bsqueda, decodificacin, y ejecucin de la instruccin). Las funciones principales de la Unidad de Control: 1234Identificar cual es la instruccin y la operacin que conlleva la Localizar los datos u operandos. Desencadenar la ejecucin de la instruccin. Desencadenar el almacenamiento del resultado. instruccin.

Funcionamiento de la unidad de control: El secuenciador interpreta la operacin que est en el registro de instruccin y activa circuitos para ejecutar la instruccin. Enva los operandos a la unidad aritmetico-lgica. Recoge el resultado de esta y lo enva a la unidad de memoria. Despus se almacena la siguiente instruccin en el registro de instruccin y realiza de nuevo el proceso.

16

163

LA INFORMTICA Y EL MANEJO DE LA INFORMACIN


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)

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

TIPOS DE ARCHIVOS DE INFORMACIN


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.

167

TIPOS DE ARCHIVOS DE INFORMACIN


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

168

TIPOS DE ARCHIVOS DE INFORMACIN


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 compiladores. (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.

169

TIPOS DE ARCHIVOS DE INFORMACIN


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.

170

TIPOS DE ARCHIVOS DE INFORMACIN


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.

171

TIPOS DE ARCHIVOS DE INFORMACIN


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.

172

TIPOS DE ARCHIVOS DE INFORMACIN


- 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.

173

TIPOS DE ARCHIVOS DE INFORMACIN


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.

10

174

TIPOS DE ARCHIVOS DE INFORMACIN


- 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.

11

175

TIPOS DE ARCHIVOS DE INFORMACIN


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.

12

176

TIPOS DE ARCHIVOS DE INFORMACIN


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

13

177

INTRODUCCIN A LA PROGRAMACIN

178

NDICE
INTRODUCCIN A LA PROGRAMACIN
1. Concepto de algoritmo y de programa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 2. Ciclo de vida: Fases clsicas de diseo de aplicaciones informticas. . . . . . . . . . . . . . . . . . . . .4 3. Estructura de un Centro de Proceso de Datos. Roles habituales . . . . . . . . . . . . . . . . . . . . . . .7 4. Lenguajes de Programacin. Lenguajes de bajo, medio y alto nivel . . . . . . . . . . . . . . . . . . . . .9 5. Ensambladores, Interpretes y Compiladores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15 6. Cdigo fuente, cdigo objeto y cdigo ejecutable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19

179

INTRODUCCIN A LA PROGRAMACIN
1. Concepto de algoritmo y de programa.
Un algoritmo es un mtodo de resolucin de problemas en un nmero finito de pasos. Un algoritmo es la descripcin exacta y sin ambigedades de la secuencia de pasos elementales a aplicar a un proceso para, que a partir de unos datos iniciales se obtenga la solucin buscada a un problema determinado. Un programa es la expresin de un algoritmo en un lenguaje de programacin entendible por el ordenador. Cualquier programa por muy complejo que sea, consta de: datos de entrada, instrucciones para tranformar estos datos y obtener los resultados que se mostrarn en la salida.

Un programa en definitiva es un conjunto de rdenes que ejecuta el ordenador para conseguir un objetivo. Las rdenes se dan a travs de un lenguaje de programacin (cdigos).

180

INTRODUCCIN A LA PROGRAMACIN
2. Ciclo de vida: Fases clsicas de diseo de aplicaciones informticas.
Se conoce como ciclo de vida de un sistema informtico, al conjunto de actividades a realizar desde que se concibe la realizacin de un producto software hasta la retirada de de la explotacin del mismo. Anlisis.En esta fase se establece cul es el producto a desarrollar, siendo necesario especificar los procesos y estructuras de datos que se van a emplear, para satisfacer las necesidades y restricciones en el desarrollo de la aplicacin. Suele ser misin del analista funcional. Su principal objetivo es establecer QU debe hacer el software a desarrollar (y no CMO). - Recoger las ideas expuestas poe el cliente, y transformarlas en especificaciones vlidas para el diseador. - Validar con el cliente que las especificaciones realizadas por l, se ajustan a los deseos que cliente le transmiti.

Diseo.En esta fase, partiendo de la informacin recogida en el anlisis el diseador establece CMO se llevan a cabo los objetivos presentados en el Anlisis. Suele ser sta, la misin del analista orgnico. - Todo gasto de tiempo en diseo se convierte en ahorro cuando se escriba y depura el programa.

181

INTRODUCCIN A LA PROGRAMACIN
En esta fase se alcanza una solucin ptima, detallada y con la mayor precisin posible para el desarrollo de la aplicacin. Para esta fase se utilizan principalmente dos tipos de herramientas de diseo para dar solucin a los algoritmos definidos en fases anteriores:: Pseudocdigo: El algoritmo se expresa con palabras del lenguaje comn y de la forma ms detallada posible. Diagrama de flujo: Se definen como la representacin grfica que mediante el uso de smbolos estndar conectados o unidos mediante lneas de flujo, muestran la secuencia lgica de las operaciones o acciones que debe de realizar u ordenador, as como la corriente o flujo de datos en la resolucin de un problema. Los diseos deben de ser normalizados para facilitar el intercambio de documentacin entre el personal informtico. Los diagramas de flujo se pueden clasificar en dos grandes grupos: - a) Organigramas - b) Ordinogramas Una de las principales diferencias entre ambos, es que pertenecen a diferentes fases o etapas de la resolucin de un programa. Mientras que los organigramas corresponden a la fase de anlisis, los ordinogramas corresponden a la fase de diseo. Pese a estas diferencias, en muchos mbitos, se suele llamar indistintamente a los dos generalizando ambos con el nombre de organigramas. El grfico de debajo, muestra otro esquema clsico del ciclo de vida de las aplicaciones informticas:

182

INTRODUCCIN A LA PROGRAMACIN

Las otras fases del ciclo de vida de las aplicaciones informticas son:

183

INTRODUCCIN A LA PROGRAMACIN
3. Estructura de un Centro de Proceso de Datos. Roles habituales.
Un Centro de procesos de Datos CPD (tambien conocido como un sistema de informacin (SI) es un conjunto organizado de elementos, estos elementos son de 4 tipos: - Personas. - Datos. - Actividades o tcnicas de trabajo. - Recursos materiales en general (tpicamente recursos informticos y de comunicacin, aunque no tienen por qu ser de este tipo obligatoriamente).

Todo ese conjunto de elementos interactan entre si para procesar los datos y la informacin (incluyendo procesos manuales y automticos) y distribuirla de la manera ms adecuada posible en una determinada organizacin en funcin de sus objetivos. Normalmente el trmino es usado de manera errnea como sinnimo de sistema de informacin informtico, estos son el campo de estudio de la tecnologa de la informacin (IT), y aunque puedan formar parte de un sistema de informacin (como recurso material), por s solos no se pueden considerar como sistemas de informacin, este concepto es ms amplio que el de sistema de informacin informtico.

184

INTRODUCCIN A LA PROGRAMACIN
Los sistemas de informacin tratan el desarrollo, uso y administracin de la infraestructura de la tecnologa de la informacin en una organizacin.

El mayor de los activos de una compaa hoy en da es su informacin, representada en su personal, experiencia, conocimiento, innovaciones (patentes, derechos de autor, secreto comercial). Para poder competir, las organizaciones deben poseer una fuerte infraestructura de informacin, en cuyo corazn se sita la infraestructura de la tecnologa de informacin. De tal manera que el sistema de informacin se centre en estudiar las formas para mejorar el uso de la tecnologa que soporta el flujo de informacin dentro de la organizacin. LOS ROLES de las personas implicadas en un CPD son muchos y muy variados, pudiendo estos variar en funcin de la organizacin en que desempeen su trabajo. Los ms habituales son: - Director del departamento - Gerente de cuentas claves - Jefe de Proyectos - Analista Funcional - Analista Orgnico - Analista-Programador - Programador Senior - Programador Junior - Usuarios - Tcnico de sistemas de redes - Tcnico de seguridad - Tcnico de calidad software - Jefe de explotacin - Operadores - Administrador de Bases de Datos - Administrador se Seguridad - Otros

185

INTRODUCCIN A LA PROGRAMACIN
4. Lenguajes de Programacin. Lenguajes de bajo, medio y alto nivel.
La codificacin de programas. Consiste en la traduccin de la solucin obtenida a un determinado lenguaje de programacin, basndonos en las especificaciones de diseo expresadas en el cuaderno de carga, dando como resultado unas instrucciones ejecutables por el ordenador. Asimismo, se debern realizar las pruebas necesarias para depurar errores y verificar la calidad de los programas. Lenguajes de Programacin. Los lenguajes de programacin son una notacin para escribir programas, a travs de los cuales podemos comunicarnos con el hardware y dar as las rdenes adecuadas para la realizacin de un determinado proceso. Lgicamente, para escribir los programas, aplicaciones o softwares que el ordenador emplea para trabajar, el programador utiliza un lenguaje de programacin denominado de alto nivel, que le permite crearlos escribiendo lneas de texto codificadas. Esas lneas de texto u rdenes el programador las puede escribir, leer y entender, no as el ordenador mientras se mantengan escritas de esa forma. Para que el ordenador pueda entender las ordenes contenidas en un programa cualquiera escrito por el programador en lenguaje de alto nivel, es necesario que otro programa denominado compilador las traduzca y convierta a cdigo mquina de bajo nivel. Este cdigo, compuesto solamente de unos y ceros, es el nico que entiende el ordenador y es el que le permite interpretar las rdenes contenidas en los programas para que las pueda ejecutar.

186

INTRODUCCIN A LA PROGRAMACIN
Los lenguajes de programacin a lo largo de la historia. Periodo 1950 - 1955 Influencias Ordenadores primitivos Lenguajes Lenguajes ensamblador. Lenguajes experimentales de alto nivel FORTRAN ALGOL 58 y 60 COBOL LISP FORTRAN IV COBOL 61 Extendido ALGOL 60 Revisado APL (como notacin slo) PL/I FORTRAN 66 (estndar) COBOL 65 (estndar) ALGOL 68 SIMULA 67 BASI C APL/360

1956 - 1960

Ordenadores pequeos, caros y lentos Cintas magnticas. Compiladores e intrpretes Optimizacin del cdigo. Ordenadores grandes y caros Discos magnticos Sistemas operativos Lenguajes de propsito general. Ordenadores de diferentes tamaos, velocidades, y costes. Sistemas caros de almacenamiento masivo de datos. Sistemas operativos multitarea e interactivos. Compiladores con optimizacin. Lenguajes estndar, flexibles y generales. Micro ordenadores. Sistemas pequeos y baratos de almacenamiento masivo de datos. Programacin estructurada. Ingeniera del software. Lenguajes sencillos.

1961 - 1965

1966 - 1970

1971 - 1975

PASCAL COBOL 74 PL/I

10

187

INTRODUCCIN A LA PROGRAMACIN
Periodo 1976 - 1980 Influencias Ordenadores baratos y potentes. Sistemas distribuidos. Programacin interactiva. Abstraccin de datos. Programacin con fiabifidad y fcil mantenimiento. Ordenadores ms baratos y potentes. Mayor abstraccin de datos. Menor costo de memorias Programacin Orientada o Objetos Lenguajes ADA FORTRAN 77 PROLOG COBOL II

1980 -1990

SmallTalk OOCOBOL C++ Objective C Object Pascal (Delphi) Visual Basic JAVA HTML,XM JAVASCRIPT C# Visual Basic .NET y muchos ms, ,

1990 - 2008

Ordenadores ms baratos y potentes. Conexin universal. INTERNET Ordenadores mucho ms pequeos. , , , .

Tipos de lenguajes de programacin. Un lenguaje de programacin es un conjunto de smbolos y caracteres combinados entre s de acuerdo con una sintaxis ya definida para posibilitar la transmisin de instrucciones al ordenador. Estos smbolos son traducidos a un conjunto de seales elctricas representadas en cdigo binario porque es el nico lenguaje que entienden los microprocesadores. El nico lenguaje que realmente maneja una computadora es el lenguaje Mquina, este lenguaje esta formado exclusivamente de nmeros binarios. Adems un programa en lenguaje mquina debe especificar todos los detalles referentes al hardware, lo que hace que adems de muy largo, sea dependiente de la mquina en que se trabaje. Por su parte un programa escrito en un lenguaje de alto nivel, esta compuesto de sentencias en un lenguaje ms cercano al lenguaje natural con respecto al primero. Un lenguaje de alto nivel es por tanto mas fcil de entender y aprender, permite a los programadores olvidarse de los detalles del hardware y concentrarse en

11

188

INTRODUCCIN A LA PROGRAMACIN
la lgica del programa; adems produce programas que se pueden ejecutar en diferentes equipos de computo con pocos o ningn cambio.

Tipos de lenguajes de programacin: Bajo nivel (Lenguaje mquina) Intermedios (Lenguaje ensamblador), C Alto nivel Gestin Cientficos Propsito general y especficos

Lenguajes mquina. Lenguajes de Bajo Nivel.Fue el primer lenguaje utilizado en la programacin de computadoras. Son tambin llamados de bajo nivel por que el lenguaje que utilizan unos y ceros (sistema binario) para dar rdenes al ordenador. Son los que ms bajan al nivel hardware de la maquina, los ceros y unos son en realidad niveles de tensin elctrica ms o menos elevada. Es el nico que entiende directamente la computadora. Utiliza el alfabeto binario que como vimos ms arriba, que consta de los dos nicos smbolos 0 y 1, denominados bits (abreviatura inglesa de dgitos binarios).

EJEMPLO: 0000 1000 0011 0111 1110 0001 1001 1010 0100 1001 1010 1001 1001 0111 0010 0001 1010 1100 0000 0000 01 A1 89 9A 3A 9C 74 70 E9 20

12

189

INTRODUCCIN A LA PROGRAMACIN
Lenguaje de ensambladores.Es el primer intento de sustituir el lenguaje mquina por otro ms similar a los utilizados por las personas. Cada instruccin equivale a una instruccin en lenguaje mquina, utilizando para su escritura palabras nemotcnicas en lugar de cadenas de bits. Formado por nemotcnicos es decir, palabras abreviadas procedentes del ingls formadas por letras y nmeros (Ejemplo: MOV A, B). La programacin en lenguaje ensamblador precisa de un amplio conocimiento sobre la constitucin, estructura y funcionamiento interno de un ordenador, as como un hbil manejo de los cdigos y sistemas de numeracin, en especial el binario y el hexadecimal.

EJEMPLO: INICIO: ADD MOV CMP JE JMP END B, 1 A, E A, B FIN INICIO

FIN :

Este lenguaje presenta la mayora de los inconvenientes del lenguaje mquina: Cada modelo de computadora tiene un lenguaje ensamblador propio diferente del de los dems, por lo cual un programa slo puede utilizarse en la mquina para la cual se program. El programador ha de conocer perfectamente el hardware del equipo, ya que maneja directamente las posiciones de memoria, registros del procesador y dems elementos fsicos. Todas las instrucciones son elementales, es decir, en el programa se deben describir con el mximo detalle todas las operaciones que se han de llevar a cabo en la mquina para la realizacin de cualquier proceso. Mnima ocupacin de memoria y mnimo tiempo de ejecucin en comparacin con el resultado de la compilacin del programa equivalente escrito en otros lenguajes.

13

190

INTRODUCCIN A LA PROGRAMACIN
Lenguajes de Alto Nivel.Se llaman lenguajes de alto nivel cuando el conjunto de rdenes que utilizan son fciles de entender y aprender. Adems no hay incompatibilidades entre un microprocesador y otro. Como inconveniente destacable, es la necesidad de traducir los programas escritos en un lenguaje de alto nivel a un lenguaje de programacin tan primitivo como el lenguaje mquina para que pueda ser interpretado y ejecutado por la unidad central de proceso, lo que significa disponer necesariamente de un traductor (ensamblador, compilador o intrprete) para cada tipo de ordenador utilizado. Las caractersticas de los lenguajes de alto nivel son: - Lograr independencia de la mquina, pudiendo utilizar un mismo programa en diferentes equipos con la nica condicin de disponer de un programa traductor o compilador, que lo suministra el fabricante, para obtener el programa ejecutable en lenguaje binario de la mquina que se trate. Adems, no se necesita conocer el hardware especfico de dicha mquina. - Aproximarse al lenguaje natural, para que el programa se pueda escribir y leer de una forma ms sencilla, eliminando muchas de las posibilidades de cometer errores que se daban en el lenguaje mquina, ya que se utilizan palabras (en ingls) en lugar de cadenas de smbolos sin ningn significado aparente. - Incluir rutinas de uso frecuente como son las de entrada/salida, funciones matemticas, manejo de tablas, etc, que figuran en una especie de librera del lenguaje, de tal manera que se pueden utilizar siempre que se quieran sin necesidad de programarlas cada vez.

14

191

INTRODUCCIN A LA PROGRAMACIN
5. Ensambladores, Interpretes y Compiladores.
Cuando programamos en un lenguaje distinto al lenguaje mquina, los programas diseados deben ser traducidos a cdigo binario, para que as las instrucciones en ellos especificadas puedan ser entendidas y ejecutadas. El sistema o software encargado de traducir estos programas (denominados programas fuentes) puede ser un ensamblador, intrprete o compilador. Representacin grafica de los 3 modelos de traduccin a ejecutable.

Programas Ensambladores.Son los encargados de transformar o traducir directamente (lo que aporta al ordenador mayor velocidad de operacin) los programas escritos en ensamblador a su correspondiente en cdigo mquina o cdigo binario para que puedan ser ejecutados por la CPU. Programas Intrpretes.Analiza el programa fuente y lo ejecuta directamente, sin generar ningn cdigo equivalente. Suele generar programas ms rpidos y eficientes, ya que el anlisis del lenguaje fuente se hace una sola vez, durante la generacin del programa equivalente. Un intrprete es un programa de software encargado de procesar y traducir cada instruccin o sentencia de un programa escrito en un lenguaje de alto nivel a cdigo mquina y despus ejecutarla; es decir, que el microprocesador ejecuta la orden o instruccin una vez traducida y despus de comprobar que no existe error alguno de sintaxis. La traduccin o interpretacin y la ejecucin no se realizan como procesos independientes, sino en una misma operacin e instruccin por instruccin, respetando rigurosamente el orden establecido en ellas.

15

192

INTRODUCCIN A LA PROGRAMACIN
Programas Compiladores.Son los traductores a lenguaje mquina de los lenguajes de alto nivel. Un compilador es un programa de software escrito en algn lenguaje de programacin cuyo objetivo es traducir el correspondiente programa fuente (fichero constituido por un conjunto de instrucciones desarrolladas en un lenguaje de alto nivel) a su equivalente en cdigo mquina, tambin denominado programa objeto. Su misin, con otras palabras es, analizar el programa fuente y traducirlo a otro equivalente escrito en otro lenguaje (por ejemplo, en el lenguaje de la mquina). La diferencia ms destacable entre un compilador y un intrprete radica en que, mientras que un intrprete acepta un programa fuente que traduce y ejecuta simultneamente analizando cada sentencia o instruccin por separado, un compilador efecta dicha operacin en fases independientes, primero traduce completamente el programa fuente a cdigo mquina y seguidamente ejecuta el programa. Otra de las funciones del compilador adems de la DEPURACIN SINTCTICA del programa FUENTE es producir un listado indicando la lnea donde se ha detectado y la regla sintctica que se ha infringido. Pasos para la creacin de un programa ejecutable escrito en un lenguaje de alto nivel: 1. - Escribir el cdigo fuente (editor de texto). 2. - Compilar y Linkeditar el cdigo 3. - Ejecutar el cdigo que produce la compilacin. Como se ha enumerado ms arriba, las Fases de creacin de ejecutables son: 1. Edicin: El programador con un editor de textos genera el cdigo fuente, en un archivo o en varios. 2. Compilacin: Cada archivo de cdigo fuente se compila y se obtiene un archivo de cdigo objeto. La compilacin tiene las siguientes fases: - Anlisis lxico - Anlisis sintctico - Anlisis semntico - Optimizacin - Generacin de cdigo.

16

193

INTRODUCCIN A LA PROGRAMACIN

Linkaje: Se montan, enlazan y vinculan todos los cdigos objeto y se genera un archivo en cdigo mquina, capaz de ser ejecutado en el ordenador. Ejecucin: El sistema operativo monta en memoria el programa ejecutable y lo ejecuta. Visto secuencialmente :

17

194

INTRODUCCIN A LA PROGRAMACIN
Y este mismo proceso de compilacin en los lenguajes de alto nivel se ve secuencialmente y con un poco ms de profundidad en el esquema siguiente:

El analizador lxico: Detecta las palabras reservadas, signos de puntuacin, variables etc. El analizador sintctico: Comprueba que las sentencias son correctas desde el punto de vista sintctico. El analizador semntico: Comprueba que las sentencias son correctas desde el punto de vista semntico. El operador de cdigo intermedio: Realiza la primera traduccin del cdigo fuente. El optimizador de cdigo: Realiza mejoras en la eficiencia del programa. El operador de cdigo final: Realiza la ltima traduccin dando lugar al cdigo objeto, que es el cdigo escrito en lenguaje ensamblador.

18

195

INTRODUCCIN A LA PROGRAMACIN
6. Cdigo fuente, cdigo objeto y cdigo ejecutable.
Definicin de conceptos de Compilacin:

PROGRAMA FUENTE:

Programa 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.

19

196

INTRODUCCIN A LA PROGRAMACIN
El programa LINKEDITADOR, tiene como funcin bsica incorporar (ENLAZAR), tanto los mdulos OBJETO definidos por el compilador, como los programas o subprogramas tambin llamados funciones o procedimientos. Con el conjunto formado por el programa OBJETO, ms los mdulos o librerias incorporados, ms los subprogramas aadidos, genera lo que se denomina programa EJECUTABLE. Definicin de conceptos de Linkeditacin y enlace:

MODULO COBOL:

Conjunto de instrucciones mquina, que son capaces de realizar la accin pedida por un verbo COBOL. Nombre predefinido que asocia el compilador a un verbo COBOL y el LINKEDITOR a un conjunto de instrucciones residentes en una librera. Programa generado por el linkeditor a partir del programa OBJETO generado por el compilador, los mdulos COBOL Y LOS POSIBLES PROGRAMAS LLAMADOS. El programa EJECUTABLE, como dice la palabra, est dispuesto para realizar el proceso. Programa, en nuestro caso COBOL, que contiene una o n veces el verbo CALL para solicitar que se le incorpore una copia del programa indicado como operando de dicho verbo.

NOMBRE MODULO:

PROGRAMA EJECUTABLE:

PROGRAMA LLAMANTE:

Ejecucin y Puesta a Punto de Programas. Una vez que el programa ha sido LINKEDITADO, ya SI se puede ejecutar. Los PROGRAMAS que de forma automtica desarrollan los Sistemas de la Compaa (nminas, control de produccin, etc..) son, como es lgico, PROGRAMAS EJECUTABLES, que residen permanentemente en LIBRERIAS. Para que se ejecuten, basta con llamarlos o referenciarlos adecuadamente. Sin embargo, hasta que un PROGRAMA pasa a SER EJECUTABLE, ha de recorrer un camino que podemos definir como de PUESTA a PUNTO.

20

197

INTRODUCCIN A LA PROGRAMACIN
Este camino a recorrer tiene como objetivo garantizar que el PROGRAMA funciona y funciona bien. Slo a partir de este momento el programa podr pasar a residir en la librera de PROGRAMAS EJECUTABLES (programas en explotacin). Durante la PUESTA a PUNTO el programa se har EJECUTABLE solamente el tiempo necesario para probarlo y conseguir unos resultados. Si es necesario, se corregirn instrucciones y de nuevo se probar el Programa. El circuito de la PUESTA a PUNTO ser COMPILAR, LINKEDITAR y EJECUTAR tantas veces como se considere necesario. Lgicamente en esta Fase intervienen tambin los DATOS de ENTRADA as como los RESULTADOS. Definicin de conceptos de Ejecucin y puesta apunto de programas: PROGRAMA EJECUTABLE TEMPORAL: Programa en situacin de prueba que permanece en un disco durante el tiempo imprescindible para que pueda ser probado. PROGRAMA EJECUTABLE CATALOGADO: Programa Puesto a Punto que reside permanentemente en una LIBRERIA dispuesto para SER EJECUTADO cuando sea llamado. CIRCUITO DE PRUEBA: Ciclo normalmente repetitivo en el que intervienen: EL PROGRAMA FUENTE recin corregido, que pasa a ser PROGRAMA OBJETO, a continuacin PROGRAMA EJECUTABLE (provisional) que da unos resultados revisables. JUEGO DE FICHEROS DE PRUEBAS ENSAYO: FICHEROS que simulan a FICHEROS REALES, como entrada de datos al programa, para conseguir probar todas las instrucciones y todas las situaciones y caminos del Programa.

21

198

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

LA PROGRAMACIN ESTRUCTURADA. PSEUDOCDIGOS Y ESTRUCTURAS BSICAS


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.

201

LA PROGRAMACIN ESTRUCTURADA. PSEUDOCDIGOS Y ESTRUCTURAS BSICAS


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:

202

LA PROGRAMACIN ESTRUCTURADA. PSEUDOCDIGOS Y ESTRUCTURAS BSICAS


- 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.

203

LA PROGRAMACIN ESTRUCTURADA. PSEUDOCDIGOS Y ESTRUCTURAS BSICAS


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.

204

LA PROGRAMACIN ESTRUCTURADA. PSEUDOCDIGOS Y ESTRUCTURAS BSICAS


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.

205

LA PROGRAMACIN ESTRUCTURADA. PSEUDOCDIGOS Y ESTRUCTURAS BSICAS

206

LA PROGRAMACIN ESTRUCTURADA. PSEUDOCDIGOS Y ESTRUCTURAS BSICAS

207

LA PROGRAMACIN ESTRUCTURADA. PSEUDOCDIGOS Y ESTRUCTURAS BSICAS

10

208

LA PROGRAMACIN ESTRUCTURADA. PSEUDOCDIGOS Y ESTRUCTURAS BSICAS


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.

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


Funcionamiento interno del BUCLE FOR Se ejecutan las instrucciones de la repetitiva mientras la condicin es cierta.

15

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

LA PROGRAMACIN ESTRUCTURADA. PSEUDOCDIGOS Y ESTRUCTURAS BSICAS


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.

19

217

LA PROGRAMACIN ESTRUCTURADA. PSEUDOCDIGOS Y ESTRUCTURAS BSICAS

Los programas interactivos exigen la intervencin del usuario en tiempo de ejecucin: - Para suministrar datos - Para indicar al programa lo que debe hacer por medio de mens. Los programas interactivos limitan y orientan la accin del usuario. Como en los programas secuenciales tambin se les llama programas basados u orientados a procedimientos o a algoritmos (procedural languages). Este tipo de programas siguen utilizndose ampliamente en la actualidad, pero la difusin de los PCs y los GUIs (Interfaces Grficos de Usuario) ha puesto de actualidad otros tipos de programacin.

20

218

LA PROGRAMACIN ESTRUCTURADA. PSEUDOCDIGOS Y ESTRUCTURAS BSICAS

Los programas orientados a eventos son los programas tpicos de Windows, tales como Explorer, Word, Excel, PowerPoint, Access y otros. Cuando uno de estos programas se ha iniciado, se queda en espera de las acciones del usuario o del sistema, dichas acciones se denominan eventos. El usuario decide, interactuando con el interfaz, si quiere abrir y modificar un fichero existente, o bien comenzar a crear un fichero desde el principio, o cualquier otra accin que el programa ofrezca al usuario mediante el interfaz. El tipo de programacin que ejecuta cdigo cuando se producen determinados eventos es la denominada programacin orientada a eventos. Un evento se produce sobre un elemento del interfaz, y esto hace que se ejecute el cdigo asociado a ese elemento para ese evento. Los elementos del interfaz se denominan controles y los cdigos que un control ejecuta como reaccin a un evento se llaman mtodos. Los controles tienen caracterizado su comportamiento segn el estado de sus propiedades.

21

219

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

TCNICAS DE PROGRAMACIN ESTRUCTURADA


1. TIPOS DE DATOS MS UTILIZADOS EN LA MAYORA DE LOS LENGUAJES DE PROGRAMACIN. (Revisin de Conceptos)
Nmero enteros: Caracter Numerico Entero Numerico Entero largo Byte (1 byte) Integer (2 bytes) Long (4 bytes) 0 a 255 -32768 a 32767 -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. Datos Boleanos (verdadero/falso) Booleano/Switch Datos tipo Fechas Fecha y Hora

String (hasta 64K. Un caracter por byte)

Boolean (2 bytes)

True o False

Date (8 bytes) desde ao 100 a 9999

RESUMEN:

Tipologa y Tamao de los datos 0 a 255 -32.768 a 32.767 -2.147.483.648 a 2.147.483.647 BOOLEAN FLOAT STRING True / False Decimales Alfanumricos

BYTE INTEGER LONG INTEGER

223

TCNICAS DE PROGRAMACIN ESTRUCTURADA


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.

224

TCNICAS DE PROGRAMACIN ESTRUCTURADA

Se utilizan para establecer una relacin entre dos valores. Compara estos valores entre si y esta comparacin produce un resultado de verdadero o falso. Los operadores relacinales comparan valores del mismo tipo (numricos o cadenas). Tienen el mismo nivel de prioridad en su evaluacin. Los operadores relacinales tiene menor prioridad que los aritmticos.

225

TCNICAS DE PROGRAMACIN ESTRUCTURADA


Formatos De Las Instrucciones Utilizadas En La Programacin Estructurada Para El Diseo De Algoritmos Y Programas A Travs De Pseudocdigos.

226

TCNICAS DE PROGRAMACIN ESTRUCTURADA


Instrucciones Repetitivas o Instrucciones Cclicas.

227

TCNICAS DE PROGRAMACIN ESTRUCTURADA


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).

228

TCNICAS DE PROGRAMACIN ESTRUCTURADA


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

229

TCNICAS DE PROGRAMACIN ESTRUCTURADA


2. Leer dos nmeros e imprimir el mayor de ellos.

10

230

TCNICAS DE PROGRAMACIN ESTRUCTURADA


3. Leer un nmero, si es negativo lo imprime, si no, lee un nuevo nmero e imprime la suma de ambos.

11

231

TCNICAS DE PROGRAMACIN ESTRUCTURADA


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).

12

232

TCNICAS DE PROGRAMACIN ESTRUCTURADA


(4.2 continuacin. Otra forma vlida)

13

233

TCNICAS DE PROGRAMACIN ESTRUCTURADA


(4.3 continuacin. Otra forma Vlida. Aunque solo se guarda el nmero mayor. Los tecleados se van perdiendo. )

14

234

TCNICAS DE PROGRAMACIN ESTRUCTURADA


(4.4 continuacin. Otras formas Vlidas. Aunque solo se guarda el nmero mayor. Los tecleados se van perdiendo. CON REPETITIVAS).

15

235

TCNICAS DE PROGRAMACIN ESTRUCTURADA


(4.5 continuacin. Otra forma vlida EN LA QUE SE DETECTA LA POSIBILIDAD DE QUE HAYA NMEROS IGUALES).
Se pueden dar tres situaciones: Que los 3 nmeros sean iguales Que 2 de ellos sean iguales N1 N2 N3 1 1 1 N1=N2 Y N1=N3 1 1 2 N1=N2 N1=N3 N2=N3 1 2 1 2 1 1 2 2 1 2 1 2 1 2 1 ===> Ya visto en versiones anteriores en la pizarra

Y que los 3 sean distintos

16

236

TCNICAS DE PROGRAMACIN ESTRUCTURADA


5. Leer dos nmeros e imprimir todos los nmeros naturales comprendidos entre los dos nmeros ledos.

17

237

TCNICAS DE PROGRAMACIN ESTRUCTURADA


(Tercera Versin valida : Se imprimir del numero primero al nmero segundo con independencia de cual sea el mayor y el menor).

18

238

TCNICAS DE PROGRAMACIN ESTRUCTURADA


(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.

19

239

TCNICAS DE PROGRAMACIN ESTRUCTURADA


(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)

20

240

TCNICAS DE PROGRAMACIN ESTRUCTURADA


6. Leer el nombre de una figura geomtrica (tringulo, cuadrado o pentgono) e imprimir su rea.

21

241

TCNICAS DE PROGRAMACIN ESTRUCTURADA


LO MISMO PERO LLAMANDO A PROCEDIMIENTOS DONDE SE DESARROLLA

22

242

TCNICAS DE PROGRAMACIN ESTRUCTURADA


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.

23

243

TCNICAS DE PROGRAMACIN ESTRUCTURADA

24

244

TCNICAS DE PROGRAMACIN ESTRUCTURADA


OTRAS POSIBILIDADES: (MENOS NORMALES)

25

245

TCNICAS DE PROGRAMACIN ESTRUCTURADA


8. Leer un nmero entero positivo e imprimir su tabla de multiplicar as como la de los nmeros anterior y posterior al tecleado.

26

246

TCNICAS DE PROGRAMACIN ESTRUCTURADA


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

27

247

TCNICAS DE PROGRAMACIN ESTRUCTURADA


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

28

248

EJERCICIOS DE METODOLOGA DE PROGRAMACIN

249

EJERCICIOS DE METODOLOGA DE PROGRAMACIN


1. Leer un nmero entero e imprimir todos los NMEROS NATURALES comprendidos entre 1 y el nmero entero ledo inclusive.

250

EJERCICIOS DE METODOLOGA DE PROGRAMACIN


2. Leer un nmero e imprimir todos los nmeros PARES comprendidos entre 1 y ese nmero.

251

EJERCICIOS DE METODOLOGA DE PROGRAMACIN


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.

252

EJERCICIOS DE METODOLOGA DE PROGRAMACIN


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).

253

EJERCICIOS DE METODOLOGA DE PROGRAMACIN


5. Leer cinco nmeros y si alguno de ellos es par, que imprima la suma de estos cinco nmeros.

254

EJERCICIOS DE METODOLOGA DE PROGRAMACIN


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.

255

EJERCICIOS DE METODOLOGA DE PROGRAMACIN


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.

256

EJERCICIOS DE METODOLOGA DE PROGRAMACIN


(AQU CON ALGN MATIZ DISTINTO)

257

EJERCICIOS DE METODOLOGA DE PROGRAMACIN


8. El programa nada ms comenzar solicita al usuario que teclee una clave o password numerica de acceso. 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 intentos. (Yo soy el programador y s que la PW definida internamente es 88).

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

ARRAYS Y TABLAS UNIDIMENSIONALES, BIDIMENSIONALES, TRIDIMENSIONALES Y MULTIDIMENSIONALES.


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.

261

ARRAYS Y TABLAS UNIDIMENSIONALES, BIDIMENSIONALES, TRIDIMENSIONALES Y MULTIDIMENSIONALES.


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.

262

ARRAYS Y TABLAS UNIDIMENSIONALES, BIDIMENSIONALES, TRIDIMENSIONALES Y MULTIDIMENSIONALES.

263

ARRAYS Y TABLAS UNIDIMENSIONALES, BIDIMENSIONALES, TRIDIMENSIONALES Y MULTIDIMENSIONALES.

264

ARRAYS Y TABLAS UNIDIMENSIONALES, BIDIMENSIONALES, TRIDIMENSIONALES Y MULTIDIMENSIONALES.


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.

265

ARRAYS Y TABLAS UNIDIMENSIONALES, BIDIMENSIONALES, TRIDIMENSIONALES Y MULTIDIMENSIONALES.


PROGRAMA ORDENACION DE TABLAS MUY OPTIMIZADO (continuacin)

266

ARRAYS Y TABLAS UNIDIMENSIONALES, BIDIMENSIONALES, TRIDIMENSIONALES Y MULTIDIMENSIONALES.

267

ARRAYS Y TABLAS UNIDIMENSIONALES, BIDIMENSIONALES, TRIDIMENSIONALES Y MULTIDIMENSIONALES.


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.

10

268

ARRAYS Y TABLAS UNIDIMENSIONALES, BIDIMENSIONALES, TRIDIMENSIONALES Y MULTIDIMENSIONALES.


ORDENACION POR MTODO DE LA BURBUJA MEJORADO

11

269

ARRAYS Y TABLAS UNIDIMENSIONALES, BIDIMENSIONALES, TRIDIMENSIONALES Y MULTIDIMENSIONALES.


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.

12

270

ARRAYS Y TABLAS UNIDIMENSIONALES, BIDIMENSIONALES, TRIDIMENSIONALES Y MULTIDIMENSIONALES.


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.

13

271

ARRAYS Y TABLAS UNIDIMENSIONALES, BIDIMENSIONALES, TRIDIMENSIONALES Y MULTIDIMENSIONALES.

14

272

ARRAYS Y TABLAS UNIDIMENSIONALES, BIDIMENSIONALES, TRIDIMENSIONALES Y MULTIDIMENSIONALES.


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.

15

273

ARRAYS Y TABLAS UNIDIMENSIONALES, BIDIMENSIONALES, TRIDIMENSIONALES Y MULTIDIMENSIONALES.


BORRAR UN ELEMENTO DE UNA TABLA (continuacin)

16

274

EJERCICIOS CON TABLAS/ARRAYS BIDIMENSIONALES (MATRICES)

275

EJERCICIOS CON TABLAS/ARRAYS BIDIMENSIONALES (MATRICES)


FORMATOS TIPICOS DE TRATAMIENTOS DE TABLAS BIDIMENSIONALES:

276

EJERCICIOS CON TABLAS/ARRAYS BIDIMENSIONALES (MATRICES)


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.

277

EJERCICIOS CON TABLAS/ARRAYS BIDIMENSIONALES (MATRICES)


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.

278

EJERCICIOS CON TABLAS/ARRAYS BIDIMENSIONALES (MATRICES)


Opcion2: Si el lenguaje NO permite inicializar a la hora de crear las variables.

279

EJERCICIOS CON TABLAS/ARRAYS BIDIMENSIONALES (MATRICES)


Opcion3: AQU SE METEN UNOS EN LA OTRA DIAGONAL.

280

EJERCICIOS CON TABLAS/ARRAYS BIDIMENSIONALES (MATRICES)


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).

281

EJERCICIOS CON TABLAS/ARRAYS BIDIMENSIONALES (MATRICES)


Otra posibilidad con tablas de tamaos invertidos:

282

EJERCICIOS CON TABLAS/ARRAYS BIDIMENSIONALES (MATRICES)


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 formato que desee el alumno. mostrarlas por pantalla con el

B: Hallar tambin la media obtenida por los alumnos en cada una de las 10 asignaturas.

OTRA VERSION PODRIA SER CREAR UNA NUEVA TABLA CON UNA FILA MAS Y UNA COLUMNA MS PARA GUARDAR EN ELLAS LA MEDIA DE LAS ASIGNATURAS Y LA MEDIA DE LOS ALUMNOS CONFORME SE VAN OBTENIENDO Y SE VAN IMPRIMIENDO.

283

EJERCICIOS CON TABLAS/ARRAYS BIDIMENSIONALES (MATRICES)


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).

10

284

EJERCICIOS CON TABLAS/ARRAYS BIDIMENSIONALES (MATRICES)


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.

11

285

EJERCICIOS CON TABLAS/ARRAYS BIDIMENSIONALES (MATRICES)


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:

12

286

EJERCICIOS CON TABLAS/ARRAYS BIDIMENSIONALES (MATRICES)

13

287

PRCTICAS DE PROGRAMACIN ESTRUCTURADA CON PSEUDOCDIGOS (seguimiento de algoritmos)

288

PRCTICAS DE PROGRAMACIN ESTRUCTURADA CON PSEUDOCDIGOS (seguimiento de algoritmos)


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:

289

PRCTICAS DE PROGRAMACIN ESTRUCTURADA CON PSEUDOCDIGOS (seguimiento de algoritmos)


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?

290

PRCTICAS DE PROGRAMACIN ESTRUCTURADA CON PSEUDOCDIGOS (seguimiento de algoritmos)


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:

291

PRCTICAS DE PROGRAMACIN ESTRUCTURADA CON PSEUDOCDIGOS (seguimiento de algoritmos)


4. Cuando termine el algoritmo siguiente qu procedimiento se habr procesado:

292

PRCTICAS DE PROGRAMACIN ESTRUCTURADA CON PSEUDOCDIGOS (seguimiento de algoritmos)


5. Cuando haya finalizado el siguiente proceso, indica el valor de las variables R, T y X.

293

PRCTICAS DE PROGRAMACIN ESTRUCTURADA CON PSEUDOCDIGOS (seguimiento de algoritmos)


6. Cuando haya finalizado el siguiente proceso, indica el valor de la variables A, B , Z e Y.

294

PRCTICAS DE PROGRAMACIN ESTRUCTURADA CON PSEUDOCDIGOS (seguimiento de algoritmos)


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.

295

PRCTICAS DE PROGRAMACIN ESTRUCTURADA CON PSEUDOCDIGOS (seguimiento de algoritmos)


Finalizado el proceso Qu valores tendrn las variables A y B ?

10. Finalizado el proceso Qu valor de X se imprimir ?

296

PRCTICAS DE PROGRAMACIN ESTRUCTURADA CON PSEUDOCDIGOS (seguimiento de algoritmos)

297

PRCTICAS DE PROGRAMACIN ESTRUCTURADA CON PSEUDOCDIGOS (seguimiento de algoritmos)


1.- Finalizado el proceso Qu valores tendrn las variables A y B ?.

1. Finalizado el proceso Qu valor de X se imprimir ?.

298

PRCTICAS DE PROGRAMACIN ESTRUCTURADA CON PSEUDOCDIGOS (seguimiento de algoritmos)


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 ?.

299

PRCTICAS DE PROGRAMACIN ESTRUCTURADA CON PSEUDOCDIGOS (seguimiento de algoritmos)


4. Finalizado el proceso Qu valores tendrn las variables A y B ?.

5. Finalizado el proceso Qu valor de I se imprimir ?.

300

PRCTICAS DE PROGRAMACIN ESTRUCTURADA CON PSEUDOCDIGOS (seguimiento de algoritmos)


6. Finalizado el proceso Qu valores tendrn las variables X, Y y Z ?.

301

PRCTICAS DE PROGRAMACIN ESTRUCTURADA CON PSEUDOCDIGOS (seguimiento de algoritmos)


7. Finalizado el proceso Qu valores tendrn las variables A y B ?.

302

PRCTICAS DE PROGRAMACIN ESTRUCTURADA CON PSEUDOCDIGOS (seguimiento de algoritmos)


8. Finalizado el proceso Qu valor de X y de A se imprimir ?

303

PRCTICAS DE PROGRAMACIN ESTRUCTURADA CON PSEUDOCDIGOS (seguimiento de algoritmos)


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)

304

PRCTICAS DE PROGRAMACIN ESTRUCTURADA CON PSEUDOCDIGOS (seguimiento de algoritmos)


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).

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

PRCTICAS DE PROGRAMACIN ESTRUCTURADA CON PSEUDOCDIGOS (seguimiento de algoritmos)


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).

309

PRCTICAS DE PROGRAMACIN ESTRUCTURADA CON PSEUDOCDIGOS (seguimiento de algoritmos)


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).

310

PRCTICAS DE PROGRAMACIN ESTRUCTURADA CON PSEUDOCDIGOS (seguimiento de algoritmos)


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.b.b.d.OPCIN CORRECTA: El Bucle 1 INFINITAS Veces y el Bucle 2 TAMBIN. El Bucle 1 INFINITAS Veces y el Bucle 2 NUNCA. El Bucle 2 se realiza 3 Veces por cada 10 del Bucle 1. Ninguna de las anteriores respuestas es vlida.

311

PRCTICAS DE PROGRAMACIN ESTRUCTURADA CON PSEUDOCDIGOS (seguimiento de algoritmos)


3. Qu valor tendr la variable X cuando termine el programa.

4. Qu valor tendr la variable Z cuando termine el programa.

312

PRCTICAS DE PROGRAMACIN ESTRUCTURADA CON PSEUDOCDIGOS (seguimiento de algoritmos)


5. Qu valor tendr la variable Z cuando termine el programa.

313

PRCTICAS DE PROGRAMACIN ESTRUCTURADA CON PSEUDOCDIGOS (seguimiento de algoritmos)


6. Finalizado el proceso Qu valor de X y de C se imprimir ?.

314

PRCTICAS DE PROGRAMACIN ESTRUCTURADA CON PSEUDOCDIGOS (seguimiento de algoritmos)


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 ?.

315

PRCTICAS DE PROGRAMACIN ESTRUCTURADA CON PSEUDOCDIGOS (seguimiento de algoritmos)


9. Finalizado el proceso Qu valor tendr CONTADOR ?

10. Finalizado el proceso Qu valor tendr CONTADOR ?

316

PRCTICAS DE PROGRAMACIN ESTRUCTURADA CON PSEUDOCDIGOS (seguimiento de algoritmos)


11. Qu valor tendrn estas variables cuando haya finalizado el programa?

10

317

PRCTICAS DE PROGRAMACIN ESTRUCTURADA CON PSEUDOCDIGOS (seguimiento de algoritmos)


12. Qu valor tendrn estas variables cuando haya finalizado el programa?

11

318

PRCTICAS DE PROGRAMACIN ESTRUCTURADA CON PSEUDOCDIGOS (seguimiento de algoritmos)


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).

12

319

PRCTICAS DE PROGRAMACIN ESTRUCTURADA CON PSEUDOCDIGOS (seguimiento de algoritmos)


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:

13

320

PRCTICAS DE PROGRAMACIN ESTRUCTURADA CON PSEUDOCDIGOS (seguimiento de algoritmos)


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

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

Caractersticas de la Tecnologa Java


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.

i
3
325

Caractersticas de la Tecnologa Java


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.

i
4
326

Caractersticas de la Tecnologa Java


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.

i
5
327

Caractersticas de la Tecnologa Java


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.

i
6
328

Caractersticas de la Tecnologa Java


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.

i
7
329

Caractersticas de la Tecnologa Java


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.

i
8
330

Caractersticas de la Tecnologa Java


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

i
9
331

Caractersticas de la Tecnologa Java


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.

i
10
332

Caractersticas de la Tecnologa Java


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.

i
11
333

Caractersticas de la Tecnologa Java


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
334

Caractersticas de la Tecnologa Java


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.

i
13
335

Caractersticas de la Tecnologa Java


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:

i
14
336

EDICIONES JAVA

337

NDICE
EDICIONES JAVA
1. Java Standar Edition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 2. Java Enterprise Edition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5 3. Java Micro Edition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10 4. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15

338

Ediciones Java
1. Java Standar Edition
En ste te mostraremos los grandes bloques en que se divide la tecnologa Java Ediciones de la Tecnologa Java Actualmente podramos decir que la Versin 2 de Java de Sun Microsystem contiene 3 ediciones distintas: Java Estndar Edition (J2SE), Java Enterprise Edition (J2EE) y Java Micro Edition (J2ME).

i
3
339

Ediciones Java
Java Standar Edition Java Estndar Edition sera lo que normalmente entendemos como aplicaciones cliente, todo lo que sera el desarrollo de la parte del cliente, lo que va a manejar en su puesto de trabajo. En esta parte se suele incluir todo lo que son los fundamentos del lenguaje, la sintaxis con todo lo que abarca, tipos de datos, etc. Tambin lo que es el tratamiento de errores, todos los bucles de control de flujo, arrays, colecciones. La edicin J2SE se emplea para programar en dispositivos personales tales como desktops y laptops. A un nivel un poco ms avanzado, permite el desarrollo de applets para Internet y el desarrollo de interfaces grficas de usuario mediante las APIS AWT y Swing que nos proporciona el lenguaje Java.

i
4
340

Ediciones Java
2. Java Enterprise Edition
Funciones de J2EE Internet y la World Wide Web representan el fundamento sobre los cuales se est construyendo la economa de la informacin. Transacciones bancarias, ventas por Internet, comercio electrnico etc. La meta de J2EE es definir un estndar que ayude a suplir los retos tecnolgicos en esta nueva era. 1. Soporta aplicaciones distribuidas que toman las ventajas de las tecnologas existentes y en desarrollo, simplificando el proceso a travs de un modelo de aplicaciones basados en componentes (unidades de software reutilizables). 2. Soporta aplicaciones desde las propias corporativas hasta e-commerce con Web en Internet. 3. Provee soporte tanto para el lado del servidor como para el lado del cliente, para aplicaciones corporativas multi-capa (multi-tier) Contenedor De la mano de un modelo basado en componentes se encuentra la nocin de contenedor. Un contenedor es un entorno estandarizado de ejecucin que provee servicios especficos a componentes. Por ejemplo todos los contenedores Web proveen soporte para requerimientos de clientes, realizar un procesamiento y retornar los resultados (como cuando rellenamos un formulario y enviamos los resultados a un servidor para ser procesados).

5
341

Ediciones Java
Componentes J2EE tiene perfectamente especificada la API para que un desarrollador pueda hacer: componentes, servicios y comunicaciones.

i
6
342

Ediciones Java
Componentes: contenedor Todos los componentes dependen de una entidad de nivel de sistema llamada contenedor. Los contenedores proveen a los componentes, servicios como ciclo de vida, seguridad, multithreading, etc.

Contenedores Servlets Los componentes Web son hospedados por contenedores Servlets, JSP y Web.

i
7
343

Ediciones Java
Enterprise Java Beans La arquitectura Enterprise Java Beans (EJB) es una tecnologa del lado del servidor para desarrollo y ejecucin de componentes para lgica de negocio de una aplicacin empresarial. EJB son escalables, transaccionales y multiusuario. Bsicamente son lo que llamamos las reglas de negocio o dicho de otro modo los algoritmos que resuelven los problemas de la empresa. Hay tres tipos de EJB: - Session Bean - Entity Bean -Message Beans Servicios de la Plataforma J2EE La plataforma J2EE provee los Servicio de Nombres, Servicios Deployment, Servicios Transaccionales y Servicios de Seguridad Servicio de Nombres Ofrece a los clientes de aplicacin , EJB y componentes Web acceso a ambiente de nombres JNDI, lo que significa poder localizar un objeto o servicio dentro de una red ( por ejemplo una Intranet) a travs de un nico nombre.

i
8
344

Ediciones Java
Comunicaciones Las comunicaciones se refieren a las tecnologas de mensajera: envo y recepcin de mensajes asincrnicos, Java Message Service (JMS) y Java Mail. Pulsa en las imgenes y podrs conocer ms detalles de estas tecnologas.

Java Message Service

Java Mail

i
9
345

Ediciones Java
3. Java Micro Edition
Java Micro Edition (J2ME) es la versin de Java orientada a los dispositivos mviles.

Debido a que los dispositivos mviles tienen una potencia de clculo baja e interfaces de usuario pobres, es necesaria una versin especfica de Java destinada a estos dispositivos, ya que el resto de versiones de Java, J2SE o J2EE, no encajan dentro de este esquema. J2ME es por tanto, una versin reducida de J2SE. La configuracin es un mnimo grupo de APIs (Application Program Interface), tiles para desarrollar las aplicaciones destinadas a un amplio rango de dispositivos. La configuracin estndar para los dispositivos inalmbricos es conocida como CLDC (Connected Limited Device Configuration). CLDC (Connected Limited Device Configuration) El CLDC proporciona un nivel mnimo de funcionalidades para desarrollar aplicaciones para un determinado conjunto de dispositivos inalmbricos.

i
10
346

Ediciones Java
Se puede decir que CLDC es el conjunto de clases esenciales para construir aplicaciones. Hoy por hoy, slo tenemos una configuracin, pero es de esperar que en el futuro aparezcan distintas configuraciones orientadas a determinados grupos de dispositivos. Encontramos requisitos en los CLDC tanto de hardware como de memoria. - Requisito de hardware - Requisito de memoria Limitaciones CLDC Es complicado definir una serie de clases de error estndar, que se ajuste a todos los dispositivos contemplados dentro de CLDC. La solucin es soportar un grupo limitado de clases de error y permitir que el API especfico de cada dispositivo defina su propio conjunto de errores y excepciones. Limitaciones impuestas por CLDC - Operaciones en coma flotante. CLDC no proporciona soporte para matemtica en coma flotante. - Eliminacin del mtodo Object.finalize. Este mtodo es invocado cuando un objeto es eliminado de la memoria, para optimizar los recursos. - Se limita el manejo de las excepciones. La seguridad dentro de CLDC es sencilla, sigue el famoso modelo sandbox. Las lneas bsicas del modelo de seguridad sandbox enC LDC son: Los ficheros de clases deben ser verificados como aplicaciones vlidas. Slo las APIs predefinidas dentro de CLDC estn disponibles. No se permiten cargadores de clases definidos por el usuario. Slo las capacidades nativas proporcionadas por CLDC son accesibles.

i
11
347

Ediciones Java
Arquitectura de J2ME En la arquitectura de J2ME, por encima de la configuracin, tenemos el perfil (profile). El perfil es un grupo ms especifico de APIs, desde el punto de vista del dispositivo. Es decir, la configuracin se ajusta a una familia de dispositivos, y el perfil se orienta hacia un grupo determinado de dispositivos dentro de dicha familia. El perfil, aade funcionalidades adicionales a las proporcionadas por la configuracin. La especificacin MIDP (Mobile Information Device Profile), describe un dispositivo MIDP como un dispositivo pequeo, de recursos limitados, mvil y con una conexin inalmbrica

MIDLet Las aplicaciones J2ME desarrolladas bajo la especificacin MIDP, se denominan MIDLets. - Las clases de un MIDLet, son almacenadas en bytecodes java, dentro de un fichero .class. - Estas clases, deben ser verificadas antes de su puesta en marcha, para garantizar que no realizan ninguna operacin no permitida. - Este preverificacin, se debe hacer debido a las limitaciones de la mquina virtual usada en estos dispositivos. - Esta mquina virtual se denomina KVM. Para mantener esta mquina virtual lo ms sencilla y pequea posible, se elimina esta verificacin, y se realiza antes de la entrada en produccin. - La preverificacin se realiza despus de la compilacin, y el resultado es una nueva clase, lista para ser puesta en produccin.

12
348

Ediciones Java
Ficheros Jar Los MIDLets, son empaquetados en ficheros .jar. Se requiere alguna informacin extra, para la puesta en marcha de las aplicaciones. Esta informacin se almacena en el fichero de manifiesto, que va incluido en el fichero .jar y en un fichero descriptor, con extensin .jad. Un fichero .jar tpico, por tanto, se compondr de: - Clases de soporte - Recursos (imgenes, sonidos...) - Manifiesto (fichero .mf) - Descriptor (fichero .jad) Un fichero .jar puede contener varios MIDLets. Esta coleccin de MIDLets, se suele llamar MIDLet Suite. Esta unin de varios MIDLets en una distribucin, permite compartir recursos (imgenes, sonidos...), y por tanto optimizar los recursos del dispositivo. MIDP Api Los elementos principales involucrados en el proceso de desarrollo con Java, son el lenguaje Java propiamente dicho y el grupo de APIs (Application Programming Interface) que proporcionan el soporte para el software desarrollado.

i
13
349

Ediciones Java
Como ya se ha mencionado, los MIDlets son aplicaciones especiales, diseadas bajo los requerimientos de la especificacin MIDP. Esta especificacin es una serie de normas que indican las capacidades y restricciones de Java respecto a los dispositivos mviles. Un aspecto importante de estas capacidades y limitaciones, es el conjunto de clases e interfaces disponibles para afrontar el desarrollo de aplicaciones. La especificacin MIDP provee una descripcin detallada del API disponible para el desarrollo de MIDlets. El CLDC proporciona un API adicional. De hecho, el API de MIDP, se basa en el API de CLDC, para construir clases e interfaces ms especficos.

i
14
350

Ediciones Java
4. Resumen
Has llegado al final de este recurso formativo que denominamos Ediciones Java. En esta leccin hemos estudiado los siguientes contenidos:

i
15
351

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

Primeros pasos en Java


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.

i
3
354

Primeros pasos en Java


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.

i
4
355

Primeros pasos en Java


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.

i
5
356

Primeros pasos en Java


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.

i
6
357

Primeros pasos en Java


Directorios de instalacin del JDK Si se examina el contenido del directorio JDK se encontrarn estos directorios:

i
7
358

Primeros pasos en Java


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.

i
8
359

Primeros pasos en Java


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

i
9
360

Primeros pasos en Java


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 MSDOS y ejecutaremos nuestro fichero .class de la siguiente forma:

El resultado ser :

i
10
361

Primeros pasos en Java


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.

i
11
362

Primeros pasos en Java


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.

i
12
363

Primeros pasos en Java


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).

i
13
364

Primeros pasos en Java


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.

i
14
365

Primeros pasos en Java


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.

i
15
366

Primeros pasos en Java


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.

i
16
367

Primeros pasos en Java


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.

i
17
368

Primeros pasos en Java


6. Resumen
Has llegado al final de este recurso formativo que denominamos Primeros pasos en Java. En esta leccin hemos estudiado los siguientes contenidos:

i
18
369

INTRODUCCIN A JAVA

370

INTRODUCCIN A JAVA
INTRODUCCIN A JAVA
Plataforma JAVA. Operadores especiales. Prototipos, paso por referencia y recursividad. Caractersticas principales - Gran parecido con el lenguaje C++. - Es independiente de la plataforma (Maquina Virtual de JAVA- JVM Java Virtual Machine). - Lenguaje Interpretado. - Lenguaje Orientado a Objetos. - Es un lenguaje concurrente, ya que ejecuta mltiples lneas de cdigo simultneamente (Hilos). - Applets (Programas dentro de la Web) Entorno de desarrollo JDK (Java Development Kit) incluye el JRE (Java Runtime Environment)

CLASSPATH > Variable de entorno que le indica al sistema dnde localizar las libreras de JAVA PATH > Utilidades de Java. Pasos en el desarrollo de aplicaciones Java - Editor de texto (cdigo fuente). Se archiva con la extensin .java. - Compilacin: javac.exe. Se genera el archivo con extensin .class. A este archivo se le denomina BYTECODE - Intrprete de Java: java.exe (ejecucin del Bytecode) - Visor de Applets: appleviewer.exe (ejecucin del Bytecode). - Depurador: jdb.exe. - Generador de documentacin javadoc.exe. Analiza el cdigo fuente y genera documentacin en cdigo HTML.

2
371

INTRODUCCIN A JAVA
Estructura del JDK 1.5 stndar edition ( J2SE)

Imagen sacada de la pgina oficial de SUN Microsystems

3
372

INTRODUCCIN A JAVA
Operadores condicional y de bits 1. Operador condicional: <condicin> ? <valor cierto> : <valor falso> c = b!= 0 ? b : 0; 2. Operadores & | ~ ^ & 1& 1& 0& 0& | 1 1 0 0 | | | | 1 0 1 0 > > > > 1 1 1 0 a = 30; b = 12; c= a | b; //c = 30 a 00011110 b 00001100 c 00011110 a = 30; b = 12; c= a | b; //c = 30 a b c ~ ~1>0 ~0>1 ^ 1 1 0 1 ^ ^ ^ ^ 1 0 1 1 > > > > 0 1 1 0 a = 30; b = 12; c= a ^ b; //c = 18 a 00011110 b 00001100 c 00010010 a = ~a; a ~a 00011110 11100001 00011110 00001100 -----------------00011110 a nivel de bits: (AND Binario) (OR Binario) (NOT Binario) (XOR Binario)

1 0 1 0

> > > >

1 0 0 0

a = 30; b = 12; c= a & b; //c = 12 a 00011110 b 00001100 c 00001100

1|1>1 1|0>1 0|1>1 0|0>0

4
373

INTRODUCCIN A JAVA
Las funciones o mtodos estticos 1. Introduccin Funcin se considera un conjunto de sentencias recogidas bajo un nombre: class Mensaje { public static void main (String [] args) { salidaCliente(); // Llamada a funcin. ... // Mis Operaciones. ... despideCliente() // Llamada a funcin. } static void salidaCliente () { System.out.println (Buenos das.); } static void despideCliente () { System.out.println (Adios.); } }

5
374

INTRODUCCIN A JAVA
2. El prototipo, la implementacin y la llamada a la funcin. Implementar la funcin consiste en disear el interior de la funcin. La llamada a la funcin se considera el hecho de ejecutar las instrucciones implementadas dentro de la funcin. Una funcin slo se la puede implementar una vez pero se la puede llamar muchas veces. Las funciones pueden estar parametrizadas, es decir, la ejecucin depende de las variables que se pasan en la funcin. Estas variables que se pasan se las denomina parmetros. Adems opcionalmente la funcin puede devolver una solucin. A esta solucin se le denomina retorno de la funcin. static <tipo de dato> <nombre de funcin> (<parmetros>) { cuerpo de la funcin [return <valor de retorno>] } parmetros

static void saludaCliente (String Usuario) { System.out.println (Buenos das+Usuario); } Retorno parmetro

static int suma (int a, int b) { return (a+b); } Ejecucin del Retorno String usuario; saludoCliente(usuario); int z, x=8, y=7; z = suma(x,y); System.out.println(Resultado +suma(x,y)); if (suma(x,y) > 13)

Llamadas a las funciones

6
375

INTRODUCCIN A JAVA

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 variable de clase o en el segmento de pila cuando es una variable local. El tamao del array se genera en el Heap (new). Paso por valor y paso por referencia - Parmetros formales, variables donde recogen los parmetros la implementacin de la funcin. - Parmetros reales, valores que se pasan a la funcin durante la llamada. Los parmetros reales pueden tener los mismos nombres que los parmetros formales.

7
376

INTRODUCCIN A JAVA
static int suma (int a, int b) { return (a + b); } public static void main (String [] args) { int c = suma (3,4); int x = 3, y = 5; int z = suma(x,y); int a = 1, b = 8; int z = suma (a,b); }

PARMETROS FORMALES

PARMETROS REALES

- Paso de parmetros por valor, consiste en hacer una copia de los parmetros y pasarlos a la funcin para que la funcin no modifique las variables originales. - Paso de parmetros por referencia, consiste en pasar la variable original a la funcin. En Java los tipos de datos fundamentales se pasan por valor y no hay forma de pasarlos por referencia. Los arrays y los objetos se pasan por referencia y no hay forma por pasarlos por valor. static void intercambia(int a, int b) { int x = a; PASO POR VALOR a = b; b = x; } public static void main (String [] args) { int a = 2, b = 5; intercambia (a, b); System.out.println(a: +a+ b: +b); // Visualiza a: 2 b: 5. } static void intercambia(int [] numeros) { int z = numeros[0]; PASO POR REFERENCIA numeros[0] = numeros[1]; numeros[1] = z; } public static void main (String [] args) { int [] numeros {2,5}; intercambia (numeros); System.out.println(a: +numeros[0]+ b: +numero[1]s); // Visualiza a: 5 b: 2. }

8
377

INTRODUCCIN A JAVA
Recursividad Una funcin para resolver un problema, en vez de llamar a otra funcin, se llama a s misma pero con unos valores en los parmetros ms cercanos a la solucin. La idea de recursividad va ligada a la de repeticin. Son recursivos aquellos programas que, estando encapsulados dentro de una funcin, son llamados desde ella misma una y otra vez, en contraposicin a los algoritmos iterativos, que hacen uso de bucles while, do-while, for, etc. Ejemplo: Calcular el factorial de un nmero: n != n * (n 1) * (n 2) . * 1 static int factorial (int n) { if (n == 1) return 1; return n * factorial (n 1); } Calcular la sucesin de Fibonacci para los primeros 20 nmeros: static int fibonacci (int n) { if (n == 1 | n == 2) return 1; return fibonacci (n 1) + fibonacci (n - 2); } public static void main (String [] args) { for (int i=0; i < 20); i++) System.out.print (fibonacci(i)+ ); System.out.println(); }

9
378

INTRODUCCION A JAVA Caso prctico


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.

379

INTRODUCCION A JAVA Caso prctico


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.

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

Tipos de datos y cadenas de caracteres


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.

i
3
384

Tipos de datos y cadenas de caracteres


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 Variables Variables Variables de cadena: null numricas enteras: 0 , reales: 0.0 de carcter: \u0000 booleanas: false

Nombrar variables Al nombrar variables no se puede comenzar por nmeros. Podemos utilizar los caracteres que queramos, pero cuidado con usar operadores. Java es case-sensitive y por ello diferencia las maysculas de las minsculas.

i
4
385

Tipos de datos y cadenas de caracteres


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:

i
5
386

Tipos de datos y cadenas de caracteres


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;

i
6
387

Tipos de datos y cadenas de caracteres


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
388

Tipos de datos y cadenas de caracteres


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"

i
8
389

Tipos de datos y cadenas de caracteres


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 .

i
9
390

Tipos de datos y cadenas de caracteres


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();

i
10
391

Tipos de datos y cadenas de caracteres


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:

i
11
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

Operadores y Sentencias de control de flujo


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

i
3
395

Operadores y Sentencias de control de flujo


Incrementos y decrementos

Comparaciones

Operadores lgicos

i
4
396

Operadores y Sentencias de control de flujo


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
397

Operadores y Sentencias de control de flujo


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

i
6
398

Operadores y Sentencias de control de flujo


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; }

i
7
399

Operadores y Sentencias de control de flujo


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.

i
8
400

Operadores y Sentencias de control de flujo


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.

i
9
401

Operadores y Sentencias de control de flujo


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.

i
10
402

Operadores y Sentencias de control de flujo


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.

i
11
403

Operadores y Sentencias de control de flujo


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.

i
12
404

Operadores y Sentencias de control de flujo


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

i
13
405

Operadores y Sentencias de control de flujo


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; }

i
14
406

Operadores y Sentencias de control de flujo


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:

i
15
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

Clases y objetos. Las clases JavaBeans


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() }

i
3
410

Clases y objetos. Las clases JavaBeans


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 { }

i
4
411

Clases y objetos. Las clases JavaBeans


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.

i
5
412

Clases y objetos. Las clases JavaBeans


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.

i
6
413

Clases y objetos. Las clases JavaBeans


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
414

Clases y objetos. Las clases JavaBeans


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); }

i
8
415

Clases y objetos. Las clases JavaBeans


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 } }

i
9
416

Clases y objetos. Las clases JavaBeans


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 .

i
10
417

Clases y objetos. Las clases JavaBeans


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.

i
11
418

Clases y objetos. Las clases JavaBeans


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.

i
12
419

Clases y objetos. Las clases JavaBeans


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. }

i
13
420

Clases y objetos. Las clases JavaBeans


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.

i
14
421

Clases y objetos. Las clases JavaBeans


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.

i
15
422

Clases y objetos. Las clases JavaBeans


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.

i
16
423

Clases y objetos. Las clases JavaBeans


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.

i
17
424

Clases y objetos. Las clases JavaBeans


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
425

Clases y objetos. Las clases JavaBeans


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; }

i
19
426

Clases y objetos. Las clases JavaBeans


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:

i
20
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

Arrays, la clase Object y tipos genricos


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;

i
3
430

Arrays, la clase Object y tipos genricos


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

i
4
431

Arrays, la clase Object y tipos genricos


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.

i
5
432

Arrays, la clase Object y tipos genricos


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.

i
6
433

Arrays, la clase Object y tipos genricos


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 Array args 4 hola 56 luis

El Array args es el nico Array en Java cuya dimensin es indefinida.

i
7
434

Arrays, la clase Object y tipos genricos


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.

i
8
435

Arrays, la clase Object y tipos genricos


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();

i
9
436

Arrays, la clase Object y tipos genricos


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 }

i
10
437

Arrays, la clase Object y tipos genricos


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
438

Arrays, la clase Object y tipos genricos


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);

i
12
439

Arrays, la clase Object y tipos genricos


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.

i
13
440

Arrays, la clase Object y tipos genricos

Ejemplo Vamos a declarar una lista de objetos de tipo Object en la que introducimos un nmero de enteros obteniendo lo que ha sido introducido posteriormente: List listaenteros = new LinkedList(); listaenteros.add( new Integer(5)); listaenteros.add( new Integer(9)); Iterator listIterator = listaenteros.iterator(); while(listIterator.hasNext()) { Integer elemento = (Integer) listIterator.next(); }

Problemtica v/s Ventaja de los tipos genricos Revisa el siguiente cuadro comparativo con las problemticas y ventajas de los tipos genricos.

i
14
441

Arrays, la clase Object y tipos genricos


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.

i
15
442

Arrays, la clase Object y tipos genricos


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

i
16
443

Arrays, la clase Object y tipos genricos


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.

i
17
444

Arrays, la clase Object y tipos genricos


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

i
18
445

Arrays, la clase Object y tipos genricos


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
446

Arrays, la clase Object y tipos genricos


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
447

Arrays, la clase Object y tipos genricos


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:

i
21
448

SINTAXIS DEL LENGUAJE Caso prctico


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.

449

SINTAXIS DEL LENGUAJE Caso prctico


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.

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

Importar clases: el paquete java.lang


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. }

i
3
454

Importar clases: el paquete java.lang


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.

i
4
455

Importar clases: el paquete java.lang


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.

i
5
456

Importar clases: el paquete java.lang


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.

i
6
457

Importar clases: el paquete java.lang


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.

i
7
458

Importar clases: el paquete java.lang


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

i
8
459

Importar clases: el paquete java.lang


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 void void void void <StringBuffer>.insert (int index, char c); > insertar. <StringBuffer>.append (char c); > aadir. <StringBuffer>.append (int i); > aadir. <StringBuffer>.append (String s); > aadir. <StringBuffer>.append (Object o); > aadir.

i
9
460

Importar clases: el paquete java.lang


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 }

i
10
461

Importar clases: el paquete java.lang


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.

i
11
462

Importar clases: el paquete java.lang


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 //cadena como String int mayusculas=0,minusculas=0,cont=0; // Declaramos las variables la variable

i
12
463

Importar clases: el paquete java.lang


// recorremos la cadena extrayendo el carcter de la posicin i y preguntamos si 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 //coincide

cadena=cadena.toLowerCase(); // Recorremos nuevamente la cadena preguntando si el carcter que se extrae es vocal // a,e,i,o,u // como ya hemos pasado toda lacadena aminscula no habr que preguntar por las //mismas vocales en maysculas for (int i=0; i<cadena.length(); i++){ if (cadena.charAt(i)=='a'||cadena.charAt(i)=='e'||cadena.charAt(i)=='i'||cadena.charAt(i)=='o'||ca dena.charAt(i)=='u') cont++; } // Imprimiremos todos los contadores System.out.println("Las a's son: "+minusculas); System.out.println("Las A's son: "+mayusculas); System.out.println("Las vocales son: "+cont); } } La salida sera: Las a's son: 2 Las A's son: 2 Las vocales son: 8

i
13
464

Importar clases: el paquete java.lang


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).

i
14
465

Importar clases: el paquete java.lang


public public public public public //... } final class Math { static int abs(int a) {return (a < 0) ? -a : a; } static long abs(long a) {return (a < 0) ? -a : a; } static float abs(float a) {return (a < 0) ? -a : a; } 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));

i
15
466

Importar clases: el paquete java.lang


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));

i
16
467

Importar clases: el paquete java.lang


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.

i
17
468

Importar clases: el paquete java.lang


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
469

Importar clases: el paquete java.lang


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();

i
19
470

Importar clases: el paquete java.lang


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.

i
20
471

Importar clases: el paquete java.lang


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
472

Importar clases: el paquete java.lang


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.

i
22
473

Importar clases: el paquete java.lang


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.

i
23
474

Importar clases: el paquete java.lang


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:

i
24
475

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA

476

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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. }

i
2
477

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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.); }

i
3
478

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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.

i
4
479

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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;

i
5
480

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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 perimetro() IS-A Rombo Interface p perimetro() IS-A Rectngulo

Clase Derivada perimetro() Siempre se llama el permetro del rombo.

Cuadrado

i
6
481

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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; }

i
7
482

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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.

i
8
483

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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.

i
9
484

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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.

i
10
485

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


Mtodos
char charAt(int index) Returns the char value at the specified index. codePointAt(int index) Returns the character (Unicode code point) at the specified index. codePointBefore(int index) Returns the character (Unicode code point) before the specified index. codePointCount(int beginIndex, int endIndex) Returns the number of Unicode code points in the specified text range of this String. compareTo(String anotherString) Compares two strings lexicographically. compareToIgnoreCase(String str) Compares two strings lexicographically, ignoring case differences.

int

int

int

int

int

String concat(String str) Concatenates the specified string to the end of this string. boolean contains(CharSequence s) Returns true if and only if this string contains the specified sequence of char values. boolean contentEquals(CharSequence cs) Returns true if and only if this String represents the same sequence of char values as the specified sequence.

i
11
486

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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.

i
12
487

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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. hashCode() Returns a hash code for this string. indexOf(int ch) Returns the index within this string of the first occurrence of the specified character. indexOf(int ch, int fromIndex) Returns the index within this string of the first occurrence of the specified character, starting the search at the specified index. indexOf(String str) Returns the index within this string of the first occurrence of the specified substring. indexOf(String str, int fromIndex) Returns the index within this string of the first occurrence of the specified substring, starting at the specified index.

int

int

int

int

int

i
13
488

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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. 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. lastIndexOf(String str) Returns the index within this string of the rightmost occurrence of the specified substring. 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. length() Returns the length of this string.

int

int

int

int

boolean matches(String regex) Tells whether or not this string matches the given regular expression int offsetByCodePoints(int index, int codePointOffset) Returns the index within this String that is offset from the given index by codePointOffset code points.

boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len) Tests if two string regions are equal.

i
14
489

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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.

i
15
490

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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.

i
16
491

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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.

i
17
492

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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).

i
18
493

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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 ex -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(x2 +y2) 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.

i
19
494

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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.

i
20
495

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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.

i
21
496

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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.

i
22
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

Manipulacin y formato de fechas


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.

i
3
500

Manipulacin y formato de fechas


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

i
4
501

Manipulacin y formato de fechas


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).

i
5
502

Manipulacin y formato de fechas


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

i
6
503

Manipulacin y formato de fechas


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.

i
7
504

Manipulacin y formato de fechas


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

i
8
505

Manipulacin y formato de fechas


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;

i
9
506

Manipulacin y formato de fechas


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.

i
10
507

Manipulacin y formato de fechas


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().

i
11
508

Manipulacin y formato de fechas


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:

i
12
509

OPERACIONES DE ENTRADA-SALIDA

510

NDICE
OPERACIONES DE ENTRADA-SALIDA
1. La clase PrintStream para salida de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 2. Lectura de caracteres con InputStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5 3. Lectura de cadenas con BufferedReader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10 4. Lectura de datos con la clase Scanner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13 5. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15

511

Operaciones de entrada-salida
1. La clase PrintStream para salida de datos
Clase PrintStream La clase PrintStream tiene mtodos para la representacin textual de todos los datos primitivos de Java: write y println().

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.

i
3
512

Operaciones de entrada-salida

4
513

Operaciones de entrada-salida
2. Lectura de caracteres con InputStream
Streams Un "Stream" es un nombre genrico otorgado a un flujo de caracteres. Puede estar compuesto por los valores residentes en un archivo de texto, datos introducidos interactivamente por un usuario o datos que deseen ser colocados en un determinado archivo. Stream es una secuencia de bytes que viajan desde un origen (source) hasta un destino (target). El concepto de Stream se aplica a multitud de dispositivos de entrada/salida. Para encapsular los Streams de Java se tienen dos clases: 1. InputStream (entran en la memoria). 2. OutputStream (salen de memoria a otro dispositivo). Por convenio para las operaciones de entrada/salida se toma como punto inicial la memoria RAM del sistema, todo lo que llega a la RAM es in. InputStream Las clases InputStream y OutputStream, tienen lo comn de toda la jerarqua existente para Streams. InputStream es una clase abstracta (no se instancia).

i
5
514

Operaciones de entrada-salida
Sus mtodos son los siguientes. Pulsa sobre cada uno de ellos: abstract int <InputStream>.read() throws IOException: Lee un solo byte del Stream, retorna un entero con valor comprendido entre 0255 1 para el final del Stream. El mtodo es abstracto ya que no se sabe a priori cual es la entrada. Las derivadas de InputStream redefinirn el mtodo para utilizarlo. Es un mtodo sncrono o bloqueante, es decir, es un mtodo que cuando el hilo lo ejecuta se queda ah hasta que vuelve con el dato. int <InputStream>.read(byte[]b) int <InputStream>.read(byte []b, int offset, int length): Ambos mtodos realizan la lectura de una serie de bytes. En el primer prototipo se realiza la lectura del array de bytes y en el segundo se realiza la lectura de un array desde la posicin indicada en offset y el nmero de bytes indicado en length. Ambos mtodos no son abstractos ya que llaman al primer prototipo tantas veces como sea necesario. Las clases derivadas podrn redefinir el mtodo para optimizar los rendimientos. int <InputStream>.available Devuelve el nmero de bytes que se puede leer del Stream sin quedar bloqueado. Dependiendo del Stream de donde se est leyendo, en el caso de ficheros representa el nmero de bytes que queda por leer. void <InputStream>.close() Cierra el Stream. Dicho mtodo est vaco para que cada clase derivada lo pueda redefinir ya que no todos los dispositivos deben cerrarse. boolean <InputStream>.markSupported() Devuelve true si el Stream soporta marcas. Por defecto, devuelve false. La derivada que utiliza el mtodo lo redefine para que de valor true.

i
6
515

Operaciones de entrada-salida
void <InputStream>.mark (int readlimit) Pone una marca en el Stream para poder situarse en este punto tras haberse movido hacia adelante. El parmetro readlimit indica el nmero mximo de bytes que la marca es vlida, esto se debe al consumo de memoria que hay que reservar. void <InputStream>.reset() Vuelve a la marca. long <InputStream>.skip (long n) throws IOException Avanza hacia delante el nmero de bytes que se le indique en n. Como retorno devuelve el nmero de bytes que se ha avanzado. OutputStream OutputStream es una clase tambin abstracta que representa los Streams de salida. Sus mtodos son los siguientes. Pulsa sobre cada uno de ellos: abstract void <OutputStream> write (int b): Escribe un solo byte representado por b. Es abstracta para que las redefina las derivadas, tambin es bloqueante. void <OutputStream> write (byte []b) void <OutputStream> write (byte []b, int offset, int length): Reciben un array para escribir varios bytes y no slo uno. void <OutputStream>.flush() Se utilizan en los Streams con buffer (trozo de memoria de la RAM) para sacar lo almacenado en el buffer.

i
7
516

Operaciones de entrada-salida
void <OutputStream>.close() Se cierra el Stream. FileInputStream La clase FileInputStream sirve para acceder al contenido de los ficheros. Se crea a partir del nombre del fichero que se va a tratar. Realiza la lectura del fichero. Los constructores son los siguientes: FileInputStream (String Filename) FileInputStream (File Filename) int <InputStream>.read() Realiza la lectura del fichero. Protected <FileInputStream>.finalize() Redefine este mtodo que procede la clase Object. Este mtodo realiza una llamada a close() antes de hacer la recogida de basura. De todas formas es mejor utilizar close() cuando se ha terminando de trabajar con el fichero. FileOutputStream La clase FileOutputStream tambin sirve para acceder al contenido de los ficheros. Realiza la escritura de los datos del fichero.

i
8
517

Operaciones de entrada-salida
Los constructores son los siguientes: FileOutputStream (String Filename) throws IOException Con este constructor se empieza desde el principio en el fichero, aunque el fichero tenga datos. FileOutputStream(String Filename, boolean append) Con este constructor se aadir informacin en el fichero. Para ello se pondr a true la variable append. Si se pone false funcionar como el anterior constructor. import java.io.*; public class AccesoFichero { public static void main (String [] args) throws IOException { // se crea el fichero de salida. FileOutputStream fos = new FileOutputStream("c:\\vem\\text.txt"); // Cadena a escribir en el fichero. String str = "Texto de prueba"; //Proceso de escritura. for (int i = 0; i < str.length(); i ++) fos.write(str.charAt((i))); fos.close(); // Se cierra el fichero de salida. // se crea el fichero de entrada. FileInputStream fis = new FileInputStream("c:\\vem\\text.txt"); int tamano = fis.available();/Longitud del fichero. System.out.println("Hay un tamao de "+tamano+"bytes disponibles"); byte [] B = new byte [tamano]; fis.read(B); // Lectura del fichero. System.out.println ("Se ley el texto: "+new String(B)); fis.close(); // Se cierra el fichero de entrada. } // fin de main. } // fin de clase.

i
9
518

Operaciones de entrada-salida
3. Lectura de cadenas con BufferedReader
InputStreamReader La clase InputStreamReader permite la conversin de cdigo ASCII a UNICODE, actuando como filtro para la traduccin.

El problema surge en cmo traducir de ASCII a UNICODE, los caracteres nacionales (0..127 Mundiales / 128..255 Nacionales). Este problema se resuelve con el siguiente constructor: InputStreamReader (InputStream is, String encode) El segundo parmetro representa el cdigo ISO que se quiere utilizar. En el caso de Espaa es 8859-1. La InputStreamReader lee caracteres desde teclado, pero procesa carcter a carcter, no sirve para leer de golpe una lnea. Esto es poco ptimo y si slo tuvisemos la clase ImputStreamReader sera un trozo de cdigo que tendramos que repetir por muchos sitios. Para el caso concreto de leer de teclado, sera ideal si hubiese una clase en Java que nos lea de una vez todo lo que ha escrito el usuario de nuestro programa y nos lo diera de esta forma.

i
10
519

Operaciones de entrada-salida
System.in.read Para leer caracteres desde teclado, tambin usamos la clase System.in.read(); Esta funcin nos devuelve el ASCII del carcter pulsado desde el teclado, y lo hace como tipo int. Esta instruccin al igual que otras en Java, el propio compilador obliga a capturar un posible error en tiempo de ejecucin de E/S, con lo que aunque no hayamos visto an ese captulo, lo encerraremos en un bloque try {} que es lo que nos sirve para prever errores. Si adems lo que queremos es asignar la lectura a un tipo char, haremos un casting a este tipo. Todo quedara de la siguiente forma:

char letra=a; System.out.println ( Introduce una letra ); try{ letra=(char) System.in.read(); }catch (Exception ex){ } // Tratamiento del posible error, de momento lo dejamos en //blanco System.out.println ( La letra pulsada es : + letra) ;

BufferedReader La clases BufferedReader nos sirven para leer por teclado, sin procesar carcter a carcter. La manera de crear un objeto de BufferedReader a partir de otro Reader cualquiera, como por ejemplo, InputStreamReader, es el siguiente: BufferedReader br = new BufferedReader (new InputStreamReader(System.in));

i
11
520

Operaciones de entrada-salida
El funcionamiento de esta clase es igual que el InputStreamReader, solamente que nos va a devolver la cadena leda completa hasta que pulsamos > ( intro) Para obtener el String leido se usa el mtodo readLine(). Este mtodo lee todos los caracteres tecleados (recibidos si fuera otro dispositivo de entrada) hasta que encuentra la pulsacin de la tecla <INTRO> > String cadena = br.readLine(); Lee desde el teclado un String completo y lo guarda en la variable "cadena".

i
12
521

Operaciones de entrada-salida
4. Lectura de datos con la clase Scanner
Clase Scanner La lectura de datos con la clase Scanner, es la nueva forma que nos proporciona Java para poder leer desde el teclado, ahorrndonos un poco de cdigo.

Ejemplo import java.io.*; import java.util.Scanner; public class Leer{ public static void main ( String args[ ]) throws IOException { Scanner leer=new Scanner(System.in); //Creamos el objeto de Scanner String cadena=leer.next(); // Leemos el texto con su mtodo next() System.out.println (Texto leido : + cadena ); //Lo imprimimos } }

Configurar clase Scanner Se puede configurar la clase Scanner para que utilice cualquier otro tipo de separador de tokens.

i
13
522

Operaciones de entrada-salida
Adems tiene una serie de mtodos que tras leer un token lo intentan interpretar como algn tipo primitivo de Java:

Cuando analizamos valores numricos se emplean los convenios locales de puntuacin. Scanner se usa a menudo para la entrada de datos por consola: Scanner scanner = new Scanner(System.in); System.out.print("Escribe dos nmeros: "); double x = scanner.nextDouble(); double y = scanner.nextDouble(); System.out.println("producto: " + (x * y));

i
14
523

Operaciones de entrada-salida
5. Resumen
Has llegado al final de este recurso formativo que denominamos Operaciones de entrada-salida En esta leccin hemos estudiado los siguientes contenidos:

i
15
524

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA

525

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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.

i
2
526

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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.

i
3
527

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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() boolean <File>.isDirectory() boolean <File>.exists() boolean <File>.canRead() Devuelve true si es fichero. Devuelve true si es directorio. Devuelve true si existe el fichero o directorio. Si permite la lectura del fichero.

i
4
528

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


boolean <File>.canWrite() long <File>.length() 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) boolean <File>.delete() - 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 Renombra el fichero o directorio. Elimina el fichero o directorio. Si permite la escritura del fichero. Tamao del fichero en bytes.

int <InputStream>.read() throws IOException Realiza la lectura del fichero. Protected <FileInputStream>.finalize() throws IOException

i
5
529

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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
530

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


// 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(); }

i
7
531

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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).

i
8
532

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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.

i
9
533

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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.

i
10
534

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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.

i
11
535

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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.

i
12
536

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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
537

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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.

i
14
538

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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.

i
15
539

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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

i
16
540

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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;

i
17
541

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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:

i
18
542

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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.

i
19
543

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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.

i
20
544

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


- 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.

i
21
545

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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);

i
22
546

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


- 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

i
23
547

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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 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. close() Closes this input stream and releases any system resources associated with the stream. mark(int readlimit) Marks the current position in this input stream.

InputStream:

void

void

boolean markSupported() Tests if this input stream supports the mark and reset methods.

i
24
548

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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. read(byte[] b, int off, int len) Reads up to len bytes of data from the input stream into an array of bytes. reset() Repositions this stream to the position at the time the mark method was last called on this input stream. skip(long n) Skips over and discards n bytes of data from this input stream.

int

void

long

Clase OutputStream:
MTODOS void close() Closes this output stream and releases any system resources associated with this stream. flush() Flushes this output stream and forces any buffered output bytes to be written out. write(byte[] b) Writes b.length bytes from the specified byte array to this output stream.

void

void

i
25
549

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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. compareTo(Object o) Compares this abstract pathname to another object.

int

boolean createNewFile() Atomically creates a new, empty file named by this abstract pathname if and only if a file with this name does not yet exist. static File createTempFile(String prefix, String suffix) Creates an empty file in the default temporary-file directory, using the given prefix and suffix to generate its name.

i
26
550

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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.

i
27
551

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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.

i
28
552

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


long lastModified() Returns the time that the file denoted by this abstract pathname was last modified. length() Returns the length of the file denoted by this abstract pathname.

long

String[] list() Returns an array of strings naming the files and directories in the directory denoted by this abstract pathname. String[] list(FilenameFilter filter) Returns an array of strings naming the files and directories in the directory denoted by this abstract pathname that satisfy the specified filter. File [] listFiles() Returns an array of abstract pathnames denoting the files in the directory denoted by this abstract pathname. File [] ListFiles (FileFilter filter) Returns an array of abstract pathnames denoting the files and directories in the directory denoted by this abstract pathname that satisfy the specified filter. File[] ListFiles (FilenameFilter filter) Returns an array of abstract pathnames denoting the files and directories in the directory denoted by this abstract pathname that satisfy the specified filter. static File[] listRoots() List the available filesystem roots.

i
29
553

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA


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.

i
30
554

GESTIN DE COLECCIONES

555

NDICE
GESTIN DE COLECCIONES
1. Las clases de coleccin java.util.ArrayList y java.util.Hashtable . . . . . . . . . . . . . . . . . . . . . . .3 2. Enumeraciones e iteraciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8 3. Colecciones de tipos genricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10 4. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13

556

Gestin de colecciones
1. Las clases de coleccin java.util.ArrayList y java.util.Hashtable
Interface List (Listas) La Interface List aade nuevos mtodos para trabajar con listas. Las listas tambin tienen dos posibles implementaciones: ArrayList, da un mayor tiempo de acceso a los elementos individuales. LinkedList, permite aadir al final elementos

Mtodos Interface List Veamos a continuacin los mtodos que podemos utilizar. Pulsa sobre cada uno de ellos: Object <List>.get (int index): saca un elemento de la lista en la posicin indicada por index. Object <List>.set (int index, Object element): inserta en la posicin indicada por index sobreescribiendo el elemento que hubiese en dicha posicin. Devuelve el elemento que haba antes en dicha posicin.

i
3
557

Gestin de colecciones
void <List>.add (int index, Object element): aade un elemento en la posicin indicada por index desplazando hacia la derecha el resto de los elementos existentes en el contenedor. int <List>.indexOf (Object element) o en int <List>.lastIndexOf (Object element): ambos mtodos realizan la bsqueda de un elemento dentro de la lista devolviendo en qu posicin se encuentra. Mtodos Interface ListL istcIterator <List> listIterator() Permite recorrer la lista utilizando un interface Iterator especial que permite el recorrido hacia adelante y hacia atrs: 1. ListIterator 2. Iterator 3. public interface ListIterator extends Iterator { boolean hasNext(); Object next(); Boolean hasPrevious(); Object previous(); }

Otros Mtodos Interface List Otros mtodos de la Interface list serian los siguientes. Pulsa sobre cada uno de ellos: boolean addAll( Collection ): aade todos los elementos que se pasan en el argumento. Devuelve true si es capaz de aadir a la coleccin cualquiera de los elementos del argumento.

i
4
558

Gestin de colecciones
void clear(): elimina todos los elementos que componen la coleccin. boolean contains( Object ): true si la coleccin contiene el argumento que se le pasa como parmetro. boolean isEmpty(): true si la coleccin est vaca, no contiene ningn elemento. Iterator iterator(): devuelve un Iterator que se puede utilizar para el desplazamientos a travs de los elementos que componen la coleccin. boolean remove( Object ): si el argumento est en la coleccin, se elimina una instancia de ese elemento y se devuelve true si se ha conseguido. boolean removeAll( Collection ): elimina todos los elementos que estn contenidos en el argumento. Devuelve true si consigue eliminar cualquiera de ellos. boolean retainAll( Collection ): mantiene slo los elementos que estn contenidos en el argumento, es lo que sera una interseccin en la teora de conjuntos. Devuelve verdadero en caso de que se produzca algn cambio. int size(): devuelve el nmero de elementos que componen la coleccin. Object[] toArray() : devuelve un array conteniendo todos los elementos que forman parte de la coleccin.

i
5
559

Gestin de colecciones
Hashtable Hashtable, es un objeto que implementa la correspondencia entre claves y valores a partir de Dictionary. La funcin hash() hace corresponder a un tem de mayor tamao un cdigo nico.

Clase Object que devuelve un cdigo hash Mtodo de la clase Object que devuelve un cdigo hash, que se corresponde con la posicin de memoria donde est situado el objeto. Conceptualmente es similar a un vector, pero en lugar de acceder a los objetos a travs de un nmero, en realidad se utiliza otro objeto. Esto nos lleva a usar claves y al tratamiento de las claves dentro del programa.

i
6
560

Gestin de colecciones
Constructores: Hashtable(int initial_capacity): recibe el tamao inicial de la tabla hash. Hashtable(int initial_capacity, double loadfactor): recibe el tamao inicial y adems permite personalizar qu porcentaje de la tabla que tiene que estar llena para que la tabla se redimensione. No se espera que la tabla est al 100%. El factor de carga va de 0 a 1 y por defecto su valor es 0.75. Mtodos boolean <Hashtable>.containsKey (Object Key): devuelve true si existe la clave. boolean <Hashtable>.containsValue (Object Value): devuelve true si existe el valor. Enumeration <Hashtable>.keys (): devuelve las claves contenidas en Hastable Enumeration <Hashtable>.elements (): devuelve las valores contenidos en Hash

i
7
561

Gestin de colecciones
2. Enumeraciones e iteraciones
Coleccin Para cualquier tipo de coleccin, debe existir una forma de poder introducir elementos y de extraer los mismos, al fin y al cabo el objetivo de una coleccin es almacenar cosas. En un vector: Mtodo addElement() es la manera en que se colocan objetos dentro de la coleccin. Mtodo elementAt(): es cmo se sacan.

Enumerador, o iterador El concepto de enumerador, o iterador, puede usarse para alcanzar el nivel de abstraccin que se necesita en este caso. Es un objeto cuyo propsito consiste en desplazarse a travs de un conjunto de objetos y seleccionar aquellos objetos adecuados sin que el programador que los usa tenga que conocer la estructura de la secuencia.

8
562

Gestin de colecciones
Mtodos de Enumerador, o iterador Veamos algunos mtodos de enumerador o iterador y un ejemplo de programacin: Mtodos: - El mtodo elements() nos suele devolver un objeto de tipo Enumeration y despus ya operaremos con l. - El mtodo nextElement() nos devolver el primer elemento en la lista, cuando lo aplicamos por primera vez. Para obtener siguiente elemento en la secuencia tambin o haremos a travs del mtodo nextElement(). - El mtodo hasMoreElements() para ver si hay ms elementos en la secuencia Hot pot en el botn ejemplo: for (int i=0; i <coches.size (); i++) { ((Coche)coches.elementAt(i)).print(); } Pese a su simplicidad esta clase es bastante potente y se emplea mucho en la programacin Java.

Ejemplo for (int i=0; i <coches.size (); i++) { ((Coche)coches.elementAt(i)).print(); } // Recorremos un vector de objetos Coche , y extraemos cada elemento para asignrselo a //un objeto de tipo coche while( e.hasMoreElements() ) ((Coche)e.nextElement()).print(); // Recorremos un Enumeration y extraemos cada elemento para asignrselo a un objeto // de tipo coche

En Enumeration no hay que preocuparse del nmero de elementos que contenga la coleccin, ya que del control sobre ellos se encargan los mtodos hasMoreElements() y nextElement().

9
563

Gestin de colecciones
3. Colecciones de tipos genricos
Collection y Map La nueva librera de colecciones parte de la premisa de almacenar objetos, y diferencia dos conceptos en base a ello: Collection Un grupo de elementos individuales, siempre con alguna condicin que se les puede aplicar. Un List almacenar objetos en una secuencia determinada y un Set no permitir elementos duplicados. Map Un grupo de parejas de objetos clave-valor, como la Hastable ya vista. Representa un conjunto de pares claves-valor. Mtodos Collection y Map Mtodos: - Object <Map>.put (Object key, Object value) - Object <Map>.get (Object key) - Object <Map>.remove (Object key - boolean <Map>.containsKey (Object key - boolean <Map>.containsValue (Object value)

i
10
564

Gestin de colecciones
Map tiene dos implementaciones HashMap: tiene mejor rendimiento TreeMap: almacena los elementos en un rbol balanceado y cuando se necesitan sacar lo hace de forma ordenada. Los elementos del Map deben implementar hashCode() y equals(). Los tipos genricos Utilizando los genricos se evitan las excepciones en tiempo de ejecucin debido a la insercin de objetos de distinto tipo en las colecciones. Los tipos genricos Solamente son evaluados en tiempo de compilacin, en ejecucin no existen aunque nos aseguramos que si el cdigo compila correctamente, no nos encontraremos con problemas de casting entre objetos en la ejecucin del cdigo.

Ejemplo Si por ejemplo declaramos la siguiente lista: List<Integer> miLista = new ArrayList<Integer>() el compilador no dejar que se inserte un objeto que no sea de tipo Integer.

Los tipos genricos 2 Nuestro compilador s aceptar clases derivadas, por ejemplo, si se declara una List<Map> se podr insertar un tipo HashMap, TreeMap, etc. Es decir, admite la sobrecarga de mtodos ( polimorfismo).

i
11
565

Gestin de colecciones
Esto sera incorrecto: ArrayList<Map> list = new ArrayList<HashMap>().

Justo en el momento que hacemos la declaracin (tipo Map) e instanciacin (tipo HashMap) del objeto coleccin no se admite el polimorfismo.

Clase Padre de todos los genricos Es <?>, indica que cualquier genrico puede ser insertado en la coleccin. Tambin se puede indicar el polimorfismo en los genricos mediante <? extends Map>. Donde se pueden utilizar los genricos Todo lo que extienda de Map se puede insertar en la coleccin:

Los genricos tambin se pueden utilizar en la declaracin de clases (class MiColecion <T> { ... } ), atributos de la clase (T instancia), constructores ( MiColeccion (T ref)), mtodos y tipos de retorno (public T bar (T ref) {}).

El compilador sustituir el tipo por el que se cree cuando se instancie un objeto de la clase MiColeccion

i
12
566

Gestin de colecciones
4. Resumen
Has llegado al final de este recurso formativo que denominamos Gestin de colecciones En esta leccin hemos estudiado los siguientes contenidos:

i
13
567

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA Caso prctico


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.

568

UTILIZACIN DE LAS LIBRERAS BSICAS DE JAVA Caso prctico


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; }

569

Mdulo 5: Programacin orientada a objetos con java


570

LA PROGRAMACIN ORIENTADA A OBJETOS. CONSTRUCTORES Y SOBRECARGA DE MTODOS

571

LA PROGRAMACIN ORIENTADA A OBJETOS. CONSTRUCTORES Y SOBRECARGA DE MTODOS


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.

i
2
572

LA PROGRAMACIN ORIENTADA A OBJETOS. CONSTRUCTORES Y SOBRECARGA DE MTODOS


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()).

i
3
573

LA PROGRAMACIN ORIENTADA A OBJETOS. CONSTRUCTORES Y SOBRECARGA DE MTODOS


Caractersticas de la POO Las caractersticas que hacen que un lenguaje sea o se considere orientado a objetos son: Herencia

Polimorfismo

i
4
574

LA PROGRAMACIN ORIENTADA A OBJETOS. CONSTRUCTORES Y SOBRECARGA DE MTODOS


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 Funcionalidad Variables Mtodos

Las clases son la generalizacin de los objetos, de forma que un conjunto de objetos con las mismas caractersticas y funcionalidad formarn una clase.

i
5
575

LA PROGRAMACIN ORIENTADA A OBJETOS. CONSTRUCTORES Y SOBRECARGA DE MTODOS


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:

i
6
576

LA PROGRAMACIN ORIENTADA A OBJETOS. CONSTRUCTORES Y SOBRECARGA DE MTODOS


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.

i
7
577

LA PROGRAMACIN ORIENTADA A OBJETOS. CONSTRUCTORES Y SOBRECARGA DE MTODOS


[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);

i
8
578

LA PROGRAMACIN ORIENTADA A OBJETOS. CONSTRUCTORES Y SOBRECARGA DE MTODOS


Ejemplo

Tipos de Constructores Constructor por defecto, es aquel que no recibe parmetros. Los constructores generales son los que reciben uno o ms parmetros.

i
9
579

LA PROGRAMACIN ORIENTADA A OBJETOS. CONSTRUCTORES Y SOBRECARGA DE MTODOS


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); } }

i
10
580

LA PROGRAMACIN ORIENTADA A OBJETOS. CONSTRUCTORES Y SOBRECARGA DE MTODOS


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
581

LA PROGRAMACIN ORIENTADA A OBJETOS. CONSTRUCTORES Y SOBRECARGA DE MTODOS


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:

i
12
582

PROGRAMACION ORIENTADA A OBJETOS CON JAVA

583

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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.

i
2
584

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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.

i
3
585

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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.

i
4
586

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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 Especificacin Implementacin Sistema Informtico Ejemplo Hacer una aplicacin de venta online La aplicacin Web que cumple la especificacin aportada. 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.

i
5
587

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


Trmino Modelar del mismo a su diseo. Modularidad Ejemplo Se modelan diagramas en el anlisis de un sistema para pasar de los requisitos

Un S.I. de una tienda on-line puede tener un mdulo de ventas y un mdulo de stock (entre otros mdulos). Un mdulo de operativa comn donde se gestionen las ventas, el stock y el cobro de pagos, no est bien cohesionado. Una clase llamada CuentaBanco que tenga un mtodo conectarBBDD() o un atributo llamado edadTitular no est bien cohesionada.

Cohesin

Acoplamiento

Supongamos que un mdulo A depende de otro mdulo B para poder funcionar. Si B no puede intercambiarse con otro mdulo C sin precisar de grandes cambios en A, entonces el acoplamiento entre A y B es elevado. Un mdulo de acceso a BBDD que se puede usar tanto en un S.I. de venta online como de gestin de RRHH. Es reutilizable. Una aplicacin cuyo interfaz grfico es intuitivo y facilita el trabajo del usuario es usable. Una aplicacin que respeta estndares para su uso por parte de discapacitados es accesible. El uso de variables con nombre crpticos dificulta la legibilidad de un cdigo. La falta de documentacin actualizada dificulta la comprensin (legibilidad) de un proyecto. Un determinado mdulo de un S.I. es trazable si podemos identificar claramente los entregables de las fases de anlisis y diseo que dieron lugar a su creacin.

Reutilizacin

Usabilidad

Accesibilidad

Legibilidad

Trazabilidad

6
588

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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

i
7
589

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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.

i
8
590

PROGRAMACION ORIENTADA A OBJETOS CON JAVA

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
591

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


Chen

Ejemplo de http://cs1.mcm.edu Bachman

Ejemplo de http://elearning.tvm.tcs.co.in/re/re/3_3_ERD.htm

10
592

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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.

i
11
593

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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
594

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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.

i
13
595

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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,)

i
14
596

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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
597

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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.

i
16
598

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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.

i
17
599

HERENCIA

600

NDICE
HERENCIA
1. Concepto de herencia. Caractersticas de la herencia en Java . . . . . . . . . . . . . . . . . . . . . . . .3 2. Ejecucin de constructores en la herencia. Uso de super y this. . . . . . . . . . . . . . . . . . . . . . .11 3. Sobreescritura de mtodos. Uso de modificadores final, protected y private . . . . . . . . . . . . .14 4. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17

601

Herencia
1. Concepto de herencia. Caractersticas de la herencia en Java
Herencia La herencia, nos permite crear una clase a partir de otra clase que ya est creada. A la clase de la que se hereda se le denomina clase base, y a la clase que hereda de la clase base se le denomina clase derivada. De esta forma las clases quedan organizadas de forma jerrquica.

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
602

Herencia
Ejemplo

Conversin implcita y explcita con referencias a Objetos Si las clases estn vinculadas mediante relaciones de herencia, se pueden hacer conversiones. Java permite convertir una referencia a clase derivada en una referencia a clase base implcitamente, y permite convertir una referencia clase base en una referencia clase derivada utilizando casting.

i
4
603

Herencia

Conversiones entre clases hermanas Entre clases hermanas no se pueden realizar conversiones ni con el operador casting. Deriv1 d1 = new Deriv1(); Deriv2 d2 = new Deriv2(); d1 = d2; // Error. d1 = (Deriv1) d2; // Error.

i
5
604

Herencia
Es lgico que no se pueda hacer la conversin ya que existirn atributos y mtodos en una clase y en otra no. En Java no se permiten las conversiones entre las referencias y los tipos fundamentales de datos ni con casting. int a = 3; Punto p = (Punto) a; // Error. Enlace Esttico y Enlace Dinmico El Enlace Esttico consiste en decidir qu mtodo ejecutar en funcin del tipo de referencia con la que se est apuntando al objeto (se ejecuta Metodo1 de la clase Base). Enlace Dinmico, consiste en decidir qu mtodo se debe ejecutar en funcin del tipo de objeto que se est apuntando desde la referencia (se ejecuta Metodo1 de la clase Derivada). La ventaja del Enlace Esttico es que es ms rpido que el Enlace Dinmico porque en tiempo de compilacin ya se sabe qu mtodo ejecutar. Tiene el inconveniente de que normalmente se va a querer ejecutar el mtodo del objeto apuntado y no el de la referencia que se usa para apuntar. El Enlace Dinmico es ms lento porque hasta que no llega el momento de ejecutar el mtodo no sabe a qu objeto estar apuntando la referencia. Java utiliza por defecto el Enlace Dinmico y si se quiere que utilice el Enlace Esttico se tiene que poner el modificador final al mtodo. class Base { final void Metodo1() { System.out.println (Mtodo de la clase Base); } }class Derivada extends Base { void Metodo1() { System.out.println (Mtodo de la clase Derivada); } } Base b = new Derivada(); // Correcto; b.Metodo1(); // Cul se ejecuta?

i
6
605

Herencia
El operador instanceof El operador instanceof sirve para preguntar si un objeto al que se est apuntando con una referencia es de una determinada clase. El formato es el siguiente: <Referencia> instanceof <clase>

Ejemplo Pixel px = new Pixel(); if (px instanceof Pixel) { // px es Pixel. Se cumple. } if (px instanceof Fecha) { // px no es Fecha. No entra. } if (px instanceof Punto) { // px no es Punto, pero Pixel deriva de Punto. Se cumple. } if (px instanceof Object) { // px al derivar de Punto, Punto deriva de Object. // Se cumple. }

i
7
606

Herencia
El mtodo finalize() El mtodo finalize(), es un mtodo que se ejecuta justo antes de que el sistema de recogida de basura de Java libere la memoria del objeto. El mtodo finalize() se puede redefinir para poner las operaciones que se quieran hacer antes de destruir el objeto:

class Punto p = new Punto (2,3); p.finalize() // Ejecutara las operaciones de desinicializacin // pero no libera memoria. class Punto { int x, y; protected void finalize() throws Throwable { //Operaciones de desinicializacin.

- El mtodo finalize() slo es ejecutado por JVM. - El mtodo finalize() se encuentra en la clase Object, vaco. En las clases derivadas es donde se redefine. super.finalize(); Ejemplo class Pixel { int x, y, color; protected void finalize() throws Throwable { super.finalize(); // Punto Object. } }

i
8
607

Herencia
Nexos Dinmicos (array de objetos) Nexos Dinmicos (Array de Objetos), es un conjunto de referencias a objetos que comparten una serie de caractersticas comunes. Los nexos dinmicos pueden tener otras caractersticas especficas que no formen parte del nexo.

class Figura { int color, vertices; Figura (int color, int vertices) { this.color = color; this.vertices = vertices; } int getVertices () { return vertices; } public String toString() { return Color: +color+ Vertices: + vertices; }

i
9
608

Herencia
class Punto extends Figura { int x, y, color; Punto (int x, int y, int color) { this.x = x; this.y = y; super (color, 1) } public String toString() { return [+x+ , +y+]+color } } class Segmento extends Figura { Punto desde, hasta; Segmento (int x1, int y1, int x2, int y2) { super (color, 2); desde = new Punto (x1, y1, color); hasta = new Punto (x2, y2, color); } public String toString() { return Segmento: +x1+,+y1+ / +x2, , +y2; } } Figura [] figuras = new Figura[4]; Figuras[0] = new Punto (2, 3, 8); Figuras[1] = new Segmento (4, 1, 3, 8, 5); Figuras[2] = new Punto (2, 1, 5); Figuras[3] = new Rectangulo(8, 4, 1, 3, 0, 1, 2, 8, 7);

for (int i=0; i < figuras.length; i++) System.out.println (figuras[i].toString()+ tiene + figuras[i].getVertices()+ vertices ); Con una referencia a clase base slo se puede acceder a los mtodos y atributos de clase base a pesar de que se est apuntando a un objeto de tipo clase derivada: figuras[1].x1 = 3; // Error (Atributo de la derivada). figuras[1].color = 3; // Correcto (Atributo de la base). Figuras[1].getVertices(); // Correcto (Mtodo de la base).

10
609

Herencia
2. Ejecucin de constructores en la herencia. Uso de super y this
Orden de Ejecucin de los constructores en la herencia La clase derivada hereda todos los mtodos y atributos excepto el constructor de la clase base (ni constructor por defecto ni los constructores generales). Cuando se crea un objeto de la clase derivada, primero se ejecuta el constructor por defecto de la clase base y posteriormente el constructor de la clase derivada.

i
11
610

Herencia
El operador super 1. Indica qu constructor de la clase base se quiere ejecutar cuando se crea un objeto de la clase derivada. 2.Indica que se quiere ejecutar un mtodo de la clase base que existe tambin en la clase derivada. Ejemplo class Punto { int x, y; Punto (int x, int y) { this.x = x; this.y = y; } Public toString() { return [+x+ , +y+]; } } // Cierre de la clase Punto class Pixel { int color; Pixel (int color) { this.color = color; super (x, y); // Llamada a constructor de la //clase Punto. } Public String toString() { return super.toString() + color: + color; // Llamada a la funcin toString de la clase Punto. } }

i
12
611

Herencia
El operador this El operador this, es una referencia sobre el objeto que se est ejecutando en el momento actual. Casi siempre se hace referencia al objeto actual y en algunos casos hace referencia a la clase actual. Como el significado de este parmetro depende en gran medida del contexto en el que lo estemos utilizando, haremos ms hincapi en el this, cada vez que vaya surgiendo a lo largo de este curso, explicando en cada momento a quin hace referencia.

Ejemplo Dentro de un constructor se pueden referenciar a las variables de la clase por medio de este operador, como puede verse en la clase siguiente: class Fecha{ int dia ; int mes; Fecha(int d){ this.dia=d; // this.dia hace referencia a la variable dia de la clase Fecha } Fecha(int d,int m){ this.dia=d; // this.dia hace referencia a la variable dia de la clase Fecha this.mes=m; // this.mes hace referencia a la variable mes de la clase Fecha } }

i
13
612

Herencia
3. Sobreescritura de mtodos. Uso de modificadores final, protected y private
Polimorfismo El polimorfismo permite que objetos distintos puedan tener mtodos con el mismo nombre o incluso un mismo objeto puede tener nombres de mtodos idnticos pero con distintos parmetros (concepto de sobrecarga de mtodos).

Tiene varios mtodos polimrficos, es decir, varias versiones del mismo mtodo que las usaremos segn nos convenga en un programa, la nica condicin es que no reciban igual nmero o igual tipo de parmetros.

Ejemplo class Prueba{ public void pintar( int x , int y){ System.outr.println( x+y); } public void pintar( String a , String b){ System.outr.println( a+b); } public void pintar( int x , int y,String z){ System.outr.println( (x+y) + <> + z); } }

i
14
613

Herencia
Tiene 3 mtodos con el mismo nombre pero parmetros distintos. Lo que no podremos tener nunca sern 2 mtodos pintar que reciban el mismo nmero y tipo de parmetros, la implementacin de este mtodo dentro de la clase Prueba dara un error: public void pintar( int c , int m){ System.outr.println( x+y); } El modificador final El modificador final indica que el atributo es una constante, su valor no se puede modificar.

class fecha { final int diasSemana = 7; final int [] diasMes = {31,28,31,30,31,30,31,31,30,31,30,31}; int dia, mes, anno; } fecha f1 = new fecha() f1.diasSemana = 5; // Error. f1.diasMes[1] = 29; // Correcto, los datos del array se // pueden modificar. f1.diasMes = new int[12]; // Error, no se puede crear un nuevo // array, lo constante es la referencia.

-o, opcin de compilacin para no incluir las constantes en los objetos. De esta forma las constantes se sustituyen por su valor y no reserva espacio en memoria. Normalmente los atributos declarados como final van a ser estticos: La razn es que no se necesita crear un objeto para acceder a ellas: En los mtodos, el modificador final indica que no se pueden redefinir, es decir, que ninguna clase derivada puede cambiar ese mtodo. static final float pi = 3.1416f; static final int altas = 2;

15
614

Herencia
El modificador protected Los atributos o mtodos de una clase que sean declarados como protected, solamente podrn ser accedidos desde la propia clase y desde las clases derivadas de ella, pero nunca desde otras clases. Ejemplo:

El atributo num al ser declarado como protected, solamente podr ser accedido desde objetos de las clases A ( su propia clase) y desde la clase B ya que es derivada de A, pero nunca desde la clase C.

El modificador private Los atributos o mtodos de una clase que sean declarados como private, solamente podrn ser accedidos desde la propia clase.

El atributo num al ser declarado como private, solamente podr ser accedido desde objetos de la clase A, pero nunca desde la clases B y C, a pesar de que B sea derivada de A.

16
615

Herencia
4. Resumen
Has llegado al final de este recurso formativo que denominamos Herencia En esta leccin hemos estudiado los siguientes contenidos:

i
17
616

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


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.

3
619

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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; } }

4
620

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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.

i
5
621

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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
622

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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(); }

i
7
623

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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.

i
8
624

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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.

i
9
625

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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
626

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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:

i
11
627

PROGRAMACION ORIENTADA A OBJETOS CON JAVA

628

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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.

i
2
629

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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
630

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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:

i
4
631

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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.

i
5
632

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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.

i
6
633

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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.

i
7
634

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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
635

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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
636

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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

i
10
637

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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.

i
11
638

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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.

i
12
639

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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

i
13
640

PROGRAMACION ORIENTADA A OBJETOS CON JAVA

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
641

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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.

i
15
642

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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
643

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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
644

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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.

i
18
645

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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
646

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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.

i
20
647

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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.

i
21
648

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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:

i
22
649

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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.

i
23
650

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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
651

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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
652

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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.

i
26
653

PROGRAMACION ORIENTADA A OBJETOS CON JAVA


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.

i
27
654

PROGRAMACION ORIENTADA A OBJETOS CON JAVA Caso prctico


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.

655

PROGRAMACION ORIENTADA A OBJETOS CON JAVA Caso prctico


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.

656

Mdulo 6: Excepciones

657

EXCEPCIONES

658

NDICE
EXCEPCIONES
1. Clasificacin de las Excepciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 2. Lanzamiento de excepciones. Clusula throw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8 3. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14

659

EXCEPCIONES
1. Clasificacin de las Excepciones
Tipos de errores en Java Una excepcin Java representa un error en tiempo de ejecucin

Para la generacin de excepciones crea un objeto con la descripcin del error y se le enva al programa. Si el programa no recoge la excepcin se produce una parada en la ejecucin del programa. El programa puede recoger la excepcin y tratarla para que no se pare. Uso de excepciones Una vez diseado el programa para hacer lo previsto, hay que pasar a definir el manejo de los casos en que se produzca un error en tiempo de ejecucin. Para ello se har uso de las excepciones. La forma de tratar las excepciones que Java proporciona tiene un aspecto como el que sigue: public class MiPrimeraClaseExcepcional { public void unMetodoExcepional() throws MiPrimeraExcepcion { //Cdigo donde se puede producir MiPrimeraExcepcin } ... } Aqu indicamos que este mtodo puede lanzar (producir) una excepcin, que adems se llama MiPrimeraExcepcion.

i
3
660

EXCEPCIONES
Error en el cuerpo del mtodo Hasta ahora, cuando diseamos un mtodo para que realice una serie de operaciones y nos devuelva una variable de un tipo determinado, estamos confiando en que nos dar siempre esa variable. Puede ocurrir, sin embargo, que pase algo anormal en el cuerpo de ese mtodo y se produzca un error. Si esto ocurre no tenemos la variable que devuelve el mtodo y nuestro programa se bloquear. Es aqu donde entran las excepciones, que servirn para que nosotros en todo momento tengamos control sobre el programa. Si nos falla la variable, lo sabremos y actuaremos al respecto, pero el programa no se bloquea, no se para.

No olvidar que las excepciones son objetos de una clase y gozan de las ventajas de tener una jerarqua. Instancias de la clase error No todos los errores deben ser listados al declarar un mtodo. Las instancias de la clase Error no deben ser capturadas.

4
661

EXCEPCIONES
Error: Las excepciones que deriven de la rama Error no se capturan, son tales como NoClassDefFoundError (no se encuentra una clase), NoSuchMethodError (no se encuentra la definicin de un mtodo), y en general son todas las que terminan con la palabra Error (tambin llamadas excepciones de la maquina virtual). Exception: Dentro de la rama exception hay otras dos ramas. Las excepciones que derivan de RunTimeException que se denominan excepciones del sistema dentro de estas hay 5 que veremos a continuacin, y las de librera que son excepciones que se encuentran en libreras Java, como por ejemplo, IOException que se encuentra en el paquete Java.io o MalformedURLException que se encuentra en la librera Java.net. Excepciones del sistema Revisa qu tipo de excepciones tenemos. Pulsa sobre cada una de ellas: 1. ArithmeticException: Se produce cuando sucede un error de tipo aritmtico, por ejemplo, cuando tratamos de dividir un nmero por cero, el programa no entiende lo que es y se para. 2. NullPointerException: Se produce cuando tratamos de acceder a una propiedad de un objeto que no existe todava para el programa. Ejemplo: String cadena=null: int longitud=cadena.length(); //Error porque el objeto no existe an. 3. ClasCastException: Se produce cuando no hacemos correctamente un casting entre clases.

i
5
662

EXCEPCIONES
4. ArrayIndexOutOfBoundsException: Se produce cuando accedemos a una posicin de un array superior al nmero de elementos del array. 5. NegativeSizeArrayIndexException: Se produce cuando accedemos a una posicin de un array inferior al elemento cero del array, es decir, a una posicin negativa del array. Uso prctico de excepciones 1 Estudiemos ahora cmo usar las excepciones. Para esto, recordaremos el mtodo que definimos anteriormente denominado unMetodoExcepcional():

Recordar mtodo public class MiPrimeraClaseExcepcional { public void unMetodoExcepional() throws MiPrimeraExcepcion { ... } ... } Llamar mtodo public void otroMetodoExcepcional() throws MiPrimeraExcection { MiPrimeraClaseExcepcional mPCE = new MiPrimeraClaseExcepcional(); mPCE.unMetodoExcepcional(); }

i
6
663

EXCEPCIONES
Si no tratamos aqu la excepcin MiPrimeraExcepcion, al menos hemos de lanzarla (indicar) a los llamadores de nuestro mtodo otroMetodoExcepcional() (lo hacemos mediante la sentencia throws) y hemos de hacerlo as porque estamos llamando al mtodo unMetodoExcepcional() que puede producir dicha excepcin. Uso prctico de excepciones 2 Si ahora quisiramos nosotros mismos manejar la excepcin lo haramos de una forma parecida a la que sigue (slo la manejamos nosotros):

public void metodoResponsable() { MiPrimeraClaseExcepcional mPCE = new MiPrimeraClaseExcepcional(); try { mPCE.unMetodoExcepcional(); } catch (MiprimeraExcepcion m) { // aqu haramos las acciones pertinentes // si se produjera la excepcin MiPrimeraExcepcion } }

La traduccin de la sentencia try podra ser: Intenta ejecutar el cdigo de dentro de las llaves y si hay excepciones lnzalas que yo las unir a los manejadores para que se ocupen de ellas. Generalizando lo que hemos hecho, podramos tener tantas clusulas catch al final de la sentencia try como necesitemos y cada una nos permitira manejar una instancia de una de las clases listadas dentro de los parntesis o de sus subclases (recordemos que las excepciones son clases).

i
7
664

EXCEPCIONES
2. Lanzamiento de excepciones.Clusula throw
Manejar la excepcin Para completar los casos, si quisiramos manejar la excepcin y adems pasrsela a aquel que llame a nuestro mtodo, escribiramos:

public void metodoResponsable() throws MiprimeraExcepcion { MiPrimeraClaseExcepcional mPCE = new MiPrimeraClaseExcepcional(); try { mPCE.unMetodoExcepcional(); } catch (MiPrimeraExcepcion m) { // aqu haramos las acciones pertinentes // si se produjera la excepcin MiPrimeraExcepcion throw m; // relanzamos la excepcin } }

Esto funciona debido a que las excepciones pueden anidarse. Es interesante operar de esta forma porque as, estamos tratando para nosotros la excepcin, pero adems, se la pasamos a aquel que use nuestro mtodo para que realice sus oportunas acciones. El sistema, por s mismo, trata todas las excepciones que no son cogidas (tratadas desde catch), pero lo hace abortando el programa y mostrando un mensaje de error.

i
8
665

EXCEPCIONES
Lanzar excepciones si algo no funciona bien Tambin podemos lanzar excepciones, si en algn punto del programa detectamos que algo no funciona bien:

public class MiPrimeraClaseExcepcional { public void unMetodoExcepional() throws MiprimeraExcepcion { ... if (algoInusualOcurrio()) { throw new MiPrimeraExcepcion(); // la ejecucion ya no llegara aqu } } ... }

Esta vez throw acta de forma similar a break, salta sin ejecutar las lneas de cdigo inmediatamente.

i
9
666

EXCEPCIONES
Construir cadenas Las excepciones son una potente herramienta para dividir el amplio espacio de posibles errores en partes ms manejables. Se pueden construir cadenas como las del siguiente ejemplo:

try { algunMetodoExcepcional(); } catch (NullPointerException n) { // Tratamiento } catch (RuntimeException r) { // Tratamiento } catch (IOException i) { // Tratamiento } catch (Exception e) { // Tratamiento que se realizar siempre en caso de que el cdigo del programa no entre por ninguno de los catch anteriores, esto funciona como un comodn, siempre al final ponemos la clase superior (Exception) y as nos aseguramos de que siempre se ejecutara algn catch en caso de error. }

i
10
667

EXCEPCIONES
Listar subclases Listar primero las subclases e ir subiendo en la jerarqua, se hace para que las clases ms especificas traten las excepciones ms especificas y que las ms generales sean manejadas por la parte superior de la jerarqua. Mediante estas cadenas y aprovechando que disponemos de una jerarqua tambin para las excepciones, podemos crearnos nuestro propio rbol para stas y tratar de forma precisa cada excepcin.

Falta, como no, aplicar esto, pero utilizando interfaces para el caso en el que la jerarqua tpica se quede corta. No entramos en ello de momento. Pasos para lanzar una excepcin Para conocer los pasos para lanzar una excepcin, pulsa sobre la caja.

i
11
668

EXCEPCIONES
1. Se crea el objeto del tipo excepcin. 2. Con la palabra reservada throw se lanza: class Demothrow { static void ProcDemo() { try { throw new NullPointerException (Mi Error); } catch (NullPointerException ex) { System.out.println (Captura en ProcDemo); throw ex; } } // fin ProcDemo public static void main(String [] args) { try {ProcDemo();} catch(NullPointerException ex) { System.out.println(Capturada en main+ex); } } // fin main } // fin de clase 3. Si una funcin no captura una excepcin, la excepcin viaja por la pila de llamada a funciones hasta que una funcin la captura o finaliza la ejecucin del programa: main() calula() divide() // Error try { calcula() } catch() { . . . } En un bloque try se pueden definir varios tipos de excepciones: class MultiCatch { public static void main(String [] args) { try { int a = args.length; int b = 42 / a; //AritmethicException int[] c = {2, 8}; c[a] = 99; //IndexOutOfBoundsException } catch (AritmethicException ex) { System.out.println (No hay argumentos+ex); } catch (IndexOutOfBoundsException ex) { System.out.println (Demasiado argumentos); } catch (Exception ex) { // Para dems excepciones System.out.println (Error desconocido+ex); } } // fin de main } // fin de clase

12

669

EXCEPCIONES
Limitaciones para el programador A la hora de sobreescribir mtodos, hemos de tener en cuenta las excepciones y debemos coger (mediante catch) las excepciones necesarias.

Ejemplo public class MiClaseIlegal { public String toString() { algunMetodoExcepcional(); ... // devuelve algn String } }

La superclase Object defini el mtodo toString() sin clusulas throw y nosotros debemos mantener esa restriccin. Por eso no podemos llamar a algunMetodoExcepcional() que genera errores y excepciones y algunas de estos deben ser cogidas en su respectiva sentencia catch.

Ejemplo public class MiClase { public String toString() { try { algunMetodoExcepcional(); } catch (IOException e) { } catch (MiPrimeraExcepcion m) { } ... // devuelve algn String } }

Hemos cogido las dos excepciones pero no hemos hecho nada con ellas, esto es legal, pero no ser siempre lo correcto. Habremos de aadir un comportamiento no trivial que har nuestro programa ms robusto.

13
670

EXCEPCIONES
3. Resumen
Has llegado al final de este recurso formativo que denominamos Excepciones Java En esta leccin hemos estudiado los siguientes contenidos:

i
14
671

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


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.

3
674

Control de Excepciones. Excepciones personalizadas


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 algunMetodoExcepcional(); } finally { f.close(); // instruccin para cerrar un fichero } }

try {

La clusula finally 2 Lo que hay dentro de la clusula finally se va a ejecutar siempre pase lo que pase. De este modo lo que hacemos es poner la instruccin de cierre del fichero dentro de una clasula finally, as suceda lo que suceda, tendremos la seguridad de que el fichero se va a cerrar.

i
4
675

Control de Excepciones. Excepciones personalizadas


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.

i
5
676

Control de Excepciones. Excepciones personalizadas


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:

i
6
677

Control de Excepciones. Excepciones personalizadas


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 ClassCastException NullPointerException IndexOutOfBoundsException NegativeArraySizeException > > > > > Error aritmtico, divisin por 0 o d negativo. Convertir una ref. base a una derivada. Indirecionada una ref. nula. Nos salimos de los lmites del array. Se produce un ndice negativo.

i
7
678

Control de Excepciones. Excepciones personalizadas


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(); } }

i
8
679

Control de Excepciones. Excepciones personalizadas


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.

i
9
680

Control de Excepciones. Excepciones personalizadas


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.

i
10
681

Control de Excepciones. Excepciones personalizadas


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; }

i
11
682

Control de Excepciones. Excepciones personalizadas


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.

i
12
683

Control de Excepciones. Excepciones personalizadas


Listado con algunas de las excepciones ms usadas en Java. 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

i
13
684

Control de Excepciones. Excepciones personalizadas


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:

i
14
685

EXCEPCIONES Caso prctico


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.

686

EXCEPCIONES Caso prctico


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.

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

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
3
691

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
4
692

APLICACIONES BASADAS EN ENTORNO GRFICO


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() { ... }

i
5
693

APLICACIONES BASADAS EN ENTORNO GRFICO


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() { ... }

i
6
694

APLICACIONES BASADAS EN ENTORNO GRFICO


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).

i
7
695

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
8
696

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
9
697

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
10
698

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
11
699

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
12
700

APLICACIONES BASADAS EN ENTORNO GRFICO


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"); ... }

i
13
701

APLICACIONES BASADAS EN ENTORNO GRFICO


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); }

i
14
702

APLICACIONES BASADAS EN ENTORNO GRFICO


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 } }

i
15
703

APLICACIONES BASADAS EN ENTORNO GRFICO


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

i
16
704

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
17
705

APLICACIONES BASADAS EN ENTORNO GRFICO


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

i
18
706

APLICACIONES BASADAS EN ENTORNO GRFICO

i
19
707

APLICACIONES BASADAS EN ENTORNO GRFICO


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);

i
20
708

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
21
709

APLICACIONES BASADAS EN ENTORNO GRFICO


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 } }

i
22
710

APLICACIONES BASADAS EN ENTORNO GRFICO


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); size().width: size().height:

Devuelve el ancho del Applet Devuelve el alto del Applet

i
23
711

APLICACIONES BASADAS EN ENTORNO GRFICO


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
712

APLICACIONES BASADAS EN ENTORNO GRFICO


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
713

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
26
714

APLICACIONES BASADAS EN ENTORNO GRFICO


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(); getBackground(); getForeground();

Devuelve el color Devuelve el color de fondo Devuelve el color del primer plano

i
27
715

APLICACIONES BASADAS EN ENTORNO GRFICO


4. Resumen
Has llegado al final de este recurso formativo que denominamos Applets En esta leccin hemos estudiado los siguientes contenidos:

i
28
716

APLICACIONES BASADAS EN ENTORNO GRFICO

717

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
2
718

APLICACIONES BASADAS EN ENTORNO GRFICO


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); } }

i
3
719

APLICACIONES BASADAS EN ENTORNO GRFICO


<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>]

i
4
720

APLICACIONES BASADAS EN ENTORNO GRFICO


[<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>

i
5
721

APLICACIONES BASADAS EN ENTORNO GRFICO


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

i
6
722

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
7
723

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
8
724

APLICACIONES BASADAS EN ENTORNO GRFICO

<HTML> <HEAD> <TITTLE> Applet Estado </TITTLE> </HEAD> <BODY> A continuacin va el Applet: <BR> <APPLET code=AppletEstado.class width=300 height=25> </APPLET> </BODY> </HTML>

i
9
725

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
10
726

APLICACIONES BASADAS EN ENTORNO GRFICO


- 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>

i
11
727

APLICACIONES BASADAS EN ENTORNO GRFICO


- 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));

i
12
728

APLICACIONES BASADAS EN ENTORNO GRFICO


// 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.

i
13
729

APLICACIONES BASADAS EN ENTORNO GRFICO


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>

i
14
730

APLICACIONES BASADAS EN ENTORNO GRFICO


<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>();

i
15
731

APLICACIONES BASADAS EN ENTORNO GRFICO


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); } }

i
16
732

APLICACIONES BASADAS EN ENTORNO GRFICO


<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>

i
17
733

APLICACIONES BASADAS EN ENTORNO GRFICO


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);

i
18
734

APLICACIONES BASADAS EN ENTORNO GRFICO


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 import import import java.applet.*; java.awt.*; java.awt.event.*; netscape.javascript.*;

19
735

APLICACIONES BASADAS EN ENTORNO GRFICO


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>

i
20
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

APLICACIONES BASADAS EN ENTORNO GRFICO


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

i
3
739

APLICACIONES BASADAS EN ENTORNO GRFICO


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)

i
4
740

APLICACIONES BASADAS EN ENTORNO GRFICO


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
741

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
6
742

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
7
743

APLICACIONES BASADAS EN ENTORNO GRFICO


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); } } Cdigo HTML: <html> <body> <applet code="Cajas.class" width=200 height=200> </applet> </body> </html>

i
8
744

APLICACIONES BASADAS EN ENTORNO GRFICO


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)); } }

Cdigo HTML: <html> <body> <applet code="RadiosButons.class width=200 height=200> </applet> </body> </html>

9
745

APLICACIONES BASADAS EN ENTORNO GRFICO


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:

i
10
746

APLICACIONES BASADAS EN ENTORNO GRFICO


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
747

APLICACIONES BASADAS EN ENTORNO GRFICO


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()); ... }

i
12
748

APLICACIONES BASADAS EN ENTORNO GRFICO


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);

i
13
749

APLICACIONES BASADAS EN ENTORNO GRFICO


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
750

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
15
751

APLICACIONES BASADAS EN ENTORNO GRFICO


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).

i
16
752

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
17
753

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
18
754

APLICACIONES BASADAS EN ENTORNO GRFICO


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
755

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
20
756

APLICACIONES BASADAS EN ENTORNO GRFICO


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
757

APLICACIONES BASADAS EN ENTORNO GRFICO


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");

i
22
758

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
23
759

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
24
760

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
25
761

APLICACIONES BASADAS EN ENTORNO GRFICO


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

i
26
762

APLICACIONES BASADAS EN ENTORNO GRFICO


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; } }

i
27
763

APLICACIONES BASADAS EN ENTORNO GRFICO


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()

i
28
764

APLICACIONES BASADAS EN ENTORNO GRFICO


4. Resumen
Has llegado al final de este recurso formativo que denominamos El paquete Java.awt En esta leccin hemos estudiado los siguientes contenidos:

i
29
765

APLICACIONES BASADAS EN ENTORNO GRFICO

766

APLICACIONES BASADAS EN ENTORNO GRFICO


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;

i
2
767

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
3
768

APLICACIONES BASADAS EN ENTORNO GRFICO


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>

i
4
769

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
5
770

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
6
771

APLICACIONES BASADAS EN ENTORNO GRFICO


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):

i
7
772

APLICACIONES BASADAS EN ENTORNO GRFICO

Un objeto listener lo que tiene que hacer para enviar el evento es decir dnde habr que enviarlo. Tiene dos mtodos: void <Button>.addActionListener (ActionListener l) Aadir un evento a un listener. void <Button>.removeActionListener (ActionListener l) Eliminar un evento de un listener. El objeto listener tendr que implementar el interface ActionListener: public AppletBidon extends Applet implements ActionListener interface ActionListenter { public void actionPerformed (ActionEvent ev) } AppletBidon deber implementar dentro actionPerformed. multicast permite que cuando se produzca un evento en source se puede enviar el evento a varios objetos listener.

i
8
773

APLICACIONES BASADAS EN ENTORNO GRFICO

Object <ActionEvent>.getSource() Devuelve el objeto source que ha producido el evento. Dentro de actionPerformed: if (ev.getSource() == boton1) { ... } if (ev.getSource() == boton2) { ... }

i
9
774

APLICACIONES BASADAS EN ENTORNO GRFICO


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
775

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
11
776

APLICACIONES BASADAS EN ENTORNO GRFICO


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:

i
12
777

APLICACIONES BASADAS EN ENTORNO GRFICO


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()+]); }

i
13
778

APLICACIONES BASADAS EN ENTORNO GRFICO


public public public public void void void void mousePressed (MouseEvent ev) {}; mouseReleased (MouseEvent ev) {}; mouseEntered (MouseEvent ev) {}; 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>

i
14
779

APLICACIONES BASADAS EN ENTORNO GRFICO


Existen ms clases para no tener que realizar las derivadas: xxxListener MouseListener (interface) xxxAdapter 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

i
15
780

APLICACIONES BASADAS EN ENTORNO GRFICO


<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

i
16
781

APLICACIONES BASADAS EN ENTORNO GRFICO


<HTML> <HEAD> <TITLE> Applet con Etiqueta </TITLE> </HEAD> <BODY> <APPLET code=AppletRaton3.class width=200 height=200> </APPLET> </BODY> </HTML> Componente y Contenedores

i
17
782

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
18
783

APLICACIONES BASADAS EN ENTORNO GRFICO


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.*;

i
19
784

APLICACIONES BASADAS EN ENTORNO GRFICO


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>

i
20
785

APLICACIONES BASADAS EN ENTORNO GRFICO


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 void void void void <CardLayout>.first (Container c) <CardLayout>.next (Container c) <CardLayout>.previous (Container c) <CardLayout>.last (Container c) <CardLayout>.show (String name, Container c) Hacen visible el CardLayout Ejemplo: class Applet { // Atributos CardLayout l = new CardLayout(); public void init () { ... this.setLayout(l); ... }

i
21
786

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
22
787

APLICACIONES BASADAS EN ENTORNO GRFICO


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)

i
23
788

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
24
789

APLICACIONES BASADAS EN ENTORNO GRFICO


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).

i
25
790

APLICACIONES BASADAS EN ENTORNO GRFICO


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

i
26
791

APLICACIONES BASADAS EN ENTORNO GRFICO


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)

i
27
792

APLICACIONES BASADAS EN ENTORNO GRFICO


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));

i
28
793

APLICACIONES BASADAS EN ENTORNO GRFICO


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); }

i
29
794

APLICACIONES BASADAS EN ENTORNO GRFICO


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

i
30
795

APLICACIONES BASADAS EN ENTORNO GRFICO


<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.

i
31
796

APLICACIONES BASADAS EN ENTORNO GRFICO


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

i
32
797

APLICACIONES BASADAS EN ENTORNO GRFICO


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);

i
33
798

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
34
799

APLICACIONES BASADAS EN ENTORNO GRFICO


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)

i
35
800

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
36
801

APLICACIONES BASADAS EN ENTORNO GRFICO


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);

i
37
802

APLICACIONES BASADAS EN ENTORNO GRFICO


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));

i
38
803

APLICACIONES BASADAS EN ENTORNO GRFICO


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;

i
39
804

APLICACIONES BASADAS EN ENTORNO GRFICO


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>

i
40
805

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
41
806

APLICACIONES BASADAS EN ENTORNO GRFICO


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
807

APLICACIONES BASADAS EN ENTORNO GRFICO


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

i
43
808

APLICACIONES BASADAS EN ENTORNO GRFICO


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:

i
44
809

APLICACIONES BASADAS EN ENTORNO GRFICO


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

i
45
810

APLICACIONES BASADAS EN ENTORNO GRFICO


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 Cuando se abre la ventana. (WindowEvent ev)

public void windowClosing (WindowEvent ev) Cuando se va a cerrar public void windowClosed (WindowEvent ev) Cuando se cierra la ventana.

i
46
811

APLICACIONES BASADAS EN ENTORNO GRFICO


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?);

i
47
812

APLICACIONES BASADAS EN ENTORNO GRFICO


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;

i
48
813

APLICACIONES BASADAS EN ENTORNO GRFICO


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);

i
49
814

APLICACIONES BASADAS EN ENTORNO GRFICO


// 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:

i
50
815

APLICACIONES BASADAS EN ENTORNO GRFICO


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);

i
51
816

APLICACIONES BASADAS EN ENTORNO GRFICO


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);

i
52
817

APLICACIONES BASADAS EN ENTORNO GRFICO


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); }

i
53
818

APLICACIONES BASADAS EN ENTORNO GRFICO


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)

i
54
819

APLICACIONES BASADAS EN ENTORNO GRFICO


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 > BeOS Interface FilenameFilter { public bolean accept (File dir, String name) } text/plain text/html text/css image/gif

i
55
820

APLICACIONES BASADAS EN ENTORNO GRFICO


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
821

APLICACIONES BASADAS EN ENTORNO GRFICO


public boolean accept(File dir, String name) { System.out.println(name); if (name.endsWith(.java)) return true; else return false; } } // fin de clase Mens

i
57
822

APLICACIONES BASADAS EN ENTORNO GRFICO


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 -).

i
58
823

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
59
824

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
60
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

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
3
828

APLICACIONES BASADAS EN ENTORNO GRFICO


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()).

i
4
829

APLICACIONES BASADAS EN ENTORNO GRFICO


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
830

APLICACIONES BASADAS EN ENTORNO GRFICO


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:

i
6
831

APLICACIONES BASADAS EN ENTORNO GRFICO

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.

i
7
832

APLICACIONES BASADAS EN ENTORNO GRFICO


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:

i
8
833

APLICACIONES BASADAS EN ENTORNO GRFICO


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) { ... }

i
9
834

APLICACIONES BASADAS EN ENTORNO GRFICO

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().

i
10
835

APLICACIONES BASADAS EN ENTORNO GRFICO


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... Cdigo HTML: 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; } } <html> <body> <applet code="Raton.class" width=200 height=200> </applet> </body> </html>

i
11
836

APLICACIONES BASADAS EN ENTORNO GRFICO


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) { ... }

i
12
837

APLICACIONES BASADAS EN ENTORNO GRFICO


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; }

i
13
838

APLICACIONES BASADAS EN ENTORNO GRFICO

public boolean mouseUp(Event evt,int x,int y) { if (lineaactual<MAXLINES) { addline(x,y); } else { System.out.println("Demasiadas lineas."); } return true; } public boolean mouseDrag(Event evt,int x,int y) { puntoactual = new Point(x,y); repaint(); return true; } void addline(int x, int y) { comienzo[lineaactual] = ancho; fin[lineaactual] = new Point(x,y); lineaactual++; puntoactual = null; repaint(); } public void paint(Graphics g) { g.drawRect(0,0,size().width-1,size().height-1); for (int i=0; i<lineaactual; i++) { g.drawLine(comienzo[i].x,comienzo[i].y,fin[i].x,fin[i].y); } g.setColor(Color.blue); if (puntoactual != null) { g.drawLine(ancho.x,ancho.y,puntoactual.x,puntoactual.y); } } }

i
14
839

APLICACIONES BASADAS EN ENTORNO GRFICO


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) { ... }

i
15
840

APLICACIONES BASADAS EN ENTORNO GRFICO


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) { ... }

i
16
841

APLICACIONES BASADAS EN ENTORNO GRFICO


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 Event.HOME Event.END Event.PGUP Event.PGDN Event.UP Event.DOWN Event.LEFT Event.RIGHT > > > > > > > > > Tecla pulsada HOME END PAGE UP PAGE DOWN UP Flecha DOWN Flecha LEFT Flecha RIGHT Flecha

i
17
842

APLICACIONES BASADAS EN ENTORNO GRFICO


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; } }

i
18
843

APLICACIONES BASADAS EN ENTORNO GRFICO


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()

i
19
844

APLICACIONES BASADAS EN ENTORNO GRFICO


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
845

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
21
846

APLICACIONES BASADAS EN ENTORNO GRFICO

i
22
847

APLICACIONES BASADAS EN ENTORNO GRFICO


5. Resumen
Has llegado al final de este recurso formativo que denominamos Gestin de eventos En esta leccin hemos estudiado los siguientes contenidos:

i
23
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

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
3
851

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
4
852

APLICACIONES BASADAS EN ENTORNO GRFICO


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>

i
5
853

APLICACIONES BASADAS EN ENTORNO GRFICO


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)

i
6
854

APLICACIONES BASADAS EN ENTORNO GRFICO


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 Panel, Applet => BorderLayout => Flowlayout

En Swing
JFrame, JDialog, JApplet JPanel => BorderLayout => FlowLayout

i
7
855

APLICACIONES BASADAS EN ENTORNO GRFICO


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);

i
8
856

APLICACIONES BASADAS EN ENTORNO GRFICO


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 JChekBox JRadioButton JToggleButton > > > > Botn pinchable CheckBox Radio Button Un botn que cuando se pincha se aplasta y cuando se vuelve a pinchar se levanta.

i
9
857

APLICACIONES BASADAS EN ENTORNO GRFICO


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)

i
10
858

APLICACIONES BASADAS EN ENTORNO GRFICO


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

i
11
859

APLICACIONES BASADAS EN ENTORNO GRFICO


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)

i
12
860

APLICACIONES BASADAS EN ENTORNO GRFICO


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 ActionEvent Para el cambio de estado. 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
861

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
14
862

APLICACIONES BASADAS EN ENTORNO GRFICO


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
863

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
16
864

APLICACIONES BASADAS EN ENTORNO GRFICO


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)

i
17
865

APLICACIONES BASADAS EN ENTORNO GRFICO


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

i
18
866

APLICACIONES BASADAS EN ENTORNO GRFICO


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)

i
19
867

APLICACIONES BASADAS EN ENTORNO GRFICO


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
868

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
21
869

APLICACIONES BASADAS EN ENTORNO GRFICO


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)

i
22
870

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
23
871

APLICACIONES BASADAS EN ENTORNO GRFICO


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)

i
24
872

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
25
873

APLICACIONES BASADAS EN ENTORNO GRFICO


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.

i
26
874

APLICACIONES BASADAS EN ENTORNO GRFICO


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)

i
27
875

APLICACIONES BASADAS EN ENTORNO GRFICO


Estn implementados por clases y las clases ms conocidas son las siguientes:

javax.swing.plaf.metal.MetalLookAndFeel com.sun.java.swing.plaf.motif.MotifLookAndFeel com.sun.java.swing.windows.WindowsLookAndFeel com.sun.java.swing.plaf.beos.BeOSLookAndFeel

// Para UNIX. // Para Window. // 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)

i
28
876

APLICACIONES BASADAS EN ENTORNO GRFICO


4. Resumen
Has llegado al final de este recurso formativo que denominamos El paquete javax.swing En esta leccin hemos estudiado los siguientes contenidos:

i
29
877

APLICACIONES BASADAS EN ENTORNO GRFICO Caso prctico


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.

878

APLICACIONES BASADAS EN ENTORNO GRFICO Caso prctico


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.

879

Mdulo 8: Acceso a datos en Java

880

ACCESO A DATOS EN JAVA

881

ACCESO A DATOS EN JAVA


Fundamentos del lenguaje SQL
LMD (Lenguaje de manipulacin de datos) SELECT SELECT [DISTINCT] <lista_columnas> | * FROM <lista_tablas> [WHERE <predicado>] EJ: Visualizar todos los vuelos que tengan como origen o destino Cceres. SELECT * FROM VUELOS WHERE ORIGEN=CACERES OR DESTINO=CACERES EJ: Visualizar todos los vuelos que tengan como origen Madrid o Londres y como destino Londres o Madrid. SELECT * FROM VUELOS WHERE (ORIGEN=MADRID AND DESTINO=LONDRES) OR (ORIGEN=LONDRES AND DESTINO=MADRID) Clasula IN Expresa la pertenencia del valor de una columna a un determinado conjunto de valores. EJ: Seleccionar aquellos vuelos que tengan como origen Madrid, Barcelona o Sevilla. SELECT * FROM VUELOS WHERE ORIGEN IN (MADRID,BARCELONA,SEVILLA) O tambin SELECT * FROM VUELOS WHERE ORIGEN=MADRID OR ORIGEN=BARCELONA OR ORIGEN=SEVILLA

882

ACCESO A DATOS EN JAVA


EJ: Visualizar todos los vuelos existentes excepto aquellos que llegan a Londres o a Copenhague. SELECT * FROM VUELOS WHERE DESTINO NOT IN (LONDRES,COPENHAGUE) Clasula BETWEEN Sirve para establecer o expresar un rango de valores. Obedece a la siguiente sintaxis: <nombre_columna> BETWEEN valor1 AND valor2 El rango ser [valor1, valor2], extremos incluidos. EJ: Recuperar todos los vuelos que salgan entre las 6 y las 12 de la maana. SELECT * FROM VUELOS WHERE HORA_SALIDA BETWEEN 06.00.00 AND 12.00.00 tambin SELECT * FROM VUELOS WHERE HORA_SALIDA >= 06.00.00 AND HORA_SALIDA <= 12.00.00 EJ: En la columna NUM_VUELO representar los vuelos con 6 caracteres. Los dos primeros caracteres indicarn la compaa a la que pertenece cada vuelo (IBIberia, BABritish Airways), los cuatro caracteres siguientes correspondern al nmero de vuelo. Bajo estas condiciones recuprense todos los vuelos que no pertenecen a IBERIA. SELECT * FROM VUELOS WHERE NUM_VUELO NOT BETWEEN IB0000 AND IB9999

883

ACCESO A DATOS EN JAVA


Clasula LIKE Sirve para especificar, con la ayuda de metasmbolos, cadenas de caracteres que comparten ciertos caracteres en comn. Los metasmbolos que sern utilizados son: % Equivale a una cadena de caracteres de longitud comprendida entre 0 y n. AB% AB, ABCDE, AB 497 _ Equivale a un nico carcter A_B A B, A4B, AJB EJ: Recuperar todos los vuelos pertenecientes a la compaa IBERIA. SELECT * FROM VUELOS WHERE NUM_VUELOS LIKE IB% O tambin SELECT * FROM VUELOS WHERE NUM_VUELOS LIKE IB_ _ _ _ Expresiones aritmticas +, -, *, / Pueden ser utilizadas tanto despus de SELECT como despus de WHERE. En el primer caso trabajaran sobre columnas y en el segundo sobre filas. EJ: Visualizar la longitud y la envergadura de todos los aviones, expresando las magnitudes en pies (en la base de datos est almacenado en metros, para pasar 1 metro a pies se ha de multiplicar por 3.28), y la velocidad de crucero en mph (est en Km/h, habr que dividir por 1.6). SELECT LONGITUD*3.28, ENVERGADURA*3.28, VELO_CRUC/1.6 FROM AVIONES

Etiquetas

884

ACCESO A DATOS EN JAVA


En DB/2 de IBM las etiquetas toman los nombres de las columnas (col1, col2, col3) En SQL-SERVER las etiquetas quedaran as (LONGITUD*3.28, ENVERGADURA*3.28, VELO_CRUC/1.6) EJ: Relacin entre la longitud y la envergadura de todos los aviones. SELECT LONGITUD/ENVERGADURA FROM AVIONES EJ: Seleccionar aquellos aviones cuya longitud supere a su envergadura en ms de un 10%. SELECT * FROM AVIONES WHERE LONGITUD > ENVERGADURA*1.10 Funciones de columna Son funciones que operan con todas las filas que cumplen la condicin expuesta en la clasula WHERE. Su resultado es un nico valor. Sintaxis: 1) <f_columna> ([DISTINCT] <nombre_columna>) 2) <f_columna> (<expresin>), donde <expresin> es una expresin aritmtica en la cual debe participar, al menos, una columna. 3) COUNT(*) Funciones <f_columna>: MIN: Calcula el valor mnimo de una columna. MAX: Calcula el valor mximo de una columna. AVG: Calcula la media aritmtica de una columna. SUM: Calcula la suma de todos los campos de una columna. COUNT: Cuenta el n de filas de una columna.

885

ACCESO A DATOS EN JAVA


COUNT(A)=COUNT(B) COUNT(A)=4, COUNT(B)=4 El COUNT de dos columnas de una misma tabla es igual. COUNT(*) sirve para obtener el n de filas. EJ: Seleccionar los valores mnimo y mximo de la columna que almacena las velocidades de crucero. SELECT MIN(VELO_CRUC), MAX(VELO_CRUC) FROM AVIONES EJ: Averiguar a qu hora parte el primer vuelo hacia Madrid. SELECT MIN (HORA_SALIDA) FROM VUELOS WHERE DESTINO=MADRID Regla que cumplen las funciones de columna La funcin de columna slo podr especificarse detrs de la particula SELECT o en la clasula HAVING, pero nunca dentro de la clasula WHERE. EJ: Se desea saber cul es el vuelo que tiene la mnima hora de salida. SELECT * FROM VUELOS WHERE HORA_SALIDA=(SELECT MIN(HORA_SALIDA) FROM VUELOS) Clasula GROUP BY-HAVING Sirve para dividir una tabla en grupos de filas que comparten caractersticas comunes. La sintaxis es: SELECT <lista_columnas>, <funciones_de_columna> FROM <lista_tablas> [WHERE <predicado>] [GROUP BY <lista_columnas>] [HAVING <predicado>]

886

ACCESO A DATOS EN JAVA


EJ: Efectese una SELECT que visualice el mnimo valor de hora de salida para cada uno de los diferentes destinos. SELECT DISTINCT DESTINO FROM VUELOS SELECT MIN(HORA_SALIDA) FROM VUELOS WHERE DESTINO LIKE % A continuacin se muestra un ejemplo de lo que no se debe hacer: SELECT MIN(HORA_SALIDA) FROM VUELOS WHERE DESTINO IN (SELECT DISTINCT DESTINO FROM VUELOS) Sentencia GROUP BY: SELECT DESTINO, MIN(HORA_SALIDA) FROM VUELOS GROUP BY DESTINO Tabla VUELOS Tabla auxiliar Tabla x MADRID WHERE GROUP BY DESTINO Tabla y BARCELONA Tabla z SEVILLA <f_columna> GROUP BY crea una serie de subtablas compuestas por filas con el mismo valor para la columna de agrupamiento (en este ejemplo la columna DESTINO). Se aplicarn a continuacin funciones de columna sobre cada subtabla de forma independiente. MADRID, x BARCELONA, y SEVILLA, z

887

ACCESO A DATOS EN JAVA


No se puede poner en GROUP BY un campo que no se haya incluido en la sentencia SELECT. EJ: Obtener el origen del vuelo para cada uno de los vuelos que tienen la mnima hora de salida para cada uno de los destinos. EJ: Obtener el nmero de vuelos que existen para cada uno de los orgenes. SELECT ORIGEN, COUNT(*) FROM VUELOS GROUP BY ORIGEN Clasula HAVING Permite elegir aquellos grupos que se quieren visualizar. EJ: Visualizar los grupos que tienen para cada uno de los orgenes la mnima hora de salida siendo anterior a las 12 horas. SELECT ORIGEN, MIN(HORA_SALIDA) FROM VUELOS GROUP BY ORIGEN HAVING MIN(HORA_SALIDA) < 12.00 HAVING no interferir en la agrupacin por filas de GROUP BY. EJ: Se desea seleccionar la hora de salida ms temprana para cada origen y destino. SELECT ORIGEN, DESTINO, MIN(HORA_SALIDA) FROM VUELOS GROUP BY ORIGEN, DESTINO EJ: Visualizar los orgenes que tengan ms de dos vuelos. SELECT ORIGEN FROM VUELOS GROUP BY ORIGEN HAVING COUNT(*) > 2

888

ACCESO A DATOS EN JAVA


EJ: Visualizar los vuelos de IBERIA que tengan ms de 150 plazas libres. SELECT NUM_VUELO, SUM(PLAZAS_LIBRES) FROM RESERVAS GROUP BY NUM_VUELO HAVING NUM_VUELO LIKE IB% AND SUM(PLAZAS_LIBRES)>150 O tambin SELECT NUM_VUELO, SUM(PLAZAS_LIBRES) FROM RESREVAS WHERE NUM_VUELO LIKE IB% GROUP BY NUM_VUELO HAVING NUM_VUELO IB% AND SUM(PLAZAS_LIBRES)>150

889

ACCESO A DATOS EN JAVA


TRATAMIENTO DE NULOS
Operaciones aritmticas Cualquier operacin aritmtica sobre un campo nulo nos devolver como resultado un valor nulo. Tomemos como ejemplo la siguiente tabla: NULOS

SELECT COL_A+COL_B FROM NULOS COL_A+COL_B 25 70 NULL NULL NULL 117 93 NULL NULL

10

890

ACCESO A DATOS EN JAVA


Funciones de columna Ignoran los campos NULL, exceptuando la funcin COUNT. SELECT AVG(COL_A) SELECT SUM(COL_A)/COUNT(*) AVG(COL_A)=46 SUM(COL_A)/COUNT(*)=25.5 Comparaciones Dos valores nulos no son iguales ni son distintos, sino indeterminados. SELECT * FROM NULOS WHERE COL_A=COL_B COL_A COL_B 35 35 SELECT * FROM NULOS WHERE COL_A<>COL_B COL_A COL_B 15 10 140 NULL NULL 100 7 110 33 60 SELECT * FROM NULOS WHERE COL_A IS NULL Esta orden visualiza todas las filas en las que el campo perteneciente a la columna COL_A es nulo.

11

891

ACCESO A DATOS EN JAVA


Ordenacin Dependiendo del sistema gestor en uso los valores nulos sern los de mayor o los de menor peso. DB/2 de IBM: NULL Mayor peso. En ordenacin ascendente sern los ltimos. SELECT COL_A FROM NULOS ORDER BY COL_A COL_A 7 15 33 35 140 NULL NULL NULL NULL SQL-SERVER: NULL Menor peso. En ordenacin ascendente sern los primeros. SELECT COL_A FROM NULOS ORDER BY COL_A COL_A NULL NULL NULL NULL 7 15 33 33 140

12

892

ACCESO A DATOS EN JAVA


DISTINCT No elimina los valores nulos repetidos. SELECT DISTINCT COL_A FROM NULOS COL_A 15 35 140 NULL NULL 7 33 NULL NULL ndices nicos Sobre una columna de ndice nico slo est permitida la existencia de un valor nulo. CREATE UNIQUE INDEX IXNULOS ON NULOS (COL_A) Devolvera un error, ya que existe ms de un campo con NULL. Para este caso los nulos se interpretan como valores iguales.

GROUP BY Todos los nulos quedarn agrupados en el mismo grupo. SELECT COL_A, COUNT(*) FROM NULOS GROUP BY COL_A

13

893

ACCESO A DATOS EN JAVA


COL_A COUNT(*) 15 1 35 1 140 1 NULL 4 7 1 33 1 Todos los valores NULL se agrupan y COUNT devuelve el nmero de filas que tenan NULL en COL_A. SUBSELECT Responde a la siguiente sintaxis: SELECT <lista_columnas> FROM <lista_tablas> WHERE <nombre_columna> <CONCATENADOR> (SELECT <nombre_columna> FROM <lista_tablas> WHERE <Predicado>) <CONCATENADOR> Puede ser un operador de comparacin o la clasula IN Operadores de comparacin: >,<,>=,<=,=,<> Restricciones: ha de exigirse que el resultado de la Subselect sea un nico valor al usar como concatenador un operador de comparacin. Si usamos IN puede devolver ms de un valor. Cada Select se ejecuta una nica vez, desde la ms interna, hasta la ms externa. EJ: Se desea recuperar las plazas libres que hay en cada vuelo MADRID-LONDRES del da 20/02/92. {Las plazas libres es un campo de la tabla de reservas. En la tabla de vuelos tenemos el origen y el destino de cada vuelo.} SELECT * FROM RESERVAS WHERE FECHA_SALIDA=20.02.1992 AND NUM_VUELO IN(SELECT NUM_VUELO FROM VUELOS WHERE ORIGEN=MADRID AND DESTINO=LONDRES)

14

894

ACCESO A DATOS EN JAVA


ANY, ALL Se usan para poder utilizar operadores de comparacin con subselects que nos devuelvan ms de un valor nico como resultado. SELECT <lista_columna> FROM <lista_tablas> WHERE <nombre_columna> <CONCATENADOR> {ANY/ALL} (<Subselect>) Una expresin ANY es cierta si lo es para algn valor de los que devuelve la Subselect. Una expresin ALL es cierta si lo es para todos los valores que devuelve la Subselect. 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: Se quieren recuperar los aviones cuya longitud sea mayor que la envergadura de todos ellos. SELECT * FROM AVIONES WHERE LONGITUD > ALL (SELECT ENVERGADURA FROM AVIONES) O tambin SELECT * FROM AVIONES WHERE LONGITUD > (SELECT MAX(ENVERGADURA) FROM AVIONES) =ANY e IN tienen la misma funcin. 3=ANY(2,3,5) y 3 IN (2,3,5) devuelven ambos Cierto.

15

895

ACCESO A DATOS EN JAVA


Subselects correlacionadas Son un tipo especial de subselect. La sintaxis es similar: SELECT <lista_columnas> FROM <nombre_tabla_externa> WHERE <nombre_columna> <CONCATENADOR> (SELECT <nombre_columna> FROM <nombre_tabla_interna> WHERE <Predicado>) En <Predicado> habr una sentencia del tipo <nombre_columna_tabla_interna> <operador> <nombre_columna_tabla_externa> Las formas de ejecutar una subselect ordinaria y unas correlacionadas son diferentes. Las subselects correlacionadas obedecen al siguiente algoritmo: ALGORITMO Subselect_Correlacionada 1. Seleccionar fila de tabla externa 2. Ejecutar SELECT interno 3. Evaluar la condicin del WHERE externo - Cierto: la fila seleccionada en 1 ser una fila de salida 4. Si existe alguna fila ms en la tabla externa ir al paso 1 EJ: Se desea recuperar las reservas cuyo nmero de plazas libres sea mayor que la media para ese mismo vuelo. SELECT * FROM RESERVAS, A WHERE PLAZAS_LIBRES > (SELECT AVG(PLAZAS_LIBRES) FROM RESERVAS WHERE NUM_VUELO=A.NUM_VUELO) RESERVAS NUM_VUELO IB740 IB740 IB740 FECHA_SALIDA PLAZAS_LIBRES 20.02.92 25.02.92 03.03.92 5 15 10

AVG(PLAZAS_LIBRES)=10

16

896

ACCESO A DATOS EN JAVA


Alias Es un sobrenombre que se le da a una tabla y que debe ser nico para toda la consulta. Se escribe dejando un blanco detrs del nombre de la tabla a la cual se va a calificar. EJ: Se quiere recuperar los aviones que tienen menos de 1 hora y cuarto de recorrido como trmino medio. VUELOS NUM_VUELO B747 B747 AVIONES NUM_VUELO ............ VELO_CRUC ............ ORIGEN DESTINO 10000 4000 DISTANCIA

MADRID LONDRES MADRID PARIS

v=e/t, t>e/v, 1.25>e/v, v*1.25 > AVG(DISTANCIA) SELECT AVIONES SELECT VUELOS SELECT * FROM AVIONES WHERE 1.25*VELO_CRUC > (SELECT AVG(DISTANCIA) FROM VUELOS WHERE NUM_VUELO=AVIONES.NUM_VUELO) EXISTS-NOT EXISTS Se define para comprobar la existencia o ausencia del valor devuelto por una Subselect. Una expresin con EXIST devuelve Cierto si la Subselect nos devuelve al menos un valor. WHERE EXISTS (<Subselect>) Cierto

17

897

ACCESO A DATOS EN JAVA


EJ: Seleccionar toda la informacin de vuelos para aquellos que tengan origen Madrid y en los que queden plazas libres. SELECT * FROM VUELOS WHERE ORIGEN=MADRID AND EXISTS (SELECT * FROM RESERVAS WHERE PLAZAS_LIBRES > 0 AND NUM_VUELO=VUELOS.NUM_VUELO) EJ: Obtener los tipos de avin y capacidades para aquellos en los que queden menos de 30 plazas libres (JOIN). ORDER BY Se define para ordenar la salida de una consulta por los campos que se especifiquen a continuacin. Sintaxis: SELECT FROM WHERE GROUP BY HAVING ORDER BY ORDER BY <especificacin de columna><orden>{,<especificacin de columna><orden>} <especificacin de columna>=<nombre de columna>|<posicin de columna> <orden>=ASC|DESC Ej: Obtener el nmero de plazas libres que quedan para cada vuelo y ordenar el resultado de ms a menos plazas libres. Para igual nmero de plazas ordnese por nmero de vuelo. SELECT NUM_VUELO, SUM(PLAZAS-LIBRES) FROM RESERVAS GROUP BY NUM_VUELO ORDER BY 2 DESC, NUM_VUELO

18

898

ACCESO A DATOS EN JAVA


UNION-UNION ALL Se define para recuperar, usando una nica consulta, informacin que se obtiene a partir de ms de una consulta. Sintaxis: <SELECT> UNION [ALL] <SELECT> {UNION[ALL] <SELECT>} Caractersticas: Cada SELECT devuelve un conjunto de filas. La unin ser la tabla resultado. Condiciones de cada estructura SELECT: - Todas deben ser iguales o compatibles una a una. Esto supone que por cada columna tengamos un nico tipo de dato. - Pueden ser completas (WHERE, GROUP BY,...), exceptuando la clusula ORDER BY, que se ubicar al final de la ltima SELECT. UNION sin ALL proporciona un resultado sin filas duplicadas. Ej: Sacar una lista de todas aquellas ciudades para las que haya vuelo, ordenadas alfabticamente. SELECT ORIGEN FROM VUELOS UNION SELECT DESTINO FROM VUELOS ORDER BY 1

19

899

ACCESO A DATOS EN JAVA


Catlogo del sistema o diccionario de datos: Es el alma de un sistema gestor. Se define como un conjunto de tablas que forman una base de datos, y son definidas y mantenidas automticamente por el sistema gestor. Sirven para almacenar informacin sobre los objetos definidos por los usuarios. SELECT * FROM VUELOS 1- El sistema busca en el catlogo si existe la tabla VUELOS. 2- Verifica si el usuario tiene acceso a esa informacin. 3- Se pregunta cules y cuntas columnas tiene la tabla VUELOS. DB2 IBM: SYSTABLES: una fila por cada tabla definida en la instalacin. SYSCOLUMNS: una fila por cada columna definida. SYSINDEXES: una fila por cada ndice definido. SYSVIEW: una fila por cada vista. SYSTABAUTH: una fila por cada autorizacin definida. Todas las tablas son directamente consultadas por usuarios autorizados. ADM (Administrador): es la persona que concede autorizaciones a los usuarios. Un usuario autorizado puede efectuar operaciones del tipo: SELECT * FROM SYSTABLES WHERE NAME=RESERVAS NAME RESERVAS DBNAME AEROPUERTO CARD ..........

DBNAME: nombre de la BdD a la que pertenece la tabla. CARD: n de filas de la tabla. OWNER: usuario creador de la tabla. SELECT * FROM SYSCOLUMNS WHERE DBNAME=RESERVAS

20

900

ACCESO A DATOS EN JAVA


Nos da la informacin sobre todas las columnas que pertenecen a la tabla reservas. NAME TBNAME NUM_VUELO RESERVAS FECHA_SALIDA RESERVAS COL_NO 1 2 COL_TYPE CHAR DATE LENGTHNULLS 6 N 8 N

TBNAME: nombre de la tabla. COL_NO: posicin de la columna en la tabla. COL_TYPE: tipo de dato LENGTH: longitud del dato de la columna. NULLS: indica si se permite valor nulo. Ej: Obtngase la ltima hora de salida para cada destino de los vuelos realizados por aviones capaces de almacenar ms combustible que un tercio de la media que pueden almacenar los dems aviones. SELECT DESTINO, MAX(HORA_SALIDA) FROM VUELOS WHERE TIPO_AVION IN (SELECT TIPO FROM A WHERE COMBUSTIBLE>1/3*(SELECT AVG(COMBUSTIBLE) FROM AVIONES WHERE TIPO<>A.TIPO) Ej: Crear una vista sobre la tabla vuelos con las columnas ORIGEN y DESTINO para aquellos vuelos que no sean de IBERIA. Visualizar el contenido de la lista para los vuelos que no partan de Madrid. Borrar la vista. CREATE VIEW V_VUELOS (V_ORIGEN, V_DESTINO) AS SELECT ORIGEN, DESTINO FROM VUELOS WHERE NUM_VUELO NOT LIKE IB% SELECT * FROM V_VUELOS WHERE V_ORIGEN<>MADRID DROP VIEW V_VUELOS

21

901

ACCESO A DATOS EN JAVA


Ej: Visualice los tipos de avin, el doble de su longitud y la mitad de su envergadura, para aquellos aviones con envergadura mayor que la media y que realizan vuelos desde o hacia Barcelona, ordenndolos de mayor a menor longitud. SELECT TIPO_AVION, 2*LONGITUD, .5*ENVERGADURA FROM AVIONES, VUELOS WHERE ENVERGADURA>(SELECT AVG(ENVERGADURA) FROM AVIONES) AND AVIONES.TIPO_AVION=VUELOS.TIPO_AVION AND (ORIGEN=BARCELONA OR DESTINO=BARCELONA) ORDER BY 2 DESC Ej: Visualice las tres primeras letras de los orgenes y destinos de los vuelos realizados por aviones con longitud mayor con longitud mayor que la media y envergadura menor que 2/3 de la mxima envergadura, ordenados alfabticamente por destino. SUBSTRING (SQL) (SUBSTRNG), (DB2) SUBSTRING (string, posicin, ncaracteres) nom_col / cadena con comillas () SELECT SUBSTRING (ORIGEN, 1, 3), SUBSTRING (DESTINO, 1, 3) FROM VUELOS WHERE TIPO_AVION IN (SELECT TIPO FROM AVIONES WHERE LONGITUD > (SELECT AVG(LONGITUD) FROM AVIONES) AND ENVERGADURA*3/2 < (SELECT MAX(ENVERGADURA) FROM AVIONES) ORDER BY 2

22

902

ACCESO A DATOS EN JAVA


Ej: Visualice el total de plazas libres por nmero de vuelo para aquellos realizados desde Madrid a Barcelona o Sevilla y que recorran una distancia mayor que la media de todos los vuelos que salen de Madrid, ordenndolos de menor a mayor. SELECT SUM(PLAZAS_LIBRES), NUM_VUELO FROM RESERVAS, VUELOS WHERE RESERVAS, NUM_VUELO=VUELOS.NUM_VUELO AND ORIGEN=MADRID AND DESTINO IN (BARCELONA, SEVILLA) AND DISTANCIA > (SELECT AVG(DISTANCIA) FROM VUELOS WHERE ORIGEN=MADRID) ORDER BY 1 Ej: Obtener para cada nmero de vuelo el total de plazas libres de los vuelos que recorran distancias menores que 2/3 de la media de las distancias recorridas por vuelos de otras compaas. SELECT NUM_VUELOS, SUM(PLAZAS_LIBRES) FROM RESERVAS, VUELOS V WHERE RESERVAS.NUM_VUELO=VUELOS.NUM_VUELOS AND DISTANCIA*3/2 < (SELECT AVG(DISTANCIA) FROM VUELOS WHERE SUBSTRING (NUM_VUELO, 1, 2) <> SUBSTRING (VUELOS.NUM_VUELO, 1, 2)

23

903

ACCESO A DATOS EN JAVA


TEORIA DE LA NORMALIZACION
Introduccin: Nos basaremos en la siguiente tabla:

Bibliografa: Diseo y Gestin de Bases de Datos. Angle Lucas. Se plantean una serie de problemas: Redundancia: cuando un autor tiene varios libros, se repite la nacionalidad. Anomalas de modificacin: si Ad.Mig. y Ma.Piat. desean cambiar de editor, se modifica en los 2 lugares. A priori no podemos saber cuntos autores tiene un libro. Los errores son frecuentes al olvidar la modificacin de un autor. Se pretende modificar en un slo sitio. Anomalas de insercin: se desea dar de alta un autor sin libros, en un principio. NOMBRE y COD_LIB son campos clave, una clave no puede tomar valores nulos. Teora de la normalizacin: la teora de la normalizacin ofrece una serie de reglas para efectuar una modelizacin ptima.

24

904

ACCESO A DATOS EN JAVA


La tabla anterior debera dividirse en 3 tablas: AUTORES (NOMBRE, NACION) LIBROS (COD_LIB, TITULO, EDITOR) ESCRIBE (NOMBRE, COD_LIB) En los aos 70 Codd cre las bases de la teora de la normalizacin. A cada regla de la teora la denomin forma normal. Codd cre las formas normales 1, 2 y 3. La 3 forma normal origin problemas. Boyce ayudo a solventarlos con la f.n. de Boyce-Codd (FNBC). A finales de los 70 Fagin cre las formas normales 4 y 5. Las formas normales se basan en el concepto de dependencia, que comprende las restricciones definidas sobre los atributos de una relacin. Existen diferentes tipos de dependencia: - Dependencias funcionales (Formas normales 1, 2 y 3 y FNBC) - Dependencias multivaluadas (4 forma normal) - Dependencia de JOIN (5 forma normal)

Formas normales
1 forma normal: es una restriccin inherente del modelo relacional. Se dice que una tabla est en 1 forma normal si no existen en ella grupos repetitivos. Una tabla no puede tener en un campo ms de un valor. TITULO AUTOR CyD Ad.Mig. Ma.Piat. Hay un grupo repetitivo. De este modo la tabla no es plana y no est en 1 forma normal. Para convertirla a 1 forma normal: TITULO AUTOR CyD Ad.Mig. CyD Ma.Piat.

25

905

ACCESO A DATOS EN JAVA


2 forma normal: partimos de la idea de dependencia funcional: un atributo o conjunto de atributos B depende funcionalmente de A slo si a cada valor de A le corresponde un nico valor de B: A B <=> a cada valor de A le corresponde un nico valor de B A x1 x2 x3 B y1 y2 y3

Ej: DNI depende funcionalmente de NOMBRE y NOMBRE de DNI DNI NOMBRE NOMBRE DNI NOMBRE DNI Ej: DIRECCION depende funcionalmente de DNI, pero DNI no depende funcionalmente de DIRECCION DNI DIRECCION DIRECCION -/ DNI Ej: TITULO, LIBRO no dependen funcionalmente de DNI, AUTOR, porque un autor puede escribir varios libros DNI, AUTOR -/ TITULO, LIBRO Ej: Se tiene una base de datos de pluriempleados: Atributos: DNI, EMPRESA, SUELDO DNI -/ EMPRESA DNI -/ SUELDO Se puede concatenar atributos, obteniendo: DNI, EMPRESA SUELDO

26

906

ACCESO A DATOS EN JAVA


Sueldo es el atributo implicado que depende de DNI y EMPRESA juntos, que son atributos implicantes. Tambin: DNI NOMBRE, DIRECCION Las 3 primeras formas normales ms la forma normal de Boyce-Codd se basan en dependencias funcionales obedeciendo al siguiente teorema: Dada una relacin R con un conjunto de atributos A que cumple R(A), xy, es posible una descomposicin en dos tablas de la siguiente manera: 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.

Las relaciones a partir de ahora se definirn como un conjunto de atributos con dependencias funcionales R(A, DF). Para normalizar la tabla habr que conocer todas las dependencias funcionales, pero en la relacin que nos den slo tendremos algunas, a partir de las cuales podremos hallar el resto. Aplicaremos las propiedades de las dependencias funcionales para obtener todo el conjunto de posibles dependencias funcionales que puedan existir en la relacin. Al conjunto inicial de dependencias funcionales lo llamaremos F, conjunto a partir del cual obtendremos el resto de dependencias funcionales. A cada nueva dependencia funcional obtenida a partir de F la llamar f. Al nuevo conjunto que contenga todas las dependencias funcionales que obtenga le llamar F+. Una vez hallado F+ podr aplicar las formas normales de la teora de la normalizacin. Dependencia funcional derivada Dado un conjunto F de dependencias funcionales se dice que f deriva de F (F f) si f se obtiene a partir de F. Cierre de un conjunto de dependencias funcionales Se define Cierre (F+) como el conjunto de todas las dependencias funcionales implicadas por F o halladas a partir de F.

27

907

ACCESO A DATOS EN JAVA


Propiedades de las dependencias funcionales a) Axiomas b) Propiedades propiamente dichas a) Axiomas a.1) Axioma reflexivo Si Y est incluido en X entonces X Y (Si Y c X => X Y) Ej: CODPROV c CODPOSTAL CODPOSTAL CODPROV A un cdigo postal le corresponde un nico cdigo de provincia. a.2) Aumentatividad Si X Y y Z c W => XW YZ

Se demuestra del siguiente modo: Z c W equivale a W Z. Si tenemos X Y y W Z afirmar que XW YZ a.3) Transitividad Si X Y y Y Z => X Z

podemos

b) Propiedades propiamente dichas b.1) Unin X Y y X Z => X YZ Demostracin: Si X Y (aumentatividad con X) => X XY Si X Z (aumentatividad con Y) => XY XZ Si X XY y XY YZ (transitividad) => X YZ

28

908

ACCESO A DATOS EN JAVA


b.2) Pseudotransitividad X Y y WY Z => WX Z Demostracin: Si X Y (aumentatividad con W) => WX WY Si WX WY y WY Z (transitividad) => WX Z b.3) Descomposicin X Y y Z c Y => X Z Demostracin: Si Z c Y (axioma reflexivo) => Y Z Si X Y y Y Z (transitividad) => X Z

Dependencia funcional total El conjunto de atributos Y tiene dependencia funcional total con X si Y tiene dependencia funcional con X (X Y) y adems no existe ningn subconjunto Z de X (Z c X) con el cual Y tenga dependencia funcional (Z -/ Y). Diagramas de dependencias funcionales Son una herramienta que sirve para tener una visin general de los datos y de las dependencias funcionales entre ellos. S e representa en forma de grafo con los implicantes de las dependencias funcionales en un rectngulo, de los que salen flechas hacia los implicados. Ej: Dado: ABC MNS MN BC OPR OP CQ AB C BC

, obtener el diagrama de dependencias funcionales.

A B

29

909

ACCESO A DATOS EN JAVA


Es una dependencia funcional total. Ej: Hallar si las siguientes dependencias funcionales son totales: a) DNI, EMPRESA SUELDO b) DNI, EMPRESA NOMBRE SUPERCLAVE Y CLAVE Superclave (SK): es el atributo o conjunto de atributos tales que en una relacin R(A, DF) se cumple que SK A. SK es el implicante capaz de implicar a la tabla completa. Ej: En una tabla compuesta por X, Y, Z y W, si W es superclave se cumple que: WX WY WZ Clave (K): es el atributo o conjunto de atributos tales que en una relacin R(A, DF) es superclave y adems no existe ningn subconjunto K c K tal que K A K, R(A, DF), K SK /\ no existe K c K / K A

Debe tener una dependencia funcional total con los atributos de la tabla. Si tenemos: WZ A WZ B WZ C pero Z -/ A Z -/ B Z -/ C La clave es la mnima superclave, no descomponible en claves menores.

30

910

ACCESO A DATOS EN JAVA


2 forma normal: se dice que una relacin est en 2 forma normal si cumple las siguientes condiciones: 1) Est en 1 forma normal 2) Cada atributo no principal o secundario (no forma parte de la clave), tiene una dependencia funcional total con la clave. Ej: AB C BD A B C D

D depende funcionalmente de B slo y debera depender de AB para estar en 2 forma normal. Para convertirlo en 2 forma normal se descompone en 2 tablas: Tabla 1: clave con dependencias totales Tabla 2: parte de la clave implicante con dependencias parciales A C B Esto cumple el teorema 1 enunciado en el captulo (Descomposicin por JOIN) Ej: Pasar a 2 forma normal la siguiente tabla: DNI EMPLEADO DNI SUELDO DNI NOMBRE EMPLEADO NOMBRE SUELDO B D

31

911

ACCESO A DATOS EN JAVA


Dependencia funcional transitiva: se cumple si: A B B -/ A => B C Grficamente: 3 forma normal: se dice que una tabla est en 3 forma normal si est en 2 forma normal y adems cumple que ningn atributo no principal depende transitivamente de la clave. Ej: Pasar a 3 forma normal: A A A A B C D E B B B B A C D E CD CE

AC

A y B son claves candidatas a principales. Elegimos una de las 2, por ejemplo A. B C D E B A C E No est en 3 forma normal porque existen atributos no principales que dependen transitivamente de la clave de la relacin. D

32

912

ACCESO A DATOS EN JAVA


Para pasarlo a 3 forma normal lo descompongo en 2 tablas: 1 tabla: clave con dependencias no transitivas. B A C 2 tabla: clave con dependencias transitivas. D C E Ej: Tenemos las siguientes dependencias de la tabla ALUMNOS: NMATRICULA AULA, GRUPO GRUPO AULA Pasarlo a 3 forma normal. Descomponemos en 2 tablas: 1 tabla: clave con dependencias no transitivas. B A C 2 tabla: dependencias transitivas. D C E

33

913

ACCESO A DATOS EN JAVA


Ej: Pasar a 3 forma normal las siguientes dependencias de la tabla alumnos: NMATRICULA AULA, GRUPO GRUPO AULA Forma normal de Boyce-Codd: Trata de resolver los problemas que origina la 3 forma normal. Se dice que una relacin R est en FNBC slo si todo determinante o todo implicante (conjunto de atributos a la izquierda de la relacin) es clave. Ej: A C B Est en 3 forma normal, pero no en FNBC. AB C CB AB B Para pasar a FNBC una relacin R en la cual existe una dependencia del tipo X Y siendo X un atributo no principal y siendo Y un atributo principal, descomponemos R en 2 proyecciones: R1 formada por los atributos X e Y R1=(X, Y) R2 formada por todos los atributos de R exceptuando Y R2=(A - Y) Obtenemos:

A C

34

914

ACCESO A DATOS EN JAVA


Ej: Tenemos una tabla de un callejero: CALLEJERO (DIRECCION, CIUDAD, C_POSTAL) C_POSTAL CIUDAD DIRECCION, CIUDAD C_POSTAL C_POSTAL DIRECCION C_POSTAL CIUDAD DIRECCION C_POSTAL Dependencia multivaluada: Sean A y B dos subconjuntos distintos de atributos de una tabla T se dice que A tiene una dependencia multivaluada con B que A multidetermina a B que B depende multivaluadamente de A (A B) as para cada valor de A tenemos un conjunto, bien sea de valores de B que son independientes de los dems atributos, o la relacin. 1. A <= B 2. Independientemente del resto de atributos de A Ej: Los profesores de una facultad imparten varias asignaturas y una asignatura es impartida por varios profesores. Una asignatura tiene varios textos y un texto puede utilizarse en varias asignaturas, independientemente del profesor que las imparte. CIUDAD

35

915

ACCESO A DATOS EN JAVA


Asignatura Profesor a) Cada asignatura tiene definidos varios profesores b) Se cumple Asignatura Texto a) Cada asignatura tiene asignado ms de un texto b) Se cumple Siempre que se d una dependencia X Y tiene que darse una dependencia X A - (X U Y). Para que se d debe tener ms de 2 atributos. Profesor / Texto a) Para cada profesor hay definidos ms de un texto b) Depende de Asignatura Profesor Asignatura a) Un profesor tiene asignadas varias asignaturas b) No se puede dar por una serie de teoremas matemticos 4 Forma Normal: una tabla est en 4FN si est en 3FN y se cumple que las nicas dependencias multivaluadas existentes son las existentes con los atributos secundarios. Cuando no existen dependencias multivaluadas y la tabla est en 3FN para pasar a 4FN tendremos en cuenta el teorema de FAGIN: Una tabla T con los atributos A, B, C se puede descomponer sin prdida de informacin en 2 proyecciones: T1 con los atributos A y B y T2 con los atributos A y C, slo si A multidetermina a B y C (A B / C). Para pasar a 4FN si existe una dependencia multivaluada X Y la dividimos en 2 tablas. 1. R1 (x, y) 2. R2 (A - y) R1 (x, y) R: x y R2 (A - y)

36

916

ACCESO A DATOS EN JAVA


Ej: Asignatura Texto Asignatura Profesor (asignatura, texto) (asignatura, profesor)

R (Asignatura, Texto, Profesor) 1. Asignatura Texto, x 2. Asignatura Profesor, y R1 (Asignatura, Texto, x) R2 (Asignatura, Profesor, y) Dependencia de JOIN Se dice que una relacin T formada por los atributos A1, A2, ..., An tiene una dependencia con sus proyecciones T1, T2, ..., Tn si T=T1 T2 T3 ... Tn

37

917

ACCESO A DATOS EN JAVA


La 4 fila (a2, b1, c2) es una tupla intrusa o espuria. Hay otra proyeccin que hace que se cumpla:

T=T1 T2 T3 5 Forma Normal: se dice que una tabla est en 5FN si est en 4FN y adems toda dependencia de JOIN est implicada por las claves de la tabla. Las columnas de enlace deben ser los atributos que componen la clave. En la siguiente tabla no existen dependencias funcionales. Bebida -/ Camarero.

Dependencias de JOIN: T=T1 T2 T3 Columna enlace: T1 T2 = Cliente Los tres atributos forman la clave. T no est en 5 forma normal. Si las columnas de enlace son las columnas de la clave entonces est en 5 forma normal. Para pasarlo a 5 forma normal habr que descomponer T en sus proyecciones.

38

918

ACCESO A DATOS EN JAVA


EMPLEADOS (DNI, NOMBRE, DIRECCION, NSS, FISS, CATEGORIA) T1 (DNI, NOMBRE, DIRECCION) T2 (DNI, NSS, FISS) T3 (DNI, CATEGORIA) EMPLEADO = T1 t2 t3 T est en 5 forma normal, an as es factible descomponerla en sus proyecciones. Ej: Competiciones En una prueba hay varios rbitros. Un rbitro puede arbitrar en diferentes pruebas. Un atleta puede competir en diferentes pruebas. En un nico pas no pueden existir n de pasaportes iguales, pero s si son de pases diferentes. Pueden existir distintos atletas con el mismo nombre. Atributos: NPa: Na: da: dpa: ca: Pra: Pa: cpa: Fn: Sa: cp: np: ma: NPar: Nar: N de pasaporte del atleta Nombre del atleta Direccin del atleta Direccin postal del atleta Ciudad del atleta Provincia del atleta Pas del atleta Cdigo de pas del atleta Fecha de nacimiento del atleta Sexo del atleta Cdigo de la prueba Nombre de la prueba Marca del atleta N de pasaporte del rbitro Nombre del rbitro

39

919

ACCESO A DATOS EN JAVA


Ej: Barco de pasajeros Un barco pertenece a un propietario. Se construye en un slo astillero. El cdigo es nico dentro del pas. Pueden existir barcos diferentes con el mismo cdigo si son de distintos pases. Un barco es de un slo tipo. Los marineros del barco slo tienen una direccin y un cdigo dentro del barco. Un marinero puede tener varios telfonos. No existen ciudades repetidas. Dos pasajeros pueden tener el mismo camarote en un barco. Un pasajero puede embarcar en varios barcos en distintas fechas. Dos barcos pueden haber tenido a un mismo marinero, pero nunca al mismo tiempo. Ej: Coleccionistas de sellos El cdigo de sello particular es nico para la coleccin del propietario. El cdigo internacional es nico para cada tipo de sello emitido, del cual pueden existir varios ejemplares. Dos coleccionistas pueden tener ejemplares de un mismo tipo de sello, pero cada uno tendr un cdigo particular del sello que podra ser el mismo. No existen 2 DNIs, ciudades, provincias o pases iguales. Pueden existir nombres iguales. Un propietario pude tener varios telfonos. Atributos: CS: CI: PS: CP: VE: AE: EP: CE: CLS: CCL: EC: Cdigo particular del sello para el propietario actual Cdigo internacional del sello Pas del sello Cdigo del pas Valor de emisin del sello Ao de emisin del sello Estado poltico del pas en el ao de emisin del sello Cdigo del estado poltico Clase de sello Cdigo de la clase de sello Estado de conservacin del sello

40

920

ACCESO A DATOS EN JAVA


CC: DNIP: NP: DP: CiP: CPP: PP: PaP: TP: DNIA: Cdigo del estado de conservacin del sello DNI del propietario del sello Nombre del propietario del sello Direccin del propietario del sello Ciudad del propietario del sello Cdigo postal del propietario del sello Provincia del propietario del sello Pas del propietario del sello Telfono del propietario del sello DNI del antiguo propietario del sello

SQL Embedido 1. SQL autocontenido 2. SQL embedido SQL embedido: Sentencia de SQL que se utiliza dentro de un programa llamado anfitrin, escrito en cualquier lenguaje. Tendremos tablas con datos de entrada y de salida. Las sentencias de SQL sern sentencias embebidas en el programa anfitrin. Caractersticas: * Todas las sentencias SQL van a estar enmarcadas por: EXEC SQL <sentencias> END-EXEC * Antes de utilizar un compilador para manejar SQL embebido es necesario pasar el programa fuente por un precompilador:

PROG FUENTE

precompilador

PROG FUENTE compilador MODIFICADO

PROG OBJETO

LINKER

- sintaxis sentencias SQL - comentar sentencias SQL (para que las ignore el compilador) - sustituir sentencias SQL por llamadas a rutinas de libreras

41

921

ACCESO A DATOS EN JAVA


* Manejo de variables de programa dentro de sentencias SQL: Se pone dos puntos (:) delante del nombre de la variable. Ej: Para un vuelo, visualizar plazas libres y n de vuelo (datos de salida), sabiendo el origen, destino, hora de salida y fecha de salida (datos de entrada). INICIO escribir Introducir ORIGEN, DESTINO, FECHA, HORA leer ORIGEN, DESTINO, FECHA, HORA EXEC SQL SELECT RESERVAS.NUM_VUELO, PLAZAS_LIBRES INTO :VUELO, :PLAZAS FROM RESERVAS, VUELOS WHERE RESERVAS.NUM_VUELO=VUELOS.NUM_VUELO AND ORIGEN=:ORIGEN AND DESTINO=:DESTINO AND FECHA=:FECHA AND HORA=:HORA END-EXEC escribir VUELO, PLAZAS FIN INTO sirve para determinar las variables de salida. Devuelve en la salida una sola fila. En caso de que la salida devuelva ms de una fila tendremos los cursores. Cursor: - Es una estructura de datos tabular (en forma de tabla) que sirve para almacenar un nmero indeterminado de filas. - Slo permite manejar una nica fila a la vez, mediante un puntero. - Para manejar cursores en SQL embebido hay 4 etapas: 1) Definicin del cursor Se define junto a la declaracin de variables del programa anfitrin: EXEC SQL DECLARE <nom_cursor> CURSOR FOR <sent_select> END-EXEC

42

922

ACCESO A DATOS EN JAVA


2) Abrir cursor Rellena de filas la estructura del cursor: EXEC SQL OPEN <nom_cursor> END-EXEC 3) Recuperar filas (1) EXEC SQL FETCH <nom_cursor> {avanza el puntero una posicin} INTO <lista_variables> {una sola variable por columna} END-EXEC Cuando se hace un OPEN se rellena la estructura y el puntero se posiciona anterior a la primera fila. El primer FETCH posiciona el cursor en la primera fila. 4) Cerrar cursor EXEC SQL CLOSE <nom_cursor> {liberando memoria} END-EXEC Ej: Realizar un programa que presente todos aquellos vuelos existentes entre un origen y un destino determinados. Pasos: 1. Declaracin de variables 2. Peticin de informacin de origen y destino 3. Abrir cursor 4. Recuperar primera fila del cursor 5. Comprobar si existe alguna fila. Si no existe ir a 9 6. Escribir fila en pantalla 7. Recuperar siguiente fila 8. Ir a 5 9. Fin

43

923

ACCESO A DATOS EN JAVA


VARIABLES ORIGEN, DESTINO, HORA, VUELO: STRING EXEC SQL DECLARE lista_vuelos CURSOR FOR SELECT NUM_VUELO, HORA_SALIDA FROM VUELOS WHERE ORIGEN=:ORIGEN AND DESTINO=:DESTINO END-EXEC INICIO ESCRIBIR INTRODUZCA ORIGEN Y DESTINO LEER ORIGEN, DESTINO EXEC SQL OPEN lista_vuelos END-EXEC EXEC SQL FETCH lista_vuelos INTO :VUELO, :HORA END-EXEC {Variable predefinida SQL-CODE: nos da informacin sobre la ejecucin de cada sentencia en SQL: SQL-CODE < 0 Error SQL-CODE = 100 CURSOR vaco SQL-CODE > 0 Warning} MIENTRAS SQL-CODE <> 100 ESCRIBIR VUELO, HORA EXEC SQL FETCH lista_vuelos INTO :VUELO, :HORA END-EXEC FIN_MIENTRAS EXEC SQL CLOSE lista_vuelos END-EXEC FIN

44

924

ACCESO A DATOS EN JAVA


INTEGRIDAD E INTEGRIDAD REFERENCIAL
1. Introduccin 2. Integridad referencial 2.1 DDL 2.2 DML 3. Disparadores 4. Reglas semnticas

1. INTRODUCCION
Integridad: caracterstica que nos permite tener coherencia y veracidad en la informacin. Existen ciertas operaciones de SQL que pueden hacer peligrar la integridad de la operacin: - Insercin - Borrado - Modificacin T.PADREEMPLEADO DNI Clave Principal

depende cod_fam T.HIJA FAMILIARES

DNI_EMP

Clave Ajena

Puede que borremos un empleado y olvidemos eliminar los familiares. Tipos de integridad: Integridad de dominio: restringimos los valores que puede tomar un atributo respecto a su dominio, por ejemplo EDAD 18 - 65. Integridad de entidad: la clave primaria de una entidad no puede tener valores nulos y siempre deber ser nica, por ejemplo DNI. Integridad referencial: las claves ajenas de una tabla hija se tienen que corresponder con la clave primaria de la tabla padre con la que se relaciona. Por ejemplo, en familiares necesitaremos el DNI de empleado, que es la clave ajena de la tabla.

45

925

ACCESO A DATOS EN JAVA


2. INTEGRIDAD REFERENCIAL
Clave principal: conjunto de atributos capaz de diferenciar cada tupla de la tabla. Clave ajena: Clave en la tabla padre. 2.1 DDL Se basa en la definicin de la clave principal y de la clave ajena de la tabla. CREATE TABLE EMPLEADO (PRIMARY KEY DNI, DNI CHAR(8) NOT NULL, NOMBRE VARCHAR(30) NOT NULL, {columnas de la tabla, clave incluida} . . . ) CREATE TABLE FAMILIARES (PRIMARY KEY COD_FAMILIAR, COD_FAMILIAR CHAR(4) NOT NULL, NOM_FAMILIAR CHAR(30) NOT NULL, DNI_EMPL CHAR(8) NOT NULL, . . . ) FOREIGN KEY REL_EMPL_FAM DNI_EMPL REFERENCE EMPLEADO RESTRICT ON DELETE CASCADE SET NULL

46

926

ACCESO A DATOS EN JAVA


2.2 DML Tendremos una serie de reglas para: 2.2.1 Insercin 2.2.2 Actualizacin Implcitas o determinadas por el sistema. 2.2.3 Borrado Explcita o definida por el usuario de tres que proporciona el sistema. 2.2.4 Regla de insercin Se ejecuta sobre la tabla hija. Slo se podr insertar una fila en la tabla hija si el valor de clave ajena de esa fila es un valor nulo o un valor de los existentes en la clave primaria de la tabla padre. 2.2.5 Regla de actualizacin Se ejecuta sobre las tablas padre o hija. Tabla padre: no se puede modificar el valor de clave primaria de la tabla padre si existe alguna fila en la tabla hija que lo referencie en la clave ajena. Tabla hija: el valor de clave ajena de la tabla hija slo se puede modificar si el nuevo valor que va a adoptar es un valor nulo o es igual a un valor de clave primaria de la tabla padre. 2.2.6 Regla de borrado Esta regla se especifica al crear la tabla padre y se activar cuando se intente eliminar una fila de la tabla. CREATE TABLE ... FOREIGN KEY ... RESTRICT ON DELETE CASCADE SET NULL

47

927

ACCESO A DATOS EN JAVA


Es una regla explcita, ya que el usuario puede elegir la regla de borrado que desee, a partir de 3 reglas que nos va a proporcionar el sistema. a) RESTRICT No se puede borrar una fila de la tabla padre si existen filas en la tabla hija cuyos valores de clave ajena sean iguales a valores de clave primaria de la fila que queremos borrar. b) CASCADE Cada vez que se borre una fila de la tabla padre se eliminarn aquellas filas de la tabla hija que tengan como valor de clave ajena el mismo valor que el de la clave primaria de la fila que se quiere borrar. c) SET NULL Cada vez que se elimine una fila de la tabla padre se actualizarn los campos de la clave ajena de la tabla hija a valores nulos para aquellas filas que tengan en el campo de la clave ajena el mismo valor que la clave primaria de la fila de la tabla padre que se quiere borrar. Casos especficos de integridad: Integridad auto-referencial Una tabla es al mismo tiempo padre e hija de si misma. Ej: Dada la tabla T_EMP con las siguientes columnas: COD_EMP NOMBRE COD_EMP_JEFE

Todos los valores que aparezcan en la ltima columna existirn tambin en la primera, por tanto COD_EMP_JEFE se convierte en clave ajena de la tabla. Ciclos de integridad referencial Conjunto de tablas que funcionar como tablas padres e hijas unas de otras, formando un camino cerrado.

48

928

ACCESO A DATOS EN JAVA


Ej: Tenemos 3 tablas: COCHES (MATRICULA, MARCA, COD_DIRECTOR) DIRECTORES (COD_DIRECTOR, NOMBRE_DIR, COD_SECRETARIA) SECRETARIAS(COD_SECRETARIA, NOMBRE_SEC, MATRICULA) COCHES es tabla hija de DIRECTORES DIRECTORES es tabla hija de SECRETARIAS SECRETARIAS es tabla hija de COCHES COCHES DIRECTORES SECRETARIAS Forma un ciclo de integridad referencial. Por haber ciclos debemos incorporar restricciones de borrado, para un correcto funcionamiento de la integridad referencial. Restricciones de borrado a) Integridad auto-referencial Siempre que tengamos una tabla con integridad auto-referencial debemos definir un borrado en cascada. Tabla EMPLEADO

49

929

ACCESO A DATOS EN JAVA


DELETE FROM EMPLEADO WHERE COD_EMP_JEFE >= B01 Con RESTRICT no se puede borrar la 3 fila, porque C02, clave primaria, est siendo referenciada en la fila 4 como clave ajena. Salta a la 4 fila y la borra. DELETE FROM EMPLEADO WHERE COD_EMP_JEFE IS NULL Con SET NULL borrara la primera fila, porque su clave ajena es NULL, pasara a la 2 y como su clave ajena es igual a la clave primaria de la fila borrada pondra la clave ajena a NULL. Como le hemos dicho que borre aquellas filas que tengan por clave ajena un valor nulo, ahora borrara esta fila y as sucesivamente hasta eliminar la tabla completa. b) Ciclos de integridad referencial DELETE FROM T3 WHERE FKT2 IS NULL Restricciones de borrado en ciclos: CICLO DE 2 TABLAS: ninguna de ellas podr tener definida la opcin de borrado en cascada. CICLO DE MAS DE 2 TABLAS: Slo una de las tablas podr tener la opcin de borrado en cascada. El esquema anterior no cumple las restricciones expuestas. c) Tablas conectadas por mltiples caminos (con ms de una tabla padre)

DELETE FROM T2 WHERE PKT2 = T2A Restricciones de borrado en tablas conectadas por mltiples caminos: Los dos caminos que llegan a una tabla deben tener definida siempre la misma regla de borrado, que debe ser RESTRICT o CASCADE.

50

930

ACCESO A DATOS EN JAVA


En el ejemplo funcionara bien por el primer camino, pero por el segundo hay restriccin. Ej. Prubese qu ocurrira si entre T3 y T1 hay SET NULL y entre T2 y T1 hay SET NULL. Ventajas del uso de las reglas de integridad referencial proporcionadas por el sistema frente a la implementacin de stas por parte del usuario. 1. Al usar las proporcionadas por el sistema los analistas tienen menor responsabilidad. 2. Habr un incremento en la productividad y un decremento en los costes de la aplicacin, porque el nmero de pruebas a realizar ser menor si la integridad referencial es implementada por el propio sistema, el cual nos garantizar el correcto funcionamiento de las reglas de integridad referencial. El tiempo de desarrollo de la aplicacin ser menor. 3. La informacin ser ms coherente, ya que est garantizado que todas las filas de las tablas cumplen las normas de integridad referencial.

3. DISPARADORES O TRIGGERS
Son un conjunto de sentencias que el sistema ejecuta a la hora de efectuar una insercin, actualizacin o borrado en una tabla. Para definir un TRIGGER necesitamos: - Nombre de la tabla sobre la que actuar el trigger - Sentencia que activar el trigger (insercin, actualizacin o borrado) - Acciones que realizar el trigger DB2 no incorpora la posibilidad de definir triggers, pero SQL s. Las reglas de integridad referencial se emulan en SQL mediante la implementacin de triggers. Emulacin de insercin en tabla hija mediante el uso de trigger en SQL: Segn la regla de integridad referencial, no se puede efectuar una insercin en una tabla hija a menos que exista un valor de clave primaria igual al de clave ajena de la fila que se desea insertar.

51

931

ACCESO A DATOS EN JAVA


Definicin del trigger: DEFINE TRIGGER insercion ON INSERT OF HIJA El trigger comparar el valor de clave ajena de la fila a insertar con el valor de clave primaria de la tabla hija cada vez que se intente insertar una fila. Implementacin del trigger: (if (SELECT COUNT (#) FROM PADRE, INSERTED WHERE PADRE.CL_PRIMARIA = INSERTED.CL_AJENA) = 0) Condicin que activa el trigger begin PRINT ERROR ROLLBACK TRANSACTION Acciones que ejecuta el trigger si se activa end SELECT COUNT devuelve el nmero de filas de la tabla padre con un valor de clave primaria igual a la clave ajena de la fila a insertar. El sistema proporciona una tabla de almacenamiento temporal (INSERTED) donde se guardarn las filas a insertar. Si CL_AJENA = CL_PRIMARIA, permite la insercin, en caso contrario deshace la operacin con ROLLBACK TRANSACTION. El trigger correspondiente a la operacin de actualizacin sera similar.

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

ACCESO A DATOS EN JAVA


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:

i
3
935

ACCESO A DATOS EN JAVA


JDBC-ODBC bridge driver
Esta solucin lo que hace es pasar por ODBC para acceder a la base de datos. PROGRAMA JAVA Driver Tipo 1 (JDBC) nativo nativo nativo SQLServer Access dBase

ODBC

Ventajas: - Viene ya con JDK. Inconvenientes: - ODBC debe estar instalado y congurado en la mquina del cliente. - El driver est escrito parte en JAVA y parte en una DLL. Esto quiere decir que como parte est en DLL no se puede enviar por la red. Por lo tanto no sirve para construir APPLETS

Native API partly Java driver


Se conectan con el servidor de base de datos utilizando el protocolo nativo de la base de datos. PROGRAMA JAVA Driver Tipo Oracle Driver Tipo SQLServer

nativo

Oracle

nativo

SQLServer

i
4
936

ACCESO A DATOS EN JAVA


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 JAVA Ventajas: - Se puede utilizar para disear APPLETS Driver Tipo 3 Servidor de acceso a la base de datos odbc odbc Odbc Sybase Access Interbase

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 Oracle Tipo 4

PROGRAMA JAVA

nativo

Oracle

i
5
937

ACCESO A DATOS EN JAVA


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

i
6
938

ACCESO A DATOS EN JAVA


En este caso la base de datos puede estar en otro servidor solamente si ODBC sabe conectarse: CLIENTE Programa Driver ODBC Tipo1 BDD Remota

SERVIDOR -------------------------------------

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 Oracle java Tipo 2 Driver Access nativo Access Tipo 2

SERVIDOR Oracle ------------------------------------

JDBC-Net pure Java driver


CLIENTE Programa java Driver Tipo 3 Servidor de acceso de la base de datos BDD

SERVIDOR (LAN) SERVIDOR (LAN) Servidor de acceso de la base de datos Servidor de acceso de la base de datos

BDD BDD

SERVIDOR (WAN) -----------------------------------Native protocol pure Java driver La base de datos puede ser local o remota.

BDD

i
7
939

ACCESO A DATOS EN JAVA


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.

i
8
940

ACCESO A DATOS EN JAVA


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");

i
9
941

ACCESO A DATOS EN JAVA


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.

i
10
942

ACCESO A DATOS EN JAVA


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
943

ACCESO A DATOS EN JAVA


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

i
12
944

ACCESO A DATOS EN JAVA


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.

i
13
945

ACCESO A DATOS EN JAVA


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.

i
14
946

ACCESO A DATOS EN JAVA


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.

i
15
947

ACCESO A DATOS EN JAVA


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

i
16
948

ACCESO A DATOS EN JAVA


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

i
17
949

ACCESO A DATOS EN JAVA


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

i
18
950

ACCESO A DATOS EN JAVA


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.

i
19
951

ACCESO A DATOS EN JAVA


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)

i
20
952

ACCESO A DATOS EN JAVA


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);

i
21
953

ACCESO A DATOS EN JAVA


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.

i
22
954

ACCESO A DATOS EN JAVA


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 Java Tipo3 CLIENTE (Browser)

Servidor de acceso a la base de datos

Base de Datos 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.

i
23
955

ACCESO A DATOS EN JAVA


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");

i
24
956

ACCESO A DATOS EN JAVA


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 Java

Driver de Tipo 4 InterClient

Servidor de acceso a la base de datos InterServer

InterBase

i
25
957

ACCESO A DATOS EN JAVA


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.

i
26
958

ACCESO A DATOS EN JAVA


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 (?,?,?,?)}" "{? call SumaSaldos()}" -->OUT Tras haber preparado el procedimiento almacenado se cargarn los parmetros de entrada, si existen, con los mtodos set (setInt, setString, ...) : --> IN

c.SetInt (1,8); c.SetString (2,"Pedro Perez"); c.SetString (3,"C/ Alcantara S/N"); c SetInt (4,80000);

i
27
959

ACCESO A DATOS EN JAVA


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.

i
28
960

ACCESO A DATOS EN JAVA


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);

i
29
961

ACCESO A DATOS EN JAVA


6. Resumen
Has llegado al final de este recurso formativo que denominamos La tecnologa JDBC En esta leccin hemos estudiado los siguientes contenidos:

i
30
962

ACCESO A DATOS EN JAVA

963

ACCESO A DATOS EN JAVA


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.

964

ACCESO A DATOS EN JAVA

NOTA: El W3C es el organismo universal que regula el funcionamiento desde el punto de vista tcnico de la World Wide Web. La principal funcin del W3C es la de crear estndares aceptados universalmente, para que los estndares que se creen no favorezcan a ningn fabricante, u organismo en particular. Otra de sus obligaciones es la de mantener al da las tecnologas de la WWW para que stas respondan a las necesidades crecientes de los usuarios de la WWW. Entre otros, el W3C controla los estndares de html y xml. El W3C fue constituido en 1994 con el objetivo del desarrollo de protocolos comunes para la evolucin de Internet. El W3C es un consorcio de industrias internacionales y organismos, como el mit (EEUU), inria (Francia) y keio university (Japn). El W3C cuenta con el apoyo oficial de darpa (EEUU) y de la Comisin Europea.

Llegados a este punto, el W3C decide poner manos a la obra y comienza a plantearse un nuevo lenguaje, que ante todo, y como hemos apuntado anteriormente, fuera muy escalable. Para ello, en un primer momento el W3C pens directamente en el lenguaje SGML, que posea todas las caractersticas tcnicas para garantizar los objetivos que el W3C persegua con el nuevo lenguaje, pero SGML era un lenguaje bastante complicado, y precisamente lo que haba hecho popular al lenguaje HTML era la sencillez de su uso. Para ello, se marcaron un objetivo de crear un nuevo lenguaje de marcado, que pudiese ser tan escalable como SGML, pero que conservase la sencillez como base del mismo para que ste se hiciese popular. XML nace entonces (1996) como una parte de SGML, y es adoptado como estndar en Febrero de 1998 por el W3C. XML son las siglas de eXtended Markup Language o lenguaje de marcado extendido.

XML Aunque en su nombre se hace referencia a l, seguramente estamos confundidos acerca de si XML es un lenguaje de Marcado. A simple vista, podramos decir que s, ya que XML est basado en un lenguaje de Marcado SGML y adems tiene un primo que es un conocido lenguaje de Marcado HTML. XML debera ser tambin un lenguaje de Marcado, sin embargo, no lo es, XML es ms un lenguaje de lenguajes de marcado, o ms concretamente un meta-lenguaje de marcado. Para explicar esto en palabras llanas, podramos decir que a partir de XML podemos crear nuestro propio lenguaje de Marcado. Adems, aunque est basado en SGML est adaptado para su uso en Internet, y se ha simplificado de cara a su sencillez de uso y aprendizaje.

965

ACCESO A DATOS EN JAVA


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).

966

ACCESO A DATOS EN JAVA


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.

967

ACCESO A DATOS EN JAVA


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 <HEAD> XML <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 <HEAD> XML <VEHICULO> </VEHICULO>

El contenido del elemento Es la parte del documento XML que contiene, valga la redundancia, el valor que representa el elemento. <VEHICULO> M-9999-ZZ </VEHICULO>

968

ACCESO A DATOS EN JAVA


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.

969

ACCESO A DATOS EN JAVA


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 <VEHICULO> <PROPIETARIO> </VEHICULO> </PROPIETARIO> CORRECTO <VEHICULO> <PROPIETARIO> </PROPIETARIO> </VEHICULO>

Los elementos, obligatoriamente, deben estar cerrados INCORRECTO <VEHICULO> <PROPIETARIO> CORRECTO <VEHICULO> <PROPIETARIO> </PROPIETARIO> </VEHICULO> </VEHICULO>

970

ACCESO A DATOS EN JAVA


Slo puede existir un elemento raz del que parten los dems INCORRECTO <VEHICULO> </VEHICULO> <PROPIETARIO> </PROPIETARIO> CORRECTO <VEHICULO> <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 <Elemento> <elemento2> </elemento2> </elemento> CORRECTO <elemento> <elemento2> </elemento2> </elemento>

Uso de espacios y retorno de carro El espacio y el retorno de carro slo son tenidos en cuenta si aparecen en el valor de un atributo o, como en HTML si se indica su significado.

971

ACCESO A DATOS EN JAVA


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;

10

972

ACCESO A DATOS EN JAVA


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>

11

973

ACCESO A DATOS EN JAVA


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>

12

974

ACCESO A DATOS EN JAVA


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>

13

975

ACCESO A DATOS EN JAVA


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>

14

976

ACCESO A DATOS EN JAVA


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 ().

15

977

ACCESO A DATOS EN JAVA


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>

16

978

ACCESO A DATOS EN JAVA


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>

17

979

ACCESO A DATOS EN JAVA


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>

18

980

ACCESO A DATOS EN JAVA


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>

19

981

ACCESO A DATOS EN JAVA


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)>

20

982

ACCESO A DATOS EN JAVA


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)))>

21

983

ACCESO A DATOS EN JAVA


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.

22

984

ACCESO A DATOS EN JAVA


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>

23

985

ACCESO A DATOS EN JAVA


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)>

24

986

ACCESO A DATOS EN JAVA


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.

25

987

ACCESO A DATOS EN JAVA


Las entidades en la DTD se declaran con <!ENTITY Las entidades se agrupan en: INTERNAS ANALIZADAS GENERALES 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> / / / EXTERNAS NO ANALIZADAS PARMETRO

26

988

ACCESO A DATOS EN JAVA


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>

27

989

ACCESO A DATOS EN JAVA


<!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.

28

990

ACCESO A DATOS EN JAVA


<?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; ]>

29

991

ACCESO A DATOS EN JAVA


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.

30

992

ACCESO A DATOS EN JAVA


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> ]>

31

993

ACCESO A DATOS EN JAVA


<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> ]>

32

994

ACCESO A DATOS EN JAVA


<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>

33

995

ACCESO A DATOS EN JAVA


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

34

996

ACCESO A DATOS EN JAVA


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>

35

997

ACCESO A DATOS EN JAVA


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 <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=...> xmlns:xsl=http://www.w3.org/1999/XSL/Transform>

36

998

ACCESO A DATOS EN JAVA


... </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>

37

999

ACCESO A DATOS EN JAVA


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.

38

1000

ACCESO A DATOS EN JAVA


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>

39

1001

ACCESO A DATOS EN JAVA


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>

40

1002

ACCESO A DATOS EN JAVA


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.

41

1003

ACCESO A DATOS EN JAVA


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>

42

1004

ACCESO A DATOS EN JAVA


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>

43

1005

ACCESO A DATOS EN JAVA


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>

44

1006

ACCESO A DATOS EN JAVA


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>

45

1007

ACCESO A DATOS EN JAVA


<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>

46

1008

ACCESO A DATOS EN JAVA


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 />

47

1009

ACCESO A DATOS EN JAVA


<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>

48

1010

ACCESO A DATOS EN JAVA


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))

49

1011

ACCESO A DATOS EN JAVA


- 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 decimal-separator grouping-separator infinity minus-sign NaN percent per-mille zero-digit digit 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. = = = = = = = = = = qname char char string char string char char char char

generate-id(node-set?) Devuelve una cadena de texto, que identifica el nodo actual de manera nica. - system-property(string) Devuelve un valor coincidente con el valor de la propiedad del sistema a la que se hace referencia. Si la propiedad a la que se hace referencia no existe, entonces devuelve una cadena vaca.

50

1012

ACCESO A DATOS EN JAVA


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>

51

1013

ACCESO A DATOS EN JAVA Caso prctico


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

1014

ACCESO A DATOS EN JAVA Caso prctico


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

1015

ACCESO A DATOS EN JAVA Caso prctico


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.

1016

ACCESO A DATOS EN JAVA Caso prctico


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>

1017

ACCESO A DATOS EN JAVA Caso prctico


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>

1018

ACCESO A DATOS EN JAVA Caso prctico


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>

1019

ACCESO A DATOS EN JAVA Caso prctico


Realiza el documento XML que coincida con la estructura que se detalla a continuacin.

1020

ACCESO A DATOS EN JAVA Caso prctico


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

1021

ACCESO A DATOS EN JAVA Caso prctico


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>

1022

ACCESO A DATOS EN JAVA Caso prctico


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> ]>

1023

ACCESO A DATOS EN JAVA Caso prctico


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>

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

ACCESO A DATOS EN JAVA


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:

i
3
1027

ACCESO A DATOS EN JAVA


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.

i
4
1028

ACCESO A DATOS EN JAVA


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.

i
5
1029

ACCESO A DATOS EN JAVA


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.

i
6
1030

ACCESO A DATOS EN JAVA


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

i
7
1031

ACCESO A DATOS EN JAVA


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.

i
8
1032

ACCESO A DATOS EN JAVA


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(); }

i
9
1033

ACCESO A DATOS EN JAVA


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).

i
10
1034

ACCESO A DATOS EN JAVA


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.

i
11
1035

ACCESO A DATOS EN JAVA


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.

i
12
1036

ACCESO A DATOS EN JAVA


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.

i
13
1037

ACCESO A DATOS EN JAVA


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
1038

ACCESO A DATOS EN JAVA


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.

i
15
1039

ACCESO A DATOS EN JAVA


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.

i
16
1040

ACCESO A DATOS EN JAVA


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.

i
17
1041

ACCESO A DATOS EN JAVA


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
1042

ACCESO A DATOS EN JAVA


- 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

i
19
1043

ACCESO A DATOS EN JAVA


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.

i
20
1044

ACCESO A DATOS EN JAVA


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.

i
21
1045

ACCESO A DATOS EN JAVA


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.

i
22
1046

ACCESO A DATOS EN JAVA


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.

i
23
1047

ACCESO A DATOS EN JAVA


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);

i
24
1048

ACCESO A DATOS EN JAVA


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
1049

ACCESO A DATOS EN JAVA


5. Resumen
Has llegado al final de este recurso formativo que denominamos Acceso a Ficheros En esta leccin hemos estudiado los siguientes contenidos:

i
26
1050

ACCESO A DATOS EN JAVA Caso prctico


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>

1051

ACCESO A DATOS EN JAVA Caso prctico


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/>

1052

ACCESO A DATOS EN JAVA Caso prctico


<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>

1053

You might also like