Your SlideShare is downloading. ×
0
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Curso Java Resumen - Curso 2005-2006

776

Published on

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

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

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
776
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
26
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

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

×