Programación Java ene-09 [email protected] 1 Contenidos ene-09 [email protected] 2 Tecnología Java Un lenguaje de programación Un entorno de desarrollo Un entorno de aplicaciones El JDK El JRE la JVM Un entorno de implantación ene-09 En local la JVM, en remoto el Navegador [email protected] 3 Características de la plataforma La JVM Virtual Portable entre S.O. El reciclaje de memoria El JRE JVM Tool Interface: interfaz de herramientas de JVM ene-09 [email protected] 4 Entorno de ejecución de Java (JRE) ene-09 [email protected] 5 Verificación de byte codes Las clases son conformes con el formato de archivos de clases de la especificación de JVM No se han producido intentos de infringir las reglas de acceso El código no provoca desbordamiento ni falta de operandos en la pila Todos los tipos de parámetros de los códigos operativos son correctos No se han realizado conversiones de datos irregulares tales como la conversión de enteros en referencias a objetos ene-09 [email protected] 6 JRE con compilación JIT ene-09 [email protected] 7 Ejemplo ene-09 [email protected] 8 Compilación y ejecución ene-09 [email protected] 9 Contenidos ene-09 [email protected] 10 Requisitos funcionales: ejemplo ?? El software debe aplicarse a una sola compañía de transporte. La compañía cuenta con una flota de vehículos que transporta cajas. El peso de las cajas es el único factor importante que debe tenerse en cuenta al cargar un vehículo. La empresa posee dos tipos de vehículos: camiones y barcazas de transporte fluvial. Las cajas se pesan utilizando el kilogramo como unidad de medida, pero los algoritmos para calcular la potencia de motor necesaria deberá contabilizar la carga total del vehículo medida en newtons. Deberá utilizar una interfaz gráfica para hacer el seguimiento de las cajas que se van agregando a los vehículos. También deberá generar varios informes a partir de los registros de fletes. ene-09 [email protected] 11 Clases en Java (y en OO) La clase como prototipo de objetos (factoría) Define atributos (datos) Define métodos (comportamiento) Conceptos clave: ene-09 Ocultación de información Encapsulación Herencia Polimorfismo [email protected] 12 Declaraciones: De clase De atributo De método ene-09 [email protected] 13 Declaraciones: ejemplos ene-09 [email protected] 14 Ocultación de información ene-09 Impedir manipulaciones descontroladas de los atributos [email protected] 15 Ocultación: private, protected ene-09 Acceso controlado a los atributos [email protected] 16 Encapsulación Usando los mecanismos de ocultación conseguimos encapsulación ene-09 Ofrecer una vista pública (interfaz) sin dar detalles de cómo es la implementación [email protected] 17 Constructores Sin argumentos Por defecto Con argumentos ene-09 Anula la generación por defecto de constructor sin argumentos A veces se necesitan los dos aunque el constructor sin argumento no haga nada [email protected] 18 Organización de las clases en paquetes ene-09 [email protected] Orden importante Sólo una clase pública, posible varias private class Nombre del archivo fuente igual al de la clase pública 19 Paquetes: declaración e importación Declaración de paquete Declaración de importación ene-09 [email protected] 20 Agrupación en paquetes Si el sistema software es “grande” se subdivide en paquetes Cuidado con las dependencias entre paquetes ene-09 [email protected] 21 Traslación de paquete a directorios ene-09 [email protected] 22 Estructura típica de un proyecto Java ene-09 [email protected] 23 Empaquetado de clases: jar ene-09 [email protected] 24 Contenidos ene-09 [email protected] 25 Comentarios ene-09 [email protected] 26 Comentarios JavaDoc ene-09 [email protected] 27 Tipos primitivos Lógicos: boolean Textuales: char Enteros: byte, short, int y long Reales en coma flotante: double y float ene-09 [email protected] 28 Tipo String ene-09 [email protected] 29 Enteros: byte, short, int y long ene-09 [email protected] 30 Reales en coma flotante: double y float Los literales en coma flotante se consideran double a menos que se declaren expresamente como float ene-09 2.718F 2.718f [email protected] 31 Declaraciones y asignaciones: ejemplo ene-09 [email protected] 32 Tipos referencia Referencia a un objeto MyDate ene-09 [email protected] 33 Construcción e inicialización 1. Se asigna e inicializa el espacio al nuevo objeto como 0 o vacío (null). En programación Java, esta fase es indivisible para garantizar que no habrá objetos que contengan valores aleatorios. 2. Se realiza cualquier inicialización explícita. 3. Se ejecuta un constructor, un método especial. Los argumentos de new se pasan al constructor (22, 7, 1964). 4. El valor resultante de new es una referencia al nuevo objeto en el espacio de memoria dinámica. 5.ene-09 Esta referencia se guarda en la variable de [email protected] referencia. 34 Construcción e inicialización 1º 2º ene-09 [email protected] 35 Construcción e inicialización 3º 4º ene-09 [email protected] 36 Construcción e inicialización 5º ene-09 [email protected] 37 Uso de this Desambiguación Autoreferencia ene-09 [email protected] 38 Asignación de referencias ene-09 [email protected] 39 Convenios de codificación en Java Paquetes: los nombres de paquetes se escriben en minúsculas. package transporte.objetos Clases: sustantivos en mayúsculas y minúsculas; la primera letra de cada palabra en mayúscula class LibroContabilidad Interfaces: mismas normas que las clases interface Contabilidad Métodos: verbos en mayúsculas y minúsculas, inicial en minúscula. Limitar el uso de signos de subrayado. cuadrarLibro() Variables: en mayúsculas y minúsculas, con la inicial en minúscula. Limitar el uso de subrayado y evitar uso de dólar ($) ene-09 clienteActual [email protected] 40 Convenios de codificación Constantes: en mayúsculas, separando palabras subrayado TOTAL_NOMINA CANTIDAD_MAXIMA Estructuras de control: if-else o for, escribirlas entre llaves ({ }), aunque sean sentencias sencillas. if ( condición ) { sentencia1; } else { sentencia2; } ene-09 [email protected] 41 Contenidos ene-09 [email protected] 42 Ámbito de variables ene-09 [email protected] 43 Inicialización de las variables Los atributos toman valores por defecto Las variables de métodos no ene-09 Hay que inicializarlas exprersamente [email protected] 44 Operadores, precedencia ene-09 [email protected] 45 Operadores lógicos Operan en cortocircuito ene-09 [email protected] 46 Operadores lógicos de bits ene-09 [email protected] 47 Operadores de desplazamiento a la derecha >> y >>> >> aritmético o con signo >>> lógico o sin signo Copia el bit de signo al desplazar Inserta 0 al desplazar Solo se aplican a tipos enteros >>> solo se aplica a int y long << a la izquierda ene-09 [email protected] 48 Ejemplos de operadores de desplazamiento <<5 ene-09 [email protected] >>5 49 Concatenación de cadenas: ene-09 [email protected] + 50 Conversión de tipos ene-09 [email protected] 51 Promoción y conversión de expresiones Todas las operaciones binarias dan como mínimo int, o el tipo más largo de los operandos Ok Error ene-09 [email protected] 52 Sentencias if, else ene-09 [email protected] Correcto pero desaconsejado, no tiene llaves 53 Sentencia switch ene-09 [email protected] 54 Bucles for ene-09 [email protected] 55 Bucle while ene-09 [email protected] 56 Bucle do/while ene-09 [email protected] 57 Construcciones especiales de control de bucles ene-09 [email protected] 58 Contenidos ene-09 [email protected] 59 Declaración e inicialización de arrays De tipos primitivos o referencia Declaración Creación e Inicialización ene-09 [email protected] 60 Arrays son objetos ene-09 [email protected] Ubicados en espacio de memoria heap Alcanzados desde una variable referencia (s) 61 Arrays de referencias ene-09 [email protected] 62 Inicialización Cada posición de s ‘\u0000’ Cada posición de Point null equivale a Con tipos no básicos ene-09 [email protected] 63 Arrays multidimensionales ene-09 Arrays de arrays Arrays dentados (o no rectangulares) Array rentangular [email protected] 64 Límites de los arrays Rango desde 0..(tamaño – 1) Atributo length tamaño del vector Si se sale de limites lanza OutOfBoundsException ene-09 [email protected] 65 Uso del bucle for mejorado Equivalentes ene-09 [email protected] 66 Copia de arrays Utilidad de copia en clase System ene-09 [email protected] 67 Contenidos ene-09 [email protected] 68 Subclases ene-09 [email protected] 69 Subclases ene-09 [email protected] 70 Herencia sencilla ene-09 [email protected] 71 Control de acceso Niveles de acceso ene-09 [email protected] 72 Sobrescritura de métodos (redefinición) Modificación del comportamiento de la clase original redefine ene-09 [email protected] 73 Redefinición No se puede reducir la visibilidad ene-09 [email protected] 74 Llamada a métodos redefinidos ene-09 [email protected] 75 Polimorfismo Una variable referencia es polimórfica, puede “apuntar” a varios tipos de objetos Sin embargo no es posible ene-09 [email protected] 76 Métodos virtuales ¿A qué método getDetails() se llama? ¿Al de Gerente? ¿Al de Empleado? Se determina en runtime ene-09 Depende el objeto asociado y de la declaración del método En java por defecto todos los método son virtuales En este caso se ejecutaría el de Gerente [email protected] 77 Argumentos polimórficos ene-09 [email protected] 78 Operador instanceof Usando bien el polimorfismo es muy poco habitual hacer estos chequeos. A menudo indicación de un mal diseño ene-09 [email protected] Aceptable aunque redundante 79 Conversión de objetos Upcast siempre permitidos Downcast se fuerza con () ene-09 El compilador chequea si es posible En runtime se verifica realmente, si no casa salta ClassCastException [email protected] 80 Sobrecarga de métodos Reglas: Las listas de argumentos deben ser diferentes Los tipos de retorno pueden ser diferentes ene-09 Pero no es suficiente si es la única diferencia [email protected] 81 Métodos con argumentos variables array de tipo int[] ene-09 [email protected] 82 Sobrecarga de constructores ene-09 [email protected] this en un constructor debe ser la primera línea 83 Más sobre constructores Los constructores no se heredan Se puede llamar a los constructores de las clases padre No hay Constructor sin parámetros en la clase padre ene-09 [email protected] 84 Clase Object Equals Distinto de == Equals equivalencia == misma referencia Se debe sobreescribir hashCode() a la vez toString ene-09 Devuelve representación en String de los valores del objeto [email protected] 85 Equals y hashCode ene-09 [email protected] 86 Clases envoltorio Java no considera los tipos de datos primitivos como objetos De String a int ene-09 [email protected] 87 Conversión automática: autoboxing Boxing, unboxing Autoboxing, autounboxing ene-09 [email protected] 88 Contenidos ene-09 [email protected] 89 Palabra clave static static declara miembros (atributos, métodos y clases anidadas) que están asociados a una clase en vez de a una instancia de la clase. ene-09 [email protected] Si no es private90 Métodos de clase static Error de compilación, atributo no estático ene-09 [email protected] 91 Inicializadores estáticos Se ejecutan al cargar la clase Propiedad del sistema Ejecución: ene-09 [email protected] 92 Palabra clave final Aplica a clases, métodos y variables Clases: No es posible crear subclases Métodos: No se puede redefinir ene-09 No son métodos virtuales, permite optimización en tiempo de ejecución Variable: Se comporta como una constante [email protected] 93 Variables finales vacías Solo pueden asignarse una vez y… ene-09 [email protected] Si es atributo, en el constructor de la clase Si es variable de método, en cualquier parte del método pero solo una vez 94 Tipos enumerados ene-09 [email protected] 95 Tipos enumerados avanzados ene-09 Se permite añadir métodos El constructor es privado [email protected] 96 Clases abstractas La clase base indica que operaciones deben soportar las subclases pero no tiene conocimiento para resolver las operaciones ene-09 [email protected] 97 Clases abstractas ene-09 [email protected] 98 Interfaces ene-09 [email protected] 99 Interfaces Definen un contrato entre código cliente y la clase que proporciona la implementación ene-09 Una clase implementa un interfaz definiendo todos sus métodos Muchas clases pueden implementar un interfaz sin que haya jerarquía entre ellas Una clase puede implementar varios interfaces herencia múltiple de interfaces Los nombres de interfaz son tipos de variables referencia Conversiones de tipos e instanceOf [email protected] 100 Interfaces Sin necesidad de indicarlo: ene-09 Todos los métodos declarados en una interfaz son públicos y abstract Todos los atributos son public, static y final constantes [email protected] 101 Múltiples implementaciones ene-09 [email protected] 102 Mezcla ene-09 [email protected] 103 Múltiples interfaces ene-09 [email protected] 104 Usos de las interfaces Declarar métodos que serán implementados por una o varias clases Dar a conocer la interfaz de programación de un objeto sin revelar el verdadero cuerpo de la clase (esto puede ser útil al distribuir un paquete de clases a otros desarrolladores) Identificar las similitudes entre clases no relacionadas sin tener que establecer ninguna relación entre ellas Simular la herencia múltiple declarando una clase que implemente varias interfaces ene-09 [email protected] 105 Contenidos ene-09 [email protected] 106 Excepciones y aserciones Excepciones: mecanismo de gestión de errores Muy común en los lenguajes OO Aserciones: forma de verificar ciertos supuestos sobre la lógica de un programa ene-09 Pueden suprimirse al ejecutar el código (las excepciones no) [email protected] 107 Tipos de Excepciones Chequeadas Indican situaciones de error que se espera que el programador gestione (escriba código para ello) No chequeadas ene-09 Indican errores en el código o el entorno de imposible o difícil recuperación no se obliga al programador a escribir código para gestionarlas Errores: subtipo de no chequeadas, indican problemas en la JVM (OutOfMemoryError, etc) [email protected] 108 Excepciones, ejemplo ene-09 [email protected] 109 Sentencia try-catch ene-09 [email protected] 110 Uso de múltiples cláusulas catch ene-09 [email protected] 111 Mecanismo de apilamiento de llamadas Si una sentencia envía una excepción que no se gestiona en el método que la rodea, la excepción se envía al método que ha efectuado la llamada Si tampoco la gestiona el método de llamada, se vuelve a enviar al método inmediatamente anterior, y así sucesivamente. Si, cuando la excepción llega al método main(), éste tampoco la gestiona, la excepción interrumpe el programa de forma irregular. ene-09 [email protected] 112 Propagación de la excepción: ejemplo Ejecución ene-09 [email protected] 113 Propagación: otro ejemplo Ejecución ene-09 [email protected] 114 Cláusula finally ene-09 Garantiza que el código de su bloque siempre se ejecuta, incluso si se lanza excepción No detiene la propagación de la excepción [email protected] 115 Categorías de excepciones No Chequeadas Chequeadas ene-09 [email protected] 116 Categorías de excepciones Error: RuntimeException: Indica problemas en la JVM, no son errores recuperables. La JVM debe parar. Errores de consistencia del programa, generalmente por errores de programación. El programa no se suele poder recuperar. Exception: ene-09 Problemas en tiempo de ejecución causados por efectos del entorno y suelen poder gestionarse [email protected] 117 La regla de la gestión o la declaración Aplica a excepciones chequeadas Si un bloque de código lanza una excepción: O la gestiona O declara que la lanza ene-09 [email protected] 118 Sobrescritura de métodos y excepciones Es hija de IOException No compila, Exception no es hija de IOException ene-09 [email protected] 119 Creación de excepciones personalizadas ene-09 [email protected] 120 Aserciones Si la expresión booleana no es true se provoca AssertionError y el programa aborta Chequean consistencia interna del programa Implementar programación por contrato: ene-09 Postcondiciones Invariantes Las precondiciones lanzan excepciones [email protected] 121 Usos recomendados de las aserciones Postcondiciones e invariantes de clase Invariantes del flujo de control ene-09 [email protected] 122 Usos inapropiados de las aserciones Verificación de los parámetros de un método public (precondiciones) Se deben lanzar siempre Exception IllegalArgumentException o NullPointerException Las aserciones se deshabilitan cuando el programa está en producción, este chequeo no se tiene que deshabilitar ene-09 [email protected] 123 Control de la evaluación de las aserciones en runtime Las aserciones son útiles durante el desarrollo y la fase de pruebas Una vez validado el programa, en explotación se deshabilitan para mejorar rendimiento Por defecto la JVM NO chequea asertos ene-09 [email protected] 124 Contenidos ene-09 [email protected] 125 API Collections Una colección es un objeto que administra un grupo de objetos Los objetos de la colección se llaman elementos Las colecciones suelen trabajar con numerosos tipos de objetos, pero todos ellos son de un mismo tipo (todos descienden de un mismo tipo de nivel superior) ene-09 [email protected] 126 API Collections El API Collections contiene interfaces que asignan los objetos a uno de los siguientes grupos: Collection: un grupo de objetos que se denominan elementos ene-09 Set: una colección sin orden específico, que no admite duplicados. List: una colección ordenada que admite duplicados. [email protected] 127 Jerarquía de Collections ene-09 [email protected] 128 Implementaciones de las interfaces ene-09 [email protected] 129 Ejemplo con Set Salida ene-09 Los elementos no aparecen en el mismo orden en el que se agregaron. [email protected] 130 Ejemplo con List Salida ene-09 [email protected] 131 Interfaz Map También denominados arrays asociativos Un Map guarda asignaciones de claves a valores Map no admite claves duplicadas y una clave sólo puede asignarse a un valor Map: tres métodos para ver contenido como colecciones: ene-09 entrySet: devuelve una variable Set que contiene todos los pares formados por una clave y un valor. keySet: devuelve una variable Set con todas las claves del mapa. values: devuelve una variable Collection con todos [email protected] 132 los valores contenidos en el mapa. Jerarquía Map ene-09 [email protected] 133 Ejemplo con Map ene-09 [email protected] 134 Ordenación de colecciones En las List los elementos se guardan en el orden de inserción Las List se pueden ordenar creando una nueva lista con los elementos insertados en el orden adecuado Collections.sort(…) En SortedSet y SortedMap se guardan siguiendo: ene-09 El orden “natural” de los elementos O un orden especificado distinto del natural [email protected] 135 Ordenación de collections Orden natural: Las clase debe implementar el interfaz Comparable Otros criterios de ordenación: ene-09 Se deben implementar clases Comparator [email protected] 136 Uso de comparable ene-09 [email protected] 137 Uso de Comparator ene-09 [email protected] 138 Uso de Comparator ene-09 [email protected] 139 Colecciones con Genéricos Sin genéricos Con genéricos Con genéricos y autoboxing ene-09 [email protected] 140 Ejemplo con Set genérico ene-09 [email protected] 141 Comparación ene-09 [email protected] 142 API Collections ahora genérico ene-09 [email protected] 143 Iteradores Permiten recorrer la colección hacia delante El orden en el que se encuentran es determinista o no dependiendo del tipo de colección ene-09 Set no es determinista SortedSet si lo es, orden natural List tb lo es, orden de insercción [email protected] 144 Iteradores Todas las colecciones producen iteradores List soporta un iterador especial con funcionalidad añadida ene-09 Recorrido inverso Inserción Modificación [email protected] 145 Bucle for mejorado ene-09 [email protected] 146 Contenidos ene-09 [email protected] 147 Argumentos de la línea de comandos ene-09 [email protected] 148 Propiedades del sistema Properties almacena pares clave=valor, ambos String Estas propiedades son las que “conoce” la JVM en el momento del arranque ene-09 [email protected] 149 Principios básicos del flujo de E/S Un flujo es una secuencia de datos procedentes de una fuente en dirección a un sumidero Normalmente, un programa representa un extremo de ese flujo, mientras que el otro extremo lo constituye otro nodo (por ejemplo un archivo) Las fuentes y sumideros también se denominan flujos de entrada y flujos de salida Un flujo de entrada solo se lee Un flujo de salida solo se escribe ene-09 [email protected] 150 Flujos de bytes. Métodos InputStream Siempre se deben cerrar al terminar Hacerlo en un finally Devuelven int que representan al byte leído ene-09 [email protected] 151 Flujos de bytes. Métodos OutputStream ene-09 [email protected] 152 Flujos de caracteres. Métodos Reader Devuelve int representando al carácter Unicode (32 bits) leído ene-09 [email protected] 153 Flujos de caracteres. Métodos Writer ene-09 [email protected] 154 Flujos de nodos Son los extremos finales de cadenas de flujos de procesamiento ene-09 Fuentes o sumideros [email protected] 155 Reader y Writer: Ejemplo ene-09 [email protected] 156 Flujos en búfer ene-09 Buffered[R/W] permite leer líneas enteras Añaden procesamiento a los char servidos por FileReader y FileWriter Son nodos intermedios de procesamiento [email protected] 157 Concatenación de flujos de E/S ene-09 [email protected] 158 Flujos de procesamiento Van en la parte intermedia de las cadenas de procesamie nto ene-09 Clases de utilidad para implementar [email protected] procesamiento particular No son nodos extremos 159 Ejemplo de cadenas de procesamiento ene-09 [email protected] 160 Clases básicas de flujos de bytes ene-09 [email protected] 161 Clases básicas de flujos de bytes ene-09 [email protected] 162 Clases básicas de flujos de caracteres ene-09 [email protected] 163 Clases básicas de flujos de caracteres ene-09 [email protected] 164 Codificaciones de caracteres UTF-8, UTF-16, ISO-8859-1, etc Diferencia entre tabla de caracteres y representación binaria de los caracteres Flujos de texto reconocen las codificaciones binarias Es posible indicar a los Flujos de caracteres el uso de Codificadores ene-09 [email protected] 165 ene-09 [email protected] 166 ene-09 [email protected] 167 Serialización Convertir un objeto a una secuencia de bytes que puede: Sólo se serializan los atributos, no los métodos La clase debe implementar el interfaz Serializable no tiene métodos, solo marca Ser guardada en soporte persistente Ser transmitida por la red Todos los atributos deben ser serializables Si alguno no lo puede ser se debe marcar como transient Se serializan grafos de objetos ene-09 Si un objeto referencia a otros (y estos a su vez…) se serializan todos los referenciados (a no ser que sean transient) [email protected] 168 Clases serializables Determinadas clases por su naturaleza no son serializables: Streams, Threads, etc. El modificador de acceso no tiene efecto ene-09 [email protected] 169 Escritura y lectura de un flujo de objetos ene-09 [email protected] 170 Contenidos ene-09 [email protected] 171 E/S de consola Java permite interacción con la consola usando java.lang.System ene-09 System.out: es un PrintStream inicialmente conectado a la ventana de terminal que haya abierto la aplicación Java System.in: es un InputStream inicialmente conectado al teclado del usuario System.err: es un PrintStream conectado también a la ventana de terminal [email protected] 172 Escritura en salida estándar ene-09 [email protected] 173 Lectura de la entrada estándar ene-09 [email protected] 174 Salida en formato simple ene-09 [email protected] 175 Entrada en formato simple ene-09 [email protected] 176 Archivos y E/S de archivos Clase File Proporciona utilidades para manejar información de ficheros y directorios de forma independiente de la plataforma Pero no para leerlos ni escribirlos (para eso se usan flujos) File miArchivo; miArchivo = new File("miarchivo.txt"); miArchivo = new File("MisDocs", "miarchivo.txt"); File miDir = new File("MisDocs"); miArchivo = new File(miDir, "miarchivo.txt"); ene-09 [email protected] 177 Clase File ene-09 [email protected] 178 Lectura de archivo caracteres ene-09 [email protected] 179 Escritura de archivo caracteres ene-09 [email protected] 180 Contenidos ene-09 [email protected] 181 Java Foundation Classes (JFC) JFC: conjunto de paquetes para creación de interfaces gráficas (GUI) Conjunto de componentes Swing (sustituyen a AWT) Gráficos 2D: Estilo de interfaz adaptable (look-and-feel) ene-09 El mismo componente aparece con el aspecto del S.O. en el que se ejecuta Windows, Motif y Metal. API de accesibilidad. dibujo avanzado, manipulaciones de color, formas y transformaciones (rotación, corte, deformación de objetos, etc.) y tratar texto lectores y amplificadores de pantallas, transformación de texto en voz, etc Drag and Drop Internacionalización [email protected] 182 Look and feel ene-09 [email protected] 183 Arquitectura de Swing Se basa en el patrón MVC, pero con variantes ene-09 [email protected] 184 Arquitectura de modelodelegado Variante de MVC usada por Swing La vista y el controlador se funden, solo queda separado el modelo ene-09 Es modelo suele ser una representación desde el punto de vista del GUI de la implementación real del modelo [email protected] 185 Paquetes de Swing ofrece funciones de adaptación del estilo de interfaz componentes de texto editables y no editables Componentes Visuales ene-09 Básicos [email protected] 186 Composición de una interfaz gráfica Tres tipos de elementos: Contenedores Componentes Derivan de la clase JComponent: JComboBox, JAbstractButton, JTextComponent, etc… Administradores de diseño ene-09 Todos los componentes de una GUI se agregan a estos contenedores JFrame, JDialog, JWindow y JApplet BorderLayout, FlowLayout y GridLayout, etc… [email protected] 187 Elementos de la GUI ene-09 [email protected] 188 Contenedores Swing ene-09 [email protected] 189 Componentes Swing ene-09 Botones Componentes de texto Componentes de visualización de información no editable Menús Componentes de pantalla con formato Otros controles básicos [email protected] 190 Propiedades de los componentes Swing ene-09 [email protected] 191 Administradores de diseño Determinan el tamaño y la posición de los componentes dentro de un contenedor Alternativas: Fijar pociones absolutas en pixels Permitir redimensionamiento automático del interfaz ene-09 Problemas de portabilidad entre plataformas y disposiitvos de visualización Realizado por el administrador de diseño [email protected] 192 Misión de los administradores de diseño Gestionar el redimensionamiento de objetos de la interfaz gráfica por parte del usuario Permitir el uso de distintos tipos y tamaños de letra que hacen diferentes sistemas operativos o su personalización por parte del usuario Tratar los requisitos de disposición del texto que tienen las diferentes configuraciones internacionales (de izquierda a derecha, de derecha a izquierda, vertical) Cada administrador de diseño organiza los componentes según unas normas predeterminadas ene-09 [email protected] 193 Administradores de diseño ene-09 [email protected] 194 Adm. de diseño. Ejemplos ene-09 [email protected] 195 Construcción de la GUI Con herramientas de generación de código de interfaces Borland, EclipseVE, MyEclipse, Matisse ... (no se incluye en este curso) De forma programática ene-09 Útil en aprendizaje y experimentación Programación poco eficiente, el código es muy tedioso y repetitivo [email protected] 196 Aplicación HelloWorldSwing ene-09 [email protected] 197 Contenidos ene-09 [email protected] 198 Qué es un evento Cualquier acción del usuario en la interfaz produce un evento El evento captura información acerca de lo ocurrido, en qué componente, cuando ene-09 [email protected] 199 Manejo de los eventos Los eventos que afectan a la aplicación deben ser procesados Son procesados por un manejador de eventos (un método) que debe estar asociado a la fuente de eventos Un evento es un objeto que porta la información de la ocurrencia ene-09 getActionCommand getModifiers getWhen paramString [email protected] 200 Modelo de delegación Cada fuente de eventos, para cada evento, puede tener asignados varios manejadores de eventos ene-09 También se les llama event listeners [email protected] 201 Ejemplo de receptor de eventos Se podrían asociar varios listeners para el mismo evento ene-09 [email protected] 202 Categorías de eventos Para cada categoría de evento el receptor debe implementar una interfaz ene-09 La interfaz obliga a implementar uno o más métodos [email protected] 203 Categorías de eventos, métodos e interfaces ene-09 [email protected] 204 Eventos, métodos e interfaces… ene-09 [email protected] 205 Eventos, métodos e interfaces ene-09 [email protected] 206 Ejemplo complejo ene-09 [email protected] 207 Adaptadores de eventos En vez de implementar directamente las interfaces de los listener… Lo que obliga a implementar todos los métodos aunque no se esté interesado … se pueden usar clases adaptadoras ya implementadas ene-09 Dan implementación por defecto (vacía) a todos los métodos [email protected] 208 Adaptadores: ejemplo de uso ene-09 [email protected] 209 Control de eventos con clases internas ene-09 [email protected] 210 Control de eventos con clases anónimas ene-09 [email protected] 211 Creación de un menú ene-09 [email protected] 212 Contenidos ene-09 [email protected] 213 Hilos y clase Thread Hilo (o contexto de ejecución): Encapsulamiento de una CPU virtual con su propio código y datos de programa java.lang.Thread: Clase de Java que permite controlar los hilos (representa una CPU) CPU virtual ene-09 [email protected] 214 Hilos: CPU virtual, código y datos Varios hilos pueden compartir: Código pero no datos Datos pero no código Cuando ejecutan código de distintas instancias de una clase Cuando comparten el acceso a un mismo objeto Requiere sincronización entre los hilos La CPU virtual se encapsula como una instancia de la clase Thread ene-09 En el constructor se le pasa el contexto Un objeto: su código y sus datos son el contexto [email protected] 215 Creación del hilo ene-09 Thread recibe una instancia de Runnable (public void run()) [email protected] 216 Planificación de la ejecución de hilos Preemptive pero no Round-Robin Deja de ser ejecutable cuando: Se ejecutan hasta que deja de ser ejecutable o hasta que otro hilo de mayor prioridad se pone en estado ejecutable. Thread.sleep() Bloquea en espera de recurso Se agrupan en función de su prioridad ene-09 [email protected] 217 Estados de un hilo ene-09 [email protected] 218 Thread.sleep() permitir a otros hilos ejecutarse ene-09 Tiempo mínimo dormido (en milisegundos) a no ser que sea interrumpido su sueño [email protected] 219 Fin de los hilos Una vez terminado el hilo no se puede reanudar ene-09 [email protected] 220 Control básico de los hilos Estado del hilo isAlive() Ajuste de la Prioridad setPriority(int) Un int entre MIN_PRIORITY y MAX_PRIORITY Espera por otro hilo Thread.join() Permitir a otros ejecutarse Thread.sleep(int milis) Thread.yield() ene-09 [email protected] 221 Thread.join() ejemplo ene-09 [email protected] 222 Uso de synchronized Permite controlar hilos que comparten datos ene-09 [email protected] 223 Problema con hilos compartiendo datos ene-09 [email protected] 224 Uso de la palabra clave synchronized En java cada objeto tiene un indicador de bloqueo asociado Synchronized adquiere ese bloqueo o espera a que esté libre El bloqueo actúa como un Se adquiere el bloqueo semáforo Synchonized maneja el Otros métodos no sinchronized sí tienen acceso a esos datos, semáforo habría que sincronizarlos todos ene-09 [email protected] 225 Synchronized, conclusiones El mecanismo de sincronización sólo funciona si todo el acceso a los datos “sensibles” es sincronizado Los datos de bloques sincronizados deberían ser private Métodos sincronized ene-09 [email protected] 226 Más estados para el hilo ene-09 [email protected] 227 Interacción de los hilos: wait y notify El hilo que llama a wait() queda a la espera de que otro hilo llame a notify() sobre el mismo objeto Para hacer wait() o notify() se debe poseer el bloqueo desde dentro de bloque synchronized Al hacer wait() se libera el bloqueo ene-09 Lo cogerá uno de los hilos que hará notify() [email protected] 228 Ejemplo de interacción de hilos ene-09 [email protected] 229 Contenidos ene-09 [email protected] 230 Conexión en red: Sockets Socket un modelo de programación de red Socket = IP cliente + Puerto Cliente + IP servidor + Puerto servidor + protocolo ene-09 [email protected] 231 Esquema de conexión ene-09 [email protected] 232 Modelo de conexión en red de Java ene-09 [email protected] 233 Servidor TCP/IP mínimo ene-09 [email protected] 234 Cliente TCP/IP mínimo ene-09 [email protected] 235