Curso Java Resumen - Curso 2005-2006

150
22/06/2005 Java - Samuel Marrero Lorenzo 1 Programacion Orientada a Objetos Caso practico: Java

description

Resumen de Tutorial o Curso de Java impartido durante el curso 2005-2006, sobre los principios de este lenguaje orientado a objetos.

Transcript of Curso Java Resumen - Curso 2005-2006

Page 1: Curso Java Resumen - Curso 2005-2006

22/06/2005 Java - Samuel Marrero Lorenzo 1

Programacion Orientada a Objetos

Caso practico: Java

Page 2: Curso Java Resumen - Curso 2005-2006

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

Page 3: Curso Java Resumen - Curso 2005-2006

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.

Page 4: Curso Java Resumen - Curso 2005-2006

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.

Page 5: Curso Java Resumen - Curso 2005-2006

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

Page 6: Curso Java Resumen - Curso 2005-2006

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

Page 7: Curso Java Resumen - Curso 2005-2006

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

Page 8: Curso Java Resumen - Curso 2005-2006

22/06/2005 8

Programacion cliente-servidor

Plug-insScriptsJavaActiveXScriptlets

Page 9: Curso Java Resumen - Curso 2005-2006

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

Page 10: Curso Java Resumen - Curso 2005-2006

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

Page 11: Curso Java Resumen - Curso 2005-2006

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

Page 12: Curso Java Resumen - Curso 2005-2006

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%

Page 13: Curso Java Resumen - Curso 2005-2006

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{...}

Page 14: Curso Java Resumen - Curso 2005-2006

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.

Page 15: Curso Java Resumen - Curso 2005-2006

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

Page 16: Curso Java Resumen - Curso 2005-2006

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

Page 17: Curso Java Resumen - Curso 2005-2006

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

Page 18: Curso Java Resumen - Curso 2005-2006

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

Page 19: Curso Java Resumen - Curso 2005-2006

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

Page 20: Curso Java Resumen - Curso 2005-2006

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

Page 21: Curso Java Resumen - Curso 2005-2006

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

Page 22: Curso Java Resumen - Curso 2005-2006

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)

Page 23: Curso Java Resumen - Curso 2005-2006

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

Page 24: Curso Java Resumen - Curso 2005-2006

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;}

Page 25: Curso Java Resumen - Curso 2005-2006

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;}

Page 26: Curso Java Resumen - Curso 2005-2006

22/06/2005 26

Sentencias repetitivas: whileMientras se cumpla condición hacer

AccionesFin mientras

Equivale a:

while (condicion){

acciones;}

Page 27: Curso Java Resumen - Curso 2005-2006

22/06/2005 27

Sentencias repetitivas: do…while

RepetirAcciones

Mientras se cumpla condición

Equivale a:

do{

acciones;}while (condicion);

Page 28: Curso Java Resumen - Curso 2005-2006

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;}

Page 29: Curso Java Resumen - Curso 2005-2006

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

Page 30: Curso Java Resumen - Curso 2005-2006

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

Page 31: Curso Java Resumen - Curso 2005-2006

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

Page 32: Curso Java Resumen - Curso 2005-2006

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.

Page 33: Curso Java Resumen - Curso 2005-2006

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

Page 34: Curso Java Resumen - Curso 2005-2006

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

Page 35: Curso Java Resumen - Curso 2005-2006

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.

Page 36: Curso Java Resumen - Curso 2005-2006

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

Page 37: Curso Java Resumen - Curso 2005-2006

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

Page 38: Curso Java Resumen - Curso 2005-2006

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: .

Page 39: Curso Java Resumen - Curso 2005-2006

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

Page 40: Curso Java Resumen - Curso 2005-2006

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()

Page 41: Curso Java Resumen - Curso 2005-2006

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()

Page 42: Curso Java Resumen - Curso 2005-2006

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

Page 43: Curso Java Resumen - Curso 2005-2006

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

Page 44: Curso Java Resumen - Curso 2005-2006

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?”);

}}

Page 45: Curso Java Resumen - Curso 2005-2006

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

Page 46: Curso Java Resumen - Curso 2005-2006

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]

Page 47: Curso Java Resumen - Curso 2005-2006

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

Page 48: Curso Java Resumen - Curso 2005-2006

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 ;

}

Page 49: Curso Java Resumen - Curso 2005-2006

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

Page 50: Curso Java Resumen - Curso 2005-2006

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 ;

}}

Page 51: Curso Java Resumen - Curso 2005-2006

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

}

Page 52: Curso Java Resumen - Curso 2005-2006

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.

Page 53: Curso Java Resumen - Curso 2005-2006

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.

Page 54: Curso Java Resumen - Curso 2005-2006

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

}

Page 55: Curso Java Resumen - Curso 2005-2006

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

Page 56: Curso Java Resumen - Curso 2005-2006

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;

}

Page 57: Curso Java Resumen - Curso 2005-2006

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

Page 58: Curso Java Resumen - Curso 2005-2006

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

Page 59: Curso Java Resumen - Curso 2005-2006

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;

}}

Page 60: Curso Java Resumen - Curso 2005-2006

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

Page 61: Curso Java Resumen - Curso 2005-2006

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;}

Page 62: Curso Java Resumen - Curso 2005-2006

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);}

Page 63: Curso Java Resumen - Curso 2005-2006

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

Page 64: Curso Java Resumen - Curso 2005-2006

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

Page 65: Curso Java Resumen - Curso 2005-2006

22/06/2005 65

Caracteristicas avanzadas de la POO

Encapsulamiento y Ocultacion de la informacionPolimorfismoHerencia

Page 66: Curso Java Resumen - Curso 2005-2006

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

Page 67: Curso Java Resumen - Curso 2005-2006

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);}

}

Page 68: Curso Java Resumen - Curso 2005-2006

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

Page 69: Curso Java Resumen - Curso 2005-2006

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;}

}

Page 70: Curso Java Resumen - Curso 2005-2006

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()

Page 71: Curso Java Resumen - Curso 2005-2006

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.

Page 72: Curso Java Resumen - Curso 2005-2006

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

Page 73: Curso Java Resumen - Curso 2005-2006

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

Page 74: Curso Java Resumen - Curso 2005-2006

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

Page 75: Curso Java Resumen - Curso 2005-2006

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

Page 76: Curso Java Resumen - Curso 2005-2006

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

Page 77: Curso Java Resumen - Curso 2005-2006

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

Page 78: Curso Java Resumen - Curso 2005-2006

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 {…}

Page 79: Curso Java Resumen - Curso 2005-2006

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

Page 80: Curso Java Resumen - Curso 2005-2006

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

Page 81: Curso Java Resumen - Curso 2005-2006

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

Page 82: Curso Java Resumen - Curso 2005-2006

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.

Page 83: Curso Java Resumen - Curso 2005-2006

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

Page 84: Curso Java Resumen - Curso 2005-2006

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

Page 85: Curso Java Resumen - Curso 2005-2006

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í

Page 86: Curso Java Resumen - Curso 2005-2006

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.

Page 87: Curso Java Resumen - Curso 2005-2006

22/06/2005 87

Eclipse

Proyecto CrearOficina

Page 88: Curso Java Resumen - Curso 2005-2006

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

Page 89: Curso Java Resumen - Curso 2005-2006

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

Page 90: Curso Java Resumen - Curso 2005-2006

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);

}…

}

Page 91: Curso Java Resumen - Curso 2005-2006

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…

}

Page 92: Curso Java Resumen - Curso 2005-2006

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

Page 93: Curso Java Resumen - Curso 2005-2006

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.

Page 94: Curso Java Resumen - Curso 2005-2006

22/06/2005 94

Arbol de excepciones Java

Page 95: Curso Java Resumen - Curso 2005-2006

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.

Page 96: Curso Java Resumen - Curso 2005-2006

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

Page 97: Curso Java Resumen - Curso 2005-2006

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)

Page 98: Curso Java Resumen - Curso 2005-2006

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()

Page 99: Curso Java Resumen - Curso 2005-2006

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)

Page 100: Curso Java Resumen - Curso 2005-2006

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.)

Page 101: Curso Java Resumen - Curso 2005-2006

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

Page 102: Curso Java Resumen - Curso 2005-2006

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

Page 103: Curso Java Resumen - Curso 2005-2006

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

Page 104: Curso Java Resumen - Curso 2005-2006

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

Page 105: Curso Java Resumen - Curso 2005-2006

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”);

Page 106: Curso Java Resumen - Curso 2005-2006

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();

}}

Page 107: Curso Java Resumen - Curso 2005-2006

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

Page 108: Curso Java Resumen - Curso 2005-2006

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.

Page 109: Curso Java Resumen - Curso 2005-2006

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

Page 110: Curso Java Resumen - Curso 2005-2006

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.

Page 111: Curso Java Resumen - Curso 2005-2006

22/06/2005 111

Ejemplo PersistenciaAlumno

Clase Alumno: C:\java\Alumno.javaClase PersistenciaAlumno: C:\java\PersistenciaAlumno.java

Page 112: Curso Java Resumen - Curso 2005-2006

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...

Page 113: Curso Java Resumen - Curso 2005-2006

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

Page 114: Curso Java Resumen - Curso 2005-2006

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

Page 115: Curso Java Resumen - Curso 2005-2006

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();

Page 116: Curso Java Resumen - Curso 2005-2006

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”;

Page 117: Curso Java Resumen - Curso 2005-2006

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();

Page 118: Curso Java Resumen - Curso 2005-2006

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.”);

Page 119: Curso Java Resumen - Curso 2005-2006

22/06/2005 119

El paquete java.util

Contiene numerosas clases e interfaces para la gestión de objetos en listas y colecciones.

Page 120: Curso Java Resumen - Curso 2005-2006

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

Page 121: Curso Java Resumen - Curso 2005-2006

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” );

}

Page 122: Curso Java Resumen - Curso 2005-2006

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

Page 123: Curso Java Resumen - Curso 2005-2006

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

Page 124: Curso Java Resumen - Curso 2005-2006

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

Page 125: Curso Java Resumen - Curso 2005-2006

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

Page 126: Curso Java Resumen - Curso 2005-2006

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

Page 127: Curso Java Resumen - Curso 2005-2006

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.

Page 128: Curso Java Resumen - Curso 2005-2006

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

}}

Page 129: Curso Java Resumen - Curso 2005-2006

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

Page 130: Curso Java Resumen - Curso 2005-2006

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

Page 131: Curso Java Resumen - Curso 2005-2006

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();}

}

Page 132: Curso Java Resumen - Curso 2005-2006

22/06/2005 132

Estados de un thread

Page 133: Curso Java Resumen - Curso 2005-2006

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.

Page 134: Curso Java Resumen - Curso 2005-2006

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.

Page 135: Curso Java Resumen - Curso 2005-2006

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

Page 136: Curso Java Resumen - Curso 2005-2006

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.

Page 137: Curso Java Resumen - Curso 2005-2006

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)

Page 138: Curso Java Resumen - Curso 2005-2006

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…)

Page 139: Curso Java Resumen - Curso 2005-2006

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.

Page 140: Curso Java Resumen - Curso 2005-2006

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

Page 141: Curso Java Resumen - Curso 2005-2006

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);

Page 142: Curso Java Resumen - Curso 2005-2006

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

Page 143: Curso Java Resumen - Curso 2005-2006

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.

Page 144: Curso Java Resumen - Curso 2005-2006

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

Page 145: Curso Java Resumen - Curso 2005-2006

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

Page 146: Curso Java Resumen - Curso 2005-2006

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

Page 147: Curso Java Resumen - Curso 2005-2006

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.

Page 148: Curso Java Resumen - Curso 2005-2006

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

Page 149: Curso Java Resumen - Curso 2005-2006

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

Page 150: Curso Java Resumen - Curso 2005-2006

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