22/06/2005 Java - Samuel Marrero Lorenzo 1
Programacion Orientada a Objetos
Caso practico: Java
22/06/2005 2
IndiceIntroducción a Java
Características de JavaCompilacion JavaPreparación del entorno de desarrollo
PrimerPrograma.javaSintaxisParadigmas de softwareProgramación orientada a objetosArraysCaracterísticas avanzadas de la orientación a objetosCaracterísticas avanzadas del lenguajeExcepcionesEntrada/salidaClases útilesThreadsProgramacion 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 "thenetwork 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 JavaEste 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 Java1991: Sun Microsystems diseña un lenguaje diseñado parasistemas embebidos,(set-top-boxes), electrodomésticos.Lenguaje sencillo, pequeño, neutro.Ninguna empresa muestra interés por el lenguaje1995: Java se introduce en Internet, lenguaje muy apropiadoNetscape 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.01998: Java 1.2 (Java 2). Plataforma muy maduraApoyado por grandes empresas: IBM, Oracle, Inprise, Hewtlett-Packard, Netscape, Sun1999: Java Enterprise Edition. Java comienza a ser unaplataforma 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 objetosDISTRIBUIDO: permite que pueda correr en redROBUSTO: 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 aritmeticade punterosPORTABLE: una vez compilado puede ser ejecutado en cualquier otra maquina con una JVM instaladaINTERPRETADO: es mitad compilado (byte-code) y mitad interpretado (JVM), por eso es mas lento que C, pero mas rapido que muchos otros lenguajesMULTITHREAD: 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-insScriptsJavaActiveXScriptlets
22/06/2005 9
Tipos de aplicaciones JavaAplicaciones– Con o sin interfaz gráficoApplet– Aplicaciones que pueden correr dentro de un navegador de internetServlets– Aplicaciones que corren en un servidor WWWJavaBeans– Componentes combinables
22/06/2005 10
Compilacion JavaJava 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 JVMCodigo_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 desarrolloUna vez obtenido el kit de desarrollo hay que preparar Windows para que
puedan ejecutarse las aplicaciones. Dos formas:
1. MiPC Propiedades Avanzadas Variables de entornoAñadir a la variable Path la ruta donde se encuentran los comandos de java. En este caso:
Path = %Path%;c:\j2sdk1.4.2_04\bin
2. MiPC Avanzadas Variables de entornoAñ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 fuenteEl 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 PrimerProgramaimport java.io.*;class PrimerPrograma{
public static void main( String args[] ) //Función principal{
System.out.println( “Este es mi primer programa, ☺" ); }
}
C:\java\PrimerPrograma.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 Lenguajey sintáxis
Sensible a mayúsculas/minúsculasSoporta comentarios //, /*…*/Lenguaje de formato librePermite identificadores todos menos vocales acentuadas, signos de puntuacion y palabras reservadasIncluye palabras reservadasPermite variables y constantes las primeras pueden cambiar su valor y las segundas noConvenciones de nomenclatura Clases: comienzan en mayuscula, Metodos y Variables: comienzan en minuscula, Constantes: todo en mayusculasTiene reglas sobre los tipos de datos
22/06/2005 17
Tipos de DatosJava define dos tipos de datos:
Tipos primitivosTipos referencia
Los tipos primitivos son ocho agrupados en cuatro categorías:
lógico: boolean valores true y falsetexto: charentero: byte, short, int, longreal: float, double
Los tipos referencia son punteros a objetos
22/06/2005 18
Tipo de Datos ReferenciaUn 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 Ordenadoruser = pc ; //Error de compilaciónsun = pc ; //Correcto
Todas las clases son de tipo referenciaEl valor que toma por defecto una variable de tipo referencia esnull
22/06/2005 19
Cadenas de caracteresLa 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 op2op1 || 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 nposicionesop1 << n desplaza los bits de op1 (con signo) a la izquierda nposicionesop1 >>> n desplaza los bits de op1 (sin signo) a la derecha nposicionesop1 & op2 Operador AND a nivel de bitsop1 | op2 Operador OR a nivel de bitsop1 ^ op2 Operador XOR a nivel de bits~op1 Operador complemento (NOT a nivel de bits)
22/06/2005 23
Estructuras de controlLas 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 deflujo:
Condicionales: if, switchBucles: for, while, do whileOtras sentencias que permiten interrumpir el flujo normal de ejecución son break y continue
22/06/2005 24
Sentencias condicionales: ifSi <condicion> entonces
Acciones_SiSi no
Acciones_NoFin 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 hacerCaso valor1: Acciones_1Caso valor2: Acciones_2En 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: whileMientras se cumpla condición hacer
AccionesFin mientras
Equivale a:
while (condicion){
acciones;}
22/06/2005 27
Sentencias repetitivas: do…while
RepetirAcciones
Mientras se cumpla condición
Equivale a:
do{
acciones;}while (condicion);
22/06/2005 28
Sentencias repetitivas: forPara var desde v1 hasta v2 paso p hacer
AccionesFin para
Equivale a:
for(var = v1; var<=v2; var = var + p){
acciones;}
22/06/2005 29
Pedir datos por consolaPara 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.javaRealizar 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:\java\MayorEdad.java
22/06/2005 31
Paradigmas de softwareParadigma de software estructurado y modular:
los programas se dividen en procedimientos independientes con acceso total a los datos comunesAlgoritmos + 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 elementosObjetos + 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 UMLEl Lenguaje Unificado de Modelado (UnifiedModeling Languaje, UML) es el lenguaje estándarpara 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 pruebasEn este curso nos centraremos en la herramientas más significativas de UML
22/06/2005 34
Elementos de UMLUML tiene tres elementos fundamentales:
Bloques básicos de construcciónElementosRelacionesDiagramas
Reglas que dictan como se pueden combinar estos bloques básicos. UML tiene reglas para:NombresAlcanceVisibilidadIntegridadEjecución
Mecanismos comunes. Que se basen en algún patrón de diseñoEspecificacionesAdornosDivisiones comunesMecanismos de extensibilidad
22/06/2005 35
Diagramas UMLSe 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 usoDiagrama de clasesDiagrama de objetosDiagrama de componentesDiagrama de despliegue
Los diagramas dinámicos:Diagrama de estadosDiagrama de actividadDiagramas de interacción:Diagrama de secuenciaDiagrama 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 usoLos 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íficoExtensió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 usoDiagrama de casos de uso:
Subcasos de uso: (Nos centramos en el caso Manejo de Ventas)
DependienteManejoVentas
DependienteManejoVentas
ManejoClientes
RealizarVenta
ModificarVenta
AnularVenta
extiende
extiende
extiende
22/06/2005 38
Ejemplo Tienda.Descripción de Casos de Uso
TiendaDESCRIPCION DE CASOS DE USONombre: ManejoVentasAlias:Actores: DependienteFunción: Permitir el mantenimiento de las ventasDescripció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 conceptualMuestra todos los conceptos asociados al modelo y sus relaciones.
maneja1 ∞
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 tiempoDiagrama 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 : Stringnombre: Stringsalario : float
saluda()
22/06/2005 41
Ejemplo TiendaDiagrama de clases
En un diagrama de clases se muestran todos los objetos/clases del modelo y sus relaciones
Ventacliente : Clienteproductos[ ]: Producto
realizarVenta() modificarVenta() anularVenta()
maneja1 ∞
ClientecodigoCliente : Stringnombre: Stringdni : String
insertarCliente() modificarCliente()
eliminarCliente()
ProductocodigoProducto : Stringnombre: Stringprecio : float
insertarProductomodificarProducto()
eliminarProducto()
insertarProducto
tiene
tiene1∞1
∞
Dependientedni : Stringnombre: Stringsalario : 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 JavaSintaxis:
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 laclase 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 SaludaDependiente1con dos clases:
Dependiente: cópiala del ejemplo anteriorSaludaDependiente1: Crea un dependiente y haz que salude.
Resultado: C:\java\SaludoDependiente.java
22/06/2005 46
Tipos de clasesLas 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étodosLos métodos son bloques de código (subprogramas) definidos dentro de una claseUn método tiene acceso a todos los atributos de su clasePueden ser llamados o invocados desde cualquier sitioUn método puede invocar a otros métodosLos métodos que se invocan a sí mismos son recursivosEn Java no se puede definir un método dentro de otroLa ejecución de todos los programas se inician con el método main
22/06/2005 48
Ejemplos de Métodosdouble 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 ArgumentosJava sólo permite pasar argumentos por valorEl método recibe una copia de los argumentos
El valor de los argumentos de tipo primitivo no cambia fuera del métodoEl 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 valorEl 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 atributosArgumentos de un método de la claseVariables locales de un método de la clase
NOTA: Los argumentos trabajan como variables locales
class Ejemplo{
int x ; variable miembrovoid metodo ( int y ) argumento{
int z ; variable localx = y + z ;
}}
22/06/2005 51
Ámbito de las Variables (II)Las variables miembro son visibles desde cualquier parte de la claseLos argumentos y variables locales sólo son visibles dentro del método al que pertenecen. Dejan de existir al finalizar el métodoDentro 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 Rectangulopublic class Rectangulo{
int base, altura; Atributospublic 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
ConstructoresSon 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 Rectangulopublic 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 2Rectangulo r2 = new Rectangulo(7, 3); Crea un rectangulo con base7,altura3
}
22/06/2005 55
Actividad: Pedir datos por consolaConversion de texto a enterosHacer 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 thisHace 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 atributospublic 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 referenciadosAl 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 distintosEn 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 sobrecargadovoid 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 sobrecargaEsta 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 2base = 4;altura = 2;
}
public Rectangulo(int b, int a){ construye un objeto con base b, altura abase = 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
ArraysLos 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 objetosDeclaracion de un array de objetos tipo Dependiente:Dependiente vectorDependientes[];
Construccion de n elementos enteros en el arrayanterior: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 ArraysDeclaracion, 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.javaque 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:\java\VectorDependientes.java
22/06/2005 65
Caracteristicas avanzadas de la POO
Encapsulamiento y Ocultacion de la informacionPolimorfismoHerencia
22/06/2005 66
Encapsulamiento y Ocultacionde 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 publicosy ocultando sus propiedades impidiendo al exterior conocer los detalles de implementacion de la clase
22/06/2005 67
Ejemplo de Ocultacionpublic 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 exteriorSolucion: 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 Rectangulopublic 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 DependienteDiseñ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 : Stringnombre: Stringsalario : float
saluda()
22/06/2005 71
Actividad Dependiente.java
La modificación propuesta en la actividad anterior puedes verla aquíC:\java\Dependiente.javaRealiza el cambio a la clase SaludaDependiente para usar la nueva clase Dependiente.
22/06/2005 72
Concepto de HerenciaLa POO se basa en una jerarquía de clases que consiste
en agrupar atributos y/o métodos comunesLas clases descendientes se llaman subclasesLas clases ascendientes se llaman superclasesLas subclases heredan características y métodos de las superclases (excepto los constructores)Ejemplo:Vertebrados Mamiferos Caninos
FelinosAvesAnfibios
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:\java\Empleado.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 metodosUna 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 argumentoses 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 sobreescrituraclass 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 heredadoSystem.out.println(“Numero Trabajadores: “ + numTrabajadores);
}}
Clase Jefe: C:\java\Jefe.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:\java\CrearOficina.java
22/06/2005 78
Modificador finalEl 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 staticPara acceder a las variables y métodos de una clase es necesario crear primero un objetoEl modificador static puede aplicarse a variables y a métodos para acceder a ellos sin instanciar ningún objetoLos miembros estáticos pertenecen a la clase, no a los objetos
Atributos estaticos: equivalen a variables globalesMetodos estaticos: solo pueden acceder a miembros estaticos y no pueden sobreescribirse
22/06/2005 80
Clases abstractasUna clase abstracta es una clase de la que no se pueden crear objetos, no se puede instanciarUn 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
InterfacesUna 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 claseEs la forma de implementar la herencia multiple en Java
22/06/2005 82
Interface Animalinterface 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: \java\Animal.javaResultado actividad: C:\java\Perro.java
22/06/2005 84
PaquetesLos paquetes en Java son contenedores o agrupaciones de clases
utilizados para evitar conflictos de nombresdividen 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 paquetesdefinen 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 Empleadopackage 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 accesoLa 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 paquetesComo 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
ExcepcionesJava 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 excepcionesJava 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 erroresSi 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 excepcionesSintaxis:
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 throwsNo se capturan las excepciones sino que se lanzan ‘hacia arriba’Sera un metodo superior en la cadena de llamada quien capture la excepcionSi 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:\java\CrearOficinaTry.java
22/06/2005 93
Sentencia throwPermite 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 personalizadasEl 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 personalizadasEjemplo PedirSalario
Clase Error: C:\java\Error.java
Clase Validar: C:\java\Validar.java
Clase PedirSalario: C:\java\PedirSalario.java
22/06/2005 97
Entrada / SalidaJava 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 datosLa información se traslada en serie por el stream
Estos conceptos representan cualquier E/S:lectura/escritura de archivoscomunicación a través de Internetlectura 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 InputStreampara escritura (salida): clase OutputStream
Operaciones con caracteres (texto):para lectura (entrada): clase Readerpara escritura (salida): clase Writer
Las cuatro clases son abstractasInstanciar 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 caracteresReader
BufferedReaderLineNumberReader
CharArrayReaderInputStreamReader
FileReaderFilterReader
PushbackReaderPipedReaderStringReader
WriterBufferedWriterCharArrayWriterOutputStreamWriter
FileWriterFilterWriterPipedWriterStringWriterPrintWriter
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/SSe puede deducir la función de una clase según las
palabras que componen su nombre:InputStream, OutputStream Lectura/Escritura de bytesReader, Writer Lectura/Escritura de caracteresFile FicherosString, CharArray, Memoria (según el tipoByteArray, StringBuffer primitivo indicado)Piped Tubo de datosBuffered BufferFilter FiltroData Intercambio de datos de JavaObject Persistencia de objetosPrint 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ídosint 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 abiertoint avaible() devuelve el número de bytes disponibles para leerlong 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 dadoWriter: void write(char[]) escribe el array de caracteres dadoWriter: void write(String) escribe una cadena de caracteres.
Otros métodos:void close() cierra el stream abiertovoid flush() fuerza a que se escriban las operaciones de escritura que haya pendientes
22/06/2005 104
Lectura y escritura en archivosLas clases FileInputStream y FileOutputStreampermiten leer y escribir bytes en archivos binarios, o caracteres de un byteLas clases FileReader y FileWriter son similares a las anteriores pero permiten leer y escribir caracteres Unicode (16 bits) en archivos de textoCada llamada a read() o write() accede al disco para un único byte o un único carácter poco eficientePara 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 FileLa clase File hace referencia a un archivo o un directorioSe 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:\\windows\\notepad.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 otroimport 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:\java\FLectura.javaLectura de un fichero de acceso directo carácter a carácter: C:\java\FDirecto.javaManejo de un fichero de acceso directo : C:\java\ManejarDirecto.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 bytesque 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 respectivamenteTodas 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 ObjectOutputStreamen el que se almacenarán los objetos Alumno pedidos al usuario.
22/06/2005 111
Ejemplo PersistenciaAlumno
Clase Alumno: C:\java\Alumno.javaClase PersistenciaAlumno: C:\java\PersistenciaAlumno.java
22/06/2005 112
Lectura de un archivo de Internet
Java proporciona un mecanismo que permite leer archivos de Internet mediante un streamLa clase URL del paquete java.net representa una dirección de InternetEl 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 útilesLas clases en Java son muy numerosas, pero existen algunas
clases que pueden resultar interesantes para programar en Java. Entre otras estas son:
Clase MathClases envolventes:
IntegerFloatDoubleBoolean
Clase StringClase 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 invocarlosA 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/CadenaFloat F;String s = Float.toString( F ); pasa un float a cadenaF = Float.valueOf( "3.14" ); pasa una cadena a float
Conversiones de Clase a tipo de datoFloat 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 StringUn 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étodosMétodos básicos:
int length(); int l = s.length(); 4char 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) falseboolean equalsIgnoreCase( String str2 );
Subcadenas:String substring (int comienzo, int final);
Mayúsculas / minúsculas:s.toLowerCase(); s.toUpperCase();
22/06/2005 118
StringBufferUn 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 DateRepresenta una fecha: el dia, mes, año, horas, minutos y segundos
Date() crea objetos con fecha y hora actualDate(año, mes dia) con hora 00:00:00date(año, mes, dia, horas, minutos, segundos)
Metodos:getDate() devuelve la fecha actualtoString() devuelve la cadena correspondiente
22/06/2005 121
Clase StringTokenizerPermite realizar un análisis gramatical (parse) de una cadena de entradaSe 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 MathEs la clase ‘Matemáticas’ y no se instanciaProporciona métodos matemáticos estáticos:
Math.abs( x ) devuelve el valor absoluto de xMath.sin ( double x ); Math.cos ( double x ), etc.Math.sqrt ( double x ) raíz cuadradaMath.pow ( double x, double y ) potenciaciónMath.random () genera double entre 0 y 1 aleatorioMath.E; Math.PI constantes matemáticas
22/06/2005 123
La clase VectorLa 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 vectorint elementCount: número de elementos válidos del vectorObject[] 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 vectorint size() devuelve el número de elementos en el vectorboolean contains(Object elem) devuelve true si el vector contiene el objeto especificadoint indexOf(Object elem) devuelve la posición de la primera vez que aparece el objeto que se le pasaObject 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 finalvoid 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:\java\AulaVector.java
22/06/2005 126
Programacion concurrenteThreads
Un ordenador con un solo procesador es monotareaAlgunos sistemas operativos simulan multitarea, dividiendo el tiempo del procesador entre varios procesosUn proceso es cada uno de los programas o aplicaciones que se ejecutan de forma independienteTiene asociado:
Tiempo de CPUMemoria para CÓDIGOMemoria para DATOSUn 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. multihiloLa JVM es un proceso, desde el punto de vista del SO, con varios threads ejecutándose a la vez:
Garbage CollectorAWT (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 Threadimplementando Runnable
Hay dos formas de crear un thread1. 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 hilot.start ( ) ; // Lo ejecuta
}}
22/06/2005 129
Ejemplo: HolaMultihiloimplementando Runnableclass 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:\java\Multihola.java
22/06/2005 130
Creacion de un Threadheredando la clase Thread2. 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 hilot.start ( ) ; // Lo ejecuta
}}
Codigo: C:\java\HiloThread.java
22/06/2005 131
Ejemplo: HolaMultihiloextendiendo Threadclass 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 controladorEl 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 MVCEn 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:\java\Java-MVC\Controlador.javaModelo – ValorObservable: C:\java\Java-MVC\ValorObservable.javaVista1 – TextoObservador: C:\java\Java-MVC\TextoObservador.javaVista2 – BarraObservador: C:\java\Java-MVC\BarraObservador.java
22/06/2005 136
Programacion graficaEl 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 toolkitsnativos 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 SwingPara solucionar esta desventaja, entre otras cosas, se creo JFC (Java Foundation Clases) cuyas caracteristicas son:
Los componentes Swing: desde botones hasta splitpanesSoporte de aspecto y comportamiento: ofrece a los componentes una variedad de aspectos y comportamientosAPI 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 mismosLos componentes Swing soportan mas capacidades que AWTJava recomienda usar en las aplicaciones graficas componentes Swing en lugar de AWT (aunque estos ultimostodavía pueden ser utilizados)
22/06/2005 138
Un programa SwingVamos a realizar una pequeña aplicación Swing que realice conversiones de Euro a pesetas, y que contenga :
Dos cajas de texto: txtEuros, txtPesetasUn 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, WindowsO 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 contenedoresUn 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 dentrode 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 contentContainer contenido = this.getContentPane();//Se termina mostrando el framethis.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 formasCódigo propuesto: C:\java\ConversorEuros.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 frameJLabel lblEuros = new JLabel(“Euros: “);contenido.add(lblEuros);JTextField txtEuros = new JTextField(); contenido.add(txtEuros);Se crea un nuevo boton de nombre cmdAceptar y titulo ConvertirJButton 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 ActionPara manejar un evento primero es necesario añadir un ‘Escuchador de Eventos’ al objeto que los generacmdConvertir.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 eventosActionListener: El usuario pulsa un botón, presiona Returnmientras 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 EventosCrearemos 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 gridUtiliza 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 localServlets: orientadas al servidor, se ejecutan en el servidor y los resultados se devuelven en formato HTMLJSP: misma tecnologia que la anterior pero el codigo Java esta embebido en el HTML
22/06/2005 147
Applets de JavaLos 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 clienteFunciona: start(), el navegador invoca a éste método para que inicie la ejecuciónParada: stop(), el navegador ordena al applet que pare su ejecuciónDestuye: 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 appletdesde 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:\java\AppletConversorEuros.java
Página web: C:\java\pagina.html