Sesión 2

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