SlideShare una empresa de Scribd logo
1 de 150
Descargar para leer sin conexión
22/06/2005 Java - Samuel Marrero Lorenzo 1
Programacion Orientada a
Objetos
Caso practico: Java
22/06/2005 2
Indice
Introducción a Java
Características de Java
Compilacion Java
Preparación del entorno de desarrollo
PrimerPrograma.java
Sintaxis
Paradigmas de software
Programación orientada a objetos
Arrays
Características avanzadas de la orientación a objetos
Características avanzadas del lenguaje
Excepciones
Entrada/salida
Clases útiles
Threads
Programacion grafica
22/06/2005 3
Introducción a Java
Sun Microsystems, líder en servidores para Internet, uno
de cuyos lemas desde hace mucho tiempo es "the
network is the computer" (lo que quiere dar a entender
que el verdadero ordenador es la red en su conjunto y no
cada máquina individual), es quien ha desarrollado el
lenguaje Java
Este lenguaje tiene como propósito los problemas que se
le plantean a los desarrolladores de software por la
proliferación de arquitecturas incompatibles:
tanto entre las diferentes máquinas como
entre los diversos sistemas operativos y sistemas de
ventanas que funcionaban sobre una misma máquina,
añadiendo la dificultad de crear aplicaciones distribuidas
en una red como Internet.
22/06/2005 4
Antecedentes de Java
1991: Sun Microsystems diseña un lenguaje diseñado para
sistemas embebidos,(set-top-boxes), electrodomésticos.
Lenguaje sencillo, pequeño, neutro.
Ninguna empresa muestra interés por el lenguaje
1995: Java se introduce en Internet, lenguaje muy apropiado
Netscape 2.0 introduce la primera JVM en un navegador WWW
(Máquina virtual Java)
Filosofía Java: “Write once, run everywhere”
1997: Aparece Java 1.1. Muchas mejoras respecto a 1.0
1998: Java 1.2 (Java 2). Plataforma muy madura
Apoyado por grandes empresas: IBM, Oracle, Inprise,
Hewtlett-Packard, Netscape, Sun
1999: Java Enterprise Edition. Java comienza a ser una
plataforma de desarrollo profesional.
22/06/2005 5
Caracteristicas de Java (l)
Sun describe Java como un lenguaje “simple, orientado a objetos,
distribuido, interpretado, robusto, seguro, de arquitectura neutra,
portable, de altas prestaciones, multitarea y dinámico”
SIMPLE: elimina las dificultades de otros lenguajes como el uso y
aritmetica de punteros, y la necesidad de liberar memoria (free).
FAMILIAR: Similar sintaxis a la de C++
ORIENTADO A OBJETOS: soportando las caracteristicas de un
lenguaje orientado a objetos
DISTRIBUIDO: permite que pueda correr en red
ROBUSTO: con metodos tales como una fuerte comprobacion de tipos
y no usar punteros impide al programa bloquear al sistema
22/06/2005 6
Caracteristicas de Java (ll)
SEGURO: un programa no puede acceder a los recursos del sistema de
manera incontrolada al comprobar los castings e impedir la aritmetica
de punteros
PORTABLE: una vez compilado puede ser ejecutado en cualquier otra
maquina con una JVM instalada
INTERPRETADO: es mitad compilado (byte-code) y mitad
interpretado (JVM), por eso es mas lento que C, pero mas rapido que
muchos otros lenguajes
MULTITHREAD: soporta la concurrencia a traves de hilos de
ejecucion (flujos de control concurrentes)
DINAMICO: al ser un lenguaje orientado a objetos
22/06/2005 7
Java frente a otros lenguajes
Desventajas frente a otros:
Lenguaje de rendimiento inferior a C debido al
mayor consumo de memoria (JVM) y a su
interpretacion.
Ventajas frente a otros:
Soporta threads de modo nativo
Distribuido u orientado a web por su
independencia de la plataforma (maquina y SO)
Sencillo y robusto
22/06/2005 8
Programacion cliente-servidor
Plug-ins
Scripts
Java
ActiveX
Scriptlets
22/06/2005 9
Tipos de aplicaciones Java
Aplicaciones
– Con o sin interfaz gráfico
Applet
– Aplicaciones que pueden correr dentro de
un navegador de internet
Servlets
– Aplicaciones que corren en un servidor
WWW
JavaBeans
– Componentes combinables
22/06/2005 10
Compilacion Java
Java es un lenguaje mitad compilado y mitad
interpretado.
1. Compilacion: en cualquier maquina
Codigo_fuente.java Codigo_objeto.class
(lenguaje Java) (byte-code)
2. Interpretacion: en una maquina concreta con la JVM
Codigo_objeto.class Proceso ejecutado con la
JVM para dicha maquina
22/06/2005 11
Herramientas de desarrollo
Java
Para poder desarrollar en Java 2:
1. j2sdk1.4.2_04: es el kit de desarrollo de software de Java
2 que vamos a utilizar. Se puede descargar en
java.sun.com
2. IDE: entorno de desarrollo como Eclipse o un editor de
texto plano tipo Bloc de Notas
Para poder ejecutar aplicaciones Java (JVM):
jre: entorno de ejecucion o máquina virtual de Java
22/06/2005 12
Preparación del entorno de
desarrollo
Una vez obtenido el kit de desarrollo hay que preparar Windows para que
puedan ejecutarse las aplicaciones. Dos formas:
1. MiPC Propiedades Avanzadas Variables de entorno
Añadir a la variable Path la ruta donde se encuentran los comandos
de java. En este caso:
Path = %Path%;c:j2sdk1.4.2_04bin
2. MiPC Avanzadas Variables de entorno
Añadir a la variable ClassPath la ruta donde se encuentran las
clases. En este caso en el directorio actual donde compilamos:
set CLASSPATH=.;%CLASSPATH%
22/06/2005 13
Formato de los ficheros fuente
El fichero fuente contiene 3 elementos principales:
Declaración de paquete (opcional)
Sentencias de importación (opcional)
Declaración de clase o de interfaz
Ejemplo: fichero fuente PrimerPrograma.java
import java.io.*;
public class PrimerPrograma
{
...
}
22/06/2005 14
PrimerPrograma.java
// Aplicación de consola de ejemplo PrimerPrograma
import java.io.*;
class PrimerPrograma
{
public static void main( String args[] ) //Función principal
{
System.out.println( “Este es mi primer programa, ☺" );
}
}
C:javaPrimerPrograma.java
____________________________________________________
Resultado: Imprime en pantalla el mensaje de texto.
22/06/2005 15
Ejemplo de compilación y
ejecución de un programa
Creamos un programa en java, compuesto de una clase de
nombre PrimerPrograma. El programa fuente por lo tanto es
PrimerPrograma.java
1. Compilación:
C:java>javac PrimerPrograma.java
Obteniéndose PrimerPrograma.class
2. Ejecución (interpretación)
C:java>java PrimerPrograma
NOTA: Atención minúsculas y mayúsculas
22/06/2005 16
Características del Lenguaje
y sintáxis
Sensible a mayúsculas/minúsculas
Soporta comentarios //, /*…*/
Lenguaje de formato libre
Permite identificadores todos menos vocales acentuadas,
signos de puntuacion y palabras reservadas
Incluye palabras reservadas
Permite variables y constantes las primeras pueden cambiar
su valor y las segundas no
Convenciones de nomenclatura Clases: comienzan en
mayuscula, Metodos y Variables: comienzan en minuscula,
Constantes: todo en mayusculas
Tiene reglas sobre los tipos de datos
22/06/2005 17
Tipos de Datos
Java define dos tipos de datos:
Tipos primitivos
Tipos referencia
Los tipos primitivos son ocho agrupados en
cuatro categorías:
lógico: boolean valores true y false
texto: char
entero: byte, short, int, long
real: float, double
Los tipos referencia son punteros a objetos
22/06/2005 18
Tipo de Datos Referencia
Un tipo referencia guarda un puntero a la dirección donde se
ubica el objeto (32 bits)
Sólo puede almacenar direcciones de objetos de su propio tipo
Ejemplo:
Ordenador pc , sun ;
Usuario user ;
pc = new Ordenador ( ) ; //Crea un objeto de la clase Ordenador
user = pc ; //Error de compilación
sun = pc ; //Correcto
Todas las clases son de tipo referencia
El valor que toma por defecto una variable de tipo referencia es
null
22/06/2005 19
Cadenas de caracteres
La clase String permite manejar cadenas de caracteres
El literal String debe ir entre comillas dobles “ ”
Se puede crear una cadena de caracteres de dos formas:
String nombre = new String(“Pepe”);
String nombre = “Pepe”;
Para concatenar dos cadenas se utiliza el operador +
“Pepe” + “Pérez” = “PepePérez”
No se guarda el carácter de fin de cadena
22/06/2005 20
Operadores Java (l)
Operadores unarios: +, -
Operadores aritméticos: +, -, *, /, % (resto de la división)
Operadores de asignación: =, +=, -=, *=, /=, %=
<var> += <expr> equivale a <var> = <var> + <expr>
Operadores incrementales: ++, --
precediendo a la variable: ++<var>, --<var>
siguiendo a la variable: <var>++, <var>--
i=6; i=6; i=6; i=6;
j=i++; equivale a j=i; i++;
j=++i; equivale a i=i+1; j=i;
dando como resultado i=7 , j=6 i=7 , j=7
22/06/2005 21
Operadores Java (ll)
Operadores relacionales:
== (igual), != (distinto), >, <, >=, <=
Operadores lógicos: && (AND), || (OR), ! (NOT)
&& y || realizan evaluación perezosa:
op1 && op2 si op1 es false, no se evalúa op2
op1 || op2 si op1 es true, no se evalúa op2
Operador instanceof: <objeto> instanceof <clase>
determina si un objeto pertenece a una clase
22/06/2005 22
Operadores Java (lll)
Operador condicional:
? :<exprBooleana> ? <valor1> : <valor2>
Permite bifurcaciones condicionales sencillas
Operadores a nivel de bits: >>, <<, >>>, &, |, ^, ~
op1 >> n desplaza los bits de op1 (con signo) a la derecha n
posiciones
op1 << n desplaza los bits de op1 (con signo) a la izquierda n
posiciones
op1 >>> n desplaza los bits de op1 (sin signo) a la derecha n
posiciones
op1 & op2 Operador AND a nivel de bits
op1 | op2 Operador OR a nivel de bits
op1 ^ op2 Operador XOR a nivel de bits
~op1 Operador complemento (NOT a nivel de bits)
22/06/2005 23
Estructuras de control
Las sentencias de control del flujo de ejecución
permiten tomar decisiones y realizar un proceso
repetidas veces
Hay tres tipos principales de sentencias de control de
flujo:
Condicionales: if, switch
Bucles: for, while, do while
Otras sentencias que permiten interrumpir el flujo
normal de ejecución son break y continue
22/06/2005 24
Sentencias condicionales: if
Si <condicion> entonces
Acciones_Si
Si no
Acciones_No
Fin si
Equivale a (en Java todas las sentencias en minúscula)
if(condición)
{
Acciones_Si;
}
else El grupo de sentencia else y Acciones_No es opcional
{
Acciones_No;
}
22/06/2005 25
Sentencias condicionales:
switch
Según variable hacer
Caso valor1: Acciones_1
Caso valor2: Acciones_2
En otro caso: Acciones_Otro_Caso
Fin según
Equivale a:
switch(variable) variable char o int
{
case valor1: Acciones_1;
break;
case valor2: Acciones_2;
break;
default: Acciones_Otro_Caso;
}
22/06/2005 26
Sentencias repetitivas: while
Mientras se cumpla condición hacer
Acciones
Fin mientras
Equivale a:
while (condicion)
{
acciones;
}
22/06/2005 27
Sentencias repetitivas:
do…while
Repetir
Acciones
Mientras se cumpla condición
Equivale a:
do
{
acciones;
}while (condicion);
22/06/2005 28
Sentencias repetitivas: for
Para var desde v1 hasta v2 paso p hacer
Acciones
Fin para
Equivale a:
for(var = v1; var<=v2; var = var + p)
{
acciones;
}
22/06/2005 29
Pedir datos por consola
Para pedir datos por consola hay que
1. crear un flujo de entrada desde el teclado:
InputStreamReader flujo = new InputStreamReader(System.in);
2. crear un canal con buffer:
BufferedReader teclado = new BufferedReader(flujo);
3. realizar la lectura de los caracteres introducidos:
textoLeido = teclado.readLine(); readLine() devuelve String
…
4. para convertir textoLeido en entero:
b = Integer.parseInt(textoLeido); convierte el texto en su valor
entero
22/06/2005 30
Actividad MayorEdad.java
Realizar un programa Java que pida diez edades al
usuario, escribiendo en pantalla
“Mayor de edad” si la edad es >= 18
“Menor de edad” si la edad es < 18
Resolución C:javaMayorEdad.java
22/06/2005 31
Paradigmas de software
Paradigma de software estructurado y modular:
los programas se dividen en procedimientos independientes con
acceso total a los datos comunes
Algoritmos + Estructuras de Datos = Programas
Paradigma de software funcional:
el resultado de un cálculo es la entrada del siguiente, así hasta
que se produce el valor deseado
Paradigma de software orientado a objetos:
los datos se consideran la parte más importante del programa,
de modo que se agrupan en objetos.
Los objetos modelan las características de los problemas del
mundo real, su comportamiento ante estas características y su
forma de interactuar con otros elementos
Objetos + Mensajes = Programas
22/06/2005 32
Diseño orientado a objetos.
Introducción
Para desarrollar software de calidad duradera, hay que
idear una sólida base arquitectónica que sea flexible al
cambio.
El modelado es una parte fundamental en este aspecto,
construimos modelos para poder visualizar el
comportamiento del sistema y poder controlar su
arquitectura.
La importancia de un buen modelado es aún mayor en
sistemas grandes y complejos de software.
22/06/2005 33
Concepto de UML
El Lenguaje Unificado de Modelado (Unified
Modeling Languaje, UML) es el lenguaje estándar
para realizar el modelado de los sistemas de
software y es independiente del lenguaje de
programación utilizado.
Un lenguaje de propósito general para el modelado
orientado a objetos. Cubre: análisis, diseño,
codificación y pruebas
En este curso nos centraremos en la herramientas
más significativas de UML
22/06/2005 34
Elementos de UML
UML tiene tres elementos fundamentales:
Bloques básicos de construcción
Elementos
Relaciones
Diagramas
Reglas que dictan como se pueden combinar estos bloques básicos. UML tiene reglas para:
Nombres
Alcance
Visibilidad
Integridad
Ejecución
Mecanismos comunes. Que se basen en algún patrón de diseño
Especificaciones
Adornos
Divisiones comunes
Mecanismos de extensibilidad
22/06/2005 35
Diagramas UML
Se utilizan para representar las diferentes vistas del producto final.
Los diagramas de UML se pueden dividir en estáticos (aportan una visión
estática del sistema) y dinámicos (aportan una visión dinámica del sistema).
Los diagramas estáticos:
Diagrama de casos de uso
Diagrama de clases
Diagrama de objetos
Diagrama de componentes
Diagrama de despliegue
Los diagramas dinámicos:
Diagrama de estados
Diagrama de actividad
Diagramas de interacción:
Diagrama de secuencia
Diagrama de colaboración
Son muchos diagramas así que aquí nos centraremos sólo en algunos de ellos.
22/06/2005 36
Diagramas de casos de uso
Los diagramas de casos de uso muestran la funcionalidad del sistema desde la perspectiva que tienen los
usuarios y lo que el sistema debe de hacer para satisfacer los requisitos propuestos. Pueden mostrar el
comportamiento de un sistema completo o de una parte.
Los elementos básicos que se utilizan son:
Actores: Son los diferentes usuarios y el papel que representan dentro del sistema
Caso de uso: Representan todo lo que el usuario puede realizar dentro del sistema
Relaciones: Para asociar los elementos anteriores.
Asociación Indica que un actor o caso de uso se comunica con otro
Generalización Relaciona CU más general con CU más específico
Extensión (*) El CU origen es una especialización de un CU más general (hereda)
Inclusión (*) El CU origen incluye un CU más específico
(*) En estas dos se deben de poner también las letras (incluye, o extiende).
Caso de uso
Actor
22/06/2005 37
Ejemplo Tienda.
Casos de uso
Diagrama de casos de uso:
Subcasos de uso: (Nos centramos en el caso Manejo de Ventas)
Dependiente
ManejoVentas
Dependiente
ManejoVentas
ManejoClientes
RealizarVenta
ModificarVenta
AnularVenta
extiende
extiende
extiende
22/06/2005 38
Ejemplo Tienda.
Descripción de Casos de Uso
Tienda
DESCRIPCION DE CASOS DE USO
Nombre: ManejoVentas
Alias:
Actores: Dependiente
Función: Permitir el mantenimiento de las ventas
Descripción: El Dependiente puede registrar nuevas ventas
identificando todas sus características. El sistema debe validar
que el código esté disponible. También es posible modificar
algunas de sus características o anular una venta si esta no se
ha realizado.
Referencias:
De requerimientos:
De Casos: .
22/06/2005 39
Ejemplo Tienda:
Diagrama conceptual
Muestra todos los conceptos asociados al modelo y sus relaciones.
maneja
1 ∞
Dependiente Venta
tiene tiene
∞
1
1
1
Cliente Producto
22/06/2005 40
Diagrama de clase
Dependiente
Son diagramas estáticos ya que no cambian en el tiempo
Diagrama de clase dependiente:
Parte superior: todas sus propiedades informando del ámbito,
nombre y tipo. Sus características.
Parte inferior: todos sus métodos informando del ámbito, nombre y
tipo. Su comportamiento.
Dependiente
dni : String
nombre: String
salario : float
saluda()
22/06/2005 41
Ejemplo Tienda
Diagrama de clases
En un diagrama de clases se muestran todos los
objetos/clases del modelo y sus relaciones
Venta
cliente : Cliente
productos[ ]: Producto
realizarVenta()
modificarVenta()
anularVenta()
maneja
1 ∞
Cliente
codigoCliente : String
nombre: String
dni : String
insertarCliente()
modificarCliente()
eliminarCliente()
Producto
codigoProducto : String
nombre: String
precio : float
insertarProducto
modificarProducto()
eliminarProducto()
insertarProducto
tiene
tiene
1
∞1
∞
Dependiente
dni : String
nombre: String
salario : float
manejarVenta()
saluda()
22/06/2005 42
Programación orientada a
objetos con Java
Antes de seguir decir que UML es muy
extenso y aquí solo se ha pretendido
mostrar algunos de sus diagramas,
centrándonos en los casos de uso y los
objetos.
Pasamos a ver ahora la POO en el
lenguaje Java
22/06/2005 43
Definicion de clase en Java
Sintaxis:
class <NombreClase>
{
// Declaración de atributos
<tipo> <variable> ;…;<tipo><variable>;
// Declaración de métodos
<tipo> <nombreMétodo> ( <tipo><argumento>, … )
{ ... }
}
El nombre del fichero Java debe coincidir con el de la
clase definida en él <NombreClase>.java
Se recomienda definir una clase por cada fichero Java
22/06/2005 44
Ejemplo: clase Dependiente
//Fichero fuente Dependiente.java:
import java.io.*;
public class Dependiente
{
public String nombre, dni; Declaracion de los
atributos de la clase Dependiente
public float salario;
public void saluda() Declaracion del metodo saluda()
{
System.out.println(“Hola, soy el dependiente. ¿En que puedo
ayudarle?”);
}
}
22/06/2005 45
Actividad
SaludaDependiente.java
Crea un fichero java llamado SaludaDependiente1
con dos clases:
Dependiente: cópiala del ejemplo anterior
SaludaDependiente1: Crea un dependiente y haz
que salude.
Resultado: C:javaSaludoDependiente.java
22/06/2005 46
Tipos de clases
Las clases pueden ser declaradas con los siguientes
modificadores: public, abstract, final.
Una clase pública puede ser utilizada desde cualquier parte del
programa.
Una clase abstracta es aquella que contiene métodos
abstractos (no implementados).
Una clase final es aquella que no puede tener subclases.
Por defecto una clase sólo puede ser utilizada por otras clases
del mismo paquete en el que está declarada.
Declaración de clase:
[modificador] class NombreClase [extends NombreSuperClase]
[implements NombreInterface]
22/06/2005 47
Métodos
Los métodos son bloques de código (subprogramas)
definidos dentro de una clase
Un método tiene acceso a todos los atributos de su
clase
Pueden ser llamados o invocados desde cualquier
sitio
Un método puede invocar a otros métodos
Los métodos que se invocan a sí mismos son
recursivos
En Java no se puede definir un método dentro de
otro
La ejecución de todos los programas se inician con el
método main
22/06/2005 48
Ejemplos de Métodos
double tangente ( double x )
{
return Math.sin(x) / Math.cos(x) ;
}
void imprimirHola ( )
{
System.out.println ( “Hola” ) ;
}
String darFormato ( int dia , int mes , int anno )
{
String s ;
s = dia + “/” + mes + “/” + anno ;
return s ;
}
22/06/2005 49
Paso de Argumentos
Java sólo permite pasar argumentos por valor
El método recibe una copia de los argumentos
El valor de los argumentos de tipo primitivo no
cambia fuera del método
El valor de los argumentos de tipo referencia (un
puntero a un objeto) tampoco cambia fuera del
método, pero el contenido del objeto referenciado
sí se puede cambiar dentro del método
El paso de un tipo primitivo equivale al paso por valor
El paso de un argumento de tipo referencia equivale al
paso por referencia
22/06/2005 50
Ámbito de las Variables (I)
En Java se dispone de tres tipos de variables:
Variables miembro pertenecientes a una clase o atributos
Argumentos de un método de la clase
Variables locales de un método de la clase
NOTA: Los argumentos trabajan como variables locales
class Ejemplo
{
int x ; variable miembro
void metodo ( int y ) argumento
{
int z ; variable local
x = y + z ;
}
}
22/06/2005 51
Ámbito de las Variables (II)
Las variables miembro son visibles desde cualquier parte de la clase
Los argumentos y variables locales sólo son visibles dentro del método al que pertenecen.
Dejan de existir al finalizar el método
Dentro de un método, si coincide el identificador de un argumento o variable local con el de
una variable miembro, sólo se accede a la variable del método. Esto se conoce como
ocultacion de variables.
class A {
int x ;
void metodo ( int y ) {
int x = 2 ;
y = 3*x + y - x ;
...println(y); //imprime 8 }
}
... main(...) {
int arg = 4 ;
A obj = new A();
obj.x = 1 ;
obj.metodo(arg);
...println(arg); imprime 4
...println(obj.x); imprime 1
}
22/06/2005 52
Ejemplo: clase Rectangulo
public class Rectangulo{
int base, altura; Atributos
public void imprimirArea() Imprime area
{
System.out.println(“Area: “+base*altura);
}
public int calculaPerimetro() Devuelve perimetro
{
return 2*(base+altura);
}
}
NOTA: En este ejemplo falta un metodo que inicialice los valores
de los atributos base y altura.
22/06/2005 53
Constructores
Son funciones (similares a los métodos) que toman
el mismo nombre de la clase y cuya misión es la de
realizar la inicialización automática de un objeto
cuando se crea. No devuelven ningún tipo, ni
siquiera void.
Cuando en una clase no se especifica un
constructor explícitamente Java crea un constructor
por defecto para esa clase.
Los constructores se pueden definir sin lista de
parámetros o con lista de parámetros con el
propósito de poder inicializar los objetos con valores
concretos.
22/06/2005 54
Añadir un constructor a la
clase Rectangulo
public class Rectangulo{
//1. Este constructor inicializa el objeto con valores fijos
public Rectangulo(){
base = 4;
altura = 2;
}
//2. Este otro constructor inicializa el objeto con valores concretos
public Rectangulo(int b, int a){
base = b;
altura = a;
}
}
…main(){
Rectangulo r1 = new Rectangulo(); Crea un rectangulo con base 4, altura 2
Rectangulo r2 = new Rectangulo(7, 3); Crea un rectangulo con base7,altura3
}
22/06/2005 55
Actividad: Pedir datos por consola
Conversion de texto a enteros
Hacer la mejora al programa anterior de pedir la base y la altura al
usuario para construir un rectángulo de base b, altura h.
Para pedir la base por el teclado:
…
InputStreamReader flujo = new InputStreamReader(System.in);
BufferedReader teclado = new BufferedReader(flujo);
textoLeido = teclado.readLine(); guardamos la base como texto
…
Para convertir textoLeido en entero:
b = Integer.parseInt(textoLeido); convierte el texto en su valor
entero
22/06/2005 56
La referencia this
Hace referencia al objeto o instancia actual.
Se suele usar para evitar la ocultacion de variables.
Ejemplo:
//Este constructor utiliza los mismos nombres de parametros
//que de atributos
public Rectangulo(int base, int altura){
this.base = base;
this.altura = altura;
}
22/06/2005 57
Destructores
En Java no hay destructores de objetos
como en C++
El garbage collector es el encargado de
liberar la memoria:
Cuando detecta objetos no referenciados
Al final de un bloque que haya utilizado
objetos
22/06/2005 58
Sobrecarga de metodos y de
constructores
A veces se necesitan varios métodos o constructores que
hagan la misma tarea pero con argumentos de tipos distintos
En Java es posible definir dos o más métodos dentro de la
misma clase que tengan el mismo nombre, pero con sus listas
de parámetros distintas.
Es una forma de implementar una caracteristica de la POO
que es el polimorfismo
Diferentes metodos Metodo sobrecargado
void mostrarInt(int i) void mostrar(int i)
void mostrarLong(long l) void mostrar(long l)
void mostrarFloat(float f) void mostrar(float f)
Esta característica se llama sobrecarga de métodos
22/06/2005 59
Ejemplo de sobrecarga
Esta clase sobrecarga su constructor, es decir, proporciona dos formas de construir
un objeto.
public class Rectangulo{
int base, altura;
public Rectangulo(){ construye un objeto con base 4, altura 2
base = 4;
altura = 2;
}
public Rectangulo(int b, int a){ construye un objeto con base b, altura a
base = b;
altura = a;
}
}
22/06/2005 60
Naturaleza del miembro de
una clase
static: Cuando se declara un miembro como static,
se puede acceder a él antes de que se haya creado
ningún objeto de esa clase. Las variables de instancia
static son variables globales y los métodos
declarados como static son funciones globales.
La forma de invocar a un método static de una clase
es: nombre_clase.metodo( )
Los métodos estáticos sólo pueden llamar a otros
métodos estáticos y acceder a datos estáticos.
final: se utiliza en Java para definir constantes.
Ejemplo: final float PI=3.14169
22/06/2005 61
Arrays
Los arrays son objetos que almacenan en una variable múltiples
valores del mismo tipo. Los array pueden ser de tipo primitivo o
array de objetos.
Declaracion de un array entero:
int v[];
Construccion de 10 elementos enteros en el array anterior:
v = new int[10]; un array es un objeto y se construye con new
Inicializacion del array:
for(i=0;i<10;i++)
{
v[i] = i;
}
22/06/2005 62
Ejemplo de Array de objetos
Declaracion de un array de objetos tipo Dependiente:
Dependiente vectorDependientes[];
Construccion de n elementos enteros en el array
anterior:
vectorDependiente = new Dependiente[n]; un array es un objeto y
se construye con new
Inicializacion del array:
for(i=0;i<n;i++)
{…
vectorDependiente[i] = new Dependiente(nombre, dni, salario);
}
22/06/2005 63
Otros ejemplos de Arrays
Declaracion, construccion e inicializacion en una linea:
int[] digitos = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
String[] dias = {“lunes”,“martes”,“miércoles”,“jueves”,“viernes”,“sábado”,“domingo”};
Fecha[] festivos = { new Fecha ( 1, 1, 2000), new Fecha ( 15, 5, 2000),
new Fecha ( 12, 10, 2000), new Fecha ( 6, 12, 2000), }
Recorrido de un array:
int[] lista = new int[10];
for (int i = 0; i < lista.length; i++)
{
System.out.println(lista[i]);
}
Arrays bidimensionales:
int[][] trienio = new int[3][12]; Declaracion y construccion en una linea
22/06/2005 64
Actividad: Creacion e inicializacion de un
array de n objetos de tipo Dependiente
Diseñar la clase principal: VectorDependientes.java
que cree y rellene un vector de n objetos de tipo
Dependiente.
A continuacion haz que saluden.
Nota: n y los datos del dependiente se pediran al
usuario.
Resultado: C:javaVectorDependientes.java
22/06/2005 65
Caracteristicas avanzadas de
la POO
Encapsulamiento y Ocultacion de la
informacion
Polimorfismo
Herencia
22/06/2005 66
Encapsulamiento y Ocultacion
de la Informacion
El encapsulamiento consiste en el agrupamiento de datos y su
tratamiento en una misma estructura como hemos visto
Permite proteger u ocultar algunas partes de los objetos de la
manipulación externa. Esta es la parte privada de la clase
Como norma una clase se comunica con el exterior
proporcionando:
un interface sus metodos publicos
y ocultando sus propiedades impidiendo al exterior conocer
los detalles de implementacion de la clase
22/06/2005 67
Ejemplo de Ocultacion
public class Rectangulo{
private int base, altura; Atributos privados: no pueden ser
accedidos desde el exterior
public Rectangulo(int base, int altura)
{
this.base = base;
this.altura = altura;
}
public int imprimirArea() Metodos publicos: proporcionan el
{ interface con el que el exterior se comunica
return base*altura; con la clase
}
public int calculaPerimetro()
{
return 2*(base+altura);
}
}
22/06/2005 68
Entonces, ¿como accedemos a
las propiedades privadas?
Problema: Al ser las propiedades privadas, es
imposible acceder a ellas desde el exterior
Solucion: proporcionar en la clase dos metodos
publicos de la siguiente forma:
1. damePropiedad() devuelve el valor de la
propiedad
2. ponPropiedad(valor) cambia el valor de
la propiedad pasado por parametro en la
llamada
22/06/2005 69
Ejemplo Rectangulo
public class Rectangulo{
private int base, altura; Atributos privados
…
public int dameBase() Metodo publico que
{ proporciona el valor de la base
return base;
}
public void ponBase(int base) Cambia el valor de la base
{
this.base = base;
}
public int dameAltura() Metodo publico que
{ proporciona el valor de la base
return altura;
}
public void ponAltura(int altura) Cambia el valor de la base
{
this.altura = altura;
}
}
22/06/2005 70
Actividad:
Diseño de la clase Dependiente
Diseña la clase Dependiente siguiendo el siguiente diagrama de
clase, ocultando sus propiedades y proporcionando métodos
públicos de acceso a las mismas. Crea asimismo un
constructor para esta clase.
A continuación crea un programa que cree un objeto de tipo
Dependiente y hacer que el dependiente salude.
Dependiente
dni : String
nombre: String
salario : float
saluda()
22/06/2005 71
Actividad Dependiente.java
La modificación propuesta en la
actividad anterior puedes verla aquí
C:javaDependiente.java
Realiza el cambio a la clase
SaludaDependiente para usar la nueva
clase Dependiente.
22/06/2005 72
Concepto de Herencia
La POO se basa en una jerarquía de clases que consiste
en agrupar atributos y/o métodos comunes
Las clases descendientes se llaman subclases
Las clases ascendientes se llaman superclases
Las subclases heredan características y métodos de
las superclases (excepto los constructores)
Ejemplo:
Vertebrados Mamiferos Caninos
Felinos
Aves
Anfibios
22/06/2005 73
Herencia (ll)
Supongamos, por ejemplo, que tenemos la clase Jefe y la clase
Secretaria definidas como sigue:
class Jefe {
private int codigo. numDepart, numTrabajadores;
private String nombre;
private float salario;
}
class Secretaria {
private int codigo. numDepart;
private String nombre;
private float salario;
private Jefe trabajaPara;
}
Las partes comunes se pueden agrupar en una misma clase,
manteniendo las otras dos clases con las partes no comunes y
heredando de esta nueva clase con la palabra reservada extends
22/06/2005 74
Herencia (lll)
class Empleado
{
private int codigo, numDepart;
private String nombre;
private float salario;
}
class Jefe extends Empleado Jefe hereda de Empleado
{ es subclase de Empleado
private int numTrabajadores;
}
class Secretaria extends Empleado Secretaria hereda de Empleado
{ es subclase de Empleado
private Jefe trabajaPara;
}
Para ver la clase Empleado: C:javaEmpleado.java
NOTA: Para que la relacion de herencia sea correcta, la subclase debe satisfacer la
relacion es-un de la superclase.
Ejemplo: Jefe es-un Empleado, Secretaria es-un Empleado y tiene-un Jefe
22/06/2005 75
Sobreescritura de metodos
Una subclase hereda todos los miembros de su superclase,
y puede modificar los métodos que ha heredado de la superclase,
manteniendo los mismos nombres, tipos de retorno y lista de
argumentos
es la forma de implementar el polimorfismo en la ejecución. P.ej. con el
unico metodo imprimirDatos() imprimimos datos de diferentes objetos:
class Empleado
{
...
public int imprimirDatos(){...} Imprime los datos de Empleado
}
class Jefe extends Empleado
{
private int numTrabajadores;
public int imprimirDatos(){...} sobreescrito para imprimir los datos del Jefe
} se añade la impresión del numero de
trabajadores
22/06/2005 76
Ejemplo de sobreescritura
class Empleado
{
private int codigo, numDepart;
private String nombre;
private float salario;
public int imprimirDatos(){
System.out.println(“Nombre: “ + nombre + ” Departamento: “ + numDepart);
}
}
class Jefe extends Empleado
{
private int numTrabajadores;
public int imprimirDatos(){
super.imprimirDatos (); llamada al metodo heredado
System.out.println(“Numero Trabajadores: “ + numTrabajadores);
}
}
Clase Jefe: C:javaJefe.java
22/06/2005 77
Actividad: Crear n empleados
asignados a un jefe
Diseña y completa la clase Jefe proporcionando un constructor
que pida todos sus datos y ocultando sus atributos.
Diseña y completa la clase Empleado proporcionando un
constructor que pida todos sus datos y ocultando sus
propiedades.
¿Qué deberias hacer para asignar un Jefe a un Empleado?
Diseña la clase CrearOficina que pida al usuario n empleados
y asigna los empleados a un jefe pedido tambien al usuario.
Piensa como harias para contener la lista de empleados en la
propia clase Jefe.
Resultado: C:javaCrearOficina.java
22/06/2005 78
Modificador final
El modificador final tiene tres usos:
El primero es para definir una constante con nombre dentro de una
clase.
final double PI = 3.1416;
El segundo uso es para evitar la sobreescritura de métodos. Cuando
un método se declara como final impide que una subclase derivada
pueda reescribir ese método.
final void metodo(){…}
El tercer uso es para evitar que una clase puede ser heredada, es
decir evitar que la clase pueda ser superclase, como consecuencia
todos sus métodos serán final por defecto.
final class A {…}
22/06/2005 79
Modificador static
Para acceder a las variables y métodos de una clase
es necesario crear primero un objeto
El modificador static puede aplicarse a variables y a
métodos para acceder a ellos sin instanciar ningún
objeto
Los miembros estáticos pertenecen a la clase, no a
los objetos
Atributos estaticos: equivalen a variables globales
Metodos estaticos: solo pueden acceder a miembros
estaticos y no pueden sobreescribirse
22/06/2005 80
Clases abstractas
Una clase abstracta es una clase de la que no se pueden crear objetos, no se
puede instanciar
Un metodo abstracto no se implementa
abstract class Mamifero {
…
public abstract void alimentar();
}
class Canino extends Mamifero {
…
public void alimentar(){…} //exige que sea implementado
}
Todas las subclases de una clase abstracta deben implementar sus métodos
abstractos
22/06/2005 81
Interfaces
Una interface es un conjunto de declaraciones de métodos.
Declaración:
interface <NombreInterfaz> {
<tipo> <var1>; <tipo> <var2>;
<tipo> <nombreMétodo1> ( <args> );
<tipo> <nombreMétodo2> ( <args> );…
}
Una clase que implemente el código de la interfaz debe implementar todos sus métodos
class <NombreClase> implements <NombreInterfaz>
{…
<tipo> <nombreMétodo1> ( <args> ) { <código> }
<tipo> <nombreMétodo2> ( <args> ) { <código> }…
}
Definen la interfaz de programacion de un objeto sin mostrar el cuerpo de la clase
Es la forma de implementar la herencia multiple en Java
22/06/2005 82
Interface Animal
interface Animal{
public void nace();
public String getNombre();
public void setNombre(String nombre);
}
Cualquier clase que implemente un interface deberá implementar
todos sus métodos, de lo contrario la clase se convertirá a
abstracta no pudiéndose crear ningún objeto de ella.
22/06/2005 83
Actividad Perro.java
Crear una clase Perro que implemente
la interfaz anterior.
Propiedades: nombre
Interfaz Animal: javaAnimal.java
Resultado actividad: C:javaPerro.java
22/06/2005 84
Paquetes
Los paquetes en Java son contenedores o agrupaciones de clases
utilizados para evitar conflictos de nombres
dividen el espacio de nombres de forma jerárquica, reflejada en un árbol
de directorios, de tal forma que podamos trabajar con clases que tengan
el mismo nombre en diferentes paquetes
definen un ámbito, ayudando a resolver problemas de control de acceso
Al principio del fichero de la clase se indica a que paquete pertenece
la clase de la siguiente forma, de lo contrario se asignan al paquete
por defecto:
package empresa; donde pertenecerán las clases derivadas
Empleado
package paq1.paq2.paq3; si existe una jerarquía de paquetes
Para ejecutar la clase TestEmpresa del paquete empresa:
java empresa.TestEmpresa
22/06/2005 85
Protección de acceso
La siguiente tabla muestra si se permite el acceso a un miembro de una clase según su
modificador de acceso y su ubicación dentro de la jerarquía de paquetes.
private sin
modificador
protected public
Misma clase Sí Sí Sí Sí
Subclase del mismo
paquete
No Sí Sí Sí
No subclase del mismo
paquete
No Sí Sí Sí
Subclase de diferente
paquete
No No Sí Sí
No subclase de diferente
paquete
No No No Sí
22/06/2005 86
Importar paquetes
Como se vio en la transparencia anterior, en ocasiones no es posible
acceder a las clases que están en otros paquetes por lo que se hace
necesario importarlos. Se pueden importar paquetes enteros o clases
individuales:
import java.io.*; importamos el paquete java.io entero (todas sus
clases)
Import java.io.BufferedReader importamos sólo una clase
El paquete java.lang, que contiene todo lo referente al lenguaje
incluyendo incluso los threads (como característica nativa de Java) se
importa implícitamente.
22/06/2005 87
Eclipse
Proyecto CrearOficina
22/06/2005 88
Excepciones
Java incorpora en el lenguaje el manejo de errores
en tiempo de ejecución (división por cero, índice
fuera de límites, fichero que no existe...)
Estos errores reciben el nombre de excepciones
Java proporciona un mecanismo para capturar y
gestionar las excepciones
Programar manejando excepciones hace que se separen el
código de la tarea a realizar y el código de control de errores
Si no se captura una excepción, el interprete Java termina la
ejecución del programa con un mensaje de error y un
trazado de pila indicando donde se produjo
Ejemplo: abrir y leer de un fichero
22/06/2005 89
Gestion de excepciones
Sintaxis:
try{
// Código que puede provocar excepciones
}catch (<NombreExcepción1> e1 ){
// Código que gestiona la excepción e1
}catch (<NombreExcepción2> e2 ){
// Código que gestiona la excepción e2
}
…
finally{
//se ejecuta justo despues de que termine try, independientemente de si
//se genera o no una excepcion
}
Para gestionar excepciones, se coloca el código que puede causarlas
dentro de la cláusula try y tantas cláusulas catch como posibles
excepciones puedan generarse
22/06/2005 90
Ejemplo de captura de
excepciones
public static void main(String[] args)
{
…
try{
InputStreamReader flujo = new InputStreamReader(System.in);
BufferedReader teclado = new BufferedReader(flujo);
textoLeido = teclado.readLine(); // puede generar excepcion
}catch(IOException e)
{
System.out.println(“Error de lectura por teclado”);
exit(0);
}
…
}
22/06/2005 91
Sentencia throws
No se capturan las excepciones sino que se lanzan ‘hacia arriba’
Sera un metodo superior en la cadena de llamada quien capture
la excepcion
Si ningun metodo captura y gestiona la excepcion es el sistema
quien lo hace dando un error y trazado de pila
public static void main(String[] args) throws IOException
{
…
InputStreamReader flujo = new InputStreamReader(System.in);
BufferedReader teclado = new BufferedReader(flujo);
textoLeido = teclado.readLine(); // puede generar excepcion
…
}
22/06/2005 92
Actividad: capturar las
excepciones de CrearOficina
Usa bloques try…catch para capturar las
excepciones generadas por el metodo
readLine().
Ten en cuenta que las excepciones son
de tipo IOException excepciones de
entrada/salida
Resultado: C:javaCrearOficinaTry.java
22/06/2005 93
Sentencia throw
Permite al programador generar excepciones específicas en
sus aplicaciones.
En la clase Empleado podemos lanzar una excepción de tipo
“Salario no válido” si el salario introducido es < 0
public void ponSalario(float salario) throws Exception
{
if ( salario < 0 ) throw ( new Exception (“Salario no válido”));
this.salario = salario;
}
En este caso si el salario es menor que cero se genera una
excepción con el mensaje “Salario no válido” y no se ejecuta la
asignación a la correspondiente variable miembro.
22/06/2005 94
Arbol de excepciones Java
22/06/2005 95
Excepciones personalizadas
El programador de Java puede crear su propia clase
de excepciones
En el siguiente ejemplo crearemos una clase llamada
ValidarCondicion que lanza una excepción
personalizada de tipo Error si la condición a validar
no es correcta.
La clase principal PedirSalario pide un salario al usuario,
valida con el método estático esCorrecta la condición
“salario > 0”
Si la condición no es correcta lanza una excepción del
tipo Error con el mensaje pasado como parámetro.
22/06/2005 96
Excepciones personalizadas
Ejemplo PedirSalario
Clase Error: C:javaError.java
Clase Validar: C:javaValidar.java
Clase PedirSalario:
C:javaPedirSalario.java
22/06/2005 97
Entrada / Salida
Java representa la E/S con un stream (flujo 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 por el stream
Estos conceptos representan cualquier E/S:
lectura/escritura de archivos
comunicación a través de Internet
lectura de la información de un puerto serie
Las clases E/S se encuentran en java.io :
para operaciones con bytes y con caracteres (Unicode-2 bytes)
para entrada (lectura) y para salida (escritura)
22/06/2005 98
Entrada / Salida (ll)
Operaciones con bytes:
para lectura (entrada): clase InputStream
para escritura (salida): clase OutputStream
Operaciones con caracteres (texto):
para lectura (entrada): clase Reader
para escritura (salida): clase Writer
Las cuatro clases son abstractas
Instanciar una subclase de alguna de éstas equivale
a abrir un stream (archivo, recurso de Internet...).
Para cerrarlo, hay que utilizar el método close()
22/06/2005 99
Jerarquia de E/S de bytes
Las clases File., Piped., y ByteArray. indican que hay un dispositivo
con el que se conecta el stream (disco, memoria, URL)
22/06/2005 100
Jerarquia de E/S de caracteres
Reader
BufferedReader
LineNumberReader
CharArrayReader
InputStreamReader
FileReader
FilterReader
PushbackReader
PipedReader
StringReader
Writer
BufferedWriter
CharArrayWriter
OutputStreamWriter
FileWriter
FilterWriter
PipedWriter
StringWriter
PrintWriter
Las clases en negrita indican que hay un dispositivo con el que se
conecta el stream (disco, memoria, etc.)
22/06/2005 101
Nombre de las clases E/S
Se puede deducir la función de una clase según las
palabras que componen su nombre:
InputStream, OutputStream Lectura/Escritura de bytes
Reader, Writer Lectura/Escritura de caracteres
File Ficheros
String, CharArray, Memoria (según el tipo
ByteArray, StringBuffer primitivo indicado)
Piped Tubo de datos
Buffered Buffer
Filter Filtro
Data Intercambio de datos de Java
Object Persistencia de objetos
Print Imprimir
22/06/2005 102
Metodos de
InputStream / Reader
Métodos básicos de lectura:
int read() devuelve un byte / caracter leído o -1 si es fin
de fichero (en el byte de menor peso)
int read(byte[]) lee un conjunto de bytes /caracteres y lo
pone en el array de bytes dado. Devuelve el número de
bytes leídos
int read(byte[],int,int) lee un conjunto de bytes
/caracteres y lo pone en el array de bytes dado empezando
en la posición dada con la longitud dada. Devuelve el
número de bytes leídos
Otros métodos:
void close() cierra el stream abierto
int avaible() devuelve el número de bytes disponibles para
leer
long skip(long) salta el número de bytes/caracteres indicado
22/06/2005 103
Metodos de
OutputStream / Writer
Métodos básicos de escritura:
OutputStream: void write(byte[]) : escribe el array de
bytes/caracteres dado
Writer: void write(char[]) escribe el array de caracteres
dado
Writer: void write(String) escribe una cadena de
caracteres.
Otros métodos:
void close() cierra el stream abierto
void flush() fuerza a que se escriban las operaciones de
escritura que haya pendientes
22/06/2005 104
Lectura y escritura en archivos
Las clases FileInputStream y FileOutputStream
permiten leer y escribir bytes en archivos binarios, o
caracteres de un byte
Las clases FileReader y FileWriter son similares a las
anteriores pero permiten leer y escribir caracteres
Unicode (16 bits) en archivos de texto
Cada llamada a read() o write() accede al disco para
un único byte o un único carácter poco eficiente
Para mejorarlo, se utilizan las clases que
implementan un buffer, de modo que se lee del disco
(o se escribe) un conjunto de bytes o caracteres en
cada acceso
22/06/2005 105
La clase File
La clase File hace referencia a un archivo o un
directorio
Se puede utilizar para obtener información del
archivo o del directorio (tamaño, fecha, atributos...)
Constructores:
File(String nombre)
File(String dir, String nombre)
File(File dir, String nombre)
Ejemplos:
File f1 = new File(“C:windowsnotepad.exe”);
File f2 = new File(“C:windows”, ”notepad.exe”);
File f3 = new File(“C:windows”);
File f4 = new File(f3, “notepad.exe”);
22/06/2005 106
Ejemplo de copia de un
fichero de texto en otro
import java.io.*;
public class Copia {
public static void main(String[] args) throws IOException {
File fichOrigen = new File(“origen.txt");
File fichDestino = new File(“destino.txt");
FileReader entrada = new FileReader(fichOrigen);
FileWriter salida = new FileWriter(fichDestino);
int c;
while ((c = entrada.read()) != -1) salida.write(c);
entrada.close();
salida.close();
}
}
22/06/2005 107
Ejemplos de lecturas y
escrituras en ficheros
Lectura de un fichero de 20 en 20
bytes/caracteres: C:javaFLectura.java
Lectura de un fichero de acceso directo
carácter a carácter:
C:javaFDirecto.java
Manejo de un fichero de acceso directo
: C:javaManejarDirecto.java
22/06/2005 108
Serialización
La serialización es el proceso por el cuál
un objeto o una colección de objetos se
convierten en una secuencia de bytes
que pueden ser almacenados en fichero
y recuperados posteriormente para su
uso.
Se dice entonces que el objeto u
objetos tienen persistencia.
22/06/2005 109
Persistencia.
Interface Serializable
Para utilizar esta capacidad los objetos que
deseamos almacenar tienen que implementar
la interface Serializable.
Se utilizan las subclases ObjectInputStream y
ObjectOutputStream de InputStream y
OutputStream respectivamente
Todas las propiedades del objeto, excepto las
estáticas, serán serializadas
22/06/2005 110
Ejemplo de persistencia.
En el siguiente ejemplo se serializan los
objetos de tipo Alumno, cuya clase
implementa el interface Serializable.
La clase PersistenciaAlumno crea un
flujo de salida FileOutputStream que se
filtra a través de ObjectOutputStream
en el que se almacenarán los objetos
Alumno pedidos al usuario.
22/06/2005 111
Ejemplo PersistenciaAlumno
Clase Alumno: C:javaAlumno.java
Clase PersistenciaAlumno:
C:javaPersistenciaAlumno.java
22/06/2005 112
Lectura de un archivo de
Internet
Java proporciona un mecanismo que permite leer archivos de
Internet mediante un stream
La clase URL del paquete java.net representa una dirección de
Internet
El siguiente fragmento abre un un stream de lectura con origen
en la dirección dada
URL dir = new URL(“http://www.ulpgc.es/index.html”);
InputStreamReader isr = new InputStreamReader(dir.openStream());
BufferedReader br = new BufferedReader(isr); para filtrar cadenas de
caracteres
String s = br.readLine(); lectura de una cadena de caracteres de la URL
...
22/06/2005 113
Clases útiles
Las clases en Java son muy numerosas, pero existen algunas
clases que pueden resultar interesantes para programar en
Java. Entre otras estas son:
Clase Math
Clases envolventes:
Integer
Float
Double
Boolean
Clase String
Clase StringTokenizer
22/06/2005 114
Clases envolventes de los
datos primitivos
Las clases envolventes (Integer, Float, ...) de los
datos primitivos (int, float, ...) son clases que
permiten conversiones, redondeos y otras
operaciones sobre los tipos de datos primitivos.
Muchos de los métodos son estáticos, es decir, no es
necesario instanciar la clase para invocarlos
A continuación se ven algunos métodos para la clase
Float que son simétricos para las otras clases
22/06/2005 115
Clase Float: algunos métodos
interesantes
Conversiones Clase/Cadena
Float F;
String s = Float.toString( F ); pasa un float a cadena
F = Float.valueOf( "3.14" ); pasa una cadena a float
Conversiones de Clase a tipo de dato
Float F = new Float( Float.PI );
String s = F.toString();
int i = F.intValue(); long l = F.longValue();
float f = F.floatValue(); double d = F.doubleValue();
22/06/2005 116
Clase String
Un objeto de tipo String representa una cadena
constante
Constructores:
String s1 = new String(“hola”);
String s2 = new String();
Otra forma de inicializar un String:
String s3;
s3= “otra vez hola”;
22/06/2005 117
Clase String: más métodos
Métodos básicos:
int length(); int l = s.length(); 4
char charAt( int indice ); char o = s.charAt(2); ‘o’
int indexOf( char carácter ); int ind = s.indexOf (‘o’) 2
Comparacion de String:
boolean equals( Object obj ); s1.equals(s3) false
boolean equalsIgnoreCase( String str2 );
Subcadenas:
String substring (int comienzo, int final);
Mayúsculas / minúsculas:
s.toLowerCase(); s.toUpperCase();
22/06/2005 118
StringBuffer
Un objeto de la clase String una vez inicializado, no
puede ser modificado: ni concatenado ni asignado
nuevamente. Cualquier modificación resultará sobre
otro objeto.
En cambio la clase StringBuffer sí puede sufrir
modificaciones sobre el mismo objeto, como
concatenaciones usando el método append.
Ejemplo:
StringBuffer sb = “hola “;
Sb.append(“que “);
Sb.append(“tal.”);
22/06/2005 119
El paquete java.util
Contiene numerosas clases e interfaces
para la gestión de objetos en listas y
colecciones.
22/06/2005 120
Clase Date
Representa una fecha: el dia, mes, año, horas,
minutos y segundos
Date() crea objetos con fecha y hora actual
Date(año, mes dia) con hora 00:00:00
date(año, mes, dia, horas, minutos, segundos)
Metodos:
getDate() devuelve la fecha actual
toString() devuelve la cadena correspondiente
22/06/2005 121
Clase StringTokenizer
Permite realizar un análisis gramatical (parse) de una
cadena de entrada
Se usa para separar las palabras de una cadena
StringTokenizer token = new StringTokenizer(“Hola ,a todo el, mundo”, ‘ ,‘);
//pasando la cadena y los delimitadores (esp, coma)
while( st.hasMoreTokens() )
{
String palabra = st.nextToken();
System.out.println( palabra + “n” );
}
22/06/2005 122
Clase Math
Es la clase ‘Matemáticas’ y no se instancia
Proporciona métodos matemáticos estáticos:
Math.abs( x ) devuelve el valor absoluto de x
Math.sin ( double x ); Math.cos ( double x ), etc.
Math.sqrt ( double x ) raíz cuadrada
Math.pow ( double x, double y ) potenciación
Math.random () genera double entre 0 y 1 aleatorio
Math.E; Math.PI constantes matemáticas
22/06/2005 123
La clase Vector
La clase Vector (paquete java.util) representa una colección
heterogénea de objetos (referencias a objetos de tipo Object o a
cualquiera de sus subclases) y que puede crecer o decrecer a medida
que lo requiere la aplicación.
Atributos:
int capacityIncrement: incremento en la capacidad del vector. Si vale cero,
duplica el tamaño actual del vector
int elementCount: número de elementos válidos del vector
Object[] elementData: array de objetos donde se guardan los elementos
Constructores:
Vector(): Crea un vector vacío (capacidad 10, incremento 0)
Vector(int initialCapacity): Crea un vector vacío con la capacidad dada
(incremento 0)
Vector(int initialCapacity, int initialIncrement): Crea un vector vacío con la
capacidad y el incremento dados
22/06/2005 124
La clase Vector (ll)
Métodos:
int capacity() devuelve la capacidad que tiene el vector
int size() devuelve el número de elementos en el vector
boolean contains(Object elem) devuelve true si el vector contiene el objeto
especificado
int indexOf(Object elem) devuelve la posición de la primera vez que
aparece el objeto que se le pasa
Object elementAt(int index) devuelve el elemento situado en la posición
indicada (*)
void setElementAt(Object elem,int index) reemplaza el objeto que
corresponde al índice por el objeto que se le pasa (*)
void removeElementAt(int index) borra el objeto situado en la posición
indicada (*)
void addElement(Object elem) añade un objeto al final
void insertElementAt(Object elem,int index) inserta el objeto que se le
pasa en la posición indicada, desplazando el resto de elementos en el
vector (*)
Los métodos con (*) pueden lanzar la excepción ArrayIndexOutOfBoundsException
22/06/2005 125
Ejemplo Vector
Programa AulaVector que pide alumnos
al usuario y los inserta en una lista de
tipo Vector
Código: C:javaAulaVector.java
22/06/2005 126
Programacion concurrente
Threads
Un ordenador con un solo procesador es monotarea
Algunos sistemas operativos simulan multitarea,
dividiendo el tiempo del procesador entre varios
procesos
Un proceso es cada uno de los programas o
aplicaciones que se ejecutan de forma independiente
Tiene asociado:
Tiempo de CPU
Memoria para CÓDIGO
Memoria para DATOS
Un thread (también llamado hilo o hebra de ejecución o
proceso ligero) es un flujo de ejecución simple dentro de un
proceso
22/06/2005 127
Threads (ll)
Un único proceso puede tener varios hilos
(multihilo)
Multitarea vs. multihilo
La JVM es un proceso, desde el punto de vista del
SO, con varios threads ejecutándose a la vez:
Garbage Collector
AWT (Abstract Window Toolkit)
Método main()
Un hilo tiene asociado tiempo de CPU, memoria para
código y memoria para datos, pero se puede comunicar,
coordinar y sincronizar con otros hilos.
22/06/2005 128
Creación de un Thread
implementando Runnable
Hay dos formas de crear un thread
1. Declarar una clase que implemente la interfaz Runnable y crear un
objeto de tipo Thread a partir de ella (mejor forma)
class HiloRunnable implements Runnable{
public void run ( ){
System.out.println(“Hola, soy un hilo”);
}
}
class HolaHilo{
public static void main (String args[]){
HiloRunnable hr = new HiloRunnable ( );
Thread t = new Thread(hr); // Crea el hilo
t.start ( ) ; // Lo ejecuta
}
}
22/06/2005 129
Ejemplo: HolaMultihilo
implementando Runnable
class Hilo implements Runnable{
String nombre ;
Hilo ( String n )
{
nombre = n ;
}
public void run ( )
{
try
{
Thread.currentThread().sleep((int)(Math.random()*3000));
}
catch ( InterruptedException e ) { }
System.out.println("Hola, soy " + nombre ) ;
}
}
class MultiHola{
public static void main (String args[]){
for (int i = 0 ; i < 10 ; i++ ) new Thread ( new Hilo("Hilo "+i) ).start();
}
}
Código: C:javaMultihola.java
22/06/2005 130
Creacion de un Thread
heredando la clase Thread
2. La otra forma de crear un thread es crear una clase que herede de la clase
Thread
class HiloThread extends Thread
{
// Sobreescribe el método run()
public void run ( )
{
System.out.println(“Hola Mundo”);
}
public static void main (String args[])
{
Thread t = new HiloThread(); // Crea el hilo
t.start ( ) ; // Lo ejecuta
}
}
Codigo: C:javaHiloThread.java
22/06/2005 131
Ejemplo: HolaMultihilo
extendiendo Thread
class MultiHolaThread extends Thread{
String nombre ;
MultiHolaThread ( String n )
{
nombre = n ;
}
public void run ( )
{
try
{
sleep( (int)(Math.random()*3000) );
}
catch( InterruptedException e ) { }
System.out.println("Hola, soy " + nombre ) ;
}
public static void main (String args[])
{
for (int i = 0 ; i < 10 ; i++ ) new MultiHolaThread("Hilo "+i).start();
}
}
22/06/2005 132
Estados de un thread
22/06/2005 133
MVC: Modelo vista controlador
El Modelo es el objeto que representa los datos del programa. Maneja
los datos y controla todas sus transformaciones. El Modelo no tiene
conocimiento específico de los Controladores o de las Vistas, ni siquiera
contiene referencias a ellos. Es el propio sistema el que tiene
encomendada la responsabilidad de mantener enlaces entre el Modelo
y sus Vistas, y notificar a las Vistas cuando cambia el Modelo.
La Vista es el objeto que maneja la presentación visual de los datos
representados por el Modelo. Genera una representación visual del
Modelo y muestra los datos al usuario. Interactúa con el Modelo a
través de una referencia al propio Modelo.
El Controlador es el objeto que proporciona significado a las ordenes
del usuario, actuando sobre los datos representados por el Modelo.
Cuando se realiza algún cambio, entra en acción, bien sea por cambios
en la información del Modelo o por alteraciones de la Vista. Interactúa
con el Modelo a través de una referencia al propio Modelo.
22/06/2005 134
Ejemplo MVC
En esta aplicación de ejemplo se muestra un
controlador que crea los objetos y los pone a
funcionar.
El modelo en este caso es representado por un dato
que es observado por dos clases observadoras.
Las clase observadoras representan las vistas del
modelo, las diferentes formas que tiene el exterior de
interpretar el modelo.
La clase ValorObservable (modelo) implementa el
interface Observable, mientras que las clases
BarraObservador (vista1) y TextoObservador (vista2)
implementan el interface Observer.
22/06/2005 135
Ejemplo MVC
Controlador: C:javaJava-
MVCControlador.java
Modelo – ValorObservable: C:javaJava-
MVCValorObservable.java
Vista1 – TextoObservador: C:javaJava-
MVCTextoObservador.java
Vista2 – BarraObservador: C:javaJava-
MVCBarraObservador.java
22/06/2005 136
Programacion grafica
El interfaz de usuario es la parte del programa que permite a
éste interactuar con el usuario.
El AWT (Abstract Windows Toolkit) es un conjunto de
herramientas que proporciona Java para crear interfaces
graficos (GUI)
Los elementos AWT están implementados usando toolkits
nativos de las plataformas,
Ventaja: conservan una apariencia semejante a todas las
aplicaciones que se creen para esa plataforma.
Desventaja: de que un interfaz gráfico diseñado para una
plataforma, puede no visualizarse correctamente en otra diferente.
22/06/2005 137
JFC y Swing
Para solucionar esta desventaja, entre otras cosas, se creo JFC
(Java Foundation Clases) cuyas caracteristicas son:
Los componentes Swing: desde botones hasta splitpanes
Soporte de aspecto y comportamiento: ofrece a los componentes
una variedad de aspectos y comportamientos
API Java 2D: permite manejar y tratar graficos 2D e imágenes
Los componentes Swing se diferencian de los AWT en que se
añade J al nombre de los mismos
Los componentes Swing soportan mas capacidades que AWT
Java recomienda usar en las aplicaciones graficas
componentes Swing en lugar de AWT (aunque estos ultimos
todavía pueden ser utilizados)
22/06/2005 138
Un programa Swing
Vamos a realizar una pequeña aplicación Swing que realice
conversiones de Euro a pesetas, y que contenga :
Dos cajas de texto: txtEuros, txtPesetas
Un boton de comando: cmdAceptar
Importar los paquetes adecuados:
import javax.swing.*;
import java.awt.*; suele utilizarse AWT para determinadas cosas
Elegir el aspecto y el comportamiento:
Se puede elegir el aspecto deseado: Motif, Java, Windows
O el aspecto multiplataforma (por defecto): Metal, propio de java
Todo programa Swing tiene al menos un contenedor que
contiene componentes Swing (JFrame, JDialog, JApplet…)
22/06/2005 139
Componentes y contenedores
Un interfaz gráfico está construida en base a elementos gráficos
básicos, los Componentes como son los botones, barras de
desplazamiento, etiquetas, listas, cajas de selección o campos de
texto.
Los Componentes permiten al usuario interactuar con la aplicación. En
el AWT, todos los Componentes de la interface de usuario son
instancias de la clase Component o uno de sus subtipos.
Los Componentes no se encuentran aislados, sino agrupados dentro
de Contenedores. Los Contenedores contienen y organizan la
situación de los Componentes; además, los Contenedores son en sí
mismos Componentes y como tales pueden ser situados dentro de
otros Contenedores.
JFrame, JApplet y JDialog son de primer nivelJPanel, y por ejemplo
JPanel es de nivel intermedio (es a su vez componente).
En el AWT, todos los Contenedores son instancias de la clase
Container o uno de sus subtipos.
22/06/2005 140
Un programa Swing (ll)
public class ConversorEuros extends JFrame{ hereda de JFrame
public ConversorEuros() {
//crear los componentes dentro del frame
//añadirlos a un contenedor de nombre content
Container contenido = this.getContentPane();
//Se termina mostrando el frame
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
this.pack();
this.setVisible(true);
}
} Podria haberse creado una ventana como Frame ventana = new Frame();, de
hecho esto se puede hacer de diferentes formas
Código propuesto: C:javaConversorEuros.java
22/06/2005 141
Conversor: configurar los
botones y las cajas de texto
Se crea una etiqueta y una caja de texto y se añaden al frame
JLabel lblEuros = new JLabel(“Euros: “);
contenido.add(lblEuros);
JTextField txtEuros = new JTextField();
contenido.add(txtEuros);
Se crea un nuevo boton de nombre cmdAceptar y titulo
Convertir
JButton cmdConvertir = new JButton(“Convertir");
cmdConvertir.setMnemonic('i');
cmdAceptar.addActionListener(this);
contenido.add(cmdConvertir);
22/06/2005 142
Manejar evento click en el
boton cmdConvertir
Algunos componentes como los botones pueden generar
eventos, los hay de diferente tipo. Los botones generan eventos
de tipo Action
Para manejar un evento primero es necesario añadir un
‘Escuchador de Eventos’ al objeto que los genera
cmdConvertir.addActionListener(new ManejaBoton());
Una vez detectado un evento por el escuchador se trata ese
evento con un ‘Manejador de Eventos’. En este caso
ManejaBoton es un manejador de eventos Action
22/06/2005 143
Tipos de eventos
ActionListener: El usuario pulsa un botón, presiona Return
mientras teclea en un campo de texto, o elige un ítem de menú.
WindowListener: El usuario elige un frame (ventana principal).
MouseListener: El usuario pulsa un botón del ratón mientras el
cursor está sobre un componente.
MouseMotionListener: El usuario mueve el cursor sobre un
componente.
ComponentListener: El componente se hace visible.
FocusListener: El componente obtiene obtiene el foco del
teclado.
ListSelectionListener: Cambia la tabla o la selección de una
lista.
22/06/2005 144
Manejar Eventos
Crearemos el manejador de eventos GestionaBoton, que implementa
las acciones a realizar cuando se produce un evento. Hay varias
formas de hacer esto (solo veremos esta):
class GestionaBoton implements ActionListener{
public void actionPerformed (ActionEvent e) {
if(e.getActionCommand().equals("Convertir")){
double pesetas;
pesetas = Integer.parseInt(txtEuros.getText())*166.386;
txtPesetas.setText(String.valueOf(pesetas));
}
}
}
Esta clase podria ser interna ya que gestiona solo los eventos de los
botones de esa clase
22/06/2005 145
Actividad: Cambiar la distribucion de
los componentes de ConversorEuros
Cambia el diseño de la ventana de tal
forma que los componentes se
distribuyan formando un grid
Utiliza el metodo setLayout() sobre el
objeto frame
22/06/2005 146
Programacion orientada a
internet
Applets: aplicaciones orientadas al cliente, se
transfieren al cliente y se ejecutan en un
navegador local
Servlets: orientadas al servidor, se ejecutan
en el servidor y los resultados se devuelven
en formato HTML
JSP: misma tecnologia que la anterior pero el
codigo Java esta embebido en el HTML
22/06/2005 147
Applets de Java
Los applets de Java son pequeñas aplicaciones
escritas en lenguaje Java que se ejecutan en el
entorno de un navegador de Internet.
Para que pueda ser ejecutado el applet el navegador
tiene que interpretar una página HTML en la que se
incluya la ejecución de un applet.
Un applet aparece ante los usuarios como una
pequeña aplicación gráfica integrada en el
navegador de Internet.
22/06/2005 148
Estructura básica del applet
El applet sigue un ciclo de vida:
Inicia en el cliente: init(), es el primer
método que ejecuta el applet en el cliente
Funciona: start(), el navegador invoca a
éste método para que inicie la ejecución
Parada: stop(), el navegador ordena al
applet que pare su ejecución
Destuye: destroy(), el navegador ordena al
applet a liberar recursos y memoria
22/06/2005 149
Construir un applet
Para construir un applet hay que
diseñar una clase que extienda Applet o
JApplet e implemente algunos de sus
métodos: init(), start(), stop(),
destroy(), repaint(), etc…
Por último hacer referencia al applet
desde una página web accesible al
cliente desde un servidor web
22/06/2005 150
Ejemplo de applet.
Conversor de euros
Código de la clase:
C:javaAppletConversorEuros.java
Página web: C:javapagina.html

Más contenido relacionado

La actualidad más candente

Funciones de administracion de memoria
Funciones de administracion de memoriaFunciones de administracion de memoria
Funciones de administracion de memoria
Miguel Magaña
 
Base de datos con Netbeans
Base de datos con NetbeansBase de datos con Netbeans
Base de datos con Netbeans
Randy
 
Gestión de archivos
Gestión de archivosGestión de archivos
Gestión de archivos
eduardoed5
 

La actualidad más candente (20)

Funciones de administracion de memoria
Funciones de administracion de memoriaFunciones de administracion de memoria
Funciones de administracion de memoria
 
TUTORIAL DE MySQL WORKBENCH
TUTORIAL DE MySQL WORKBENCHTUTORIAL DE MySQL WORKBENCH
TUTORIAL DE MySQL WORKBENCH
 
Modelos de arquitecturas de computadoras
Modelos de arquitecturas de computadorasModelos de arquitecturas de computadoras
Modelos de arquitecturas de computadoras
 
Entrada y Salida
Entrada y SalidaEntrada y Salida
Entrada y Salida
 
Conexion a bases de datos
Conexion a bases de datosConexion a bases de datos
Conexion a bases de datos
 
Estructura de datos lineales y no lineales
Estructura de datos lineales y no linealesEstructura de datos lineales y no lineales
Estructura de datos lineales y no lineales
 
TRIGGERS O DISPARADORES
TRIGGERS O DISPARADORESTRIGGERS O DISPARADORES
TRIGGERS O DISPARADORES
 
Llave primaria y llave foránea
Llave primaria y llave foráneaLlave primaria y llave foránea
Llave primaria y llave foránea
 
Base de datos con Netbeans
Base de datos con NetbeansBase de datos con Netbeans
Base de datos con Netbeans
 
Procesos de los sistemas operativos
Procesos de los sistemas operativosProcesos de los sistemas operativos
Procesos de los sistemas operativos
 
Estructura de Datos - Unidad 6 Metodos de busqueda
Estructura de Datos - Unidad 6 Metodos de busquedaEstructura de Datos - Unidad 6 Metodos de busqueda
Estructura de Datos - Unidad 6 Metodos de busqueda
 
Gestión de entrada salida
Gestión de entrada salida Gestión de entrada salida
Gestión de entrada salida
 
Restauración de bd
Restauración de bdRestauración de bd
Restauración de bd
 
Archivo secuencial indexado
Archivo secuencial indexadoArchivo secuencial indexado
Archivo secuencial indexado
 
Registros del cpu
Registros del cpuRegistros del cpu
Registros del cpu
 
Administración de memoria el linux
Administración de memoria el linuxAdministración de memoria el linux
Administración de memoria el linux
 
Diseño Base Datos
Diseño Base DatosDiseño Base Datos
Diseño Base Datos
 
Cliente-Servidor
Cliente-ServidorCliente-Servidor
Cliente-Servidor
 
Simulador y emulador
Simulador y emuladorSimulador y emulador
Simulador y emulador
 
Gestión de archivos
Gestión de archivosGestión de archivos
Gestión de archivos
 

Similar a Curso Java Resumen - Curso 2005-2006

Conceptos Fundamentales de POO
Conceptos Fundamentales de POOConceptos Fundamentales de POO
Conceptos Fundamentales de POO
sena
 
Presentacion aplicaciones en java
Presentacion aplicaciones en javaPresentacion aplicaciones en java
Presentacion aplicaciones en java
rsalazar16988
 
Lenguajes de programación orientados a objetos
Lenguajes de programación orientados a objetosLenguajes de programación orientados a objetos
Lenguajes de programación orientados a objetos
Doris Aguagallo
 
Trabajo java
Trabajo javaTrabajo java
Trabajo java
amec0612
 
Programacion no numerica ii
Programacion no numerica iiProgramacion no numerica ii
Programacion no numerica ii
rolmanpaul
 

Similar a Curso Java Resumen - Curso 2005-2006 (20)

[ES] Primeros pasos con la Plataforma Java
[ES] Primeros pasos con la Plataforma Java[ES] Primeros pasos con la Plataforma Java
[ES] Primeros pasos con la Plataforma Java
 
Tipos de datos
Tipos de datosTipos de datos
Tipos de datos
 
Fondo1 (2)
Fondo1 (2)Fondo1 (2)
Fondo1 (2)
 
C1 java introduccion
C1 java introduccionC1 java introduccion
C1 java introduccion
 
C1 java introduccion
C1 java introduccionC1 java introduccion
C1 java introduccion
 
Introducción a la Algoritmia
Introducción a la AlgoritmiaIntroducción a la Algoritmia
Introducción a la Algoritmia
 
Lenguaje java
Lenguaje javaLenguaje java
Lenguaje java
 
Programación con java en Eclipse
Programación con java en EclipseProgramación con java en Eclipse
Programación con java en Eclipse
 
Conceptos Fundamentales de POO
Conceptos Fundamentales de POOConceptos Fundamentales de POO
Conceptos Fundamentales de POO
 
Introduccion a la algoritmia 2011-i
Introduccion a la algoritmia   2011-iIntroduccion a la algoritmia   2011-i
Introduccion a la algoritmia 2011-i
 
Introducción a la algoritmia
Introducción a la algoritmiaIntroducción a la algoritmia
Introducción a la algoritmia
 
Introducción a la algoritmia
Introducción a la algoritmiaIntroducción a la algoritmia
Introducción a la algoritmia
 
Presentacion aplicaciones en java
Presentacion aplicaciones en javaPresentacion aplicaciones en java
Presentacion aplicaciones en java
 
Java basico
Java basicoJava basico
Java basico
 
Lenguaje Java
Lenguaje JavaLenguaje Java
Lenguaje Java
 
Lenguajes de programación orientados a objetos
Lenguajes de programación orientados a objetosLenguajes de programación orientados a objetos
Lenguajes de programación orientados a objetos
 
Lenguaje Java
Lenguaje JavaLenguaje Java
Lenguaje Java
 
Grupo1
Grupo1Grupo1
Grupo1
 
Trabajo java
Trabajo javaTrabajo java
Trabajo java
 
Programacion no numerica ii
Programacion no numerica iiProgramacion no numerica ii
Programacion no numerica ii
 

Último

ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
zulyvero07
 
PLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docxPLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docx
lupitavic
 

Último (20)

SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
 
plande accion dl aula de innovación pedagogica 2024.pdf
plande accion dl aula de innovación pedagogica 2024.pdfplande accion dl aula de innovación pedagogica 2024.pdf
plande accion dl aula de innovación pedagogica 2024.pdf
 
Programacion Anual Matemática4 MPG 2024 Ccesa007.pdf
Programacion Anual Matemática4    MPG 2024  Ccesa007.pdfProgramacion Anual Matemática4    MPG 2024  Ccesa007.pdf
Programacion Anual Matemática4 MPG 2024 Ccesa007.pdf
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
 
Programacion Anual Matemática5 MPG 2024 Ccesa007.pdf
Programacion Anual Matemática5    MPG 2024  Ccesa007.pdfProgramacion Anual Matemática5    MPG 2024  Ccesa007.pdf
Programacion Anual Matemática5 MPG 2024 Ccesa007.pdf
 
Unidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la InvestigaciónUnidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la Investigación
 
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
 
Tema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdf
Tema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdfTema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdf
Tema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdf
 
Presentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza MultigradoPresentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza Multigrado
 
Estrategias de enseñanza-aprendizaje virtual.pptx
Estrategias de enseñanza-aprendizaje virtual.pptxEstrategias de enseñanza-aprendizaje virtual.pptx
Estrategias de enseñanza-aprendizaje virtual.pptx
 
actividades comprensión lectora para 3° grado
actividades comprensión lectora para 3° gradoactividades comprensión lectora para 3° grado
actividades comprensión lectora para 3° grado
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
 
Ley 21.545 - Circular Nº 586.pdf circular
Ley 21.545 - Circular Nº 586.pdf circularLey 21.545 - Circular Nº 586.pdf circular
Ley 21.545 - Circular Nº 586.pdf circular
 
PIAR v 015. 2024 Plan Individual de ajustes razonables
PIAR v 015. 2024 Plan Individual de ajustes razonablesPIAR v 015. 2024 Plan Individual de ajustes razonables
PIAR v 015. 2024 Plan Individual de ajustes razonables
 
Fe contra todo pronóstico. La fe es confianza.
Fe contra todo pronóstico. La fe es confianza.Fe contra todo pronóstico. La fe es confianza.
Fe contra todo pronóstico. La fe es confianza.
 
PLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docxPLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docx
 
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA II
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA IIAFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA II
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA II
 
Medición del Movimiento Online 2024.pptx
Medición del Movimiento Online 2024.pptxMedición del Movimiento Online 2024.pptx
Medición del Movimiento Online 2024.pptx
 
ORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptx
ORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptxORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptx
ORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptx
 
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
 

Curso Java Resumen - Curso 2005-2006

  • 1. 22/06/2005 Java - Samuel Marrero Lorenzo 1 Programacion Orientada a Objetos Caso practico: Java
  • 2. 22/06/2005 2 Indice Introducción a Java Características de Java Compilacion Java Preparación del entorno de desarrollo PrimerPrograma.java Sintaxis Paradigmas de software Programación orientada a objetos Arrays Características avanzadas de la orientación a objetos Características avanzadas del lenguaje Excepciones Entrada/salida Clases útiles Threads Programacion grafica
  • 3. 22/06/2005 3 Introducción a Java Sun Microsystems, líder en servidores para Internet, uno de cuyos lemas desde hace mucho tiempo es "the network is the computer" (lo que quiere dar a entender que el verdadero ordenador es la red en su conjunto y no cada máquina individual), es quien ha desarrollado el lenguaje Java Este lenguaje tiene como propósito los problemas que se le plantean a los desarrolladores de software por la proliferación de arquitecturas incompatibles: tanto entre las diferentes máquinas como entre los diversos sistemas operativos y sistemas de ventanas que funcionaban sobre una misma máquina, añadiendo la dificultad de crear aplicaciones distribuidas en una red como Internet.
  • 4. 22/06/2005 4 Antecedentes de Java 1991: Sun Microsystems diseña un lenguaje diseñado para sistemas embebidos,(set-top-boxes), electrodomésticos. Lenguaje sencillo, pequeño, neutro. Ninguna empresa muestra interés por el lenguaje 1995: Java se introduce en Internet, lenguaje muy apropiado Netscape 2.0 introduce la primera JVM en un navegador WWW (Máquina virtual Java) Filosofía Java: “Write once, run everywhere” 1997: Aparece Java 1.1. Muchas mejoras respecto a 1.0 1998: Java 1.2 (Java 2). Plataforma muy madura Apoyado por grandes empresas: IBM, Oracle, Inprise, Hewtlett-Packard, Netscape, Sun 1999: Java Enterprise Edition. Java comienza a ser una plataforma de desarrollo profesional.
  • 5. 22/06/2005 5 Caracteristicas de Java (l) Sun describe Java como un lenguaje “simple, orientado a objetos, distribuido, interpretado, robusto, seguro, de arquitectura neutra, portable, de altas prestaciones, multitarea y dinámico” SIMPLE: elimina las dificultades de otros lenguajes como el uso y aritmetica de punteros, y la necesidad de liberar memoria (free). FAMILIAR: Similar sintaxis a la de C++ ORIENTADO A OBJETOS: soportando las caracteristicas de un lenguaje orientado a objetos DISTRIBUIDO: permite que pueda correr en red ROBUSTO: con metodos tales como una fuerte comprobacion de tipos y no usar punteros impide al programa bloquear al sistema
  • 6. 22/06/2005 6 Caracteristicas de Java (ll) SEGURO: un programa no puede acceder a los recursos del sistema de manera incontrolada al comprobar los castings e impedir la aritmetica de punteros PORTABLE: una vez compilado puede ser ejecutado en cualquier otra maquina con una JVM instalada INTERPRETADO: es mitad compilado (byte-code) y mitad interpretado (JVM), por eso es mas lento que C, pero mas rapido que muchos otros lenguajes MULTITHREAD: soporta la concurrencia a traves de hilos de ejecucion (flujos de control concurrentes) DINAMICO: al ser un lenguaje orientado a objetos
  • 7. 22/06/2005 7 Java frente a otros lenguajes Desventajas frente a otros: Lenguaje de rendimiento inferior a C debido al mayor consumo de memoria (JVM) y a su interpretacion. Ventajas frente a otros: Soporta threads de modo nativo Distribuido u orientado a web por su independencia de la plataforma (maquina y SO) Sencillo y robusto
  • 9. 22/06/2005 9 Tipos de aplicaciones Java Aplicaciones – Con o sin interfaz gráfico Applet – Aplicaciones que pueden correr dentro de un navegador de internet Servlets – Aplicaciones que corren en un servidor WWW JavaBeans – Componentes combinables
  • 10. 22/06/2005 10 Compilacion Java Java es un lenguaje mitad compilado y mitad interpretado. 1. Compilacion: en cualquier maquina Codigo_fuente.java Codigo_objeto.class (lenguaje Java) (byte-code) 2. Interpretacion: en una maquina concreta con la JVM Codigo_objeto.class Proceso ejecutado con la JVM para dicha maquina
  • 11. 22/06/2005 11 Herramientas de desarrollo Java Para poder desarrollar en Java 2: 1. j2sdk1.4.2_04: es el kit de desarrollo de software de Java 2 que vamos a utilizar. Se puede descargar en java.sun.com 2. IDE: entorno de desarrollo como Eclipse o un editor de texto plano tipo Bloc de Notas Para poder ejecutar aplicaciones Java (JVM): jre: entorno de ejecucion o máquina virtual de Java
  • 12. 22/06/2005 12 Preparación del entorno de desarrollo Una vez obtenido el kit de desarrollo hay que preparar Windows para que puedan ejecutarse las aplicaciones. Dos formas: 1. MiPC Propiedades Avanzadas Variables de entorno Añadir a la variable Path la ruta donde se encuentran los comandos de java. En este caso: Path = %Path%;c:j2sdk1.4.2_04bin 2. MiPC Avanzadas Variables de entorno Añadir a la variable ClassPath la ruta donde se encuentran las clases. En este caso en el directorio actual donde compilamos: set CLASSPATH=.;%CLASSPATH%
  • 13. 22/06/2005 13 Formato de los ficheros fuente El fichero fuente contiene 3 elementos principales: Declaración de paquete (opcional) Sentencias de importación (opcional) Declaración de clase o de interfaz Ejemplo: fichero fuente PrimerPrograma.java import java.io.*; public class PrimerPrograma { ... }
  • 14. 22/06/2005 14 PrimerPrograma.java // Aplicación de consola de ejemplo PrimerPrograma import java.io.*; class PrimerPrograma { public static void main( String args[] ) //Función principal { System.out.println( “Este es mi primer programa, ☺" ); } } C:javaPrimerPrograma.java ____________________________________________________ Resultado: Imprime en pantalla el mensaje de texto.
  • 15. 22/06/2005 15 Ejemplo de compilación y ejecución de un programa Creamos un programa en java, compuesto de una clase de nombre PrimerPrograma. El programa fuente por lo tanto es PrimerPrograma.java 1. Compilación: C:java>javac PrimerPrograma.java Obteniéndose PrimerPrograma.class 2. Ejecución (interpretación) C:java>java PrimerPrograma NOTA: Atención minúsculas y mayúsculas
  • 16. 22/06/2005 16 Características del Lenguaje y sintáxis Sensible a mayúsculas/minúsculas Soporta comentarios //, /*…*/ Lenguaje de formato libre Permite identificadores todos menos vocales acentuadas, signos de puntuacion y palabras reservadas Incluye palabras reservadas Permite variables y constantes las primeras pueden cambiar su valor y las segundas no Convenciones de nomenclatura Clases: comienzan en mayuscula, Metodos y Variables: comienzan en minuscula, Constantes: todo en mayusculas Tiene reglas sobre los tipos de datos
  • 17. 22/06/2005 17 Tipos de Datos Java define dos tipos de datos: Tipos primitivos Tipos referencia Los tipos primitivos son ocho agrupados en cuatro categorías: lógico: boolean valores true y false texto: char entero: byte, short, int, long real: float, double Los tipos referencia son punteros a objetos
  • 18. 22/06/2005 18 Tipo de Datos Referencia Un tipo referencia guarda un puntero a la dirección donde se ubica el objeto (32 bits) Sólo puede almacenar direcciones de objetos de su propio tipo Ejemplo: Ordenador pc , sun ; Usuario user ; pc = new Ordenador ( ) ; //Crea un objeto de la clase Ordenador user = pc ; //Error de compilación sun = pc ; //Correcto Todas las clases son de tipo referencia El valor que toma por defecto una variable de tipo referencia es null
  • 19. 22/06/2005 19 Cadenas de caracteres La clase String permite manejar cadenas de caracteres El literal String debe ir entre comillas dobles “ ” Se puede crear una cadena de caracteres de dos formas: String nombre = new String(“Pepe”); String nombre = “Pepe”; Para concatenar dos cadenas se utiliza el operador + “Pepe” + “Pérez” = “PepePérez” No se guarda el carácter de fin de cadena
  • 20. 22/06/2005 20 Operadores Java (l) Operadores unarios: +, - Operadores aritméticos: +, -, *, /, % (resto de la división) Operadores de asignación: =, +=, -=, *=, /=, %= <var> += <expr> equivale a <var> = <var> + <expr> Operadores incrementales: ++, -- precediendo a la variable: ++<var>, --<var> siguiendo a la variable: <var>++, <var>-- i=6; i=6; i=6; i=6; j=i++; equivale a j=i; i++; j=++i; equivale a i=i+1; j=i; dando como resultado i=7 , j=6 i=7 , j=7
  • 21. 22/06/2005 21 Operadores Java (ll) Operadores relacionales: == (igual), != (distinto), >, <, >=, <= Operadores lógicos: && (AND), || (OR), ! (NOT) && y || realizan evaluación perezosa: op1 && op2 si op1 es false, no se evalúa op2 op1 || op2 si op1 es true, no se evalúa op2 Operador instanceof: <objeto> instanceof <clase> determina si un objeto pertenece a una clase
  • 22. 22/06/2005 22 Operadores Java (lll) Operador condicional: ? :<exprBooleana> ? <valor1> : <valor2> Permite bifurcaciones condicionales sencillas Operadores a nivel de bits: >>, <<, >>>, &, |, ^, ~ op1 >> n desplaza los bits de op1 (con signo) a la derecha n posiciones op1 << n desplaza los bits de op1 (con signo) a la izquierda n posiciones op1 >>> n desplaza los bits de op1 (sin signo) a la derecha n posiciones op1 & op2 Operador AND a nivel de bits op1 | op2 Operador OR a nivel de bits op1 ^ op2 Operador XOR a nivel de bits ~op1 Operador complemento (NOT a nivel de bits)
  • 23. 22/06/2005 23 Estructuras de control Las sentencias de control del flujo de ejecución permiten tomar decisiones y realizar un proceso repetidas veces Hay tres tipos principales de sentencias de control de flujo: Condicionales: if, switch Bucles: for, while, do while Otras sentencias que permiten interrumpir el flujo normal de ejecución son break y continue
  • 24. 22/06/2005 24 Sentencias condicionales: if Si <condicion> entonces Acciones_Si Si no Acciones_No Fin si Equivale a (en Java todas las sentencias en minúscula) if(condición) { Acciones_Si; } else El grupo de sentencia else y Acciones_No es opcional { Acciones_No; }
  • 25. 22/06/2005 25 Sentencias condicionales: switch Según variable hacer Caso valor1: Acciones_1 Caso valor2: Acciones_2 En otro caso: Acciones_Otro_Caso Fin según Equivale a: switch(variable) variable char o int { case valor1: Acciones_1; break; case valor2: Acciones_2; break; default: Acciones_Otro_Caso; }
  • 26. 22/06/2005 26 Sentencias repetitivas: while Mientras se cumpla condición hacer Acciones Fin mientras Equivale a: while (condicion) { acciones; }
  • 27. 22/06/2005 27 Sentencias repetitivas: do…while Repetir Acciones Mientras se cumpla condición Equivale a: do { acciones; }while (condicion);
  • 28. 22/06/2005 28 Sentencias repetitivas: for Para var desde v1 hasta v2 paso p hacer Acciones Fin para Equivale a: for(var = v1; var<=v2; var = var + p) { acciones; }
  • 29. 22/06/2005 29 Pedir datos por consola Para pedir datos por consola hay que 1. crear un flujo de entrada desde el teclado: InputStreamReader flujo = new InputStreamReader(System.in); 2. crear un canal con buffer: BufferedReader teclado = new BufferedReader(flujo); 3. realizar la lectura de los caracteres introducidos: textoLeido = teclado.readLine(); readLine() devuelve String … 4. para convertir textoLeido en entero: b = Integer.parseInt(textoLeido); convierte el texto en su valor entero
  • 30. 22/06/2005 30 Actividad MayorEdad.java Realizar un programa Java que pida diez edades al usuario, escribiendo en pantalla “Mayor de edad” si la edad es >= 18 “Menor de edad” si la edad es < 18 Resolución C:javaMayorEdad.java
  • 31. 22/06/2005 31 Paradigmas de software Paradigma de software estructurado y modular: los programas se dividen en procedimientos independientes con acceso total a los datos comunes Algoritmos + Estructuras de Datos = Programas Paradigma de software funcional: el resultado de un cálculo es la entrada del siguiente, así hasta que se produce el valor deseado Paradigma de software orientado a objetos: los datos se consideran la parte más importante del programa, de modo que se agrupan en objetos. Los objetos modelan las características de los problemas del mundo real, su comportamiento ante estas características y su forma de interactuar con otros elementos Objetos + Mensajes = Programas
  • 32. 22/06/2005 32 Diseño orientado a objetos. Introducción Para desarrollar software de calidad duradera, hay que idear una sólida base arquitectónica que sea flexible al cambio. El modelado es una parte fundamental en este aspecto, construimos modelos para poder visualizar el comportamiento del sistema y poder controlar su arquitectura. La importancia de un buen modelado es aún mayor en sistemas grandes y complejos de software.
  • 33. 22/06/2005 33 Concepto de UML El Lenguaje Unificado de Modelado (Unified Modeling Languaje, UML) es el lenguaje estándar para realizar el modelado de los sistemas de software y es independiente del lenguaje de programación utilizado. Un lenguaje de propósito general para el modelado orientado a objetos. Cubre: análisis, diseño, codificación y pruebas En este curso nos centraremos en la herramientas más significativas de UML
  • 34. 22/06/2005 34 Elementos de UML UML tiene tres elementos fundamentales: Bloques básicos de construcción Elementos Relaciones Diagramas Reglas que dictan como se pueden combinar estos bloques básicos. UML tiene reglas para: Nombres Alcance Visibilidad Integridad Ejecución Mecanismos comunes. Que se basen en algún patrón de diseño Especificaciones Adornos Divisiones comunes Mecanismos de extensibilidad
  • 35. 22/06/2005 35 Diagramas UML Se utilizan para representar las diferentes vistas del producto final. Los diagramas de UML se pueden dividir en estáticos (aportan una visión estática del sistema) y dinámicos (aportan una visión dinámica del sistema). Los diagramas estáticos: Diagrama de casos de uso Diagrama de clases Diagrama de objetos Diagrama de componentes Diagrama de despliegue Los diagramas dinámicos: Diagrama de estados Diagrama de actividad Diagramas de interacción: Diagrama de secuencia Diagrama de colaboración Son muchos diagramas así que aquí nos centraremos sólo en algunos de ellos.
  • 36. 22/06/2005 36 Diagramas de casos de uso Los diagramas de casos de uso muestran la funcionalidad del sistema desde la perspectiva que tienen los usuarios y lo que el sistema debe de hacer para satisfacer los requisitos propuestos. Pueden mostrar el comportamiento de un sistema completo o de una parte. Los elementos básicos que se utilizan son: Actores: Son los diferentes usuarios y el papel que representan dentro del sistema Caso de uso: Representan todo lo que el usuario puede realizar dentro del sistema Relaciones: Para asociar los elementos anteriores. Asociación Indica que un actor o caso de uso se comunica con otro Generalización Relaciona CU más general con CU más específico Extensión (*) El CU origen es una especialización de un CU más general (hereda) Inclusión (*) El CU origen incluye un CU más específico (*) En estas dos se deben de poner también las letras (incluye, o extiende). Caso de uso Actor
  • 37. 22/06/2005 37 Ejemplo Tienda. Casos de uso Diagrama de casos de uso: Subcasos de uso: (Nos centramos en el caso Manejo de Ventas) Dependiente ManejoVentas Dependiente ManejoVentas ManejoClientes RealizarVenta ModificarVenta AnularVenta extiende extiende extiende
  • 38. 22/06/2005 38 Ejemplo Tienda. Descripción de Casos de Uso Tienda DESCRIPCION DE CASOS DE USO Nombre: ManejoVentas Alias: Actores: Dependiente Función: Permitir el mantenimiento de las ventas Descripción: El Dependiente puede registrar nuevas ventas identificando todas sus características. El sistema debe validar que el código esté disponible. También es posible modificar algunas de sus características o anular una venta si esta no se ha realizado. Referencias: De requerimientos: De Casos: .
  • 39. 22/06/2005 39 Ejemplo Tienda: Diagrama conceptual Muestra todos los conceptos asociados al modelo y sus relaciones. maneja 1 ∞ Dependiente Venta tiene tiene ∞ 1 1 1 Cliente Producto
  • 40. 22/06/2005 40 Diagrama de clase Dependiente Son diagramas estáticos ya que no cambian en el tiempo Diagrama de clase dependiente: Parte superior: todas sus propiedades informando del ámbito, nombre y tipo. Sus características. Parte inferior: todos sus métodos informando del ámbito, nombre y tipo. Su comportamiento. Dependiente dni : String nombre: String salario : float saluda()
  • 41. 22/06/2005 41 Ejemplo Tienda Diagrama de clases En un diagrama de clases se muestran todos los objetos/clases del modelo y sus relaciones Venta cliente : Cliente productos[ ]: Producto realizarVenta() modificarVenta() anularVenta() maneja 1 ∞ Cliente codigoCliente : String nombre: String dni : String insertarCliente() modificarCliente() eliminarCliente() Producto codigoProducto : String nombre: String precio : float insertarProducto modificarProducto() eliminarProducto() insertarProducto tiene tiene 1 ∞1 ∞ Dependiente dni : String nombre: String salario : float manejarVenta() saluda()
  • 42. 22/06/2005 42 Programación orientada a objetos con Java Antes de seguir decir que UML es muy extenso y aquí solo se ha pretendido mostrar algunos de sus diagramas, centrándonos en los casos de uso y los objetos. Pasamos a ver ahora la POO en el lenguaje Java
  • 43. 22/06/2005 43 Definicion de clase en Java Sintaxis: class <NombreClase> { // Declaración de atributos <tipo> <variable> ;…;<tipo><variable>; // Declaración de métodos <tipo> <nombreMétodo> ( <tipo><argumento>, … ) { ... } } El nombre del fichero Java debe coincidir con el de la clase definida en él <NombreClase>.java Se recomienda definir una clase por cada fichero Java
  • 44. 22/06/2005 44 Ejemplo: clase Dependiente //Fichero fuente Dependiente.java: import java.io.*; public class Dependiente { public String nombre, dni; Declaracion de los atributos de la clase Dependiente public float salario; public void saluda() Declaracion del metodo saluda() { System.out.println(“Hola, soy el dependiente. ¿En que puedo ayudarle?”); } }
  • 45. 22/06/2005 45 Actividad SaludaDependiente.java Crea un fichero java llamado SaludaDependiente1 con dos clases: Dependiente: cópiala del ejemplo anterior SaludaDependiente1: Crea un dependiente y haz que salude. Resultado: C:javaSaludoDependiente.java
  • 46. 22/06/2005 46 Tipos de clases Las clases pueden ser declaradas con los siguientes modificadores: public, abstract, final. Una clase pública puede ser utilizada desde cualquier parte del programa. Una clase abstracta es aquella que contiene métodos abstractos (no implementados). Una clase final es aquella que no puede tener subclases. Por defecto una clase sólo puede ser utilizada por otras clases del mismo paquete en el que está declarada. Declaración de clase: [modificador] class NombreClase [extends NombreSuperClase] [implements NombreInterface]
  • 47. 22/06/2005 47 Métodos Los métodos son bloques de código (subprogramas) definidos dentro de una clase Un método tiene acceso a todos los atributos de su clase Pueden ser llamados o invocados desde cualquier sitio Un método puede invocar a otros métodos Los métodos que se invocan a sí mismos son recursivos En Java no se puede definir un método dentro de otro La ejecución de todos los programas se inician con el método main
  • 48. 22/06/2005 48 Ejemplos de Métodos double tangente ( double x ) { return Math.sin(x) / Math.cos(x) ; } void imprimirHola ( ) { System.out.println ( “Hola” ) ; } String darFormato ( int dia , int mes , int anno ) { String s ; s = dia + “/” + mes + “/” + anno ; return s ; }
  • 49. 22/06/2005 49 Paso de Argumentos Java sólo permite pasar argumentos por valor El método recibe una copia de los argumentos El valor de los argumentos de tipo primitivo no cambia fuera del método El valor de los argumentos de tipo referencia (un puntero a un objeto) tampoco cambia fuera del método, pero el contenido del objeto referenciado sí se puede cambiar dentro del método El paso de un tipo primitivo equivale al paso por valor El paso de un argumento de tipo referencia equivale al paso por referencia
  • 50. 22/06/2005 50 Ámbito de las Variables (I) En Java se dispone de tres tipos de variables: Variables miembro pertenecientes a una clase o atributos Argumentos de un método de la clase Variables locales de un método de la clase NOTA: Los argumentos trabajan como variables locales class Ejemplo { int x ; variable miembro void metodo ( int y ) argumento { int z ; variable local x = y + z ; } }
  • 51. 22/06/2005 51 Ámbito de las Variables (II) Las variables miembro son visibles desde cualquier parte de la clase Los argumentos y variables locales sólo son visibles dentro del método al que pertenecen. Dejan de existir al finalizar el método Dentro de un método, si coincide el identificador de un argumento o variable local con el de una variable miembro, sólo se accede a la variable del método. Esto se conoce como ocultacion de variables. class A { int x ; void metodo ( int y ) { int x = 2 ; y = 3*x + y - x ; ...println(y); //imprime 8 } } ... main(...) { int arg = 4 ; A obj = new A(); obj.x = 1 ; obj.metodo(arg); ...println(arg); imprime 4 ...println(obj.x); imprime 1 }
  • 52. 22/06/2005 52 Ejemplo: clase Rectangulo public class Rectangulo{ int base, altura; Atributos public void imprimirArea() Imprime area { System.out.println(“Area: “+base*altura); } public int calculaPerimetro() Devuelve perimetro { return 2*(base+altura); } } NOTA: En este ejemplo falta un metodo que inicialice los valores de los atributos base y altura.
  • 53. 22/06/2005 53 Constructores Son funciones (similares a los métodos) que toman el mismo nombre de la clase y cuya misión es la de realizar la inicialización automática de un objeto cuando se crea. No devuelven ningún tipo, ni siquiera void. Cuando en una clase no se especifica un constructor explícitamente Java crea un constructor por defecto para esa clase. Los constructores se pueden definir sin lista de parámetros o con lista de parámetros con el propósito de poder inicializar los objetos con valores concretos.
  • 54. 22/06/2005 54 Añadir un constructor a la clase Rectangulo public class Rectangulo{ //1. Este constructor inicializa el objeto con valores fijos public Rectangulo(){ base = 4; altura = 2; } //2. Este otro constructor inicializa el objeto con valores concretos public Rectangulo(int b, int a){ base = b; altura = a; } } …main(){ Rectangulo r1 = new Rectangulo(); Crea un rectangulo con base 4, altura 2 Rectangulo r2 = new Rectangulo(7, 3); Crea un rectangulo con base7,altura3 }
  • 55. 22/06/2005 55 Actividad: Pedir datos por consola Conversion de texto a enteros Hacer la mejora al programa anterior de pedir la base y la altura al usuario para construir un rectángulo de base b, altura h. Para pedir la base por el teclado: … InputStreamReader flujo = new InputStreamReader(System.in); BufferedReader teclado = new BufferedReader(flujo); textoLeido = teclado.readLine(); guardamos la base como texto … Para convertir textoLeido en entero: b = Integer.parseInt(textoLeido); convierte el texto en su valor entero
  • 56. 22/06/2005 56 La referencia this Hace referencia al objeto o instancia actual. Se suele usar para evitar la ocultacion de variables. Ejemplo: //Este constructor utiliza los mismos nombres de parametros //que de atributos public Rectangulo(int base, int altura){ this.base = base; this.altura = altura; }
  • 57. 22/06/2005 57 Destructores En Java no hay destructores de objetos como en C++ El garbage collector es el encargado de liberar la memoria: Cuando detecta objetos no referenciados Al final de un bloque que haya utilizado objetos
  • 58. 22/06/2005 58 Sobrecarga de metodos y de constructores A veces se necesitan varios métodos o constructores que hagan la misma tarea pero con argumentos de tipos distintos En Java es posible definir dos o más métodos dentro de la misma clase que tengan el mismo nombre, pero con sus listas de parámetros distintas. Es una forma de implementar una caracteristica de la POO que es el polimorfismo Diferentes metodos Metodo sobrecargado void mostrarInt(int i) void mostrar(int i) void mostrarLong(long l) void mostrar(long l) void mostrarFloat(float f) void mostrar(float f) Esta característica se llama sobrecarga de métodos
  • 59. 22/06/2005 59 Ejemplo de sobrecarga Esta clase sobrecarga su constructor, es decir, proporciona dos formas de construir un objeto. public class Rectangulo{ int base, altura; public Rectangulo(){ construye un objeto con base 4, altura 2 base = 4; altura = 2; } public Rectangulo(int b, int a){ construye un objeto con base b, altura a base = b; altura = a; } }
  • 60. 22/06/2005 60 Naturaleza del miembro de una clase static: Cuando se declara un miembro como static, se puede acceder a él antes de que se haya creado ningún objeto de esa clase. Las variables de instancia static son variables globales y los métodos declarados como static son funciones globales. La forma de invocar a un método static de una clase es: nombre_clase.metodo( ) Los métodos estáticos sólo pueden llamar a otros métodos estáticos y acceder a datos estáticos. final: se utiliza en Java para definir constantes. Ejemplo: final float PI=3.14169
  • 61. 22/06/2005 61 Arrays Los arrays son objetos que almacenan en una variable múltiples valores del mismo tipo. Los array pueden ser de tipo primitivo o array de objetos. Declaracion de un array entero: int v[]; Construccion de 10 elementos enteros en el array anterior: v = new int[10]; un array es un objeto y se construye con new Inicializacion del array: for(i=0;i<10;i++) { v[i] = i; }
  • 62. 22/06/2005 62 Ejemplo de Array de objetos Declaracion de un array de objetos tipo Dependiente: Dependiente vectorDependientes[]; Construccion de n elementos enteros en el array anterior: vectorDependiente = new Dependiente[n]; un array es un objeto y se construye con new Inicializacion del array: for(i=0;i<n;i++) {… vectorDependiente[i] = new Dependiente(nombre, dni, salario); }
  • 63. 22/06/2005 63 Otros ejemplos de Arrays Declaracion, construccion e inicializacion en una linea: int[] digitos = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; String[] dias = {“lunes”,“martes”,“miércoles”,“jueves”,“viernes”,“sábado”,“domingo”}; Fecha[] festivos = { new Fecha ( 1, 1, 2000), new Fecha ( 15, 5, 2000), new Fecha ( 12, 10, 2000), new Fecha ( 6, 12, 2000), } Recorrido de un array: int[] lista = new int[10]; for (int i = 0; i < lista.length; i++) { System.out.println(lista[i]); } Arrays bidimensionales: int[][] trienio = new int[3][12]; Declaracion y construccion en una linea
  • 64. 22/06/2005 64 Actividad: Creacion e inicializacion de un array de n objetos de tipo Dependiente Diseñar la clase principal: VectorDependientes.java que cree y rellene un vector de n objetos de tipo Dependiente. A continuacion haz que saluden. Nota: n y los datos del dependiente se pediran al usuario. Resultado: C:javaVectorDependientes.java
  • 65. 22/06/2005 65 Caracteristicas avanzadas de la POO Encapsulamiento y Ocultacion de la informacion Polimorfismo Herencia
  • 66. 22/06/2005 66 Encapsulamiento y Ocultacion de la Informacion El encapsulamiento consiste en el agrupamiento de datos y su tratamiento en una misma estructura como hemos visto Permite proteger u ocultar algunas partes de los objetos de la manipulación externa. Esta es la parte privada de la clase Como norma una clase se comunica con el exterior proporcionando: un interface sus metodos publicos y ocultando sus propiedades impidiendo al exterior conocer los detalles de implementacion de la clase
  • 67. 22/06/2005 67 Ejemplo de Ocultacion public class Rectangulo{ private int base, altura; Atributos privados: no pueden ser accedidos desde el exterior public Rectangulo(int base, int altura) { this.base = base; this.altura = altura; } public int imprimirArea() Metodos publicos: proporcionan el { interface con el que el exterior se comunica return base*altura; con la clase } public int calculaPerimetro() { return 2*(base+altura); } }
  • 68. 22/06/2005 68 Entonces, ¿como accedemos a las propiedades privadas? Problema: Al ser las propiedades privadas, es imposible acceder a ellas desde el exterior Solucion: proporcionar en la clase dos metodos publicos de la siguiente forma: 1. damePropiedad() devuelve el valor de la propiedad 2. ponPropiedad(valor) cambia el valor de la propiedad pasado por parametro en la llamada
  • 69. 22/06/2005 69 Ejemplo Rectangulo public class Rectangulo{ private int base, altura; Atributos privados … public int dameBase() Metodo publico que { proporciona el valor de la base return base; } public void ponBase(int base) Cambia el valor de la base { this.base = base; } public int dameAltura() Metodo publico que { proporciona el valor de la base return altura; } public void ponAltura(int altura) Cambia el valor de la base { this.altura = altura; } }
  • 70. 22/06/2005 70 Actividad: Diseño de la clase Dependiente Diseña la clase Dependiente siguiendo el siguiente diagrama de clase, ocultando sus propiedades y proporcionando métodos públicos de acceso a las mismas. Crea asimismo un constructor para esta clase. A continuación crea un programa que cree un objeto de tipo Dependiente y hacer que el dependiente salude. Dependiente dni : String nombre: String salario : float saluda()
  • 71. 22/06/2005 71 Actividad Dependiente.java La modificación propuesta en la actividad anterior puedes verla aquí C:javaDependiente.java Realiza el cambio a la clase SaludaDependiente para usar la nueva clase Dependiente.
  • 72. 22/06/2005 72 Concepto de Herencia La POO se basa en una jerarquía de clases que consiste en agrupar atributos y/o métodos comunes Las clases descendientes se llaman subclases Las clases ascendientes se llaman superclases Las subclases heredan características y métodos de las superclases (excepto los constructores) Ejemplo: Vertebrados Mamiferos Caninos Felinos Aves Anfibios
  • 73. 22/06/2005 73 Herencia (ll) Supongamos, por ejemplo, que tenemos la clase Jefe y la clase Secretaria definidas como sigue: class Jefe { private int codigo. numDepart, numTrabajadores; private String nombre; private float salario; } class Secretaria { private int codigo. numDepart; private String nombre; private float salario; private Jefe trabajaPara; } Las partes comunes se pueden agrupar en una misma clase, manteniendo las otras dos clases con las partes no comunes y heredando de esta nueva clase con la palabra reservada extends
  • 74. 22/06/2005 74 Herencia (lll) class Empleado { private int codigo, numDepart; private String nombre; private float salario; } class Jefe extends Empleado Jefe hereda de Empleado { es subclase de Empleado private int numTrabajadores; } class Secretaria extends Empleado Secretaria hereda de Empleado { es subclase de Empleado private Jefe trabajaPara; } Para ver la clase Empleado: C:javaEmpleado.java NOTA: Para que la relacion de herencia sea correcta, la subclase debe satisfacer la relacion es-un de la superclase. Ejemplo: Jefe es-un Empleado, Secretaria es-un Empleado y tiene-un Jefe
  • 75. 22/06/2005 75 Sobreescritura de metodos Una subclase hereda todos los miembros de su superclase, y puede modificar los métodos que ha heredado de la superclase, manteniendo los mismos nombres, tipos de retorno y lista de argumentos es la forma de implementar el polimorfismo en la ejecución. P.ej. con el unico metodo imprimirDatos() imprimimos datos de diferentes objetos: class Empleado { ... public int imprimirDatos(){...} Imprime los datos de Empleado } class Jefe extends Empleado { private int numTrabajadores; public int imprimirDatos(){...} sobreescrito para imprimir los datos del Jefe } se añade la impresión del numero de trabajadores
  • 76. 22/06/2005 76 Ejemplo de sobreescritura class Empleado { private int codigo, numDepart; private String nombre; private float salario; public int imprimirDatos(){ System.out.println(“Nombre: “ + nombre + ” Departamento: “ + numDepart); } } class Jefe extends Empleado { private int numTrabajadores; public int imprimirDatos(){ super.imprimirDatos (); llamada al metodo heredado System.out.println(“Numero Trabajadores: “ + numTrabajadores); } } Clase Jefe: C:javaJefe.java
  • 77. 22/06/2005 77 Actividad: Crear n empleados asignados a un jefe Diseña y completa la clase Jefe proporcionando un constructor que pida todos sus datos y ocultando sus atributos. Diseña y completa la clase Empleado proporcionando un constructor que pida todos sus datos y ocultando sus propiedades. ¿Qué deberias hacer para asignar un Jefe a un Empleado? Diseña la clase CrearOficina que pida al usuario n empleados y asigna los empleados a un jefe pedido tambien al usuario. Piensa como harias para contener la lista de empleados en la propia clase Jefe. Resultado: C:javaCrearOficina.java
  • 78. 22/06/2005 78 Modificador final El modificador final tiene tres usos: El primero es para definir una constante con nombre dentro de una clase. final double PI = 3.1416; El segundo uso es para evitar la sobreescritura de métodos. Cuando un método se declara como final impide que una subclase derivada pueda reescribir ese método. final void metodo(){…} El tercer uso es para evitar que una clase puede ser heredada, es decir evitar que la clase pueda ser superclase, como consecuencia todos sus métodos serán final por defecto. final class A {…}
  • 79. 22/06/2005 79 Modificador static Para acceder a las variables y métodos de una clase es necesario crear primero un objeto El modificador static puede aplicarse a variables y a métodos para acceder a ellos sin instanciar ningún objeto Los miembros estáticos pertenecen a la clase, no a los objetos Atributos estaticos: equivalen a variables globales Metodos estaticos: solo pueden acceder a miembros estaticos y no pueden sobreescribirse
  • 80. 22/06/2005 80 Clases abstractas Una clase abstracta es una clase de la que no se pueden crear objetos, no se puede instanciar Un metodo abstracto no se implementa abstract class Mamifero { … public abstract void alimentar(); } class Canino extends Mamifero { … public void alimentar(){…} //exige que sea implementado } Todas las subclases de una clase abstracta deben implementar sus métodos abstractos
  • 81. 22/06/2005 81 Interfaces Una interface es un conjunto de declaraciones de métodos. Declaración: interface <NombreInterfaz> { <tipo> <var1>; <tipo> <var2>; <tipo> <nombreMétodo1> ( <args> ); <tipo> <nombreMétodo2> ( <args> );… } Una clase que implemente el código de la interfaz debe implementar todos sus métodos class <NombreClase> implements <NombreInterfaz> {… <tipo> <nombreMétodo1> ( <args> ) { <código> } <tipo> <nombreMétodo2> ( <args> ) { <código> }… } Definen la interfaz de programacion de un objeto sin mostrar el cuerpo de la clase Es la forma de implementar la herencia multiple en Java
  • 82. 22/06/2005 82 Interface Animal interface Animal{ public void nace(); public String getNombre(); public void setNombre(String nombre); } Cualquier clase que implemente un interface deberá implementar todos sus métodos, de lo contrario la clase se convertirá a abstracta no pudiéndose crear ningún objeto de ella.
  • 83. 22/06/2005 83 Actividad Perro.java Crear una clase Perro que implemente la interfaz anterior. Propiedades: nombre Interfaz Animal: javaAnimal.java Resultado actividad: C:javaPerro.java
  • 84. 22/06/2005 84 Paquetes Los paquetes en Java son contenedores o agrupaciones de clases utilizados para evitar conflictos de nombres dividen el espacio de nombres de forma jerárquica, reflejada en un árbol de directorios, de tal forma que podamos trabajar con clases que tengan el mismo nombre en diferentes paquetes definen un ámbito, ayudando a resolver problemas de control de acceso Al principio del fichero de la clase se indica a que paquete pertenece la clase de la siguiente forma, de lo contrario se asignan al paquete por defecto: package empresa; donde pertenecerán las clases derivadas Empleado package paq1.paq2.paq3; si existe una jerarquía de paquetes Para ejecutar la clase TestEmpresa del paquete empresa: java empresa.TestEmpresa
  • 85. 22/06/2005 85 Protección de acceso La siguiente tabla muestra si se permite el acceso a un miembro de una clase según su modificador de acceso y su ubicación dentro de la jerarquía de paquetes. private sin modificador protected public Misma clase Sí Sí Sí Sí Subclase del mismo paquete No Sí Sí Sí No subclase del mismo paquete No Sí Sí Sí Subclase de diferente paquete No No Sí Sí No subclase de diferente paquete No No No Sí
  • 86. 22/06/2005 86 Importar paquetes Como se vio en la transparencia anterior, en ocasiones no es posible acceder a las clases que están en otros paquetes por lo que se hace necesario importarlos. Se pueden importar paquetes enteros o clases individuales: import java.io.*; importamos el paquete java.io entero (todas sus clases) Import java.io.BufferedReader importamos sólo una clase El paquete java.lang, que contiene todo lo referente al lenguaje incluyendo incluso los threads (como característica nativa de Java) se importa implícitamente.
  • 88. 22/06/2005 88 Excepciones Java incorpora en el lenguaje el manejo de errores en tiempo de ejecución (división por cero, índice fuera de límites, fichero que no existe...) Estos errores reciben el nombre de excepciones Java proporciona un mecanismo para capturar y gestionar las excepciones Programar manejando excepciones hace que se separen el código de la tarea a realizar y el código de control de errores Si no se captura una excepción, el interprete Java termina la ejecución del programa con un mensaje de error y un trazado de pila indicando donde se produjo Ejemplo: abrir y leer de un fichero
  • 89. 22/06/2005 89 Gestion de excepciones Sintaxis: try{ // Código que puede provocar excepciones }catch (<NombreExcepción1> e1 ){ // Código que gestiona la excepción e1 }catch (<NombreExcepción2> e2 ){ // Código que gestiona la excepción e2 } … finally{ //se ejecuta justo despues de que termine try, independientemente de si //se genera o no una excepcion } Para gestionar excepciones, se coloca el código que puede causarlas dentro de la cláusula try y tantas cláusulas catch como posibles excepciones puedan generarse
  • 90. 22/06/2005 90 Ejemplo de captura de excepciones public static void main(String[] args) { … try{ InputStreamReader flujo = new InputStreamReader(System.in); BufferedReader teclado = new BufferedReader(flujo); textoLeido = teclado.readLine(); // puede generar excepcion }catch(IOException e) { System.out.println(“Error de lectura por teclado”); exit(0); } … }
  • 91. 22/06/2005 91 Sentencia throws No se capturan las excepciones sino que se lanzan ‘hacia arriba’ Sera un metodo superior en la cadena de llamada quien capture la excepcion Si ningun metodo captura y gestiona la excepcion es el sistema quien lo hace dando un error y trazado de pila public static void main(String[] args) throws IOException { … InputStreamReader flujo = new InputStreamReader(System.in); BufferedReader teclado = new BufferedReader(flujo); textoLeido = teclado.readLine(); // puede generar excepcion … }
  • 92. 22/06/2005 92 Actividad: capturar las excepciones de CrearOficina Usa bloques try…catch para capturar las excepciones generadas por el metodo readLine(). Ten en cuenta que las excepciones son de tipo IOException excepciones de entrada/salida Resultado: C:javaCrearOficinaTry.java
  • 93. 22/06/2005 93 Sentencia throw Permite al programador generar excepciones específicas en sus aplicaciones. En la clase Empleado podemos lanzar una excepción de tipo “Salario no válido” si el salario introducido es < 0 public void ponSalario(float salario) throws Exception { if ( salario < 0 ) throw ( new Exception (“Salario no válido”)); this.salario = salario; } En este caso si el salario es menor que cero se genera una excepción con el mensaje “Salario no válido” y no se ejecuta la asignación a la correspondiente variable miembro.
  • 94. 22/06/2005 94 Arbol de excepciones Java
  • 95. 22/06/2005 95 Excepciones personalizadas El programador de Java puede crear su propia clase de excepciones En el siguiente ejemplo crearemos una clase llamada ValidarCondicion que lanza una excepción personalizada de tipo Error si la condición a validar no es correcta. La clase principal PedirSalario pide un salario al usuario, valida con el método estático esCorrecta la condición “salario > 0” Si la condición no es correcta lanza una excepción del tipo Error con el mensaje pasado como parámetro.
  • 96. 22/06/2005 96 Excepciones personalizadas Ejemplo PedirSalario Clase Error: C:javaError.java Clase Validar: C:javaValidar.java Clase PedirSalario: C:javaPedirSalario.java
  • 97. 22/06/2005 97 Entrada / Salida Java representa la E/S con un stream (flujo 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 por el stream Estos conceptos representan cualquier E/S: lectura/escritura de archivos comunicación a través de Internet lectura de la información de un puerto serie Las clases E/S se encuentran en java.io : para operaciones con bytes y con caracteres (Unicode-2 bytes) para entrada (lectura) y para salida (escritura)
  • 98. 22/06/2005 98 Entrada / Salida (ll) Operaciones con bytes: para lectura (entrada): clase InputStream para escritura (salida): clase OutputStream Operaciones con caracteres (texto): para lectura (entrada): clase Reader para escritura (salida): clase Writer Las cuatro clases son abstractas Instanciar una subclase de alguna de éstas equivale a abrir un stream (archivo, recurso de Internet...). Para cerrarlo, hay que utilizar el método close()
  • 99. 22/06/2005 99 Jerarquia de E/S de bytes Las clases File., Piped., y ByteArray. indican que hay un dispositivo con el que se conecta el stream (disco, memoria, URL)
  • 100. 22/06/2005 100 Jerarquia de E/S de caracteres Reader BufferedReader LineNumberReader CharArrayReader InputStreamReader FileReader FilterReader PushbackReader PipedReader StringReader Writer BufferedWriter CharArrayWriter OutputStreamWriter FileWriter FilterWriter PipedWriter StringWriter PrintWriter Las clases en negrita indican que hay un dispositivo con el que se conecta el stream (disco, memoria, etc.)
  • 101. 22/06/2005 101 Nombre de las clases E/S Se puede deducir la función de una clase según las palabras que componen su nombre: InputStream, OutputStream Lectura/Escritura de bytes Reader, Writer Lectura/Escritura de caracteres File Ficheros String, CharArray, Memoria (según el tipo ByteArray, StringBuffer primitivo indicado) Piped Tubo de datos Buffered Buffer Filter Filtro Data Intercambio de datos de Java Object Persistencia de objetos Print Imprimir
  • 102. 22/06/2005 102 Metodos de InputStream / Reader Métodos básicos de lectura: int read() devuelve un byte / caracter leído o -1 si es fin de fichero (en el byte de menor peso) int read(byte[]) lee un conjunto de bytes /caracteres y lo pone en el array de bytes dado. Devuelve el número de bytes leídos int read(byte[],int,int) lee un conjunto de bytes /caracteres y lo pone en el array de bytes dado empezando en la posición dada con la longitud dada. Devuelve el número de bytes leídos Otros métodos: void close() cierra el stream abierto int avaible() devuelve el número de bytes disponibles para leer long skip(long) salta el número de bytes/caracteres indicado
  • 103. 22/06/2005 103 Metodos de OutputStream / Writer Métodos básicos de escritura: OutputStream: void write(byte[]) : escribe el array de bytes/caracteres dado Writer: void write(char[]) escribe el array de caracteres dado Writer: void write(String) escribe una cadena de caracteres. Otros métodos: void close() cierra el stream abierto void flush() fuerza a que se escriban las operaciones de escritura que haya pendientes
  • 104. 22/06/2005 104 Lectura y escritura en archivos Las clases FileInputStream y FileOutputStream permiten leer y escribir bytes en archivos binarios, o caracteres de un byte Las clases FileReader y FileWriter son similares a las anteriores pero permiten leer y escribir caracteres Unicode (16 bits) en archivos de texto Cada llamada a read() o write() accede al disco para un único byte o un único carácter poco eficiente Para mejorarlo, se utilizan las clases que implementan un buffer, de modo que se lee del disco (o se escribe) un conjunto de bytes o caracteres en cada acceso
  • 105. 22/06/2005 105 La clase File La clase File hace referencia a un archivo o un directorio Se puede utilizar para obtener información del archivo o del directorio (tamaño, fecha, atributos...) Constructores: File(String nombre) File(String dir, String nombre) File(File dir, String nombre) Ejemplos: File f1 = new File(“C:windowsnotepad.exe”); File f2 = new File(“C:windows”, ”notepad.exe”); File f3 = new File(“C:windows”); File f4 = new File(f3, “notepad.exe”);
  • 106. 22/06/2005 106 Ejemplo de copia de un fichero de texto en otro import java.io.*; public class Copia { public static void main(String[] args) throws IOException { File fichOrigen = new File(“origen.txt"); File fichDestino = new File(“destino.txt"); FileReader entrada = new FileReader(fichOrigen); FileWriter salida = new FileWriter(fichDestino); int c; while ((c = entrada.read()) != -1) salida.write(c); entrada.close(); salida.close(); } }
  • 107. 22/06/2005 107 Ejemplos de lecturas y escrituras en ficheros Lectura de un fichero de 20 en 20 bytes/caracteres: C:javaFLectura.java Lectura de un fichero de acceso directo carácter a carácter: C:javaFDirecto.java Manejo de un fichero de acceso directo : C:javaManejarDirecto.java
  • 108. 22/06/2005 108 Serialización La serialización es el proceso por el cuál un objeto o una colección de objetos se convierten en una secuencia de bytes que pueden ser almacenados en fichero y recuperados posteriormente para su uso. Se dice entonces que el objeto u objetos tienen persistencia.
  • 109. 22/06/2005 109 Persistencia. Interface Serializable Para utilizar esta capacidad los objetos que deseamos almacenar tienen que implementar la interface Serializable. Se utilizan las subclases ObjectInputStream y ObjectOutputStream de InputStream y OutputStream respectivamente Todas las propiedades del objeto, excepto las estáticas, serán serializadas
  • 110. 22/06/2005 110 Ejemplo de persistencia. En el siguiente ejemplo se serializan los objetos de tipo Alumno, cuya clase implementa el interface Serializable. La clase PersistenciaAlumno crea un flujo de salida FileOutputStream que se filtra a través de ObjectOutputStream en el que se almacenarán los objetos Alumno pedidos al usuario.
  • 111. 22/06/2005 111 Ejemplo PersistenciaAlumno Clase Alumno: C:javaAlumno.java Clase PersistenciaAlumno: C:javaPersistenciaAlumno.java
  • 112. 22/06/2005 112 Lectura de un archivo de Internet Java proporciona un mecanismo que permite leer archivos de Internet mediante un stream La clase URL del paquete java.net representa una dirección de Internet El siguiente fragmento abre un un stream de lectura con origen en la dirección dada URL dir = new URL(“http://www.ulpgc.es/index.html”); InputStreamReader isr = new InputStreamReader(dir.openStream()); BufferedReader br = new BufferedReader(isr); para filtrar cadenas de caracteres String s = br.readLine(); lectura de una cadena de caracteres de la URL ...
  • 113. 22/06/2005 113 Clases útiles Las clases en Java son muy numerosas, pero existen algunas clases que pueden resultar interesantes para programar en Java. Entre otras estas son: Clase Math Clases envolventes: Integer Float Double Boolean Clase String Clase StringTokenizer
  • 114. 22/06/2005 114 Clases envolventes de los datos primitivos Las clases envolventes (Integer, Float, ...) de los datos primitivos (int, float, ...) son clases que permiten conversiones, redondeos y otras operaciones sobre los tipos de datos primitivos. Muchos de los métodos son estáticos, es decir, no es necesario instanciar la clase para invocarlos A continuación se ven algunos métodos para la clase Float que son simétricos para las otras clases
  • 115. 22/06/2005 115 Clase Float: algunos métodos interesantes Conversiones Clase/Cadena Float F; String s = Float.toString( F ); pasa un float a cadena F = Float.valueOf( "3.14" ); pasa una cadena a float Conversiones de Clase a tipo de dato Float F = new Float( Float.PI ); String s = F.toString(); int i = F.intValue(); long l = F.longValue(); float f = F.floatValue(); double d = F.doubleValue();
  • 116. 22/06/2005 116 Clase String Un objeto de tipo String representa una cadena constante Constructores: String s1 = new String(“hola”); String s2 = new String(); Otra forma de inicializar un String: String s3; s3= “otra vez hola”;
  • 117. 22/06/2005 117 Clase String: más métodos Métodos básicos: int length(); int l = s.length(); 4 char charAt( int indice ); char o = s.charAt(2); ‘o’ int indexOf( char carácter ); int ind = s.indexOf (‘o’) 2 Comparacion de String: boolean equals( Object obj ); s1.equals(s3) false boolean equalsIgnoreCase( String str2 ); Subcadenas: String substring (int comienzo, int final); Mayúsculas / minúsculas: s.toLowerCase(); s.toUpperCase();
  • 118. 22/06/2005 118 StringBuffer Un objeto de la clase String una vez inicializado, no puede ser modificado: ni concatenado ni asignado nuevamente. Cualquier modificación resultará sobre otro objeto. En cambio la clase StringBuffer sí puede sufrir modificaciones sobre el mismo objeto, como concatenaciones usando el método append. Ejemplo: StringBuffer sb = “hola “; Sb.append(“que “); Sb.append(“tal.”);
  • 119. 22/06/2005 119 El paquete java.util Contiene numerosas clases e interfaces para la gestión de objetos en listas y colecciones.
  • 120. 22/06/2005 120 Clase Date Representa una fecha: el dia, mes, año, horas, minutos y segundos Date() crea objetos con fecha y hora actual Date(año, mes dia) con hora 00:00:00 date(año, mes, dia, horas, minutos, segundos) Metodos: getDate() devuelve la fecha actual toString() devuelve la cadena correspondiente
  • 121. 22/06/2005 121 Clase StringTokenizer Permite realizar un análisis gramatical (parse) de una cadena de entrada Se usa para separar las palabras de una cadena StringTokenizer token = new StringTokenizer(“Hola ,a todo el, mundo”, ‘ ,‘); //pasando la cadena y los delimitadores (esp, coma) while( st.hasMoreTokens() ) { String palabra = st.nextToken(); System.out.println( palabra + “n” ); }
  • 122. 22/06/2005 122 Clase Math Es la clase ‘Matemáticas’ y no se instancia Proporciona métodos matemáticos estáticos: Math.abs( x ) devuelve el valor absoluto de x Math.sin ( double x ); Math.cos ( double x ), etc. Math.sqrt ( double x ) raíz cuadrada Math.pow ( double x, double y ) potenciación Math.random () genera double entre 0 y 1 aleatorio Math.E; Math.PI constantes matemáticas
  • 123. 22/06/2005 123 La clase Vector La clase Vector (paquete java.util) representa una colección heterogénea de objetos (referencias a objetos de tipo Object o a cualquiera de sus subclases) y que puede crecer o decrecer a medida que lo requiere la aplicación. Atributos: int capacityIncrement: incremento en la capacidad del vector. Si vale cero, duplica el tamaño actual del vector int elementCount: número de elementos válidos del vector Object[] elementData: array de objetos donde se guardan los elementos Constructores: Vector(): Crea un vector vacío (capacidad 10, incremento 0) Vector(int initialCapacity): Crea un vector vacío con la capacidad dada (incremento 0) Vector(int initialCapacity, int initialIncrement): Crea un vector vacío con la capacidad y el incremento dados
  • 124. 22/06/2005 124 La clase Vector (ll) Métodos: int capacity() devuelve la capacidad que tiene el vector int size() devuelve el número de elementos en el vector boolean contains(Object elem) devuelve true si el vector contiene el objeto especificado int indexOf(Object elem) devuelve la posición de la primera vez que aparece el objeto que se le pasa Object elementAt(int index) devuelve el elemento situado en la posición indicada (*) void setElementAt(Object elem,int index) reemplaza el objeto que corresponde al índice por el objeto que se le pasa (*) void removeElementAt(int index) borra el objeto situado en la posición indicada (*) void addElement(Object elem) añade un objeto al final void insertElementAt(Object elem,int index) inserta el objeto que se le pasa en la posición indicada, desplazando el resto de elementos en el vector (*) Los métodos con (*) pueden lanzar la excepción ArrayIndexOutOfBoundsException
  • 125. 22/06/2005 125 Ejemplo Vector Programa AulaVector que pide alumnos al usuario y los inserta en una lista de tipo Vector Código: C:javaAulaVector.java
  • 126. 22/06/2005 126 Programacion concurrente Threads Un ordenador con un solo procesador es monotarea Algunos sistemas operativos simulan multitarea, dividiendo el tiempo del procesador entre varios procesos Un proceso es cada uno de los programas o aplicaciones que se ejecutan de forma independiente Tiene asociado: Tiempo de CPU Memoria para CÓDIGO Memoria para DATOS Un thread (también llamado hilo o hebra de ejecución o proceso ligero) es un flujo de ejecución simple dentro de un proceso
  • 127. 22/06/2005 127 Threads (ll) Un único proceso puede tener varios hilos (multihilo) Multitarea vs. multihilo La JVM es un proceso, desde el punto de vista del SO, con varios threads ejecutándose a la vez: Garbage Collector AWT (Abstract Window Toolkit) Método main() Un hilo tiene asociado tiempo de CPU, memoria para código y memoria para datos, pero se puede comunicar, coordinar y sincronizar con otros hilos.
  • 128. 22/06/2005 128 Creación de un Thread implementando Runnable Hay dos formas de crear un thread 1. Declarar una clase que implemente la interfaz Runnable y crear un objeto de tipo Thread a partir de ella (mejor forma) class HiloRunnable implements Runnable{ public void run ( ){ System.out.println(“Hola, soy un hilo”); } } class HolaHilo{ public static void main (String args[]){ HiloRunnable hr = new HiloRunnable ( ); Thread t = new Thread(hr); // Crea el hilo t.start ( ) ; // Lo ejecuta } }
  • 129. 22/06/2005 129 Ejemplo: HolaMultihilo implementando Runnable class Hilo implements Runnable{ String nombre ; Hilo ( String n ) { nombre = n ; } public void run ( ) { try { Thread.currentThread().sleep((int)(Math.random()*3000)); } catch ( InterruptedException e ) { } System.out.println("Hola, soy " + nombre ) ; } } class MultiHola{ public static void main (String args[]){ for (int i = 0 ; i < 10 ; i++ ) new Thread ( new Hilo("Hilo "+i) ).start(); } } Código: C:javaMultihola.java
  • 130. 22/06/2005 130 Creacion de un Thread heredando la clase Thread 2. La otra forma de crear un thread es crear una clase que herede de la clase Thread class HiloThread extends Thread { // Sobreescribe el método run() public void run ( ) { System.out.println(“Hola Mundo”); } public static void main (String args[]) { Thread t = new HiloThread(); // Crea el hilo t.start ( ) ; // Lo ejecuta } } Codigo: C:javaHiloThread.java
  • 131. 22/06/2005 131 Ejemplo: HolaMultihilo extendiendo Thread class MultiHolaThread extends Thread{ String nombre ; MultiHolaThread ( String n ) { nombre = n ; } public void run ( ) { try { sleep( (int)(Math.random()*3000) ); } catch( InterruptedException e ) { } System.out.println("Hola, soy " + nombre ) ; } public static void main (String args[]) { for (int i = 0 ; i < 10 ; i++ ) new MultiHolaThread("Hilo "+i).start(); } }
  • 133. 22/06/2005 133 MVC: Modelo vista controlador El Modelo es el objeto que representa los datos del programa. Maneja los datos y controla todas sus transformaciones. El Modelo no tiene conocimiento específico de los Controladores o de las Vistas, ni siquiera contiene referencias a ellos. Es el propio sistema el que tiene encomendada la responsabilidad de mantener enlaces entre el Modelo y sus Vistas, y notificar a las Vistas cuando cambia el Modelo. La Vista es el objeto que maneja la presentación visual de los datos representados por el Modelo. Genera una representación visual del Modelo y muestra los datos al usuario. Interactúa con el Modelo a través de una referencia al propio Modelo. El Controlador es el objeto que proporciona significado a las ordenes del usuario, actuando sobre los datos representados por el Modelo. Cuando se realiza algún cambio, entra en acción, bien sea por cambios en la información del Modelo o por alteraciones de la Vista. Interactúa con el Modelo a través de una referencia al propio Modelo.
  • 134. 22/06/2005 134 Ejemplo MVC En esta aplicación de ejemplo se muestra un controlador que crea los objetos y los pone a funcionar. El modelo en este caso es representado por un dato que es observado por dos clases observadoras. Las clase observadoras representan las vistas del modelo, las diferentes formas que tiene el exterior de interpretar el modelo. La clase ValorObservable (modelo) implementa el interface Observable, mientras que las clases BarraObservador (vista1) y TextoObservador (vista2) implementan el interface Observer.
  • 135. 22/06/2005 135 Ejemplo MVC Controlador: C:javaJava- MVCControlador.java Modelo – ValorObservable: C:javaJava- MVCValorObservable.java Vista1 – TextoObservador: C:javaJava- MVCTextoObservador.java Vista2 – BarraObservador: C:javaJava- MVCBarraObservador.java
  • 136. 22/06/2005 136 Programacion grafica El interfaz de usuario es la parte del programa que permite a éste interactuar con el usuario. El AWT (Abstract Windows Toolkit) es un conjunto de herramientas que proporciona Java para crear interfaces graficos (GUI) Los elementos AWT están implementados usando toolkits nativos de las plataformas, Ventaja: conservan una apariencia semejante a todas las aplicaciones que se creen para esa plataforma. Desventaja: de que un interfaz gráfico diseñado para una plataforma, puede no visualizarse correctamente en otra diferente.
  • 137. 22/06/2005 137 JFC y Swing Para solucionar esta desventaja, entre otras cosas, se creo JFC (Java Foundation Clases) cuyas caracteristicas son: Los componentes Swing: desde botones hasta splitpanes Soporte de aspecto y comportamiento: ofrece a los componentes una variedad de aspectos y comportamientos API Java 2D: permite manejar y tratar graficos 2D e imágenes Los componentes Swing se diferencian de los AWT en que se añade J al nombre de los mismos Los componentes Swing soportan mas capacidades que AWT Java recomienda usar en las aplicaciones graficas componentes Swing en lugar de AWT (aunque estos ultimos todavía pueden ser utilizados)
  • 138. 22/06/2005 138 Un programa Swing Vamos a realizar una pequeña aplicación Swing que realice conversiones de Euro a pesetas, y que contenga : Dos cajas de texto: txtEuros, txtPesetas Un boton de comando: cmdAceptar Importar los paquetes adecuados: import javax.swing.*; import java.awt.*; suele utilizarse AWT para determinadas cosas Elegir el aspecto y el comportamiento: Se puede elegir el aspecto deseado: Motif, Java, Windows O el aspecto multiplataforma (por defecto): Metal, propio de java Todo programa Swing tiene al menos un contenedor que contiene componentes Swing (JFrame, JDialog, JApplet…)
  • 139. 22/06/2005 139 Componentes y contenedores Un interfaz gráfico está construida en base a elementos gráficos básicos, los Componentes como son los botones, barras de desplazamiento, etiquetas, listas, cajas de selección o campos de texto. Los Componentes permiten al usuario interactuar con la aplicación. En el AWT, todos los Componentes de la interface de usuario son instancias de la clase Component o uno de sus subtipos. Los Componentes no se encuentran aislados, sino agrupados dentro de Contenedores. Los Contenedores contienen y organizan la situación de los Componentes; además, los Contenedores son en sí mismos Componentes y como tales pueden ser situados dentro de otros Contenedores. JFrame, JApplet y JDialog son de primer nivelJPanel, y por ejemplo JPanel es de nivel intermedio (es a su vez componente). En el AWT, todos los Contenedores son instancias de la clase Container o uno de sus subtipos.
  • 140. 22/06/2005 140 Un programa Swing (ll) public class ConversorEuros extends JFrame{ hereda de JFrame public ConversorEuros() { //crear los componentes dentro del frame //añadirlos a un contenedor de nombre content Container contenido = this.getContentPane(); //Se termina mostrando el frame this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); this.pack(); this.setVisible(true); } } Podria haberse creado una ventana como Frame ventana = new Frame();, de hecho esto se puede hacer de diferentes formas Código propuesto: C:javaConversorEuros.java
  • 141. 22/06/2005 141 Conversor: configurar los botones y las cajas de texto Se crea una etiqueta y una caja de texto y se añaden al frame JLabel lblEuros = new JLabel(“Euros: “); contenido.add(lblEuros); JTextField txtEuros = new JTextField(); contenido.add(txtEuros); Se crea un nuevo boton de nombre cmdAceptar y titulo Convertir JButton cmdConvertir = new JButton(“Convertir"); cmdConvertir.setMnemonic('i'); cmdAceptar.addActionListener(this); contenido.add(cmdConvertir);
  • 142. 22/06/2005 142 Manejar evento click en el boton cmdConvertir Algunos componentes como los botones pueden generar eventos, los hay de diferente tipo. Los botones generan eventos de tipo Action Para manejar un evento primero es necesario añadir un ‘Escuchador de Eventos’ al objeto que los genera cmdConvertir.addActionListener(new ManejaBoton()); Una vez detectado un evento por el escuchador se trata ese evento con un ‘Manejador de Eventos’. En este caso ManejaBoton es un manejador de eventos Action
  • 143. 22/06/2005 143 Tipos de eventos ActionListener: El usuario pulsa un botón, presiona Return mientras teclea en un campo de texto, o elige un ítem de menú. WindowListener: El usuario elige un frame (ventana principal). MouseListener: El usuario pulsa un botón del ratón mientras el cursor está sobre un componente. MouseMotionListener: El usuario mueve el cursor sobre un componente. ComponentListener: El componente se hace visible. FocusListener: El componente obtiene obtiene el foco del teclado. ListSelectionListener: Cambia la tabla o la selección de una lista.
  • 144. 22/06/2005 144 Manejar Eventos Crearemos el manejador de eventos GestionaBoton, que implementa las acciones a realizar cuando se produce un evento. Hay varias formas de hacer esto (solo veremos esta): class GestionaBoton implements ActionListener{ public void actionPerformed (ActionEvent e) { if(e.getActionCommand().equals("Convertir")){ double pesetas; pesetas = Integer.parseInt(txtEuros.getText())*166.386; txtPesetas.setText(String.valueOf(pesetas)); } } } Esta clase podria ser interna ya que gestiona solo los eventos de los botones de esa clase
  • 145. 22/06/2005 145 Actividad: Cambiar la distribucion de los componentes de ConversorEuros Cambia el diseño de la ventana de tal forma que los componentes se distribuyan formando un grid Utiliza el metodo setLayout() sobre el objeto frame
  • 146. 22/06/2005 146 Programacion orientada a internet Applets: aplicaciones orientadas al cliente, se transfieren al cliente y se ejecutan en un navegador local Servlets: orientadas al servidor, se ejecutan en el servidor y los resultados se devuelven en formato HTML JSP: misma tecnologia que la anterior pero el codigo Java esta embebido en el HTML
  • 147. 22/06/2005 147 Applets de Java Los applets de Java son pequeñas aplicaciones escritas en lenguaje Java que se ejecutan en el entorno de un navegador de Internet. Para que pueda ser ejecutado el applet el navegador tiene que interpretar una página HTML en la que se incluya la ejecución de un applet. Un applet aparece ante los usuarios como una pequeña aplicación gráfica integrada en el navegador de Internet.
  • 148. 22/06/2005 148 Estructura básica del applet El applet sigue un ciclo de vida: Inicia en el cliente: init(), es el primer método que ejecuta el applet en el cliente Funciona: start(), el navegador invoca a éste método para que inicie la ejecución Parada: stop(), el navegador ordena al applet que pare su ejecución Destuye: destroy(), el navegador ordena al applet a liberar recursos y memoria
  • 149. 22/06/2005 149 Construir un applet Para construir un applet hay que diseñar una clase que extienda Applet o JApplet e implemente algunos de sus métodos: init(), start(), stop(), destroy(), repaint(), etc… Por último hacer referencia al applet desde una página web accesible al cliente desde un servidor web
  • 150. 22/06/2005 150 Ejemplo de applet. Conversor de euros Código de la clase: C:javaAppletConversorEuros.java Página web: C:javapagina.html