Índice.

Tamaño: px
Comenzar la demostración a partir de la página:

Download "Índice. http://www.dicampus.es"

Transcripción

1 Módulo 3 Java

2 Índice Introducción a Java Sintaxis del lenguaje (Falta incluir la versión final) Clases y objetos Métodos y atributos static y final Herencia, clases abstractas, interfaces y polimorfismo Clases útiles de Java Estructuras de datos Excepciones Entrada/Salida Formularios (GUIs) Acceso a bases de datos con MySQL

3 Qué es Java? Lenguaje orientado a objetos, distribuido, robusto, seguro, portable, multitarea y dinámico Java surgió en 1991 cuando Sun Microsystems trató de diseñar un nuevo lenguaje de programación destinado a electrodomésticos Conseguir una herramienta independiente del tipo de CPU utilizada Desarrollaron un código neutro que no dependía del tipo de electrodoméstico, sino que se ejecutaba sobre una máquina hipotética o ( JVM ) virtual denominada Java Virtual Machine La JVM interpreta el código neutro convirtiéndolo a código particular de la CPU utilizada Al programar en Java no se parte de cero. Cualquier aplicación se apoya en un gran número de clases preexistentes. (el API o Application ( Java Programming Interface de

4 El entorno de desarrollo de Java: JDK El oficial de Sun es Java Development Kit (JDK), que es un conjunto de programas y librerías que permiten desarrollar, compilar y ejecutar programas en Java. Al ejecutar el instalador por defecto, se crea una estructura de carpetas en C:\Archivos de Programa\java /bin: Heramientas y utilidades del JDK /lib: Librerias del JDK /include: Archivos en C/C++ para construir la JVM (Maquina virtual de java) /demo: Archivos con códigos de ejemplo /jre: La JVM /src.zip: El código fuente de las librerías comprimidas

5 El entorno de desarrollo de Java: JDK Algunas de las herramientas incluidas son: Javac.exe Compilador de Java Java.exe Interprete de java (JVM) Appletviewer.exe Interprete de applets Jdb.exe Depurador Javadoc.exe Generador de documentación Javah.exe Integrador del código C/C++ para JNI Javap.exe Desensamblador. El uso de este entorno de desarrollo es mediante editores de texto y la línea de comandos MS_DOS

6 El entorno de desarrollo de Java: Ejemplo El uso de este entorno de desarrollo se puede realizar a través de editores de texto y la línea de comandos MS_DOS Ejemplo de compilacion desde línea de comandos Abrimos el block de notas y escribimos el siguiente programa: public class Holamundo { } public static void main(string[] args) { } System.out.println("HOla mundo"); Lo guardamos con el nombre Holamundo.java Abrimos la ventana MS_DOS y le indicamos donde esta el compliador mediante la instrucción: set path=%path%; C:\Archivos de programa\java\jdk1.6.0_22\bin Nos colocamos en el directorio donde hayamos guardado el archivo para compilar con la instrucción: Javac Holamundo.java Si no hay errores ejecutamos el código mediante: Java Holamundo

7 El entorno de desarrollo de Java: La JVM Es el intérprete de Java Ejecuta los bytecodes (ficheros compilados *.class) creados por el ( javac.exe ) compilador de Java Variables CLASSPAHT y PATH El desarrollo y ejecución de aplicaciones en Java exige que las herramientas para compilar (javac.exe) y ejecutar (java.exe) se encuentren accesibles en los directorios indicados en la variable PATH del ordenador CLASSPATH, determina dónde buscar tanto las clases o librerías de Java (el API de Java) como otras clases de usuario: Hay que crear la variable JAVA_HOME y darle la dirección donde este instalado la jdk En el PATH añadir: %JAVA_HOME%/bin

8 El entorno de desarrollo de Java: IDEs Como se puede comprobar, la compilación y ejecución desde una ventana DOS y sin ningún tipo de ayuda es engorroso, de ahí que existan los entornos de desarrollo visuales (IDE o Integrated Develop Environment) que se integran perfectamente con Java y el desarrollo con la JDK, por ejemplo: Eclipse. Es gratuito, tiene una gran cantidad de plugins adicionales que extienden sus características. Netbeans. Desarrollado por Sun WebSphere Studio de IBM. Está basado en Eclipse. Borland JBuilder. JDeveloper de Oracle. Sun ONE Studio. Tiene como base a Netbeans

9 El entorno de desarrollo: IDE Eclipse Se trata de un IDE Open Source, mantenido por una amplia comunidad de usuarios Está hecho en Java, por lo que necesitaremos tener un Java Runtime Environment instalado para poder ejecutarlo Eclipse nos recomienda tener instalado el JRE No lleva instalador, se descomprime en una carpeta cualquiera del equipo y ya podemos utilizarlo, incluso podemos cambiarlo de carpeta en cualquier momento No solamente se utiliza con Java, también puede utilizarse para programar en otros lenguajes como C o C++ Se le pueden añadir nuevas funcionalidades por medio de plugins. Sin embargo, el sistema de plugins es un poco caótico y a veces puede ser complicado instalar varios y que funcionen al mismo tiempo

10 Eclipse, el primer contacto Lo podremos descargar de la página donde seleccionamos la opción Eclipse IDE for Java Developers (Recordar que tenemos que tener el JDK instalado) Una vez descargado el archivo, lo descomprimimos y ya podemos empezar a usarlo, ya que no requiere de instalación Al ejecutar Eclipse, lo primero que nos pide es la ruta del entorno de trabajo (workspace). Es donde Eclipse va a ir guardando todos los proyectos que creemos

11 Eclipse, el primer contacto En Eclipse hay que indicarle al compilador, con qué nivel de código estamos trabajando (la versión de la JDK). Por defecto establece la última instalada, pero podemos escoger anteriores a través del menú Window > Preferences > Apartado Java > Apartado Compiler

12 Eclipse, el primer contacto Para crear un proyecto en el espacio de trabajo definido hay que ir al menú File >> New >> Java Project Cada proyecto se almacenará en una carpeta distinta con su nombre Ejemplo: Crear un nuevo proyecto con el nombre 00_HolaJava Dentro del proyecto en el Package Explorer, pulsar con el botón derecho del ratón sobre el proyecto y crear un nuevo Package (Se suelen agrupar en packages aquellas clases que tengan algo en común. Cada package será un directorio real dentro del directorio src del proyecto) Pulsando con el botón derecho sobre el package, crear una nueva clase llamada HolaJava y marcar el check de que incluya el main La clase que contenga el main será la que se ejecute al arrancar el programa y el main será el método donde se ejecutará la primera línea de código Escribir dentro del main System.out.println( Hola Java! ); Ejecutar usando la flecha verde que hay en la barra de herramientas o botón derecho sobre el proyecto + Run as >> Java Application

13 Índice Introducción a Java Sintaxis del lenguaje Clases y objetos Métodos y atributos static y final Herencia, clases abstractas, interfaces y polimorfismo Clases útiles de Java Estructuras de datos Excepciones Entrada/Salida Formularios (GUIs) Acceso a bases de datos con MySQL

14 Normas de codificación Para dar nombres a clases, métodos, propiedades y variables debemos seguir unos criterios básicos: Deben empezar por una letra, subrayado (_), pero nunca por un número Después del primer carácter ya se pueden usar números Java distingue entre mayúsculas y minúsculas. No se pueden utilizar palabras reservadas como identificadores

15 Comentarios Existen tres tipos de comentarios // se utilizan para realizar un comentario de una línea /* */ se utilizan para realizar comentarios de múltiples líneas /** */ se utilizan para documentación usando javadoc

16 Secuencias de escape Una secuencia de escape. Las secuencias de escape son combinaciones del símbolo contrabarra \ seguido de una letra, y sirven para representar caracteres que no tienen una equivalencia en forma de símbolo. Las posibles secuencias de escape son: Secuencia de escape Significado Comilla simple. \ Comillas dobles. \\ Contrabarra. \b Backspace (Borrar hacia atrás). \n Cambio de línea. '\f Form feed. \r Retorno de carro. \t Tabulador.

17 Variables y su definición Una variable es un contenedor de datos al que podemos referirnos mediante un nombre Toda variable tiene que llevar inexcusablemente asociado un tipo Ha de ser declara e inicializada antes de poder usarse En Java hay dos tipos principales de variables: Variables de tipos primitivos, que contienen un valor único Variables de referencia, que son referencias a una información más compleja (contienen la posición de memoria donde se almacena el dato complejo): objetos de una determinada clase Desde el punto de vista de una clase podemos hacer también otra clasificación: Variables miembro de una clase: Se definen en la clase, es decir, los atributos Variables locales: Se definen dentro de un método o más en general dentro de cualquier bloque entre llaves {} Se crean en el interior del bloque y se destruyen al finalizarlo

18 Variables y su definición Para declarar una variable debemos: Definir el tipo de la variable Definir el identificador de la variable Darle un valor (opcional) Por ejemplo: int contador = 0; Float peso;

19 Ámbito de las variables Es la zona del programa donde podemos utilizar esa variable:

20 Tipos de datos Al igual que el tipo de variables, podemos encontrarnos con 2 tipos de datos: Primitivos: int, float, char, byte, etc. Complejos: Clases

21 Tipos de datos primitivos Tipo Tamaño/Formato Descripción ( enteros (Números byte 8-bit complemento a 2 Entero de un Byte short 16-bit complemento a 2 Entero corto int 32-bit complemento a 2 Entero long 64-bit complemento a 2 Entero largo ( reales (Números float 32-bit IEEE 754 Coma flotante de precisión simple double 64-bit IEEE 754 Coma flotante de precisión doble ( tipos (otros char 16-bit Caracter Un sólo carácter ( falso boolean true o false Un valor booleano (verdadero o

22 Tipos de datos primitivos El tipo boolean no es un valor numérico, sólo admite los valores true o false El tipo char contiene caracteres en código UNICODE (que incluye el código ASCII), y ocupan 16 bits por carácter. Comprende los caracteres de prácticamente todos los idiomas Los tipos byte, short, int y long son números enteros que pueden ser positivos o negativos, con distintos valores máximos y mínimos A diferencia de C/C++, en Java no hay enteros unsigned Los tipos float y double son valores de punto flotante (números reales) con 6-7 y 15 cifras decimales equivalentes, respectivamente. Se utiliza la palabra void para indicar la ausencia de un tipo de variable determinado A diferencia de C/C++, los tipos de variables en Java están perfectamente definidos en todas y cada una de las posibles plataformas Por ejemplo, un int ocupa siempre la misma memoria y tiene el mismo rango de valores, en cualquier tipo de ordenador

23 Ejemplos de tipos de datos primitivos Byte byte b = 0; Short short i =0, j = 0; Int Int a = 2000; Int b = -30; Int c = 0xF003; /* valor en hexadecimal */ Long long a = -1L; /* L indica que la constante -1 es long */ Char char car = a ; char car = 97; /* la a es el decimal 97 */ char car = 0x0061 /* la a es el hexadeciaml 0061 */ char car = \u0061 ; /* la a es el Unicode 0061 */ Float float a = F; Float b = 2.2e-5F; /* 2.2e-5 = 2.2 por 10 elevado a 5 */ float c = 2/3F; /* */ Double double a = ; /* una constante es double por omision */ double b = 2.2e5 /* 2.2e-5 = 2.2 por 10 elevado a 5 */ double c = 2/30; Boolean boolean a = true; boolean b = false;

24 Ejemplos de tipos de datos primitivos

25 Tipos de datos primitivos y la operación casting Cuando en una operación participan variables de distinto tipo, si son compatibles, el resultado será de aquel cuya precisión sea mayor Es decir, si se multiplica un entero y un número real, el resultado será real La jerarquía en las conversiones de mayor a menor precisión será: double < float < long < int < short < byte También es posible convertir un dato de jerarquía superior en uno de jerarquía inferior a través de una operación denominada casting. int entero; float decimal = 4.8F; entero = (int)decimal;

26 Tipos de datos primitivos y la operación casting

27 Tipos de datos complejos Los veremos con más detalle más adelante Se identifican con el nombre de la clase a la que pertenecen Cuando definimos una clase, en realidad estamos definiendo un tipo de dato complejo Su valor por defecto es null. Declaración: Producto unproducto; String unstring = new String( Hola );

28 Tipos de datos primitivos como complejos En ocasiones necesitaremos utilizar los tipos primitivos como si fueran clases << Las colecciones de java sólo permiten almacenar objetos >> Para esto se crearon las clases envoltorio (wrapper), que se utilizan para almacenar en su interior a un tipo primitivo: Byte para byte. Short para short. Integer para int. Long para long. Boolean para boolean Float para float. Double para double y Character para char. Para crear un entero haríamos: Integer i = new Integer(4);

29 Operadores aritméticos Operador Formato Descripción + op1 + op2 Suma aritmética de dos operandos - op1 - op2 Resta aritmética de dos operandos - -op1 Cambio de signo * op1 * op2 Multiplicación de dos operandos / op1 / op2 División entera de dos operandos % op1 % op2 Resto de la división entera ( módulo) ++ ++op1 op1++ Incremento unitario -- --op1 op1-- Decremento unitario Operadores aritméticos con asignación: +=, que se usa como op1 += op2 y equivale a op1 = op1 + op2 -=, que se usa como op1 -= op2 y equivale a op1 = op1 - op2 *=, que se usa como op1 *= op2 y equivale a op1 = op1 * op2 /=, que se usa como op1 /= op2 y equivale a op1 = op1 / op2 %=, que se usa como op1 %= op2 y equivale a op1 = op1 % op2

30 Operadores aritméticos

31 Operadores lógicos Operador Formato Descripción > op1 > op2 Devuelve true (cierto) si op1 es mayor que op2 < op1 < op2 Devuelve true (cierto) si op1 es menor que op2 >= op1 >= op2 Devuelve true (cierto) si op1 es mayor o igual que op2 <= op1<= op2 Devuelve true (cierto) si op1 es menor o igual que op2 == op1 == op2 Devuelve true (cierto) si op1 es igual a op2!= op1!= op2 Devuelve true (cierto) si op1 es distinto de op2 && op1 && op2 Y lógico. Devuelve true (cierto) si son ciertos op1 op2 O lógico. Devuelve true (cierto) si son ciertos!!op1 Negación lógica. Devuelve true si es false op1

32 Ejemplo operadores lógicos

33 Operadores de bits Operador Formato Descripción >> op1 >> op2 Desplaza op1, op2 bits a la derecha << op1 << op2 Desplaza op1, op2 bits a la izquierda >>> op1 >>> op2 Desplaza op1, op2 bits a la derecha & op1 & op2 Realiza un Y (AND) a nivel de bits op1 op2 Realiza un O (OR) a nivel de bits ^ op1 ^ op2 Realiza un O exclusivo (XOR) a nivel de bits ~ ~op1 Realiza el complemento de op1 a nivel de bits Operadores de bits con asignación:

34 Operadores de bits

35 Otros operadores especiales? Es una abreviatura de if-then-else. op1? op2: op3 si se cumple op1, se evalúa op2 y si no op3 [] Para declarar, crear y acceder a arrays (Parámetros) Para pasar parámetros a métodos. Para acceder a atributos y métodos de los objetos (tipo) new Para hacer castings Para crear objetos (instanciar) instanceof Comprueba si el primer operando es una instancia del segundo + Operador suma que concatenará cadenas ó números y cadenas, haciendo automáticamente las transformaciones que sean posibles

36 Importante: Precedencia de los operadores A continuación la precedencia de los operadores (de mayor a menor precedencia): Operadores postfijos []. (params) expr++ expr-- Operadores uniarios ++expr --expr +expr -expr ~! Creación o casting new (type)expr Multiplicativos * / % Aditivos + - Op. De bits << >> >>> Op. Relacionales < > <= >= instanceof Op. De igualdad ==!= Op. De bits AND & Op. de bits OR Exclusivo ^ Op. de bits OR Inclusivo Op. Lógico AND && Op. Lógico OR Condicional? : Op. De asignación = += -= *= /= %= &= ^= = <<= >>= >>>=

37 Sentencias y bloques Una sentencia es una línea de código terminada en punto y coma: Por ejemplo: System.out.println( Hola ); Un bloque es un conjunto de sentencias agrupadas entre llaves Los bloques pueden estar anidados Los bloques nos darán la vida de las variables definidas while (true) { x=y+1; if(x<0) { x=x+1; } }

38 Estructuras de control Controlan el orden de ejecución de las sentencias Pueden ser de los siguientes tipos: Alternativas: if-else, switch Bucles o repetitivas: while, do-while, for. Gestión de excepciones: (las veremos más adelante) try-catch-finally, throw De ruptura: break, continue y return

39 Estructuras de control alternativas Las estructuras alternativas disponibles en Java son: Alternativa if-else. Alternativa switch. Estructura de control if: Esta estructura permite ejecutar un conjunto de sentencias en función del valor que tenga la expresión de comparación (se ejecuta si la expresión de comparación tiene valor true): if (booleanexpression) { } sentencias; Las llaves {} no son necesarias si sólo hay una sentencia dentro del if

40 Estructuras de control alternativas (II) Estructura de control if-else: Se ejecuta si la expresión de comparación tiene valor false: if (booleanexpression) { sentencias; } else { sentencias2; } Las llaves {} no son necesarias si sólo hay una sentencia dentro del else

41 Estructuras de control alternativas (III) Permiten introducir más de una expresión de comparación Si la primera condición no se cumple, se compara la segunda y así sucesivamente En el caso de que no se cumpla ninguna de las comparaciones se ejecutan las sentencias correspondientes al else if (booleanexpression1) { sentencias1; } else if (booleanexpression2) { sentencias2; } else if (booleanexpression3) { } else { } sentencias3; sentencias4;

42 Estructuras de control alternativas (IV): Ejemplo int numero = 61; // La variable "numero" tiene dos dígitos ( false ) If (Math.abs(numero) < 10) // Math.abs() calcula el valor absoluto. System.out.println("Numero tiene 1 digito "); ( true ) else if (Math.abs(numero) < 100) // Si numero es 61, estamos en este caso System.out.println("Numero tiene 1 digito "); else { // Resto de los casos System.out.println("Numero tiene mas de 3 digitos "); System.out.println("Se ha ejecutado la opción por defecto "); }

43 Estructuras de control alternativas (V) Alternativa a la bifurcación if else if else cuando se compara la misma expresión con distintos valores: switch (expression) { case value1: statements1; break; case value2: statements2; break; case value3: statements3; break; [default: statements7;] // Este es opcional }

44 Estructuras de control alternativas (VI) Características de switch: Cada sentencia case se corresponde con un único valor de expresión. No se pueden establecer rangos o condiciones sino que se debe comparar con valores concretos Los valores no comprendidos en ninguna sentencia case se pueden gestionar en default, que es opcional En ausencia de break, cuando se ejecuta una sentencia case se ejecutan también todas las case que van a continuación, hasta que se llega a un break o hasta que se termina el switch

45 Estructuras de control alternativas (VII): Ejemplo char c = (char)(math.random()*26+'a'); // Generación aleatoria de letras minúsculas System.out.println("La letra " + c ); switch (c) { case 'a': // Se compara con la letra a case 'e': // Se compara con la letra e case 'i': // Se compara con la letra i case 'o': // Se compara con la letra o case 'u': // Se compara con la letra u System.out.println(" Es una vocal "); break; default: System.out.println(" Es una consonante "); }

46 Estructuras de control repetitivas El código incluido entre las llaves {} (opcionales si el proceso repetitivo consta de una sola sentencia), se ejecutará mientras se cumplan unas determinadas condiciones Atención a los bucles infinitos: cuando la condición de finalizar el bucle no se llega a cumplir nunca se produce un bucle infinito y no dejará de ejecutarse (se trata de un fallo muy típico)

47 Estructuras de control repetitivas (II) Sentencia while: Mientras se cumpla la condición se ejecutan las instrucciones del bloque while (condicion){ Sentencia do-while: } <instrucciones> Primero se ejecutan todas las sentencias y si se cumple la condición se vuelven a ejecutar hasta que no se cumpla. do { <instrucciones> } while(condicion);

48 Estructuras de control repetitivas (III) Sentencia for: Se utiliza para ejecutar un bloque de código un número determinado de veces for (inicialización; condicion; incremento){ } sentencias Nota: Si declaramos una variable en la inicialización del for, será local al bloque y dejará de existir cuando el bucle se termine La condición se ejecuta al principio Sería similar a un while que realizase incremento como última sentencia de su bloque While (condicion) { } sentencias incremento

49 Estructuras de control repetitivas (IV): Ejemplo Ejemplos bucles:

50 Estructuras de control de ruptura Sentencias break, continue y return Break: sirve para saltar a la siguiente línea después de un bucle o una sentencia switch, es decir, sale del bucle, suspende su ejecución y continúa con las sentencias que pudiera haber después de éste en el programa Continue: detiene la ejecución de las sentencias de un bucle para volver a evaluar la condición, es decir, se salta las sentencias que queden dentro de la ejecución del bucle y vuelve a evaluar la condición para volver a ejecutar las sentencias si se cumpliera la condición return: sirve para detener la ejecución de un método

51 Estructuras de control de ruptura (II): Ejemplo

52 Ejercicios propuestos introducción al lenguaje Escribir un programa que imprima las tablas de multiplicar del número 1 al 10. Cada tabla debe ir separada por un línea en blanco Escribir un programa que genere, de modo aleatorio, 10 números entre 1 y 100 e indique si son pares o impares Escribir un programa que pida por teclado la nota de un alumno e imprima en pantalla la calificación correspondiente según la siguiente tabla: De 0 a 50 puntos -> Suspenso De 51 a 75 puntos -> Recuperar De 76 a 90 puntos -> Aprobado De 91 a 100 puntos -> Aprobado con mérito Menor que 0 o mayor que 100 -> puntuación inválida.

53 Ejercicios propuestos introducción al lenguaje Para leer de teclado podemos utilizar el siguiente código:

54 Ejercicios propuestos introduccion al lenguaje Escribir un programa en Java que nos calcule el cambio que debe dar la caja de un supermercado: Primero pedirá por teclado el importe de la compra y el dinero entregado Después dirá cuántas monedas deben darse como cambio Escribir un programa que implemente el juego de Adivina mi número. El ordenador deberá generar un número aleatorio entre 0 y 100 A continuación nos pide que adivinemos su número, para lo que tendremos que teclear uno Aparecerá un mensaje en pantalla diciéndonos si nuestro número es mayor o menor o felicitándonos si hemos acertado Si hemos fallado, nos volverá a pedir otro hasta que lo acertemos Cuando acertemos, también nos dirá cuántos intentos hemos realizado

55 Índice Introducción a Java Sintaxis del lenguaje Clases y objetos Métodos y atributos static y final Herencia, clases abstractas, interfaces y polimorfismo Clases útiles de Java Estructuras de datos Excepciones Entrada/Salida Formularios (GUIs) Acceso a bases de datos con MySQL

56 Estructura de un programa en Java Debe de haber una clase que contenga el programa principal. Dicha clase es la que contiene la función main El método main es el que busca el interprete para ejecutar en primer lugar El método main es un método de clase static, es decir, un método de clase que no pertenece a ningún objeto El método main no devuelve nada (void) y es importante por que java hace una comprobación estricta de tipos Habrá clases definidas por el usuario, que serán las que se utilizarán desde el programa principal Los ficheros fuente (*.java) pueden contener más de una clase, pero sólo una de ellas puede ser pública El nombre del fichero fuente debe coincidir con la clase public public class MiClase {...} => MiClase.java Si la clase no es public, no es necesario que su nombre coincida con el del fichero Las clases de Java se agrupan en packages, que son librerías de clases Los packages son directorios físicos que cuelgan del directorio src Si las clases no se definen como pertenecientes a un package, se utiliza un package por defecto (default) que es el directorio activo (src)

57 Nomenclatura a seguir Sensible a letras mayúsculas y minúsculas, no es lo mismo la variable Casa que casa Se recomienda usar nombres con minúsculas, con las excepciones siguientes: Cuando un identificador consta de varias palabras es habitual poner una a continuación de otra: nombredevariaspalabras Los nombres de clases e interfaces comienzan siempre por mayúscula: Cliente, Tabla Los nombres de objetos, los nombres de métodos y variables miembro, y los nombres de las variables locales de los métodos, comienzan siempre por minúscula y después siguen la nomenclatura estándar para identificadores: main(), dibujar(), x, y, tabla... Los nombres de las variables finales, es decir de las constantes, se definen siempre con mayúsculas: PI, TOTAL_USUARIOS...

58 Qué son las clases? Una clase es una abstracción que representa un conjunto de objetos con unas carácterísticas y comportamientos comunes y los encapsula dentro de si Una clase es una plantilla o molde para la instanciación de objetos Las características comunes se representan mediante atributos de la clase Mediante los valores que demos a estos atributos las clases representan el estado de los objetos Para modificar el comportamiento de los objetos, se utilizan los métodos, que cambian el valor de los atributos e interactúan con otros métodos de la clase o de otras clases si están relacionadas Tienen un constructor público con el mismo nombre de la clase que llamará automáticamente cuando se instancie un objeto de clase Nomenclatura: Privacidad nombreclase { } privacidad nombreatributo [= valorinicial]; privacidad tipodevuelto nombremétodo(parámetros) { } [return valor];

59 Constructor Un constructor es un método que se llama automáticamente cada vez que se crea un objeto (instancia) de una clase La principal misión del constructor es reservar memoria e inicializar las variables miembro de la clase ( void No tienen valor de retorno (ni siquiera Su nombre es el mismo que el de la clase ( sobrecargados ) Una clase puede tener varios constructores Constructor por defecto: el aquel que no tiene argumentos Un constructor de una clase puede llamar a otro constructor (this) En este contexto, la palabra this sólo puede aparecer en la primera sentencia de un constructor El constructor de una sub-clase puede llamar al constructor de su superclase por medio de la palabra super Así un constructor sólo tiene que inicializar por sí mismo las variables no heredadas

60 Ejemplo de clase Por ejemplo: // CuentaBancaria.java package cuentabancaria; public class CuentaBancaria { private String numero; private double saldo; // Constructor parametrizado // El constructor por defecto no tendría parámetros public CuentaBancaria (String numero, double saldo) { this.numero = numero; this.saldo = saldo; } public double getsaldo() { return this.saldo; } }

61 Paso de argumentos a métodos En Java los argumentos de los tipos primitivos se pasan siempre por valor, es decir, si los modificamos, cuando acaba el método su valor no queda modificado Las referencias se pasan también por valor, pero a través de ellas se pueden modificar los objetos referenciados En Java no se pueden pasar métodos como argumentos a otros métodos Lo que se puede hacer en Java es pasar una referencia a un objeto y dentro de la función utilizar los métodos de ese objeto Dentro de un método se pueden crear variables locales Estas variables locales dejan de existir al terminar la ejecución del método, es por ello que los argumentos pierden su valor modificado al acabar el método

62 Qué son los objetos? Un objeto es una representación detallada y particular de un concepto de la realidad que queda perfectamente definida a través de la clase, que son las generalizaciones de un objeto en particular Un objeto es una instancia de una clase Una instancia es un objeto único de una clase Todo objeto tiene un identidad o nombre, estado (características definidas generalmente en variables) y comportamiento (sus funciones o procedimientos) Nomenclatura: NombreClase nombrevariableobjeto = new NombreClase(parámetros); Un ejemplo concreto con la clase anterior sería: CuentaBancaria cb = new CuentaBancaria( , ); Para acceder a un método de una clase a través de un objeto (instancia sería a través del operador punto. ) double misaldo = cb.getsaldo();

63 Visibilidad (privacidad) de atributos y métodos Los modificadores de ámbito de atributo especifican la forma en que puede accederse a los mismos desde otras clases. Estos modificadores de ámbito son: private: public: Es el más restrictivo, solamente es visible desde dentro de la clase La única forma de acceder al mismo es a través de métodos públicos que devuelvan o modifiquen su valor Es el menos restrictivo, es visible desde dentro y fuera de la clase Se puede acceder a ellos directamente a través de una instancia con el operador punto. Por ejemplo: double misaldo = cb.saldo; Protected: Accesible desde dentro de la clase y desde las clases hijas cuando utilizamos herencia e inaccesible desde fuera Sería como private para fuera de la clase y como public para las clases hija Package: Accesible desde dentro del paquete

64 Qué son los Packages? Un package es una agrupación de clases relacionadas entre sí Existen una serie de packages incluidos en el lenguaje (jerarquía de clases del api de java) El usuario puede crear sus propios packages Todas las clases que formen parte de un paquete deben estar en el mismo directorio Para declarar que una clase pertenece a un paquete se utiliza la palabra reservada package siguiendo la nomenclatura: package nombrepaquete; Para hacer uso de una clase perteneciente a un paquete, debemos de importar dicha clase mediante la palabra reservada import Import nombrepaquete; Los packages se utilizan con las finalidades siguientes: 1. Para agrupar clases relacionadas 2. Para evitar conflictos de nombres 3. Para ayudar en el control de la accesibilidad de clases y miembros

65 Sobrecarga de métodos La sobrecarga de métodos es disponer de distintos métodos que tienen el mismo nombre, pero que se diferencian por el número y/o tipo de los argumentos // método de objeto para comparar círculos public Circulo elmayor(circulo c) { } if (this.radio >= c.radio) return this; else return c; // método de clase para comparar círculos }( d public static Circulo elmayor(circulo c, Circulo } if (c.r>=d.r) return c; else return d; No es posible crear dos métodos sobrecargados que solo difieran del valor de retorno Una clase puede redefinir (override) un método heredado de una superclase En este caso el método debe tener exactamente los mismos argumentos en tipo y número que el método redefinido

66 Destructores En Java no hay destructores El sistema se ocupa automáticamente de liberar la memoria de los objetos que ya han perdido la referencia a través del garbage collection ( basura (recolector de Una forma de hacer que un objeto quede sin referencia es ponerla a null Se puede llamar explícitamente al garbage collector con el método System.gc(); Aunque esto es considerado por el sistema sólo como una sugerencia a la JVM

67 Finalizadores Los finalizadores son métodos que vienen a completar la labor del recolector de basura Un finalizador es un método que se llama automáticamente cuando se va a destruir un objeto (antes de que la memoria sea liberada de modo automático por el sistema) Se utilizan para ciertas operaciones de terminación distintas de liberar memoria (por ejemplo: cerrar ficheros, cerrar conexiones de red...) Un finalizador es un método de objeto (no static), sin valor de retorno (void), sin argumentos y que siempre se llama finalize() Los finalizadores se llaman de modo automático siempre que hayan sido definidos por el programador de la clase Para realizar su tarea correctamente, un finalizador debería terminar siempre llamando al finalizador de su super-clase El método System.runFinalization() sugiere a la JVM que ejecute los finalizadores de los objetos pendientes (que han perdido la referencia)

68 Índice Introducción a Java Sintaxis del lenguaje Clases y objetos Métodos y atributos static y final Herencia, clases abstractas, interfaces y polimorfismo Clases útiles de Java Estructuras de datos Excepciones Entrada/Salida Formularios (GUIs) Acceso a bases de datos con MySQL

69 Variables miembro (atributos static) Una clase puede tener variables que pertenecen a la clase y no a un objeto en particular, sino que son constantes a todos los objetos Las variables miembro han de tener un valor siempre, por eso las variables miembro de tipos primitivos se inicializan siempre de modo automático, incluso antes de llamar al constructor (false para boolean, el carácter nulo para char y cero para los tipos numéricos) y null para el caso de las referencias Lo más adecuado es inicializarlas en el constructor, aunque pueden inicializarse explícitamente en la declaración public static long ndatos = 100; Las variables miembro se inicializan en el mismo orden en que aparecen en el código de la clase y es importante ya que unas pueden apoyarse en otras Para llamarlas se suele utilizar el nombre de la clase: Circulo.numCirculos Se crean en el momento en que pueden ser necesarias: cuando se va a crear el primer objeto de la clase cuando se llama a un método static cuando se utiliza una variable static de dicha clase

70 Variables final (constantes) Una variable final no puede cambiar su valor a lo largo de la ejecución Puede ser considerada como una constante Java permite separar la definición de la inicialización de una variable final La inicialización puede hacerse más tarde, en tiempo de ejecución, llamando a métodos o en función de otros datos No tiene por qué tener el mismo valor en todas las ejecuciones del programa, pues depende de cómo haya sido inicializada Además de las variables miembro, también las variables locales y los propios argumentos de un método pueden ser declarados final En Java no es posible hacer que un objeto sea constante

71 Métodos de clase (static) Puede haber métodos que no actúen sobre objetos concretos a través del operador punto, sino que pertenezcan a la clase No pueden utilizar la referencia this Ejemplo: métodos matemáticos de la clase java.lang.math sin(), cos(), exp(), pow(), etc Para llamarlos se suele utilizar el nombre de la clase, en vez del nombre de un objeto de la clase Math.sin(ang) Los métodos y las variables de clase son lo más parecido que Java tiene a las funciones y variables globales de C/C++ o Visual Basic

72 Inicializadores static Algo parecido a un método que se llama automáticamente al crear la clase No es llamado para cada objeto, sino una sola vez para toda la clase Para inicializar objetos complicados es bueno utilizarlos, ya que permite gestionar excepciones con try catch Se crean dentro de la clase, como métodos sin nombre, sin argumentos y sin valor de retorno, con tan sólo la palabra static y el código entre llaves {...} static { } System.loadLibrary("MyNativeLibrary");

73 Índice Introducción a Java Sintaxis del lenguaje Clases y objetos Métodos y atributos static y final Herencia, clases abstractas, interfaces y polimorfismo Clases útiles de Java Estructuras de datos Excepciones Entrada/Salida Formularios (GUIs) Acceso a bases de datos con MySQL

74 Qué es la herencia? La herencia es una característica muy potente que permite definir una clase tomando como base a otra clase ya existente Esto es una de las bases de la reutilización de código, en lugar de copiar y pegar La herencia se especifica agregando la claúsula extends después del nombre de la clase, donde indicaremos el nombre de la clase base de la cuál queremos heredar Al heredar de una clase base o superclase, heredaremos tanto los atributos como los métodos, mientras que los constructores son utilizados, pero no heredados. En Java, a diferencia de otros lenguajes orientados a objetos, una clase sólo puede derivar de una única clase, es decir, no hay herencia múltiple, aunque es posible simularla a través de interfaces En Java todas las clases heredan de otra, lo indiquemos o no. Si lo indicamos heredará de esa, sino indicamos nada, heredará de la clase base Object, y con ello sus atributos y métodos

75 La clase Object Todas las clases de Java y definidas por nosotros derivan de Object Métodos que pueden ser redefinidos por el programador: clone() Crea un objeto a partir de otro objeto de la misma clase equals() Indica si dos objetos son o no iguales tostring() Devuelve un String que contiene una representación del objeto como cadena de caracteres, por ejemplo para imprimirlo o exportarlo finalize() Métodos que no pueden ser redefinidos (son métodos final): getclass() Devuelve un objeto de la clase Class, al cual se le pueden aplicar métodos para determinar el nombre de la clase, su superclase, las interfaces implementadas, etc notify(), notifyall() y wait() Son métodos relacionados con las threads

76 Las palabras reservadas super y this En una clase, se puede utilizar la palabra super, para poder acceder a las propiedades y métodos (incluyendo constructores) de la clase padre del objeto Tiene que ser la primera línea del constructor y sólo puede usarse una ver por constructor public class Padre { } public Padre (int num) { SOP(num); } public class Hijo extends Padre { } public Hijo (int num) { } super (num + 2); SOP (num); Si arrancáramos el programa pasándole a un objeto Hijo el valor de 5, sacaría por pantalla 7 y después 5

77 Las palabras reservadas super y this this es una referencia al objeto actual, que se utiliza para acceder a propiedades y métodos del propio objeto Hay dos ocasiones en las que resulta útil: Acceso a un constructor desde otro constructor, en este caso al igual que con super, tiene que ser la primera línea del constructor y sólo puede haber 1 llamada por constructor Acceso a un atributo desde un método donde hay definidas unas variables locales con el mismo nombre que el atributo public class Padre { } public Padre () { this(5); SOP( SIN ); } public Padre (int n) { SOP( CON ); } Si arrancáramos el prog. usando el constructor sin parámetros, escribirá primero CON y luego SIN

78 Qué es una clase abstracta? Una clase abstracta es una clase que no se puede instanciar, solo se utiliza para definir subclases, pero se pueden heredar los métodos y propiedades que tenga definidas Cuándo es abstracta una clase? Cuando uno de sus métodos está sin implementar, es decir, cuando no tiene sentencias ejecutables, en cuyo caso deberá ser etiquetado con la palabra reservada abstract Cuándo se utiliza una clase abstracta? Cuando queremos englobar objetos de distintos tipos, pero queremos darles un uso homogéneo => Polimorfismo Cuando una clase hereda de una abstracta está obligada a implementar todos los métodos abstractos que tenga Por ejemplo, la clase Figura podría ser abstracta, ya que no tiene sentido calcular el área de ella, en cambio si de Circulo o Cuadrado

79 Qué es una clase abstracta? Public abstract class Figura { protected double x; protected double y; // Constructor public abstract double area(); } Public class Circulo extends Figura { private double radio; // Constructor public double area() { return Math.PI * radio * radio; } } Public class Cuadrado extends Figura { private double lado; // Constructor public double area() { return lado * lado; } }

80 Qué es un interfaz? Una interface es un conjunto de declaraciones de funciones, es decir, es una clase completamente abstracta, ya que no tiene atributos En el ejemplo anterior, si no quisiéramos conocer la posición de la figura, podríamos eliminarlo y convertir la clase Figura en un interfaz public interface Figura { } public double area(); Si una clase implementa (implements) una interface, debe definir todas las funciones especificadas por la interface Las interfaces pueden definir también variables finales (constantes) ( múltiple Una clase puede implementar más de una interface (herencia Una interface puede derivar de otra o incluso de varias interfaces, en cuyo caso incorpora las declaraciones de todos los métodos de las interfaces de las que deriva

81 Qué es un interfaz? El ejemplo anterior con interfaces sería: public interfaz Figura { public double area(); } Public class Circulo implements Figura { private double radio; // Constructor public double area() { return Math.PI * radio * radio; } } Public class Cuadrado implements Figura { private double lado; // Constructor public double area() { return lado * lado; } }

82 Polimorfismo El polimorfismo es la capacidad de tratar de manera homogénea a elementos heterogéneos Mediante polimorfismo, cualquier instancia de una subclase puede ser utilizada en el lugar de la superclase Figura unafigura = new Circulo(); Por ejemplo imaginemos un Array de objetos de la clase Figura. En cada una de sus posiciones podríamos almacenar cualquier objeto de una clase que heredara de Figura (círculos, cuadrados, etc.). También podríamos acceder a calcular el área de círculo si lo definimos como abstracto en Figura: unafigura.area(); Se utilizan sobre todo, para implementar colecciones genéricas de objetos y métodos genéricos

83 Polimorfismo Public class ejemplopolimorfismo { ArrayList<Figura> lista = new ArrayList<Figura>(); public ejemplopolimorfismo() { Figura f = new Circulo(1,3,3.5); lista.add(f); f = new Cuadrado(2,3,5.5); lista.add(f); } public void mostrarareas() { String figura = ; for (int i = 0; i < lista.size(); i++) { if (lista.get(i) instaceof Cuadrado) figura = Cuadrado ; else figura = Circulo System.out.println( El área del + figura + es + lista.get(i).area()); } } }

84 Índice Introducción a Java Sintaxis del lenguaje Clases y objetos Métodos y atributos static y final Herencia, clases abstractas, interfaces y polimorfismo Clases útiles de Java, Colecciones y estructuras de datos Excepciones Entrada/Salida Formularios (GUIs) Acceso a bases de datos con MySQL

85 Clases útiles de Java String Array StringBuffer Wrappers (Integer, Double, Char, ) Math Interface Iterator Interface Collection Interface Map Enumeration Vector Hashtable

86 Array Los arrays se crean con el operador new seguido del tipo y número de elementos tipodato []ident = new tipodato[numelementos]; Integer []vect = new Integer[2]; Se puede acceder al número de elementos de un array con la variable miembro implícita int numelementos = vect.length; Se accede a los elementos de un array con los corchetes [] y un índice que varía de 0 a length-1 Se pueden crear arrays de objetos de cualquier tipo Los elementos de un array se inicializan al valor por defecto del tipo correspondiente Los arrays, como colecciones de objetos que son, se pasan como argumentos a los métodos por referencia Se pueden crear arrays anónimos (por ejemplo, crear un nuevo array como argumento actual en la llamada a un método)

87 Array: Inicialización Podemos inicializar un array introduciendo los valores entre llaves {...} y separados por comas, tanto de tipos primitivos como de objetos int [] arr = {2, 3, 4}; Los arrays de objetos se pueden inicializar con varias llamadas a new dentro de unas llaves {...} Persona []arr2 = {new Persona(), new Persona()}; Si se igualan dos referencias a un array no se copia el array, sino que se tiene un array con dos nombres, apuntando al mismo objeto Para crear una referencia a un array, disponemos de dos formas posibles: double []x; // preferible double x[];

88 Array: Ejemplos Crear un array de 10 enteros, que por defecto se inicializan a cero int v[] = new int[10]; Crear arrays inicializando con determinados valores int v[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; String dias[] = {"lunes", "martes", "miercoles", "jueves", "viernes", "sabado", "domingo"}; Array de 5 objetos MiClase listaobj[] = new MiClase[5]; // de momento hay 5 referencias a null (++ 5;i for( i = 0 ; i < listaobj[i] = new MiClase(...); Array anónimo obj.metodo(new String[]={"uno", "dos", "tres"});

89 String Cadenas constantes de caracteres definidas entre comillas dobles Java crea siempre por defecto un objeto String al encontrar una cadena entre comillas Dos formas de crear objetos de la clase String: String str1 = "Hola"; // Mediante cadena constante String str2 = new String("Hola"); // Mediante constructor El primero de los métodos expuestos es el más eficiente

90 String

91 StringBuffer Se utiliza para modificar una cadena de caracteres Completa los métodos de la clase String, ya que éstos realizan sólo operaciones sobre el texto que no conllevan cambios en él

92 Envoltorios (Wrappers) Los Wrappers (envoltorios) son clases diseñadas para ser un complemento de los tipos primitivo Los tipos primitivos son los únicos elementos de Java que no son objetos. Por ejemplo, los tipos primitivos siempre se pasan como argumento a los métodos por valor, mientras que los objetos se pasan por referencia La manera para conseguir pasar un tipo primitivo por referencia en la llamada a un método, es utilizando un Wrapper que trate a ese tipo simple como un objeto Un Wrapper es un objeto cuyo atributo es el tipo primitivo que se quiere modificar Existe una clase Wrapper para cada uno de los tipos primitivos numéricos: Byte, Short, Integer, Long, Float y Double

93 Algunos métodos de Math

94 Interface Iterator Permite recorrer todos los elementos que forman una colección Todas las colecciones permiten crear un Iterator por medio del método iterator(). Cualquier objeto iterator, implementa los métodos de dicho interfaz y nos permite acceder a los siguientes métodos: boolean hasnext(): Si existe un elemento siguiente en la colección Object next(): Devuelve el elemento de la colección apuntado actualmente y apunta al siguiente Void remove(): Elimina el elemento de la colección apuntado actualmente y apunta al siguiente

95 Interface Collection Las colecciones son objetos Java que se utilizan para almacenar y manipular datos En Java existe un framework que simplifica el trabajo con colecciones, ya que incorpora las operaciones más utilizadas como la búsqueda, acceso por índices, ordenación, etc Todas las colecciones se encuentran en el paquete java.util, con lo que para utilizarlas habrá que importar dicho paquete Todos los tipos de colecciones implementan el interface Collection (java.util.collection) De esta clase parten diferentes especializaciones que permitirán ordenar o no los elementos, hacer búsquedas, permitir duplicados,etc. Un dato importante es que las colecciones no permiten almacenar tipos primitivos, en su lugar tendremos que utilizar las clases envolventes (wrapper): Integer, Double,..

96 Interface Collection Algunos métodos de la interface Collection int size() boolean isempty() boolean Contains(Objetc element) boolean add(object element) remove(object element) Iterator iterator() boolean containsall(collection c) boolean addall(collection c) boolean removeall(collection c) boolean retainall(collection c) void clear() Nº de elementos de la colección Si está vacía o no. Si contiene el elemento Añadir el elemento a la colección Borrar el elemento Devuelve una instancia de Iterator Si contiene todos los elementos de c Añadir todos los elementos de c Borrar todos los elementos que estén en c Borrar todos menos los que estén en c Borrar la colección

97 Jerarquía Collection

98 Colecciones sin duplicados Implementan la interface Set, que a su vez hereda de Collection Para saber si un objeto está duplicado o no, hace uso del método equals: public boolean equals(object o). Algunas de las clases que implementan esta interface son: HashSet: Ofrece el acceso más rápido si es aleatorio. El orden de iteración es impredecible LinkedHashSet: Igual que HashSet pero el orden de iteración es el de inserción TreeSet. Su orden de iteración depende de la implementación que sus elementos hagan del método public int compareto(object o) (de la interface Comparable) Los métodos más importantes son: public void add(object o) public void remove(object o)

99 Colecciones sin duplicados Ejemplo: HashSet frutashs = new HashSet(); LinkedHashSet frutaslhs = new LinkedHashSet(); TreeSet frutasts = new TreeSet(); // Inicialización HashSet frutashs.add( Pera ); frutashs.add( Manzana ); frutashs.add( Pera ); frutashs.add( Limón ); // Inicialización LinkedHashSet frutaslhs.add( Pera ); frutaslhs.add( Manzana ); frutaslhs.add( Pera ); frutaslhs.add( Limón ); // Inicialización TreeHashSet frutasts.add( Pera ); frutasts.add( Manzana ); frutasts.add( Pera ); frutasts.add( Limón );

100 Colecciones sin duplicados // Inicialización iteradores Iterator iths = frutashs.iterator(); Iterator itlhs = frutaslhs.iterator(); Iterator itts = frutasts.iterator(); // HashSet => Sin duplicados, orden impredecible While (iths.hasnext()) System.out.println(itHS.next()); // Limón, Pera, Manzana // LinkedHashSet => Sin duplicados, orden de inserción While (itlhs.hasnext()) System.out.println(itLHS.next()); // Pera, Manzana, Limón // TreeSet => Sin duplicados, depende de la implementación de compareto While (itts.hasnext()) System.out.println(itTS.next()); // Limón, Manzana, Pera

101 Colecciones con duplicados y acceso por índice Implementan la interface List, que a su vez también hereda de Collection Posibilita el acceso a los elementos a través de un índice, por lo que se podrá: Acceder a un elemento concreto de una posición Insertar un elemento en una posición determinada Algunas de las clases que implementan esta interface son: ArrayList: Ofrece un tiempo de acceso óptimo cuando este tipo de acceso es aleatorio LinkedList: El tiempo de acceso es óptimo si se suele acceder al principio o al final de la lista, como ocurre con las pilas Vector: Es igual que ArrayList sólo que se puede sincronizar en multitarea. Debido a esto baja notablemente su rendimiento Los métodos como es de esperar, reciben un parámetro entero index para indicar la posición del elemento con el que queremos trabajar en la colección

102 Vector Implementa Cloneable (para poder sacar copias con el método clone()) y ( caracteres Serializable (para poder ser convertida en cadena de Es un array de objetos (referencias a objetos de tipo Object) Puede crecer y reducirse, según el número de elementos Permite acceder a los elementos con un índice, aunque no permite utilizar los corchetes [] El método capacity() devuelve el tamaño o número de elementos que puede tener el vector El método size() devuelve el número de elementos que realmente contiene capacityincrement es una variable que indica el salto que se dará en el tamaño cuando se necesite crecer

103 Vector

104 Colecciones con duplicados Ejemplo: ArrayList frutasal = new ArrayList(); LinkedList frutasll = new LinkedList(); Vector vector = new Vector(); // Inicialización HashSet frutasal.add( Pera ); frutasal.add( Manzana ); frutasal.add( Pera ); frutasal.add(1, Limón ); // Inicialización LinkedHashSet frutasll.add( Pera ); frutasll.add( Manzana ); frutasll.add( Pera ); frutasll.add(1, Limón ); // Inicialización TreeHashSet vector.add( Pera ); vector.add( Manzana ); vector.add( Pera ); vector.add(1, Limón );

105 Colecciones con duplicados // Inicialización iteradores Iterator ital = frutasal.iterator(); Iterator itll = frutasll.iterator(); Iterator itvector = new vector.iterator(); // ArrayList => Con duplicados, orden de introducción y por índice While (ital.hasnext()) System.out.println(itAL.next()); // Pera, Limón, Manzana, Pera // LinkedList => Con duplicados, orden de introducción y por índice While (itll.hasnext()) System.out.println(itLL.next()); // Pera, Limón, Manzana, Pera // Vector => Con duplicados, orden de introducción y por índice While (itvector.hasnext()) System.out.println(itVector.next()); // Pera, Limón, Manzana, Pera

106 Colecciones con duplicados // Inicialización iteradores Iterator ital = frutasal.iterator(); Iterator itll = frutasll.iterator(); Iterator itvector = new vector.iterator(); // ArrayList => Con duplicados, orden de introducción y por índice While (ital.hasnext()) System.out.println(itAL.next()); // Pera, Limón, Manzana, Pera // LinkedList => Con duplicados, orden de introducción y por índice While (itll.hasnext()) System.out.println(itLL.next()); // Pera, Limón, Manzana, Pera // Vector => Con duplicados, orden de introducción y por índice While (itvector.hasnext()) System.out.println(itVector.next()); // Pera, Limón, Manzana, Pera

107 Interface Map Aunque no hereda de la interface Collection, también se utiliza para tratar colecciones de objetos Representa colecciones de objetos con parejas de elementos clave valor No permite tener claves duplicadas pero sí valores duplicados Para calcular la posición de un elemento, utiliza el método public int hashcode(object o) Algunas de las clases que implementan esta interface son: HashMap: Ofrece un tiempo de acceso óptimo cuando dicho acceso es aleatorio Hashtable: Es la versión sincronizada de HashMap LinkedHashMap: Iteración según orden de inserción TreeMap: Iteración según el método compareto

108 Hashtable Cada objeto de Hashtable tiene dos variables importantes, capacity y load factor (entre 0.0 y 1.0) Cuando el número de elementos excede el producto de estas variables, la Hashtable crece llamando al método rehash() Es conveniente partir de una Hashtable suficientemente grande para no estar ampliando continuamente

109 Interface Collection Algunos métodos de la interface Map Object put(object clave, Object valor); Object get(object clave); Object remove(object clave); boolean containskey(object key); boolean containsvalue(object valor); int size(); boolean isempty(); void putall(map m); void clear(); Inserta un nuevo objeto Obtiene el valor asociado a la clave indicada. Borra la pareja correspondiente a la clave indicada Comprueba la existencia de una clave. Comprueba la existencia del valor. Número de parejas clave valor Comprueba si hay algún valor Inserta todas las parejas de m Borra todo public Set keyset(); public Collection values(); Devuelve las claves del map Devuelve todos los valores del map

110 Jerarquía del Interface Map

111 Interface Map Ejemplo: // Creamos 2 objetos de una supuesta clase Fruta que guarda el nombre y un adjetivo Fruta limón = new Fruta ( Limón, Ácido ); Fruta pera = new Fruta ( Pera, Dulce ); Map<String, Fruta> hm = new HashMap<String, Fruta>(); // Inicialización HashMap hm.put( MiPera, pera); hm.put( MiLimon, limon); // Ejemplo de uso del Set Set<String> claves = hm.ketset(); Iterator it = claves.iterator(); While (it.hasnext()) { String clave = it.next(); Fruta f = hm.get(clave); S.O.P(clave + es + f.getadjetivo()); // MiPera es Dulce, MiLimón es Ácido }

112 Interface Map Ejemplo 2: // Creamos 2 objetos de una supuesta clase Fruta que guarda el nombre y un adjetivo Fruta limón = new Fruta ( Limón, Ácido ); Fruta pera = new Fruta ( Pera, Dulce ); Map<String, Fruta> hm = new HashMap<String, Fruta>(); // Inicialización HashMap hm.put( MiPera, pera); hm.put( MiLimon, limon); // Ejemplo de uso del Collect Collection<Fruta> frutas = hm.values(); Iterator it = frutas.iterator(); While (it.hasnext()) { Fruta f = it.next(); S.O.P(f.getAdjetivo()); // Dulce, Ácido }

113 Resumen Arrays Vs. Colecciones Arrays: Tamaño estático Se conoce el tamaño a través del atributo públic length Puede almacenar tanto tipos primitivos como complejos Sólo puede almacenar elementos de un mismo tipo Colecciones: Tamaño dinámico Se conoce el tamaño a través del método size() Sólo puede almacenar tipos complejos Puede albergar elementos de distinto tipo

114 Qué colección utilizar? Según Sun ArrayList, HashMap y HashSet son las implementaciones primarias de las interfaces Utilizaremos esas implementaciones a no ser que necesitemos alguna característica adicional de inserción u ordenación (para lo cual deberán implementar el interface Comparable y redefinir el método compareto, caso de usar TreeMap) Al declarar las variables que vayamos a utilizar como colecciones conviene crearlas con referencia a sus interfaces para que sean más genéricas. Por ejemplo: List milista = new ArrayList();

115 Importancia del equals y el hashcode En la mayoría de las colecciones y mapas se hace uso internamente del método equals Por ejemplo los Set necesitan hacer llamadas a este método ya que no permiten almacenar dos veces el mismo objeto Si lo que almacenamos en las colecciones son objetos de clases creadas por nosotros, deberemos redefinir el método equals() en estas clases, para indicar cuándo dos instancias son iguales Si sobreescribimos el método equals(), también deberemos sobreescribir hashcode() para que sean consistentes El método hashcode() de la clase Object devuelve un valor numérico relacionado con la estructura interna del objeto en cuestión Los HashMap son más rápidos a la hora de buscar que List porque buscan equivalencias en el hash y no en el objeto completo

116 El método equals La cabecera del método equals es: public boolean equals (Object o) Según Javadoc, este método debe ser: Reflexivo: Un objeto siempre tiene que ser igual a sí mismo Simétrico: Si a es igual a b, entonces b tiene que ser igual a a Transitivo: Si a es igual a b y b es igual a c, entonces a es igual a c Un objeto nunca puede ser igual a null. a.equals(null) siempre es false Para ello, equals() deberá comparar: Si el objeto es this. En tal caso devolverá true (reflexividad) Si el objeto es null. En tal caso devolverá false (no nulo). Si el objeto es de otra clase. En tal caso devolverá false (simetría) Las propiedades no-static y no-transient, deben ser iguales, para que los objetos sean iguales

117 El método equals Public class Fruta { String código; public boolean equals (Object o) { if (o == this) return true; if (o == null) return false; if (this.getclass()!= o.getclass()) return false; Fruta f = (Fruta) o; if (o.codigo == this.codigo this.codigo.equals(o.codigo)) return true; } }

118 El método hashcode La cabecera del método hashcode es: public int hashcode () Este método permite a colecciones como los HashMap organizar los datos de forma más rápida que si trabajaran con el objeto completo El hashcode es un entero calculado a partir de los datos que almacena el objeto Es importante saber que si dos objetos son iguales según el método equals, deberán tener el mismo hashcode, es decir, no puede entrar la aleatoriedad Existe la posibilidad de que el método sea distribuido y es que para distintos objetos iguales de una misma clase, genere distintos códigos Para conseguir una mejor distribución conviene: Utilizar multiplicación en lugar de sumas Utilizar XOR para combinar varios valores Multiplicar los valores por algún número primo

119 El método hashcode Public class Fruta { String código; double acidez; int numsemillas; public boolean equals (Object o) { if (o == this) return true; if (o == null) return false; if (this.getclass()!= o.getclass()) return false; Fruta f = (Fruta) o; if (o.codigo == this.codigo this.codigo.equals(o.codigo)) return true; } public int hashcode() { return (int)acidez * 7 ^ 37 * numsemillas } }

120 El método compareto Único miembro de la interface Comparable. Cuando una clase implemente esta interface, estaremos indicando que sus objetos van a poder ser comparados y por lo tanto ordenados Implementar esta interface nos permite: Llamar a Collections.sort() y Collections.binarySearch() Llamar a Array.sort() y Array.binarySearch() Utilizar objetos como claves en los TreeMap Utilizar objetos como elementos en los TreeSet Devuelve un entero que será: -1 si el objeto en cuestión es menor que o. 1 si el objeto es mayor que o. 0 si ambos objetos son iguales Conviene que el método equals sea congruente con compareto para evitar errores con los iteradores

121 Interfaz Enumeration La clase se encuentra en el paquete util, así que para utilizarla hay que importar java.util.enumeration Define métodos útiles para recorrer una colección de objetos, pero los más importantes son: 1. public boolean hasmoreelements(). Indica si hay más elementos en la colección o si se ha llegado ya al final 2. public Object nextelement(). Devuelve el siguiente objeto de la colección Es muy similar a Iterator Lanza una NoSuchElementException si se llama y ya no hay más elementos Ejemplo: imprimir los elementos de un vector: for (Enumeration e = vec.elements(); e.hasmoreelements(); ) { } System.out.println(e.nextElement());

122 Índice Introducción a Java Sintaxis del lenguaje Clases y objetos Métodos y atributos static y final Herencia, clases abstractas, interfaces y polimorfismo Clases útiles de Java, Colecciones y estructuras de datos Excepciones y asertos Entrada/Salida Formularios (GUIs) Acceso a bases de datos con MySQL

123 Excepciones Java incorpora en el propio lenguaje la gestión de errores El mejor momento para detectar los errores es durante la compilación Pero Sólo los errores de sintaxis son detectados durante este periodo El resto de problemas surgen durante la ejecución de los programas Una Exception es un cierto tipo de error o una condición anormal que se ha producido durante la ejecución de un programa Algunas excepciones son fatales y provocan que se deba finalizar la ejecución del programa En este caso conviene terminar ordenadamente y dar un mensaje explicando el tipo de error que se ha producido Otras, como por ejemplo no encontrar un fichero en el que hay que leer o escribir algo, pueden ser recuperables En este caso el programa debe dar al usuario la oportunidad de corregir el ( fichero error (indicando una nueva localización del

124 Excepciones Un buen programa debe gestionar correctamente todas o la mayor parte de los errores que se pueden producir Hay dos estilos de hacer esto: 1. A la antigua usanza : los métodos devuelven un código de error. Este código se chequea en el entorno que ha llamado al método con una serie de if else if 2. Con soporte en el propio lenguaje: En este caso el propio lenguaje proporciona construcciones especiales para gestionar los errores o Exceptions Veremos Bloques y expresiones try, catch, throw, throws y finally Cuándo se deben lanzar excepciones, cuándo se deben capturar y cómo se crean las clases propias de tipo Exception

125 La clase ERROR La clase Error está relacionada con errores de compilación, del sistema o de la JVM Estos errores suelen ser irrecuperables y no dependen del programador ni debe preocuparse de capturarlos y tratarlo

126 La clase EXCEPTION La clase Exception tiene más interés Dentro de ella se puede distinguir: RuntimeException: Son excepciones muy frecuentes, normalmente relacionadas con errores de programación. Se pueden llamar excepciones implícitas Las demás clases derivadas de Exception son excepciones explícitas Java obliga a tenerlas en cuenta y chequear si se producen

127 La clase RuntimeEXCEPTION El caso de RuntimeException es un poco especial El propio Java durante la ejecución de un programa chequea y lanza automáticamente las excepciones que derivan de RuntimeException El programador no necesita establecer los bloques try/catch para controlar este tipo de excepciones Representan dos casos de errores de programación: Un error que normalmente no suele ser chequeado por el programador, como p.ej. recibir una referencia null en un método Un error que el programador debería haber chequeado al escribir el código, como sobrepasar el tamaño asignado de un array (genera un ( automáticamente ArrayIndexOutOfBoundsException En realidad sería posible comprobar estos tipos de errores, pero el código se complicaría excesivamente si se necesitara chequear continuamente todo tipo de errores (que las referencias son distintas de null, que todos los ( etcétera argumentos de los métodos son correctos, y un largo

128 Clases que heredan de Exception Las clases derivadas de Exception pueden pertenecer a distintos packages de Java Algunas perenecen a java.lang (Throwable, Exception, RuntimeException,...) otras a java.io (EOFException, FileNotFoundException,...) Por heredar de Throwable todos los tipos de excepciones pueden usar los métodos siguientes: 1. String getmessage() Extrae el mensaje asociado con la excepción 2. String tostring() Devuelve un String que describe la excepción 3. void printstacktrace() Indica el método donde se lanzó la excepción

129 Lanzando una excepción Necesario cuando en un método se produce una situación anómala El proceso de lanzamiento de una excepción es el siguiente: 1. Se crea un objeto Exception de la clase adecuada 2. Se lanza la excepción con la sentencia throw seguida del objeto Exception creado. // Código que lanza la excepción una vez detectado el error: MyException me = new MyException("MyException message"); throw me; Esta excepción deberá ser capturada (catch) y gestionada en el propio método o en algún otro lugar del programa

130 Lanzando una excepción Al lanzar una excepción el método termina de inmediato, sin devolver ningún valor Solamente en el caso de que el método incluya los bloques try/catch/finally ( existe se ejecutará el bloque catch que la captura o el bloque finally (si Todo método en el que se puede producir uno o más tipos de excepciones (y que no utiliza directamente los bloques try/catch/finally para tratarlos) debe declararlas en el encabezamiento de la función por medio de la palabra throws Si un método puede lanzar varias excepciones, se ponen detrás de throws separadas por comas, como por ejemplo: public void leerfichero(string fich) throws EOFException, FileNotFoundException { }

131 Lanzando una excepción Se puede poner únicamente una superclase de excepciones para indicar que se pueden lanzar excepciones de cualquiera de sus clases derivadas. El caso anterior sería equivalente a: public void leerfichero(string fich) throws IOException { } Las excepciones pueden ser lanzadas directamente por leerfichero() o por alguno de los métodos llamados por leerfichero(), ya que las clases EOFException y FileNotFoundException derivan de IOException Se recuerda que no hace falta avisar de que se pueden lanzar objetos de ( implícitas la clases Error o RuntimeException (excepciones

132 Capturando una excepción El programa no compilará mientras el usuario no haga una de estas dos cosas: Gestionar la excepción con una construcción del tipo: try { } catch { } Re-lanzar la excepción hacia un método anterior en el stack, declarando que su método también lanza dicha excepción, utilizando para ello la construcción throws en el header del método El compilador obliga a capturar las llamadas excepciones explícitas, pero no protesta si se captura y luego no se hace nada con ella En general, es conveniente por lo menos imprimir un mensaje indicando qué tipo de excepción se ha producido

133 Bloques try / catch / finally En el caso de las excepciones que no pertenecen a las RuntimeException y que Java obliga a tenerlas en cuenta habrá que utilizar los bloques try, catch y finally El código dentro del bloque try está vigilado Si se produce una situación anormal y se lanza por lo tanto una excepción, el control salta o sale del bloque try y pasa al bloque catch, que se hace cargo de la situación y decide lo que hay que hacer Se pueden incluir tantos bloques catch como sean necesarios, ya que cada uno tratará un tipo de excepción Las excepciones se pueden capturar individualmente o en grupo, por medio de una superclase de la que deriven todas ellas El bloque finally es opcional

134 Bloques try / catch / finally Ejemplo que presenta un método que debe "controlar" una IOException relacionada con la lectura ficheros y una MyException propia: void metodo1() { } try { // Código que puede lanzar las excepciones IOException y MyException } catch (IOException e1) { // Se ocupa de IOException simplemente dando aviso System.out.println(e1.getMessage()); } catch (MyException e2) { // Se ocupa de MyException dando un aviso y finalizando la función System.out.println(e2.getMessage()); return; } finally { } // Sentencias que se ejecutarán en cualquier caso

135 Relanzando excepciones En algunos casos un método puede generar una Exception y no se desea incluir en dicho método la gestión del error Java permite que este método pase o relance (throws) la Exception al método desde el que ha sido llamado, sin incluir en el método los bloques try/catch A su vez el método superior deberá incluir los bloques try/catch o volver a pasar la Exception De esta forma se puede ir pasando la Exception de un método a otro hasta () main llegar al último método del programa, el método void metodo2() throws IOException, MyException {... // Código que puede lanzar las excepciones IOException y MyException... } // Fin del metodo2

136 El bloque Finally en detalle El bloque finally {...} debe ir detrás de todos los bloques catch considerados y es opcional Si se incluye, las sentencias se ejecutan siempre, sea cual sea el tipo de excepción o incluso si no se produce ninguna El bloque finally se ejecuta incluso si dentro de los bloques try/catch hay una sentencia continue, break o return try { // Código vigilado que puede lanzar una excepción de tipo A, B o C } catch (A a1) { // Se ocupa de la excepción A } catch (B b1) { // Se ocupa de la excepción B } finally { // Sentencias que se ejecutarán en cualquier caso }

137 El bloque Finally en detalle El bloque finally es necesario en los casos en que se necesite recuperar o devolver a su situación original algunos elementos No se trata de liberar la memoria reservada con new ya que de ello se ocupará automáticamente el garbage collector Como ejemplo se podría pensar en un bloque try dentro del cual se abre un fichero para lectura y escritura de datos y se desea cerrar el fichero abierto El fichero abierto se debe cerrar tanto si produce una excepción como si no se produce, ya que dejar un fichero abierto puede provocar problemas posteriores

138 Asertos Cuando una variable toma un valor inesperado (erróneo en definitiva) las consecuencias se pueden apreciar inmediatamente o puede que el programa arrastre el error durante un tiempo antes que se aprecie un fallo de ejecución o entregue un resultado final equivocado La técnica de las aserciones consiste en sembrar el código de chequeos de integridad Esos chequeos pueden detectar el error si la condición introducida no toma el valor que se esperaba De esta forma evitamos que el error se prolongue hasta que falle el programa, ayudando notablemente a su detección Sintaxis de los asertos: Ejemplo: assert expresión [: mensaje]; assert numerousuarios<1000: El número de usuarios es superior a 1000 El aserto parará la ejecución del programa si la expresión es falsa

139 Asertos Los asertos están pensados para la comprobación de invariantes (condiciones que se cumplen siempre en un determinado trozo de código), por lo que tienen mas interés en la etapa de desarrollo Por esto se puede desactivar y activar la comprobación de los asertos. Por defecto la comprobación de los asertos esta desactivada y se proporcionan dos opciones para el intérprete del JDK (java). java -enableassertions // para activar la comprobación java -disableassertions // para desactivar la comprobación

140 Índice Introducción a Java Sintaxis del lenguaje Clases y objetos Métodos y atributos static y final Herencia, clases abstractas, interfaces y polimorfismo Clases útiles de Java, Colecciones y estructuras de datos Excepciones y asertos Entrada/Salida Formularios (GUIs) Acceso a bases de datos con MySQL

141 Streams La manera de representar las entradas y salidas de datos en Java es la base de streams (flujos de datos) Un stream es una conexión entre el programa y la fuente o destino de los datos. La información se traslada en serie (un carácter a continuación de otro) a través de esta conexión Esto da lugar a una forma general de representar muchos tipos de comunicaciones Por ejemplo, cuando se quiere imprimir algo en pantalla, se hace a través de un stream que conecta el monitor al programa. Se da a ese stream la orden de escribir algo y éste lo traslada a la pantalla Este concepto es suficientemente general para representar la lectura/escritura de archivos, la comunicación a través de Internet o la lectura de la información de un sensor a través del puerto en serie

142 Clases de lectura/escritura de datos El package java.io contiene las clases necesarias para la comunicación del programa con el exterior y viceversa Dentro de este package existen dos familias de jerarquías distintas para la entrada/salida de datos. La diferencia principal consiste en que una opera con bytes y la otra con caracteres y después en función de si es escritura o lectura Las que operan a nivel del bytes son InputStream y OutputStream, y no se suelen utilizar directamente, como veremos más adelante Las que operan a nivel de caracteres son Reader y Writer, que son más prácticas en las aplicaciones en las que se maneja texto Aún así el proceso siempre es el mismo Abrir Leer/Escribir Cerrar (Siempre se debe de cerrar para evitar problemas posteriores)

143 Jerarquía de lectura/escritura de caracteres

144 Jerarquía de lectura/escritura de bytes

145 Jerarquía de lectura/escritura Las clases que tienen el borde verde son las que indican el tipo de origen o destino de la información y las demás indican la forma de acceso Se han de combinar para obtener el comportamiento deseado Por ejemplo: BufferedReader in = new BufferedReader( new FileReader( fichero.txt"));

146 InputStreamReader y OutputStreamReader Se comportan como puentes entre los dos tipos de clases: InputStreamReader: Lee Bytes y devuelve caracteres OutputStreamReader: Le damos caracteres y escribe Bytes Se suelen utilizar en la lectura/escritura por teclado. Por ejemplo: BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); InputStreamReader lee los bytes proporcionados por System.in y los transforma en caracteres System.in es una clase de InputStream que obtiene los bytes leídos de teclado y los devuelve Así a través de la declaración anterior, podemos leer las pulsaciones de teclado y por ejemplo mostrarlas por pantalla a través de System.out, que recibe los caracteres y los muestra por pantalla String leido = br.readline(); System.out.println( Leido de teclado: + leido);

147 La clase File Para tener acceso a ficheros se utiliza la clase File. Por ejemplo: File fichero = new File( fichero.txt ); FileReader fr = new FileReader(fichero); Aunque también se puede acceder a ellos sin crear el objeto de File: FileReader fr1 = new FileReader( fichero.txt"); Un objeto de la clase File puede representar un archivo o un directorio y tiene los siguientes constructores: File(String name) File(String dir, String name) File(File dir, String name) Se puede dar el nombre de un archivo, el nombre y el directorio, o sólo el directorio, como path absoluto y como path relativo al directorio actual File f1 = new File("c:\\windows\\notepad.exe"); // La barra '\' se escribe '\\ File f2 = new File("c:\\windows"); // Un directorio File f3 = new File(f2, "notepad.exe");

148 La clase File Para los archivos Métodos Función que realizan boolean isfile() true si el archivo existe long length() tamaño del archivo en bytes long lastmodified() fecha de la última modificación boolean canread() true si se puede leer boolean canwrite() true si se puede escribir delete() borrar el archivo RenameTo(File) cambiar el nombre Para los directorios Métodos Función que realizan boolean isdirectory() true si existe el directorio mkdir() crear el directorio delete() borrar el directorio String[] list() devuelve los archivos que se encuentran en el directorio

149 Lectura de ficheros de texto Como vamos a trabajar con caracteres, utilizamos la clase FileReader Se puede crear un objeto BufferedReader para leer de un archivo de texto de la siguiente manera: BufferedReader br = new BufferedReader(new FileReader("archivo.txt")); Utilizando el objeto de tipo BufferedReader se puede conseguir exactamente lo mismo que en las secciones anteriores utilizando el método readline() En el caso de archivos es muy importante utilizar el buffer puesto que la tarea de escribir en disco es muy lenta respecto a los procesos del programa y realizar las operaciones de lectura de golpe y no de una en una hace mucho más eficiente el acceso

150 Lectura de ficheros de texto String texto = new String(); try { FileReader fr = new FileReader("archivo.txt"); entrada = new BufferedReader(fr); String s; while((s = entrada.readline())!= null) texto += s; entrada.close(); } catch (java.io.filenotfoundexception fnfex) { System.out.println("Archivo no encontrado: " + fnfex); } catch (java.io.ioexception ioex) { System.out.println( Algo falló con el fichero! ); }

151 Escritura de ficheros de texto La clase PrintWriter es la más útil en este sentido, ya que posee los métodos print() y println(), idénticos a los de System.out Un objeto PrintWriter se puede crear a partir de un BufferedWriter (para disponer de buffer), que se crea a partir del FileWriter al que se la pasa el nombre del archivo o todo en una línea FileWriter fw = new FileWriter( fichero.txt"); BufferedWriter bw = new BufferedWriter(fw); PrintWriter salida = new PrintWriter(bw); Después, escribir en el archivo es tan fácil como en pantalla, sólo que ahora hay que cerrar el flujo salida.println("hola, soy la primera línea"); salida.close(); Si quisieramos escribir en el fichero a continuación de lo que hay escrito, en vez de desde el principio que es lo que hace por defecto, deberemos de añadir un true como segundo parámetro al FileWriter

152 Escritura de ficheros de texto try { FileWriter fw = new FileWriter("escribeme.txt"); BufferedWriter bw = new BufferedWriter(fw); PrintWriter salida = new PrintWriter(bw); salida.println("hola, soy la primera línea"); salida.close(); // Modo append bw = new BufferedWriter(new FileWriter("escribeme.txt",true)); salida = new PrintWriter(bw); salida.print("y yo soy la segunda. "); double b = ; salida.println(b); salida.close(); } catch(java.io.ioexception ioex) { }

153 La Clase Scanner A partir de la versión Java 5, podemos utilizar la clase Scanner que simplifica bastante el acceso a los streams Scanner fichero = new Scanner(new File( datos.txt )); Parecido a la lectura por teclado: Scanner teclado = new Scanner(System.in); Esta clase nos proporciona métodos para leer distintos tipos de datos y así evitar hacer las conversiones de tipos: nextint(), nextfloat(), También proporciona métodos para detectar el final de los archivos: hasnextline(), hasnextint(), Ejemplo de lectura de un fichero de texto con números enteros (Si cambiamos Int por Line leemos el fichero por líneas): Scanner fichero = new Scanner(new File("datos.txt")); int numero; while (fichero.hasnextint()) { } numero = fichero.nextint(); System.out.println(numero);

154 La Clase Scanner Lectura de líneas con datos de distintos tipos: Scanner fichero = new Scanner(new File("datos.txt")); String linea; while (fichero.hasnextline()) { nombre = fichero.next(); idcuenta = fichero.nextint(); saldo = fichero.nextfloat(); ;( saldo, idcuenta, Cuenta(nombrenew // // }

155 La Clase Scanner En el siguiente ejemplo se muestra como leer líneas de un archivo de texto en cada una de las cuales hay tres datos, nombre, id y saldo, separados por comas Scanner s = new Scanner(new File("datos.txt"); while (s.hasnextline()) { } String linea = s.nextline(); Scanner procesalinea = new Scanner(linea); procesalinea.usedelimiter("\\s*,\\s*"); while (procesalinea.hasnext()){ } System.out.println("He leido: " + procesalinea.next());

156 Lectura/Escritura en archivos que no son de texto DataInputStream y DataOutputStream son clases de Java 1.0 que no han sido alteradas hasta ahora Para leer y escribir datos primitivos directamente (sin convertir a/de String) siguen siendo más útiles estas dos clases Son clases diseñadas para trabajar de manera conjunta. Una puede leer lo que la otra escribe, que en sí no es algo legible, sino el dato como una secuencia de bytes Por ello se utilizan para almacenar datos de manera independiente de la ( distintos plataforma (o para mandarlos por una red entre ordenadores muy El problema es que obligan a utilizar clases que descienden de InputStream y OutputStream y por lo tanto algo más complicadas de utilizar

157 Lectura/Escritura en archivos que no son de texto El siguiente código primero escribe en el fichero prueba.dat para después leer los datos escritos: // Escritura de una variable double DataOutputStream dos = new DataOutputStream( new BufferedOutputStream( new FileOutputStream("prueba.dat"))); double d1 = 17/7; dos.writedouble(d); dos.close(); // Lectura de la variable double DataInputStream dis = new DataInputStream( new BufferedInputStream( new FileInputStream("prueba.dat"))); double d2 = dis.readdouble();

158 Índice Introducción a Java Sintaxis del lenguaje Clases y objetos Métodos y atributos static y final Herencia, clases abstractas, interfaces y polimorfismo Clases útiles de Java, Colecciones y estructuras de datos Excepciones y asertos Entrada/Salida Formularios (GUIs) Acceso a bases de datos con MySQL

159 GUIs Existen dos conjuntos basicos de componentes para crear aplicaciones graficas o GUIs: AWT ó Abstract Window Toolkit Swing Swing es un conjunto de clases desarrolladas por primera vez para Java 1.2 (el llamado Java2), para mejorar el anterior paquete que implementaba clases para fabricar interfaces de usuario, AWT Tanto Swing como AWT forman parte de una colección de clases llamada JFC (Java Foundation Classes) que incluyen paquetes dedicados a la programación de interfaces gráficos (así como a la producción multimedia) Uno de los problemas frecuentes de la programación clásica era como programar interfaces de usuario, ya que esto implicaba tener que utilizar las API propias del Sistema Operativo y esto provocaba que el código no fuera portable AWT fue la primera solución a este problema propuesta por Java. AWT está formada por un conjunto de clases que no dependen del sistema operativo, pero que proponen una serie de clases para la programación de GUIs

160 GUIs AWT usa clases gráficas comunes a todos los sistemas operativos gráficos y luego la máquina virtual traduce esa clase a la forma que tenga en el sistema concreto en el que se ejecutó el programa La clave de AWT era el uso de componentes iguales (peers). Los elementos de los interfaces AWT dejaban al sistema la responsabilidad Eso aseguraba una vista coherente respecto al sistema pero ante la grandiosidad de la imagen en Windows y Mac OS, otros sistemas quedaban peor ante la misma aplicación Por ello (y por otros problemas) aparece Swing en la versión 1.2 como parte del JFC (Java Foundation Classes) Los problemas de AWT eran: Problemas de compatibilidad en varios sistemas. Le faltaban algunos componentes avanzados (árboles, tablas,...). Consumía excesivos recursos del sistema. Swing aporta muchas más clases, consume menos recursos y construye mejor la apariencia de los programas. En cualquier caso, AWT no desaparece

161 GUIs: AWT Podemos realizar aplicaciones solas o applets Dependen del sistema nativo para manejar su funcionalidad, es decir, dependen del SO y de la implementación que tenga Se les conoce como componentes pesados Características: Disponen de un gran conjunto de componentes de interfaz de usuario Ofrecen un robusto modelo de manejo de eventos Herramientas graficas y de imagen, incluyendo forma, color y tipo de letra Manejadores de Layout, para un manejo de ventanas flexible que no dependan de un tamaño o resolucion especifico Clases de transferencia de datos, para copiar y pegar a traves de el clipboard de la plataforma en donde ejecutamos nuestra aplicación

162 GUIs: AWT Pros: Velocidad: El usar el sistema nativo como base hace que el desempeño de los componente sea mas rapido Portabilidad de applets: Casi todos los navegadores soportan las clases de AWT, asi que applets contruidos con AWT puede ejecutarse sin necesidad del pluin de java Apariencia: Los componentes AWT se parecen mas al sistema en el que se estan ejecutando Contras: Portabilidad: El uso del sistema en el que se ejecutan los componentes AWT crea algunas limitaciones. Algunos componentes pueden no funcionar en todas las plataformas Los grandes creadores de componentes se han inclinado por el desarrollo de componentes Swing y no AWT, esto hace que el conjunto de componentes AWT mas pequño Los componentes AWT no soportan caracteristicas como iconos y tooltips

163 GUIs: Swing Estan construidos sobre la tecnologia AWT Proveen de apariencia de acuerdo al sistema donde se ejecuta la aplicacion Esta completamente implementada en java Estos componentes no dependen del sistema donde se ejecuta para manejar su fincionalidad Características: Se les conoce como componentes ligeros Tiene todas las caracteristicas de AWT Versiones del conjunto de componentes 100% en java. Una gran conjunto de componentes de alto nivel ( vista de arbol, caja de lista, etc) Diseño de java puro Apariencia modificable

164 GUIs: Swing Pros: Portabilidad: Debido a que los componentes de swing estan hechos solo con java, estos funcionan en casi todos las plataformas Comportamiento: Permiten un rango de comportamiento mas amplio ya que no estan limitados a los sistemas en los que se ejecutan. Características: Soporta el uso de iconos y de tool-tips Soporte: Sun hace un gran esfuerzo para hacer Swing mas robusto Apariencia. Los componentes de swing automáticamente pueden tomar la apariencia de cualquier plataforma. Contras: Portabilidad de Applets: La mayoria de los navegadores no incluyen las clases de Swing, así que se debe de instalar un plugin de java; para que funcionen los applets con Swing Desempeño: Los componentes Swing son generalmente mas lentos y con mas problemas que AWT.

165 Componentes de los GUIs Los componentes son los elementos básicos de la programación con Swing. Todo lo que se ve en un GUI de Java es un componente Los componentes se colocan en otros elementos llamados contenedores que sirven para agrupar componentes La clase javax.swing.jcomponent es la clase padre de todos los componentes. A su vez, JComponent desciende de java.awt.container y ésta de java.awt.component. De esto se deduce que Swing es una extensión de AWT, de hecho su estructura es análoga Veámoslo en un gráfico

166 Componentes de los GUIs Los componentes son los elementos básicos de la programación con Swing. Todo lo que se ve en un GUI de Java es un componente Los componentes se colocan en otros elementos llamados contenedores que sirven para agrupar componentes La clase javax.swing.jcomponent es la clase padre de todos los componentes. A su vez, JComponent desciende de java.awt.container y ésta de java.awt.component. De esto se deduce que Swing es una extensión de AWT, de hecho su estructura es análoga Veámoslo en un gráfico

167 Componentes de los GUIs

168 Componentes de los GUIs

169 Métodos de JComponent La clase JComponent es abstracta (no se puede instanciar), pero si es la superclase de todos los componentes visuales (botones, listas, paneles, applets,...) y por ello la lista de métodos es interminable, ya que proporciona la funcionalidad de todos los componentes Además puesto que deriva de Component y Container tiene los métodos de estos, por ello aún es más grande esta lista Veamos algunos que controlan el aspecto pero también los hay para dibujar, activar/desactivar componentes, enfoque

170 Métodos de JComponent

171 Métodos de JComponent

172 Contenedores Son un tipo de componentes pensados para almacenar y manejar otros componentes. Los objetos JComponent pueden ser contenedores al ser una clase que desciende de Container (clase de los objetos contenedores de AWT) Para hacer que un componente forme parte de un contenedor o eliminarlo, se utiliza el método add o remove (ambos métodos proceden de la clase java.awt.container) Swing posee algunos contenedores especiales. Algunos son: JWindow. Representa un panel de ventana sin bordes ni elementos visibles JFrame. Objeto que representa una ventana típica con bordes, botones de cerrar, etc JPanel. Es la clase utilizada como contenedor genérico para agrupar componentes JDialog. Clase que genera un cuadro de diálogo JApplet. Contenedor que agrupa componentes que serán mostrados en un navegador

173 Contenedores Los principales métodos para obtener desde un contenedor información de los componentes son:

174 Contenedores Los principales métodos para obtener desde un contenedor información de los componentes son:

175 Contenedores: JFrame Los contenedores JFrame son ventanas completas. Constructores disponibles

176 Contenedores: JFrame Y algunos métodos

177 Contenedores: JFrame Y algunos métodos

178 Contenedores: JDialog JDialog deriva de la clase AWT Dialog. Representa un cuadro de diálogo que es una ventana especializada para realizar ciertas operaciones complejas Los constructores disponibles son

179 Contenedores: JDialog De todos sus métodos los más interesantes son

180 JDialog + JFrame: Añadir componentes a ventanas Las clases JDialog y JFrame no permiten usar el método add, como les ocurre a los contenedores normales, por eso se utiliza el método getcontentpane() que devuelve un objeto Container que representa el área visible de la ventana A este contenedor se le llama panel contenedor y sí permite método add public class prbventana { } public static void main(string args[]){ JFrame ventana=new JFrame( Prueba ); ventana.setlocation(100,100); Container c=ventana.getcontentpane(); c.add(new JLabel( Hola )); ventana.pack(); ventana.setvisible(true);

181 Eventos En términos de Java, un evento es un objeto que es lanzado por un objeto y enviado a otro objeto llamado escuchador (listener) Un evento se lanza cuando ocurre una determinada situación (un clic de ratón, una pulsación de tecla,...) La programación de eventos es una de las bases de Java y permite mecanismos de diseño de programas orientados a las acciones del usuario. En la captura de eventos hay que tener en cuenta que hay tres objetos implicados: El objeto fuente. Que es el objeto que lanza los eventos. Dependiendo del tipo de objeto que sea, puede lanzar unos métodos u otros Por ejemplo un objeto de tipo JLabel (etiqueta) puede lanzar eventos de ratón (MouseEvent) pero no de teclado (KeyEvent) El hecho de que dispare esos eventos no significa que el programa tenga que, necesariamente, realizar una acción. Sólo se ejecuta una acción si hay un objeto escuchando

182 Eventos El objeto escuchador u oyente (listener). Se trata del objeto que recibe el evento producido y ejecuta el código asociado al evento El objeto de evento. Se trata del objeto que es enviado desde el objeto fuente a el escuchador. Según el tipo de evento que se haya producido se ejecutará uno u otro método en el escuchador.

183 Listeners (escuchadores de eventos) Cada tipo de evento tiene asociado un interfaz para manejar el evento A esos interfaces se les llama escuchadores (Listeners) ya que proporcionan métodos que están a la espera de que el evento se produzca Cuando el evento es disparado por el objeto fuente al que se estaba escuchando, el método manejador del evento se dispara automáticamente Por ejemplo, el método actionperformed es el encargado de gestionar eventos del tipo ActionEvent (por ejemplo, pulsación de ratón). Este método está implementado en la interfaz ActionListener (implementa escuchadores de eventos de acción) El código de ese método será invocado automáticamente cuando el objeto fuente produzca un evento de acción

184 Listeners (escuchadores de eventos) Es decir, hay tres actores fundamentales en el escuchador de eventos: El objeto de evento que se dispara cuando ocurre un suceso. Por ejemplo para capturar el ratón sería MouseEvent. El método o métodos de captura del evento (que se lanza cuando el evento se produce). Pueden ser varios, por ejemplo para la captura de eventos de tipo MouseEvent (evento de ratón) existen los métodos mousereleased (que es invocado cuando se libera un botón del ratón), mousepressed (es invocado cuando se pulsa un botón del ratón), etc. La interfaz que tiene que estar implementada en la clase que desea capturar ese evento. En este ejemplo sería MouseListener, que es la que obliga a la clase del escuchador a implementar los métodos de gestión comentados anteriormente Sin duda, el más complejo es este último, pero hay que entender que una interfaz lo único que consigue es dar a una clase la facultad de escuchar (Listen) eventos

185 Listeners (escuchadores de eventos)

186 Fuentes de eventos El objeto fuente permite que un objeto tenga capacidad de enviar eventos Esto se consigue mediante un método que comienza por la palabra add seguida por el nombre de la interfaz que captura este tipo de eventos Este método recibe como parámetro el objeto escuchador de los eventos Para que un objeto fuente, sea escuchado, hay que indicar quién será el objeto que escuche Cualquier componente puede lanzar eventos, sólo hay que indicárselo, y eso es lo que hace el método add. Ejemplo: public class MiVentana extends JFrame implements ActionListener{ } JButton boton1=new JButton( Prueba ); public MiVentana() { } boton1.addactionlistener(this); //El botón lanza eventos que son capturados por la //ventana public void actionperformed(actionevent e){ } //Manejo del evento

187 Fuentes de eventos En el ejemplo anterior se habilita al boton1 para que lance eventos mediante el método addactionlistener Este método requiere un objeto escuchador que, en este caso, será la ventana en la que está el botón. Esta ventana tiene que implementar la interfaz ActionListener para poder escuchar eventos (de hecho el método addactionlistener sólo permite objetos de esta interfaz) Cuando se haga clic con el ratón se llamará al método actionperformed de la ventana, que es el método de gestión. Hay que señalar que una misma fuente puede tener varios objetos escuchando los eventos (si lanza varios métodos add) Si hay demasiados objetos escuchando eventos, se produce una excepción del tipo TooManyListenersException Para eliminar listeners se haría con un método con la misma nomenclatura que add, pero usando remove

188 Objeto de evento Todos los objetos de evento pertenecen a clases que derivan de EventObject (superclase de todos los objetos de evento) Representa un evento genérico y en la práctica sólo sirve para definir los métodos comunes a todos los eventos que son:

189 Objeto de evento Jerarquía de eventos:

190 Objeto de evento AWTEvent Se trata de una clase descendiente de EventObject y padre de todos los eventos para componentes Swing y AWT. Se encuentra en el paquete java.awt.event. Proporciona métodos comunes para todas sus clases hijas. Estos son (además de los ya comentados getsource y tostring):

191 Objeto de evento InputEvent es una de las clases de eventos fundamentales, deriva de ComponentEvent. Hay varios tipos de evento que derivan de éste. Se trata de los eventos KeyEvent y MouseEvent. La clase InputEvent viene con unas serie de indicadores que permiten determinar qué teclas y/o botones de ratón estaban pulsados en el momento del evento. El método getmodifiers devuelve un entero que permite enmascarar con esas constantes para determinar las teclas y botones pulsados. Este enmascaramiento se realiza con el operador lógico AND (&) en esta forma: public void mousereleased(mouseevent e){ int valor=e.getmodifiers(); if((valor & InputEvent.SHIFT_MASK)!=0){ //La tecla Mayúsculas (Shift) se pulsó con el //ratón

192 Objeto de evento Constantes de máscaras predefinidas en la clase InputEvent: SHIFT_MASK, ALT_MASK, ALT_GRAPH_MASK, BUTTON1_MASK, BUTTON2_MASK, BUTTON3_MASK También se pueden utilizar los métodos isshiftdown (mayúsculas pulsada), isaltdown (Alt pulsada), isaltgraphdown (Alt Graph pulsada) o iscontroldown (tecla control) Todos devuelven true si la tecla en cuestión está pulsada La lista completa de métodos de esta clase es:

193 Objeto de evento

194 Adapters Para facilitar la gestión de eventos en ciertos casos, Java dispone de las llamadas clases adaptadores En muchos casos evitan tener que crear clases sólo para escuchar eventos. Estas clases son clases de contenido vacío pero que son muy interesantes para capturas sencillas de eventos import javax.swing.*; import java.awt.*; public class HolaMundoSwing { } public static void main(string[] args) { } JFrame frame = new JFrame("HolaMundoSwing"); JLabel label = new JLabel("Hola Mundo"); frame.getcontentpane().add(label); frame.addwindowlistener(new WindowAdapter(){ ); } frame.setvisible(true); public void windowclosing(windowevent e){ System.exit(0); }

195 JOptionPane: Mensajes hacia el usuario La clase JOptionPane deriva de JComponent y es la encargada de crear ventanas de diálogo e informativas Aunque posee constructores, normalmente se utilizan mucho más una serie de métodos estáticos que permiten crear de forma más sencilla objetos JOptionPane Disponemos de: Cuadros de información: Usados para informar al usuario de un determinado hecho Cuadros de diálogo: Usados para informar al usuario de un determinado hecho, como los de información, pero requiere confirmación por el mismo para saber si declina o acepta la información Cuadros de diálogo con entrada del usuario

196 JOptionPane: Mensajes hacia el usuario Cuadros de información: Métodos estáticos Por ejemplo:, Titulo, Mensaje, JOptionPane.showMessageDialog(this JOptionPane.INFORMATION_MESSAGE);

197 JOptionPane: Mensajes hacia el usuario Cuadros de diálogo: Métodos estáticos Por ejemplo: int res= JOptionPane.showConfirmDialog(null, Desea salir?, Salir, JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE); if (res==joptionpane.yes_option) System.exit(0);

198 JOptionPane: Mensajes hacia el usuario Cuadros de diálogo con entrada: Métodos estáticos Por ejemplo: String res = JOptionPane.showInputDialog("Escriba su nombre"); if (res == null) ;( escribió JOptionPane.showMessageDialog(this, "No else nombre = res;

199 Índice Introducción a Java Sintaxis del lenguaje Clases y objetos Métodos y atributos static y final Herencia, clases abstractas, interfaces y polimorfismo Clases útiles de Java, Colecciones y estructuras de datos Excepciones y asertos Entrada/Salida Formularios (GUIs) Acceso a bases de datos con JDBC

200 JDBC JDBC (Java DataBase Connectivity) es un API de Java que permite al programador ejecutar instrucciones en lenguaje estándar de acceso a Bases de Datos, SQL (Structured Query Language, lenguaje estructurado de consultas) SQL es un lenguaje de muy alto nivel que permite crear, examinar, manipular y gestionar Bases de Datos relacionales Para que una aplicación pueda hacer operaciones en una Base de Datos, ha de tener una conexión con ella, que se establece a través de un driver, que convierte el lenguaje de alto nivel a sentencias de Base de Datos. Las tres acciones principales que realizará JDBC son: Establecer la conexión a una base de datos, ya sea remota o no; Enviar sentencias SQL a esa base de datos y, Procesar los resultados obtenidos de la base de datos

201 JDBC Otra definición JDBC es una especificación de un conjunto de clases y métodos que permiten a cualquier programa Java acceder a distintos sistemas de bases de datos de forma homogénea La aplicación de Java debe tener acceso a un driver JDBC adecuado. Este driver es el que implementa la funcionalidad de todas las clases de acceso a datos y proporciona la comunicación entre el API JDBC y la base de datos real

202 JDBC El API JDBC soporta dos modelos diferentes de acceso a Bases de Datos: Modelo de dos capas: Este modelo se basa en que la conexión entre la aplicación Java se realiza directamente a la base de datos Esto significa que el driver JDBC específico para conectarse con la base de datos, debe residir en el sistema local, aunque La base de datos puede estar en cualquier otra máquina y se accede a ella mediante la red Esta es la configuración de típica Cliente/Servidor Modelo de tres capas En este modelo de acceso a las bases de datos, las instrucciones son enviadas a una capa intermedia entre Cliente y Servidor En este caso el usuario no tiene contacto directo, ni a través de la red, con la máquina donde reside la base de datos, lo que supone que no debe instalar ningún driver

203 JDBC Modelo de dos capas:

204 JDBC Modelo de tres capas

205 JDBC JDBC define ocho interfaces para operaciones con bases de datos, de las que se derivan las clases correspondientes

206 JDBC La clase que se encarga de cargar inicialmente todos los drivers JDBC disponibles es DriverManager Una aplicación puede utilizar DriverManager para obtener un objeto de tipo conexión, Connection, con una base de datos La conexión se especifica siguiendo una sintaxis basada en la especificación más amplia de los URL, de la forma: jdbc:subprotocolo//servidor:puerto/base de datos Por ejemplo, si se utiliza MySQL el nombre del subprotocolo será MySQL En algunas ocasiones es necesario identificar aún más el protocolo. Por ejemplo, si se usa el puente JDBC-ODBC no es suficiente con jdbc:odbc, ya que pueden existir múltiples drivers ODBC, y en este caso, hay que especificar aún más, mediante jdbc:odbc:fuente de datos Una vez que se tiene un objeto de tipo Connection, se pueden crear sentencias, statements, ejecutables Cada una de estas sentencias puede devolver cero o más resultados, que se devuelven como objetos de tipo ResultSet

207 JDBC La clases con su definición son: Driver: Permite conectarse a una base de datos: cada gestor de base de datos requiere un driver distinto DriverManager: Permite gestionar todos los drivers instalados en el sistema DriverPropertyInfo: Proporciona diversa información acerca de un driver Connection: Representa una conexión con una base de datos. Una aplicación puede tener más de una conexión a más de una base de datos DatabaseMetadata: Proporciona información acerca de una Base de Datos, como las tablas que contiene, etc. Statement: Permite ejecutar sentencias SQL sin parámetros PreparedStatement: Permite ejecutar sentencias SQL con parámetros de entrada ResultSet: Contiene las filas o registros obtenidos al ejecutar un SELECT

208 JDBC El siguiente diagrama relaciona las cuatro clases principales que va a usar cualquier programa Java con JDBC, y representa el esqueleto de cualquiera de los programas que se desarrollan para atacar a bases de datos:

209 JDBC: Ejemplo import java.sql.*; class EjemploConexion { static public void main( String[] args ) { Connection conexion; Statement sentencia; ResultSet resultado; System.out.println( "Iniciando programa." ); // Se carga el driver JDBC-ODBC try { Class.forName( "sun.jdbc.odbc.jdbcodbcdriver" ); } catch( Exception e ) { System.out.println( "No se pudo cargar el JDBC" ); return; }

210 JDBC: Ejemplo } // Se establece la conexión con la base de datos try { conexion = DriverManager.getConnection("jdbc:odbc:Tutorial","","" ); sentencia = conexion.createstatement(); try { // Se elimina la tabla en caso de que ya existiese sentencia.execute( "DROP TABLE AGENDA" ); } catch( SQLException e ) {}; // Esto es código SQL sentencia.execute( "CREATE TABLE AMIGOS ("+ " NOMBRE VARCHAR(15) NOT NULL, " + " APELLIDOS VARCHAR(30) NOT NULL, " + " CUMPLE DATETIME) " ); sentencia.execute( "INSERT INTO AMIGOS "+"VALUES('JOSE','GONZALEZ','03/15/1973')" ); sentencia.execute( "INSERT INTO AMIGOS " + "VALUES('PEDRO','GOMEZ','08/15/1961')" ); } catch( Exception e ) { System.out.println( e ); return; } System.out.println( "Creacion finalizada." );

211 JDBC: Ejemplo En teoría, las líneas que cargan el driver no son necesarias, ya que DriverManager se debería de encargar de leer todos los drivers JDBC compatibles, pero no siempre ocurre así, por lo que es mejor asegurarse A continuación, se solicita a DriverManager que proporcione una conexión para una fuente de datos. El parámetro jdbc:odbc:tutorial especifica que la intención es acceder a la fuente de datos con nombre Tutorial El segundo y tercer parámetro son el nombre del usuario y la clave con la cual se intentará la conexión conexion = DriverManager.getConnection("jdbc:odbc:Tutorial","","" ); Inmediatamente después de obtener la conexión, en la siguiente línea sentencia = conexion.createstatement(); se solicita que proporcione un objeto de tipo Statement para poder ejecutar sentencias a través de esa conexión. Para ello se dispone de los métodos execute(string sentencia) para ejecutar una petición SQL que no devuelve datos o executequery(string sentencia) para ejecutar una consulta SQL. Este último método devuelve un objeto de tipo ResultSet.

212 JDBC: Ejemplo Una vez que se tiene el objeto Statement ya se pueden lanzar consultas y ejecutar sentencias contra el servidor En la línea: sentencia.execute( "DROP TABLE AMIGOS" ); se ejecuta DROP TABLE AMIGOS para borrar cualquier tabla existente anteriormente. Como es posible que la tabla AMIGOS no exista dará como resultado una excepción y por ello se se aísla la sentencia.execute() mediante un try y un catch Las líneas siguientes, crean la tabla en la base de datos e insertan información Para obtener información y recorrerla, usaremos algo como: ResultSet resultado = sentencia.executequery( "SELECT * FROM AMIGOS" ); while( resultado.next() ) { String nombre = resultado.getstring( "NOMBRE" ); String cumple = resultado.getstring( "CUMPLE" ); System.out.println( "D. " + nombre + ", cumple años el " + cumple ); }

213 JDBC: Ejemplo Tras obtener el ResultSet con los resultados devueltos por executequery, se utilizan los métodos getxxx() para obtener acceso a las columnas El acceso se puede hacer por el nombre de columna o su posición en tabla Además de getstring() están disponibles getboolean(), getbyte(), getdouble(), getfloat(), getint(), getlong(), getnumeric(), getobject(), getshort(), getdate(), gettime() y getunicodestream() Después de haber trabajado con una sentencia o una conexión es recomendable cerrarla mediante sentencia.close() o conexión.close() De forma predeterminada los drivers JDBC deben hacer un COMMIT de cada sentencia, lo que quiere decir, que la información se actualiza al momento

214 JDBC: Resumen En general pues, los objetos que se van a poder encontrar en una aplicación son: Connection: Representa la conexión con la base de datos. Es el objeto que permite realizar las consultas SQL y obtener los resultados de dichas consultas. Es el objeto base para la creación de los objetos de acceso a la base de datos DriverManager: Encargado de mantener los drivers que están disponibles en una aplicación concreta. Es el objeto que mantiene las funciones de administración de las operaciones que se realizan con la base de datos Statement: Se utiliza para enviar las sentencias SQL simples, aquellas que no necesitan parámetros, a la base de datos PreparedStatement: Tiene una relación de herencia con el objeto Statement, añadiéndole la funcionalidad de poder utilizar parámetros de entrada ResultSet: Contiene la tabla resultado de la pregunta SQL que se haya realizado. En párrafos anteriores se han comentado los métodos que proporciona este objeto para recorrer dicha tabla

215 JDBC: Tipos SQL en Java Correspondencia Java -> SQL

216 JDBC: Tipos SQL en Java Correspondencia SQL -> Java

217 JDBC: Elementos necesarios para trabajar con mysql A continuación se describen los elementos necesarios para trabajar con mysql desde Java: El sistema de bases de datos mysql El conector para enlazar Java con MySQL Utilidades para trabajar con MySQL y crear y modificar bases de datos y tablas desde un entorno gráfico Descargar el driver de mysql (conector) de la siguiente página: Descargar el sistema de bases de datos mysql de la siguiente url: Descargar el Mysql Workbench de la siguiente página:

218 MySQL WorkBench GUI Una vez instalado MySql, accedemos a MySql Query Browser y nos ( vacío logeamos(por defecto Username: root y Password

219 MySQL WorkBench GUI En la parte derecha, podemos ver un listado con todos los schemas que tenemos creados. Haciendo click con el botón derecho en cualqier sitio de esa zona, elegimos New Schema y le damos nombre (por ejemplo: basedatos_tutorias)

220 MySQL WorkBench GUI Pulsando sobre el schema que acabamos de crear, con el botón derecho, elegimos Create Table y rellenamos sus campos.

221 MySQL WorkBench GUI En la parte superior del MySql Query Browser hay un espacio desde donde podemos ejecutar sentencias SQL sobre nuestras BBDD. Insertamos datos en nuestra tabla profesores

222 MySQL WorkBench GUI Si clickeamos dos veces sobre una tabla y después pulsamos el botón Execute, el Query Browser nos muestra el listado de los datos introducidos hasta el momento Si queremos editar/borrar alguno de ellos, pulsaremos sobre el enlace Start Editing en la parte inferior. Realizamos los cambios necesarios y después pulsamos Apply Changes para guardarlos o Discard Changes para deshecharlos.

223 MySQL WorkBench GUI

224 MySQL WorkBench GUI Junto con MySql Query Browser, se nos instala otra herramienta MySql Administrator, que proporciona multitud de opciones de administración

225 MySQL WorkBench GUI En la opción Catalogs, se nos muestra la lista de schemas que tenemos creados y si seleccionamos uno, en la parte derecha se muestran sus tablas, desde donde también podemos crearlas y editarlas Desde el Mysql Administrator se puede realizar cualquier acción relacionada con la administración de nuestras BBDD. Una de las más comunes, es realizar un copia de seguridad de alguna de ellas. Para ello seleccionamos la opción Backup, seleccionamos el schema del que queremos hacer el backup,, le damos un nombre y pulsamos el botón inferior Start Backup.

226 MySQL WorkBench GUI

227 MySQL WorkBench GUI Para el proceso contrario, elegiremos la opción Restore Backup, seleccionando el archivo desde el que queremos importar

228 Cargar el Driver en el Eclipse Para cargar el Driver en nuestro proyecto, colocamos el.jar en cualquier carpeta del proyecto, por ejemplo en la carpeta bin, en una carpeta lib o en el raiz y después procedemos con los siguientes pasos: Menú Project >> Properties

229 Cargar el Driver en el Eclipse Java Build Path >> Libraries >> Add External Jars y seleccionamos el jar que acabamos de meter en la carpeta del proyecto

Tema 2. El lenguaje de programación Java (Parte 1)

Tema 2. El lenguaje de programación Java (Parte 1) Programación en Java Tema 2. El lenguaje de programación Java (Parte 1) Luis Rodríguez Baena Facultad de Informática Elementos del lenguaje (I) El juego de caracteres. No utiliza ASCII, sino Unicode de

Más detalles

Elementos léxicos del lenguaje de programación Java

Elementos léxicos del lenguaje de programación Java Elementos léxicos del lenguaje de programación Java Elementos léxicos del lenguaje de programación Java Palabras reservadas Identificadores Literales Operadores Delimitadores Comentarios Apéndices Operadores

Más detalles

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA UNED Centro Asociado de Cádiz RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA 1. OBJETOS Cualquier elemento del programa es un objeto. Un programa es un conjunto de objetos que se comunican entre sí

Más detalles

Curso de Java POO: Programación orientada a objetos

Curso de Java POO: Programación orientada a objetos Curso de Java POO: Programación orientada a objetos Luis Guerra Velasco Curso INEM 02830. Programación en Java Marzo 2010 Índice 1 Introducción a la POO 2 Herencia y polimorfismo 3 Empaquetado de proyectos

Más detalles

CONCEPTOS BASICOS DEL LENGUAJE JAVA

CONCEPTOS BASICOS DEL LENGUAJE JAVA CONCEPTOS BASICOS DEL LENGUAJE JAVA NOMENCLATURA GENERAL En Java se distinguen las letras mayúsculas y minúsculas. Las reglas del lenguaje respecto a los nombres de variables son muy amplias y permiten

Más detalles

Programación Orientada a Objetos con Java

Programación Orientada a Objetos con Java Programación Orientada a Objetos con Java M.C. Jorge Eduardo Ibarra Esquer jorgeeie@uabc.mx Sobrecarga de métodos Java permite la definición de dos o más métodos que tengan el mismo nombre, dentro de la

Más detalles

Java en 2 horas. Rodrigo Santamaría

Java en 2 horas. Rodrigo Santamaría + Java en 2 horas Rodrigo Santamaría + Generalidades 2 Desarrollado por Sun en 1995 Hereda mucha de la sintaxis de C (1972) Fuertemente tipado y orientado a objetos Aplicaciones compiladas a bytecode Gestión

Más detalles

Gestor de aplicaciones Java. Esta herramienta es el intérprete de los archivos de clase generados por el javac (compilador).

Gestor de aplicaciones Java. Esta herramienta es el intérprete de los archivos de clase generados por el javac (compilador). CAPÍTULO 4 Requerimientos de software Este capítulo presenta las herramientas necesarias para la construcción y ejecución de programas en el lenguaje de programación JAVA, los requerimientos mínimos de

Más detalles

Lo que necesitaremos para programar en Java, será un editor de texto o IDE y la JDK.

Lo que necesitaremos para programar en Java, será un editor de texto o IDE y la JDK. Introducción Java surgió en 1991 dentro de la empresa Sun Microsystems como un lenguaje de programación sencillo y universal destinado a electrodomésticos. La reducida potencia de cálculo y memoria de

Más detalles

Tema 1. Introducción a JAVA

Tema 1. Introducción a JAVA Tema 1. Introducción a JAVA Historia Características Plataforma Java Entorno de desarrollo Ejemplo: Hola mundo Estructura general de un programa Java 1 Historia de Java (i) Surge en 1991: Sun Microsystems

Más detalles

TEMA 2. Agenda. Fundamentos de JAVA

TEMA 2. Agenda. Fundamentos de JAVA TEMA 2 Fundamentos de JAVA V1.3 Manuel Pereira González Agenda Introducción Historia de Java Características Principales Hello World Tipos Operadores Control de Flujo E/S básica Atributos y Métodos Resumen

Más detalles

Java Inicial (20 horas)

Java Inicial (20 horas) Java Inicial (20 horas) 1 Temario 1. Programación Orientada a Objetos 2. Introducción y Sintaxis Java 3. Sentencias Control Flujo 4. POO en Java 5. Relaciones entre Objetos 6. Polimorfismo, abstracción

Más detalles

INDICE DEL CURSO APRENDER PROGRAMACIÓN JAVA DESDE CERO. PROGRAMACIÓN ORIENTADA A OBJETOS (CU00601B)

INDICE DEL CURSO APRENDER PROGRAMACIÓN JAVA DESDE CERO. PROGRAMACIÓN ORIENTADA A OBJETOS (CU00601B) APRENDERAPROGRAMAR.COM INDICE DEL CURSO APRENDER PROGRAMACIÓN JAVA DESDE CERO. PROGRAMACIÓN ORIENTADA A OBJETOS (CU00601B) Sección: Cursos Categoría: Curso Aprender programación Java desde cero Fecha revisión:

Más detalles

Tema 3 Elementos básicos de programación

Tema 3 Elementos básicos de programación Representación de Datos y Aplicaciones Tema 3 Elementos básicos de programación Natividad Martínez Madrid nati@it.uc3m.es Objetivos del tema 3 Conocer la estructura básica de un programa Java Comprender

Más detalles

2. Estructura de un programa en Java

2. Estructura de un programa en Java 24 A. García-Beltrán y J.M. Arranz 2. Estructura de un programa en Java Objetivos: a) Describir la estructura del código fuente de una aplicación Java b) Presentar los conceptos de comentario y de identificador

Más detalles

Repaso de las características más importantes de la programación Java y su adaptación a Android

Repaso de las características más importantes de la programación Java y su adaptación a Android Repaso de las características más importantes de la programación Java y su adaptación a Android 1. Entorno de programación en java 2. Variables y tipos de datos 3. Operaciones y operadores 4. Clases y

Más detalles

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java Identificadores Las variables se utilizan en programación para almacenar temporalmente

Más detalles

www.aprendoencasa.com Curso Introducción JAVA Pág.: 1

www.aprendoencasa.com Curso Introducción JAVA Pág.: 1 www.aprendoencasa.com Curso Introducción JAVA Pág.: 1 Introducción Java es un lenguaje basado en la programación orientada a objetos (POO), este tipo de programación va más allá del tipo de programación

Más detalles

Para leer la entrada de consola, lo primero que se hace es construir un Scanner que este asociado al flujo de entrada estándar System.

Para leer la entrada de consola, lo primero que se hace es construir un Scanner que este asociado al flujo de entrada estándar System. CICLO: 01/2010 Universidad Don Bosco Materia: Lenguaje de Programación III Contenido: 1-Lectura de Datos de entrada. 2-Introduccion a JOPTIONPANE. 3-Estructuras de Control. ->LECTURA DE DATOS DE ENTRADA

Más detalles

Introducción a la programación orientada a objetos

Introducción a la programación orientada a objetos Introducción a la programación orientada a objetos 1. Introducción a la programación orientada a objetos 2. Las clases 3. El tipo Struct 4. Diferencias entre Class y Struct 5. Pilares de la Programación

Más detalles

Modulo 1 El lenguaje Java

Modulo 1 El lenguaje Java Modulo 1 El lenguaje Java 13 - Codificación en Java Una de las grandes diferencias entre Java y Pascal en cuando a la codificación es que Java se trata de un lenguaje de los llamados case sensitive Esto

Más detalles

Java en 3 horas. Ampliación de Sistemas Operativos. Rodrigo Santamaría

Java en 3 horas. Ampliación de Sistemas Operativos. Rodrigo Santamaría Java en 3 horas Ampliación de Sistemas Operativos Rodrigo Santamaría Generalidades Desarrollado por Sun Hereda mucha de la sintaxis de C (1972) Fuertemente tipado y orientado a objetos Aplicaciones compiladas

Más detalles

Introducción al lenguaje Java

Introducción al lenguaje Java Tipo de entrega: Fecha límite: Lugar: Introducción al lenguaje Java por grupos de prácticas sesión de laboratorio Atenea Objetivos de la práctica: Escribir aplicaciones simples en Java Utilizar el entorno

Más detalles

El lenguaje de programación Java

El lenguaje de programación Java Departament d Arquitectura de Computadors El lenguaje de programación Java Java (I) Orientado a objetos Ejecutado por una maquina virtual Independiente de la plataforma Multithreaded Orientado a la red

Más detalles

Práctica 3 mtp. metodoloxía e tecnoloxía da programación. Presentar detalles básicos sobre la sintaxis del lenguaje de programación Java.

Práctica 3 mtp. metodoloxía e tecnoloxía da programación. Presentar detalles básicos sobre la sintaxis del lenguaje de programación Java. Práctica 3 mtp metodoloxía e tecnoloxía da programación Objetivos: Duración: Presentar detalles básicos sobre la sintaxis del lenguaje de programación Java. 1 semana 1.- Identificadores Los identificadores

Más detalles

Introducción a Java LSUB. 15 de enero de 2015 GSYC

Introducción a Java LSUB. 15 de enero de 2015 GSYC Introducción a LSUB GSYC 15 de enero de 2015 (cc) 2014 Laboratorio de Sistemas, Algunos derechos reservados. Este trabajo se entrega bajo la licencia Creative Commons Reconocimiento - NoComercial - SinObraDerivada

Más detalles

1 ELEMENTOS BASICOS DEL LENGUAJE

1 ELEMENTOS BASICOS DEL LENGUAJE 1 ELEMENTOS SICOS DEL LENGUJE Contenido: Variables su declaracion y asignacion Caracteres en java Secuencias de escape y comentarios Tipos de datos Operadores aritméticos, relacionales y lógicos Entrada

Más detalles

Introducción al lenguaje de programación java

Introducción al lenguaje de programación java Introducción al lenguaje de programación java Algoritmia y Programación Slide 1 LENGUAJES DE PROGRAMACION Un lenguaje de programación es un idioma artificial diseñado y creado para expresar algoritmos

Más detalles

1. El entorno de desarrollo Eclipse

1. El entorno de desarrollo Eclipse Índice 1. El entorno de desarrollo Eclipse 1 1.1. Qué es Eclipse?........................................................ 1 1.2. Trabajando con Eclipse....................................................

Más detalles

Introducción al lenguaje JAVA

Introducción al lenguaje JAVA Universidad Autónoma de Tlaxcala Introducción al lenguaje JAVA M.C.. José Juan Hernández ndez Mora Segunda Sesión 1. Arreglos 2. Matrices 3. Clases en Java 4. Clases de Usuario en Java 5. Objetos definidos

Más detalles

Examen Junio- Grupo A Lunes 17 de Junio - Programación en C++ Pág. 1

Examen Junio- Grupo A Lunes 17 de Junio - Programación en C++ Pág. 1 Examen Junio- Grupo A Lunes 17 de Junio - Programación en C++ Pág. 1 ÍNDICE ÍNDICE... 1 1.1 Ejercicio 1: Máquina Expendedora (3.5 ptos.)... 1 1.2 Ejercicio 2: Clase Circulo (1.0 pto.)... 3 1.3 Ejercicio

Más detalles

Objetivo de aprendizaje del tema

Objetivo de aprendizaje del tema Computación II Tema 3. Identificadores, palabras clave y tipos de datos Objetivo de aprendizaje del tema Al finalizar el tema serás capaz de: Distinguir i entre modificadores d válidos y no válidos. Enumerar

Más detalles

JavaScript. Contenidos. Introducción El lenguaje Validación de formularios. Programación en Internet 2005-2006. DLSI - Universidad de Alicante 1

JavaScript. Contenidos. Introducción El lenguaje Validación de formularios. Programación en Internet 2005-2006. DLSI - Universidad de Alicante 1 Departamento de Lenguajes y Sistemas Informáticos JavaScript Programación en Internet Curso 2005-2006 Contenidos Introducción El lenguaje Validación de formularios DLSI - Universidad de Alicante 1 Introducción

Más detalles

Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación. IIC1102 Introducción a la Programación

Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación. IIC1102 Introducción a la Programación Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación IIC1102 Introducción a la Programación Tutorial eclipse TM Introducción al uso de eclipse TM Contents

Más detalles

TEMA 5. CONTROL DE FLUJO DEL PROGRAMA. Sentencia Instrucción Expresión Operadores + Operandos Sintaxis: Sentencia ;

TEMA 5. CONTROL DE FLUJO DEL PROGRAMA. Sentencia Instrucción Expresión Operadores + Operandos Sintaxis: Sentencia ; TEMA 5. CONTROL DE FLUJO DEL PROGRAMA 5.1 Sentencias Una sentencia es una expresión seguida de un punto y coma. Sentencia Instrucción Expresión Operadores + Operandos Sintaxis: Sentencia ; El ; es obligatorio

Más detalles

19. Packages o paquetes

19. Packages o paquetes Programación orientada a objetos con Java 201 19. Packages o paquetes Objetivos: a) Definir el concepto de paquete b) Interpretar el código fuente de una aplicación Java donde se utilicen paquetes c) Construir

Más detalles

Fundamentos del Lenguaje de Programación Java

Fundamentos del Lenguaje de Programación Java Fundamentos del Lenguaje de Programación Java M.C. Jorge Eduardo Ibarra Esquer jorgeeie@uabc.mx El lenguaje Java Estándares de codificación Comentarios Programas con Java Identificadores Palabras clave

Más detalles

9. Objetos y clases. 9.1. Clases

9. Objetos y clases. 9.1. Clases Programación orientada a objetos con Java 103 9. Objetos y clases Objetivos: a) Presentar el concepto de objeto, clase, atributo, método e instancia b) Interpretar el código fuente de una aplicación Java

Más detalles

Introducción a la Programación Orientada a Objetos

Introducción a la Programación Orientada a Objetos Introducción a la Programación Orientada a Objetos El paradigma imperativo. En un programa se tienen una serie de variables con las cuales operamos y modificamos mediante sentencias y funciones para producir

Más detalles

Preliminares. Tipos de variables y Expresiones

Preliminares. Tipos de variables y Expresiones Preliminares. Tipos de variables y Expresiones Felipe Osorio Instituto de Estadística Pontificia Universidad Católica de Valparaíso Marzo 5, 2015 1 / 20 Preliminares Computadoras desarrollan tareas a un

Más detalles

TIPOS DE VARIABLES EN PHP. DECLARACIÓN Y ASIGNACIÓN. LA INSTRUCCIÓN ECHO PARA INSERTAR TEXTO O CÓDIGO. (CU00816B)

TIPOS DE VARIABLES EN PHP. DECLARACIÓN Y ASIGNACIÓN. LA INSTRUCCIÓN ECHO PARA INSERTAR TEXTO O CÓDIGO. (CU00816B) APRENDERAPROGRAMAR.COM TIPOS DE VARIABLES EN PHP. DECLARACIÓN Y ASIGNACIÓN. LA INSTRUCCIÓN ECHO PARA INSERTAR TEXTO O CÓDIGO. (CU00816B) Sección: Cursos Categoría: Tutorial básico del programador web:

Más detalles

Programación orientada a objetos

Programación orientada a objetos Repaso Programación orientada a objetos Curso INEM. Programación en Java Santiago Muelas Pascual smuelas@fi.upm.es! Clase! Objeto! Atributo o variable de instancia! Método! Instanciar/crear un objeto!

Más detalles

Introducción a la Programación en MATLAB

Introducción a la Programación en MATLAB Introducción a la Programación en MATLAB La programación en MATLAB se realiza básicamente sobre archivos M, o M-Files. Se los denomina de esta forma debido a su extensión.m. Estos archivos son simple archivos

Más detalles

PROGRAMACIÓ DIDÁCTICA: Secuanciación, Temporalización y Unidades Didácticas

PROGRAMACIÓ DIDÁCTICA: Secuanciación, Temporalización y Unidades Didácticas Departamento de Informática PROGRAMACIÓN DIDÁCTICA Curso 11-12 1 CONSEJERÍA DE EDUCACIÓN I.E.S. NERVIÓN Departamento de Informática CICLO FORMATIVO: TÉCNICO SUPERIOR EN DESARROLLO DE APLICACIONES MULTIPLATAFORMA.

Más detalles

Lenguajes de Programación Curso 04-05. Práctica 4. Herencia. Utilización de interfaces y clases abstractas. 1. Interfaces 1. 2. Clases abstractas 2

Lenguajes de Programación Curso 04-05. Práctica 4. Herencia. Utilización de interfaces y clases abstractas. 1. Interfaces 1. 2. Clases abstractas 2 Objetivos Herencia. Utilización de interfaces y clases abstractas. Índice 1. Interfaces 1 2. Clases abstractas 2 3. Collections Framework 3 3.1. Collection........................................... 3

Más detalles

Prácticas: Introducción a la programación en Java. Informática (1º Ingeniería Civil) Curso 2011/2012

Prácticas: Introducción a la programación en Java. Informática (1º Ingeniería Civil) Curso 2011/2012 Prácticas: Introducción a la programación en Java Informática (1º Ingeniería Civil) Índice Introducción a Java y al entorno de desarrollo NetBeans Estructura de un programa Tipos de datos Operadores Sentencias

Más detalles

Introducción al desarrollo de RIA's con Adobe Flex 3.0 Dia 4

Introducción al desarrollo de RIA's con Adobe Flex 3.0 Dia 4 Introducción al desarrollo de RIA's con Adobe Flex 3.0 Dia 4 by S. Muñoz-Gutiérrez stalinmunoz@yahoo.com, informes@grupolinda.org Grupo LINDA Facultad de Ingeniería UNAM México Octubre-Diciembre 2009 Identificando

Más detalles

8. Sentencia return y métodos

8. Sentencia return y métodos 92 A. García-Beltrán y J.M. Arranz 8. Sentencia return y métodos Objetivos: a) Describir el funcionamiento de la sentencia return b) Interpretar el resultado de una sentencia return en el código fuente

Más detalles

INTELIGENCIA ARTIFICIAL 2015 TALLER RÁPIDO DE PROGRAMACIÓN EN JAVA

INTELIGENCIA ARTIFICIAL 2015 TALLER RÁPIDO DE PROGRAMACIÓN EN JAVA INTELIGENCIA ARTIFICIAL 2015 TALLER RÁPIDO DE PROGRAMACIÓN EN JAVA Fuente: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html Por qué Java? TIOBE Index for March 2015 Fuente: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

Más detalles

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

En cualquier caso, tampoco es demasiado importante el significado de la B, si es que lo tiene, lo interesante realmente es el algoritmo. Arboles-B Características Los árboles-b son árboles de búsqueda. La "B" probablemente se debe a que el algoritmo fue desarrollado por "Rudolf Bayer" y "Eduard M. McCreight", que trabajan para la empresa

Más detalles

Una variable de clase escalar tiene un nivel de indirección igual a 1. Por ejemplo, las variables i, b y x definidas como se muestra a continuación.

Una variable de clase escalar tiene un nivel de indirección igual a 1. Por ejemplo, las variables i, b y x definidas como se muestra a continuación. Descripción de la semántica de ALFA En esta descripción sólo se mencionarán los aspectos en los que el lenguaje de programación ALFA pueda diferir de otros lenguajes de programación de alto nivel. Se sobreentienden

Más detalles

Definición de clases: Herencia, polimorfismo, ligadura dinámica

Definición de clases: Herencia, polimorfismo, ligadura dinámica Tema 7 Definición de clases: Herencia, polimorfismo, ligadura dinámica Con alguna frecuencia es necesario definir clases de objetos entre las cuales hay elementos comunes. En una aplicación en la cual

Más detalles

Pruebas de unidad con JUnit

Pruebas de unidad con JUnit Pruebas de unidad con JUnit Cuando se implementa software, resulta recomendable comprobar que el código que hemos escrito funciona correctamente. Para ello, implementamos pruebas que verifican que nuestro

Más detalles

Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero.

Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero. Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero. Uso de Ficheros Todas las estructuras de datos vistas hasta ahora utilizan la

Más detalles

Unidad I. 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal)

Unidad I. 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal) Unidad I Sistemas numéricos 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal) Los computadores manipulan y almacenan los datos usando interruptores electrónicos que están ENCENDIDOS o APAGADOS.

Más detalles

Tema 6. Reutilización de código. Programación 2015-2016. Programación - Tema 6: Reutilización de código

Tema 6. Reutilización de código. Programación 2015-2016. Programación - Tema 6: Reutilización de código Tema 6 Reutilización de código Programación 2015-2016 Programación - Tema 6: Reutilización de código 1 Tema 6. Reutilización de código Modularidad. Implementación de métodos. Uso de métodos. Programación

Más detalles

Programa Java. El lenguaje de programación Java. Comentarios. Programa Java. Palabras reservadas. Identificadores

Programa Java. El lenguaje de programación Java. Comentarios. Programa Java. Palabras reservadas. Identificadores El lenguaje de programación Java Programa Java Un programa Java está formado por un conjunto de clases que interactúan entre sí La clase es la unidad básica de programación La ejecución depende de la clase

Más detalles

CAPÍTULO IV BREVE DESCRIPCIÓN DE LA INFRAESTRUCTURA DE CÓMPUTO VISUAL BASIC 6.0 PARA WINDOWS

CAPÍTULO IV BREVE DESCRIPCIÓN DE LA INFRAESTRUCTURA DE CÓMPUTO VISUAL BASIC 6.0 PARA WINDOWS CAPÍTULO IV BREVE DESCRIPCIÓN DE LA INFRAESTRUCTURA DE CÓMPUTO VISUAL BASIC 6.0 PARA WINDOWS 4.1 Antecedentes históricos El lenguaje de programación BASIC (Beginner's All purpose Symbolic Instruction Code)

Más detalles

Programación Avanzada para Sistemas de Telecomunicación. Objetos y clases. J.C. Cruellas. Objetos y clases

Programación Avanzada para Sistemas de Telecomunicación. Objetos y clases. J.C. Cruellas. Objetos y clases Programación Avanzada para Sistemas de Telecomunicación Objetos y clases Juan Carlos Cruellas cruellas@ac.upc.es Objetos y clases Concepto de objeto. Concepto de clase. Clases, objetos y programas. Clases

Más detalles

Visual Basic 1. Empleo de módulos y Procedimientos. Procedimientos definidos por el usuario

Visual Basic 1. Empleo de módulos y Procedimientos. Procedimientos definidos por el usuario Empleo de módulos y Procedimientos Procedimientos definidos por el usuario Según lo que hemos visto hasta ahora, Visual Basic, almacena el código en módulos. Hay tres clases de módulos: formularios (.frm),

Más detalles

Clases y Objetos. Informática II Ingeniería Electrónica

Clases y Objetos. Informática II Ingeniería Electrónica Clases y Objetos Informática II Ingeniería Electrónica Los Tipos de Datos Hasta ahora, en un programa podemos usar para representar variables a: Tipos fundamentales : enteros (int), caracteres (char),

Más detalles

COPIAS DE SEGURIDAD AUTOMÁTICAS DE DIRECCIONES CALLEÇPAÑA

COPIAS DE SEGURIDAD AUTOMÁTICAS DE DIRECCIONES CALLEÇPAÑA COPIAS DE SEGURIDAD AUTOMÁTICAS DE DIRECCIONES CALLEÇPAÑA Autor: Carlos Javier Martín González. Licenciado en Física Teórica por la Universidad Autónoma de Madrid. Analista programador y funcional. Desarrollador

Más detalles

Sintaxis y Convenciones de Java. M. en C. Erika Vilches

Sintaxis y Convenciones de Java. M. en C. Erika Vilches Sintaxis y Convenciones de Java M. en C. Erika Vilches Estructura del Código en Java Hay una clase en un archivo fuente Hay métodos en una clase Hay enunciados en un método Anatomía de una Clase Cuando

Más detalles

Examen Septiembre Curso 2001-2002 -- Programación en C++ Pág. 1

Examen Septiembre Curso 2001-2002 -- Programación en C++ Pág. 1 Examen Septiembre Curso 2001-2002 -- Programación en C++ Pág. 1 ÍNDICE ÍNDICE... 1 1.1 Ejercicio 1: Convertidor Dec->Hex y Hex->Dec (5.0 ptos.)... 1 1.1.1 Apartado A (4.0 ptos.)... 1 1.1.2 Apartado B (1.0

Más detalles

Apuntes de ACCESS. Apuntes de Access. Campos de Búsqueda:

Apuntes de ACCESS. Apuntes de Access. Campos de Búsqueda: Apuntes de ACCESS Campos de Búsqueda: Los campos de búsqueda permiten seleccionar el valor de un campo de una lista desplegable en lugar de tener que escribirlos. El usuario sólo tiene que elegir un valor

Más detalles

Creación de Funciones de Conducción

Creación de Funciones de Conducción Creación de Funciones de Conducción Requerimientos Para el desarrollo de esta actividad se requiere que: Contemos con un robot BoeBot armado con placa Arduino. Repetición En estos momentos habremos notado

Más detalles

Tutorial Básico de vbscript

Tutorial Básico de vbscript Tutorial Básico de vbscript Bueno, primero aclarar que este tutorial, pretende explicar de manera básica las distintas instrucciones aplicadas en visual basic script (vbs de aquí en más), para que así

Más detalles

CONSULTAS CON SQL. 3. Hacer clic sobre el botón Nuevo de la ventana de la base de datos. Aparecerá el siguiente cuadro de diálogo.

CONSULTAS CON SQL. 3. Hacer clic sobre el botón Nuevo de la ventana de la base de datos. Aparecerá el siguiente cuadro de diálogo. CONSULTAS CON SQL 1. Qué es SQL? Debido a la diversidad de lenguajes y de bases de datos existentes, la manera de comunicar entre unos y otras sería realmente complicada a gestionar de no ser por la existencia

Más detalles

GESTINLIB GESTIÓN PARA LIBRERÍAS, PAPELERÍAS Y KIOSCOS DESCRIPCIÓN DEL MÓDULO DE KIOSCOS

GESTINLIB GESTIÓN PARA LIBRERÍAS, PAPELERÍAS Y KIOSCOS DESCRIPCIÓN DEL MÓDULO DE KIOSCOS GESTINLIB GESTIÓN PARA LIBRERÍAS, PAPELERÍAS Y KIOSCOS DESCRIPCIÓN DEL MÓDULO DE KIOSCOS 1.- PLANTILLA DE PUBLICACIONES En este maestro crearemos la publicación base sobre la cual el programa generará

Más detalles

Solución al Examen de Prácticas de Programación (Ingeniería Informática)

Solución al Examen de Prácticas de Programación (Ingeniería Informática) Solución al Examen de Prácticas de Programación (Ingeniería Informática) Junio 2006 Parte I. Cuestiones (3 puntos=50% nota del examen) 1) Se desea crear un conjunto de clases para representar en un programa

Más detalles

Tarea 1 Programación José Luis Comesaña

Tarea 1 Programación José Luis Comesaña Para la descarga de Java he optado por dirigirme a su propietario ORACLE para iniciar la grabación desde su página oficial: http://www.oracle.com/es/index.html donde seleccionamos Java 2 en el apartado

Más detalles

Ubicación e historia

Ubicación e historia Introducción a Java Ubicación e historia http:// ://java.sun.com/ JDK (Java Development Kit) JDK 1.0, 1995 JDK 1.1, 1996. Modificación en manejo de eventos; nuevas bibliotecas (reflexión, métodos remotos,...)

Más detalles

Programación Orientada a Objetos en Java

Programación Orientada a Objetos en Java Programación Orientada a Objetos en Java Curso 2006-2007 Tema 4 Herencia y Polimorfismo Gonzalo Méndez Pozo Dpto. de Ingeniería de Software e Inteligencia Artificial Universidad Complutense de Madrid Herencia

Más detalles

Carmen. Estándares de codificación. Manuel Arias Calleja

Carmen. Estándares de codificación. Manuel Arias Calleja Carmen. Estándares de codificación Manuel Arias Calleja II Índice general 1. Estandares de codificación 1 1.1. Nombres de ficheros........................ 1 1.2. Organización de ficheros......................

Más detalles

Se guardan en archivos con extencion c y los cabezales con extension h

Se guardan en archivos con extencion c y los cabezales con extension h Se guardan en archivos con extencion c y los cabezales con extension h Tipos de Variables: Tipo Tamaño(bytes) Limite inferior Limite superior char 1 -- -- unsigned char 1 0 255 short int 2-32768 +32767

Más detalles

Objetos y Clases en Java. ELO 329: Diseño y Programación Orientados a Objetos

Objetos y Clases en Java. ELO 329: Diseño y Programación Orientados a Objetos Objetos y Clases en Java ELO 329: Diseño y Programación Orientados a Objetos 1 Elementos de Análisis y Diseño orientado a objetos Notación y relaciones entre clases: Las clases son abstracciones para los

Más detalles

ALGORITMICA Y PROGRAMACION POR OBJETOS I

ALGORITMICA Y PROGRAMACION POR OBJETOS I ALGORITMICA Y PROGRAMACION POR OBJETOS I Nivel 2 Definiendo situaciones y manejando casos Marcela Hernández Hoyos Qué vamos a aprender en este nivel: Diferencia entre clase y objeto Modelar características

Más detalles

Objetivo: Introducción conceptual y aplicación básica de los lenguajes del lado del servidor.

Objetivo: Introducción conceptual y aplicación básica de los lenguajes del lado del servidor. Sesión 03: Lenguajes web del servidor Competencias a Conseguir: - Conocer el entorno de trabajo a nivel de servidores web. - Instalación del localhost (Servidor Local). - Repaso general de PHP y ejercicios

Más detalles

ISTP CIDET COMPUTACION E INFORMATICA ARREGLOS EN JAVA

ISTP CIDET COMPUTACION E INFORMATICA ARREGLOS EN JAVA ARREGLOS EN JAVA I I N T R O D U C C I Ó N En las sesiones anteriores, los datos manejados en los programas han sido datos simples (carácter, entero, reales) En un gran número de problemas es necesario

Más detalles

Roberto Quejido Cañamero

Roberto Quejido Cañamero Crear un documento de texto con todas las preguntas y respuestas del tema. Tiene que aparecer en él todos los contenidos del tema. 1. Explica qué son los modos de presentación en Writer, cuáles hay y cómo

Más detalles

PART II: Moviendo al jugador

PART II: Moviendo al jugador UNITY PART II: Moviendo al jugador El movimiento se lo vamos a dar a través de un programa Definición de programa: Un programa es una secuencia de instrucciones, escritas para realizar una tarea específica

Más detalles

Taller de Programación Estructurada en Java Tema 2. Fundamentos de la programación orientada a objetos

Taller de Programación Estructurada en Java Tema 2. Fundamentos de la programación orientada a objetos Taller de Programación Estructurada en Java Tema 2. Fundamentos de la programación orientada a objetos Ingeniero en Computación José Alfredo Cobián Campos josealfredocobian@gmail.com Facultad de Ciencias

Más detalles

VARIABLES, CONSTANTES Y EXPRESIONES ASIGNACIÓN. TIPOS ELEMENTALES. PRECEDENCIA DE LOS ESTRUCTURAS DE CONTROL. CONDICIONAL E

VARIABLES, CONSTANTES Y EXPRESIONES ASIGNACIÓN. TIPOS ELEMENTALES. PRECEDENCIA DE LOS ESTRUCTURAS DE CONTROL. CONDICIONAL E Java Java es un lenguaje de programación presentado en 1995 enfocado a: soportar los fundamentos de la programación orientada a objetos. generar código independiente de la arquitectura de la computadora

Más detalles

Primera Escuela de la Red Temática SVO. Madrid, 27-28 Noviembre, 2006 JAVA BÁSICO. Raúl Gutiérrez Sánchez LAEFF - INTA raul@laeff.inta.

Primera Escuela de la Red Temática SVO. Madrid, 27-28 Noviembre, 2006 JAVA BÁSICO. Raúl Gutiérrez Sánchez LAEFF - INTA raul@laeff.inta. Primera Escuela de la Red Temática SVO. Madrid, 27-28 Noviembre, 2006 JAVA BÁSICO LAEFF - INTA raul@laeff.inta.es Qué es Java? Java es un lenguaje de programación orientado a objetos desarrollado por Sun

Más detalles

Sensor de Temperatura utilizando el Starter Kit Javelin Stamp. Realizado por: Bertha Palomeque A. Rodrigo Barzola J.

Sensor de Temperatura utilizando el Starter Kit Javelin Stamp. Realizado por: Bertha Palomeque A. Rodrigo Barzola J. Sensor de Temperatura utilizando el Starter Kit Javelin Stamp Realizado por: Bertha Palomeque A. Rodrigo Barzola J. INTRODUCCION DIFERENCIAS EJEMPLOS JAVA Orientado a Objetos Multiplataforma Programar

Más detalles

Introducción a PHP. * No es necesario declarar previamente las variables.

Introducción a PHP. * No es necesario declarar previamente las variables. Introducción a PHP La programación de sitios web cada día está más orientada al desarrollo de páginas dinámicas y aplicaciones, o sea sitios donde el usuario pueda interactuar con la web. Dentro de los

Más detalles

Introducción a la Programación en Java. Page 1

Introducción a la Programación en Java. Page 1 Introducción a la Programación en Java Page 1 Qué es Java? Java es un lenguaje de programación de propósito general, orientado a objetos que fue diseñado específicamente para tener tan pocas dependencias

Más detalles

Uso de Visual C++ Pre-Practica No. 3

Uso de Visual C++ Pre-Practica No. 3 Pre-Practica No. 3 Uso de Visual C++ Microsoft Visual C++ 2010 es una versión de Visual Studio específica para el lenguaje de programación C++. Es un entorno de desarrollo muy completo y profesional. Por

Más detalles

FACULTAD DE INGENIERÍA

FACULTAD DE INGENIERÍA NOMBRE DEL PROFESOR: Ing. Héctor Manuel Quej Cosgaya NOMBRE DE LA PRÁCTICA: Operadores y Expresiones PRÁCTICA NÚM. [ 3 ] LABORATORIO: MATERIA: UNIDAD: TIEMPO: Centro de Ingeniería Computacional Lenguaje

Más detalles

Tema 7: Programación con Matlab

Tema 7: Programación con Matlab Tema 7: Programación con Matlab 1. Introducción Matlab puede utilizarse como un lenguaje de programación que incluye todos los elementos necesarios. Añade la gran ventaja de poder incorporar a los programas

Más detalles

Tema 3: Herencia en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

Tema 3: Herencia en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle Tema 3: Herencia en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle Contenido Tipos de herencia Herencia y niveles de visibilidad Herencia y creación Redefinición de métodos Conversión

Más detalles

Ejercicio 1 (3 puntos).-

Ejercicio 1 (3 puntos).- URJC Ingeniería Técnica de Gestión Abril 2011 Asignatura: SOFTWARE AVANZADO Normas: La prueba consta de 2 ejercicios. La máxima nota del examen es un 8. Siendo la práctica la que añade los 2 puntos que

Más detalles

1) Aplicación Inp. Si has llegado hasta aquí poco te podemos decir ya de la misma. Seguimos.

1) Aplicación Inp. Si has llegado hasta aquí poco te podemos decir ya de la misma. Seguimos. Manual Excel-Inp V4. Excel-Inp es el programa creado por JLopezF que nos permite pasar los datos desde una hoja de Excel a Inp. Para ello deberíamos tener creada en el PPC una base de datos inicial (aunque

Más detalles

Introduccion al Lenguaje C. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia

Introduccion al Lenguaje C. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia Introduccion al Lenguaje C Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia Introducción C es un lenguaje de programación creado en 1972 por

Más detalles

PRÁCTICA No1 POO Estructuras de Control Parte I

PRÁCTICA No1 POO Estructuras de Control Parte I Objetivos El alumno conocerá los elementos básicos del lenguaje Java para la Programación Orientada a Objetos El alumno conocerá la estructura de control if else switch para la resolución de problemas

Más detalles

Programación Orientada a Objetos

Programación Orientada a Objetos Programación Orientada a Objetos Ejercicios: Clases y Objetos 1. Crea una clase Complejo que permita trabajar con números complejos (parte real y parte imaginaria). Incluye los siguientes métodos: constructores

Más detalles

Programa diseñado y creado por 2014 - Art-Tronic Promotora Audiovisual, S.L.

Programa diseñado y creado por 2014 - Art-Tronic Promotora Audiovisual, S.L. Manual de Usuario Programa diseñado y creado por Contenido 1. Acceso al programa... 3 2. Opciones del programa... 3 3. Inicio... 4 4. Empresa... 4 4.2. Impuestos... 5 4.3. Series de facturación... 5 4.4.

Más detalles

GENERACIÓN DE TRANSFERENCIAS

GENERACIÓN DE TRANSFERENCIAS GENERACIÓN DE TRANSFERENCIAS 1 INFORMACIÓN BÁSICA La aplicación de generación de ficheros de transferencias permite generar fácilmente órdenes para que la Caja efectúe transferencias, creando una base

Más detalles

Introducción al tipo de dato ARRAY

Introducción al tipo de dato ARRAY CONTENIDOS. Introducción al tipo de dato ARRAY. Definición, Características, Declaración, Acceso e Inicialización.. Arrays multidimensionales Definición, Declaración, Acceso e Inicialización. Introducción

Más detalles

Curso PHP Módulo 1 R-Luis

Curso PHP Módulo 1 R-Luis Lenguaje PHP Introducción Archivos HTML y PHP: Crear un archivo php es tan sencillo como cambiarle la extensión a un archivo html, por ejemplo podemos pasar de index.html a index.php sin ningún inconveniente.

Más detalles