Introducción al lenguaje de programación Java

Tamaño: px
Comenzar la demostración a partir de la página:

Download "Introducción al lenguaje de programación Java"

Transcripción

1 Introducción al lenguaje de programación Java Conceptos básicos Carlos Varela Paz [1-1] Carlos Varela Paz Introducción al lenguaje de programación Java

2 Introducción Parte I Fundamentos del lenguaje [2-2] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

3 Introducción Historia Herramientas Empaquetador JAR Índice 1 Introducción Historia Herramientas Empaquetador JAR [3-4] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

4 Introducción Historia Herramientas Empaquetador JAR Éste curso Que es Java? Herramientas básicas Sintáxis básica Manejo de objetos Threads Mecanismos de E/S Clases de útilidad más usadas... [3-4] Carlos Varela Paz Introducción al lenguaje de programación Java

5 Introducción Historia Herramientas Empaquetador JAR Breve historia Creado por Sun. Objetivo de diseño: creación de un lenguaje independiente de la plataforma y del sistema operativo, para el desarrollo de electrónica de consumo. El proyecto original (Green) comenzó apoyándose en C++: problemas de portabilidad. Desarrolló su propio lenguaje y en agosto de 1991 nació un nuevo lenguaje orientado a objetos (Oak). A mitad de 1993 se lanzó Mosaic el primer navegador para la Web, y comenzó a crecer el interés por Internet (y en particular por la World Wide Web). Rediseño del lenguaje para desarrollar aplicaciones para Internet. [5-6] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

6 Introducción Historia Herramientas Empaquetador JAR Breve historia Enero del 1995 Oak se convirtió en Java. En 1996 Sun lanza el entorno JDK 1.0. Desde entonces se han lanzado diferentes versiones, aunque la primera comercial se denominó JDK 1.1 y se lanzó a principios de En diciembre de 1998 Sun lanzó la plataforma Java 2 (que se ha conocido como JDK 1.2 durante su fase de pruebas beta). Esta versión de Java ya presentó la madurez de la plataforma Java. Sun renombró Java 1.2 como Java 2. La última versión lanzada por Sun es Java(TM) 2 Platform Standard Edition 5.0 o J2SE(TM) 5.0. [5-6] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

7 Introducción Historia Herramientas Empaquetador JAR Intérprete Un interprete Java es un software que contiene una máquina virtual Java y que ejecuta aplicaciones Java: Realiza todas las actividades del sistema de ejecución de Java. Carga los archivos de clase y traduce el bytecode compilado. El intérprete Java de Sun es java, la sintaxis es: Aplicaciones independientes java [opciones] nombre clase [argumentos] En una aplicación independiente, una clase contiene el metodo main(), que contiene sentencias para ejecutar al inicio. Para que la aplicación se ejecute, se ejecuta el intérprete indicando esa clase como argumento. 7 [7-11] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

8 Introducción Historia Herramientas Empaquetador JAR Intérprete Aplicaciones independientes Especificar el nombre completo de la clase, sin la extensión.class. El intérprete busca la clase en la ruta de clases, que es una lista de directorios dónde se guardan los paquetes de las clases. La ruta de clase normalmente está definida en la variable de entorno CLASSPATH, pero puede ser redefinida con la opción -classpath o -cp Tras cargar la clase especificada en la ĺınea de comando, el intérprete ejecuta el método main() de la clase. A partir de aquí la aplicación puede iniciar threads adicionales, hacer referencia a otras clases, crear su interfaz de usuario u otras estructuras. [7-11] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

9 Introducción Historia Herramientas Empaquetador JAR Compilador El compilador de Sun es javac. javac convierte el código fuente Java en una clase compilada que contiene el bytecode de la máquina virtual Java. Los archivos fuente tienen la extensión.java, los archivos de clase resultantes tienen la extensión.class. Se permite una única clase pública por archivo y el nombre del archivo debe ser el mismo que el de la clase. Un único arquivo puede contener múltiples clases siempre y cuando sólo una de ellas sea pública. [7-11] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

10 Introducción Historia Herramientas Empaquetador JAR Compilador Ejemplo En un fichero HolaMundo.java escribimos el código siguiente: p u b l i c c l a s s HolaMundo { p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) { System. out. p r i n t l n ( Hola mundo! ) ; ejecutamos: javac HolaMundo.java java HolaMundo 10 [7-11] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

11 Introducción Historia Herramientas Empaquetador JAR Compilador Si queremos que al compilar las clases se generen en un directorio distinto del actual usamos la opción -d del compilador: javac -d clases HolaMundo.java java -cp clases HolaMundo Se pueden especificar múltiples archivos.java en un único comando javac. El compilador crea un archivo de clase por cada archivo fuente. No es necesario listar los archivos fuente de todas las clases utilizadas, éstas se buscan usando la ruta de clases. 1 [7-11] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

12 Introducción Historia Herramientas Empaquetador JAR Empaquetador JAR Los ficheros.jar son el medio estándar y portatil de empaquetar todas las partes de una aplicación Java. En un JAR podemos poner todo lo que queramos: clases Java, datos, imagenes, sonidos... El sistema de ejecución sabe manejar este tipo de ficheros y por eso podemos incluirlos en nuestro classpath. Los elementos almacenados se comprimen con ZLIB 2 [12-18] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

13 Introducción Historia Herramientas Empaquetador JAR Empaquetador JAR Con la utilidad jar podemos crear o leer ficheros JAR. La sintaxis imita a la de la utilidad tar de Unix: Para crear un JAR que contenga ciertos paths jar -cvf ficherojar path [path] [...] Para listar el contenido de un JAR, mostrando sólo ciertos paths jar -tvf ficherojar [path] [...] Para extraer el contenido de un JAR, o solo ciertos paths jar -xfv ficherojar [path] [...] 3 [12-18] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

14 Introducción Historia Herramientas Empaquetador JAR Empaquetador JAR Ejemplo Vamos a empaquetar nuestra clase HolaMundo.java: jar -cfv holamundo.jar clases manifest agregado agregando: clases/(entrada = 0) (salida= 0)(almacenado 0%) agregando: clases/holamundo.class(entrada = 423) (salida= 288)(desinflado 31%) 4 [12-18] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

15 Introducción Historia Herramientas Empaquetador JAR Empaquetador JAR Ejemplo Desempaquetamos el JAR: jar -xfv holamundo.jar creado: META-INF/ extraído: META-INF/MANIFEST.MF creado: clases/ extraído: clases/holamundo.class 5 [12-18] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

16 Introducción Historia Herramientas Empaquetador JAR Empaquetador JAR Ejemplo Podemos ver el contenido: jar -tfv holamundo.jar 0 Fri Dec 03 08:37:10 CET 2004 META-INF/ 68 Fri Dec 03 08:37:12 CET 2004 META-INF/MANIFEST.MF 0 Thu Nov 11 09:33:22 CET 2004 clases/ 423 Wed Nov 10 13:17:16 CET 2004 clases/holamundo.class 6 [12-18] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

17 Introducción Historia Herramientas Empaquetador JAR Empaquetador JAR Manifiesto jar crea un directorio META-INF con un fichero MANIFEST.MF. Este fichero contiene información acerca de los ficheros almacenados Contiene pares clave:valor Por defecto: Manifest-Version: 1.0 Created-By: (Sun Microsystems Inc.) Para incluir un fichero de manifiesto se usa la opción m de jar 7 [12-18] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

18 Introducción Historia Herramientas Empaquetador JAR Empaquetador JAR Manifiesto: Ejemplo Una de las claves es Main-Class que sirve para especificar la clase principal de la aplicación. En el directorio clases escribimos un fichero manifiesto.mf Manifest-Version: 1.0 Created-By: Carlos Main-Class: HolaMundo Invocamos: jar -cvmf manifesto.mf holamundo.jar. Para ejecutar la aplicación se usar la opción -jar de java: java -jar holamundo.jar 8 [12-18] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

19 Índice Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays 2 Comentarios Tipos Sentencias Expresiones Excepciones Arrays 9 [19-19] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

20 Comentarios Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays En Java se pueden hacer comentarios de bloque y de ĺınea. Los primeros están delimitados por /* y */ y los segundos por //: / Comentario de bloque con mas de una l i n e a / // Comentario de una l i n e a // Otro comentario de una l i n e a 0 [20-25] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

21 Comentarios Observaciones Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Los comentarios de bloque no pueden anidarse. / Comentario de bloque con mas de una l i n e a / e s t o no compila / / Los comentarios de una ĺınea están delimitados por el final de ĺınea, si se pone // dentro de un comentario de ĺınea no tiene efecto. No entran en conflicto con los comentarios de bloque. / Comentario de bloque con mas de una l i n e a // e s t o compila / 1 [20-25] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

22 Comentarios Javadoc Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Si un comentario de bloque empieza por /** se indica un comentario de documentación. Éstos están diseñados para ser extraídos por generadores automáticos de documentación como el programa javadoc. En estos comentarios se usan márcas especiales para añadir información: cada espacio en una ĺınea hasta un * es ignorado y las ĺıneas que empiezen por se interpretan como etiquetas especiales para el generador de documentación. 2 [20-25] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

23 Comentarios Javadoc Ejemplo Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays / Esta una c l a s e h o l a mundo. Esta c l a s e e s c r i b e h o l a mundo en l a s a l i d a e s t a n d a H o l a P l a n e t C a r l o s V a r e l a v e r s i o n , 3 Dec 2004 / p u b l i c c l a s s HolaMundo { / Metodo p r i n c i p a l de Hola a r g s Argumentos p a s a d os a l i n t e r p r e t r e t u r n nada / p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { System. out. p r i n t l n ( Hola mundo! ) ; 3 [20-25] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

24 Comentarios Javadoc Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays javadoc crea la documentación en formato HTML. El compilador tambien busca estos comentarios en el código, en concreto está interesado en la que indica que un método esta obsoleto y deberá evitarse en nuevos programas. El compilador genera un mensaje de aviso si se usa un método obsoleto. Los comentarios de documento pueden aparecer encima de las definiciones de clases, métodos y variables, pero no todas las etiquetas pueden ser aplicadas a todos los casos. Por ejemplo, las variables pueden tener sólo la 4 [20-25] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

25 Comentarios Javadoc Etiquetas Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Etiqueta Descripción Se aplica Nombre de clase asociada Clase, método o Nombre del autor Cadena con la versión Nombre y descripción del Método Descripción del valor de Método Nombre y descripción de la excepción Declara un elemento como obsoleto Clase, método o variable 5 [20-25] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

26 Tipos Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Los tipos de datos en Java se dividen en dos categorías: Los tipos primitivos representan valores sencillos que tienen una funcionalidad incorporada en el lenguaje. Son elementos ya definidos como constantes, literales y números. Los tipos referencia (o tipos de clases) incluyen objetos y arrays. Se denominan tipos de referencia por que se pasan por referencia tal y como veremos. 6 [26-40] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

27 Tipos primitivos Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Los elementos fundamentales en Java son números, caracteres y valores booleanos. A diferencia de otros lenguajes orientados a objetos, éstos no son objetos. Para aquellas situaciones en las que es deseable tratar en valor primitivo como un objeto, Java proporciona clases envolventes 1. Una de las ventajas de tratar con valores primitivos es que el compilador está más preparado para optimizar su uso. Otra carácterística está relacionada con la portabilidad de Java, los tipos primitivos están definidos con precisión. p.e: un int tiene un tamaño de 32 bits en cualquier plataforma 1 En Java 1.5 el compilador hace automáticamente la conversión según el uso que le vaya a dar (ej: se puede hacer 5+Integer(5)) 7 [26-40] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

28 Tipos primitivos Tipos de datos Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Tipo boolean char byte short int long float double Definición true o false Carácter Unicode de 16 bits Entero de complemento 2 con signo de 8 bits Entero de complemento 2 con signo de 16 bits Entero de complemento 2 con signo de 32 bits Entero de complemento 2 con signo de 64 bits Valor en coma flotante 754 IEEE de 32 bits Valor en coma flotante 754 IEEE de 64 bits 8 [26-40] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

29 Introducción Tipos primitivos Declaración e inicialización de variables Comentarios Tipos Sentencias Expresiones Excepciones Arrays Las variables se declarán dentro de clases o métodos del siguiente modo: i n t unentero ; double d1, d2 ; boolean terminado ; Las variables se pueden inicializar en el momento de la declaración: i n t unentero =4; double d1 =4.6, d2 =2 5+7; boolean terminado=true ; 9 [26-40] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

30 Introducción Tipos primitivos Declaración e inicialización de variables Comentarios Tipos Sentencias Expresiones Excepciones Arrays Las variables de clase que no se inicialicen cogen valores por defecto. Los valores numéricos tienen por defecto cero, los carácteres el carácter nulo (\0) y los booleanos false. En cambio, las variables locales a los métodos, deben inicializarse expĺıcitamente antes de ser usadas. Los tipo primitivos, al utilizarse, se pasan por valor, es decir, cuando se asigna un valor primitivo o se pasa como argumento de un método, éste se copia. 0 [26-40] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

31 Tipos primitivos Literales enteros Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Los literales enteros pueden especificarse en octales, decimales o hexadecimales (base 8, 10 o 16). Decimales: números que comienzan por 1-9 i n t i =1234; Octales: comienzan por un cero i n t i =01230; // i = 644 en d e c i m a l Hexadecimales: se representas comenzándolos por 0x, siguiendo con los dígitos y carácteres de a-f o A-F, que representan los valores decimales de 10-15: i n t i =0xFFFFFF ; // i = en d e c i m a l 1 [26-40] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

32 Tipos primitivos Literales enteros Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Los literales enteros son del tipo int salvo que lleven una L como sufijo que indique que es un long: long i =13L ; long i =13; // e q u i v a l e n t e : 13 se c o n v i e r t e // de un t i p o i n t Cuando se usa un tipo numérico en una expresión donde aparece un tipo con rango superior, el tipo inicial se puede convertir al tipo mayor (como en el ejemplo anterior). Algunas operaciones numéricas y de comparación tambien crean estas conversiones. 2 [26-40] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

33 Tipos primitivos Literales enteros Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Un tipo numérico no puede ser asignado a un tipo inferior sin una conversión expĺıcita (cast): i n t i = 1 3 ; byte b = i ; // e r r o r de c o m p i l a c i o n, // s e n e c e s i t a // una c o n v e r s i o n e x p l i c i t a byte b = ( byte ) i ; // OK Las conversiones de coma flotante a enteros siempre necesitan conversión debido a la potencial perdida de precisión. 3 [26-40] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

34 Tipos primitivos Literales en coma flotante Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Los valores en coma flotante pueden especificarse en notación decimal o científica. Los literales en coma flotante son del tipo double salvo que lleven una f o F como sujifo que indiquen que son de tipo float: double d = ; double e = 3.00 e +8; f l o a t f = 8.31 F ; f l o a t g = 3.00 e+8f ; 4 [26-40] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

35 Tipos primitivos Literales carácter Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays El valor de un caracter literal puede definirse bien mediante un carácter que esté encerado entre comillas sencillas o como una sentencia de escape ASCII o Unicode: char a = a ; char nuevalinea = \n ; char s m i l e y = \ u263a ; 5 [26-40] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

36 Tipos referencia Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays En Java, al crear una clase se define un nuevo tipo en el lenguaje. Por ejemplo, si se crea un clase llamada Prueba, tambien se crea de forma impĺıcita un nuevo tipo llamado Prueba. Un elemento del tipo Prueba, en general, puede ser asignado a una variable del tipo Prueba o pasarse como argumento a un método que acepte un valor Prueba. Los tipos referencia se pasan por referencia. Lo que contiene una variable de tipo referencia es una referencia a un objeto de su tipo. Cuando se asigna o se pasa una referencia a un método, ésta se pasa por valor. Se puede pensar en una referencia como un tipo de puntero al que se quita la refencia automáticamente siempre que se cita. 6 [26-40] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

37 Tipos referencia Ejemplo Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Cosa micosa = new Cosa ( ) ; Cosa otracosa = micosa ; micosa es una variable de tipo Cosa a la que le asignamos en objeto Cosa que acabamos de crear. Luego asignamos esa referencia a la variable otracosa. Ahora tenemos dos referencias apuntado al mismo objeto. Los cambios que se hagan en una de ellas se verán reflejados en la otra. 7 [26-40] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

38 Tipos referencia Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Los tipos referencia siempre apuntan a objetos y los objetos siempre se definen por clases. Sin embargo, existen dos excepciones: los arrays y las interfaces. Los arrays tienen un lugar especial en el sistema de tipos. Son tipos de objetos especiales que se crean automáticamente para contener otro tipo de objetos, conocidos como tipo base. Al declarar una referencia de tipo array se crea el nuevo tipo de clase. Las interfaces definen un conjunto de métodos y un tipo correspondiente. Cualquier objeto que implemente todos los métodos de la interfaz puede ser tratado como un objeto de ese tipo. Los argumentos pueden ser declarados del tipo interfaz. 8 [26-40] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

39 Tipos referencia Notas acerca de los strings Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Los strings en Java son objetos y por lo tanto un tipo referencia. Los objetos String sin embargo, tienen una ayuda especial del compilador Java que hace que parezcan más bien como del tipo primitivo. En el código fuente, a los valores de las cadenas literales el compilador los convierte en objetos String. Pueden usarse directamente, pasarse como argumentos a métodos o asignarse a variables de tipo String 9 [26-40] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

40 Introducción Tipos referencia Notas acerca de los strings: Ejemplo Comentarios Tipos Sentencias Expresiones Excepciones Arrays System. out. p r i n t l n ( Hola mundo! ) ; S t r i n g s = Hola ; S t r i n g t = C a r l o s d i j o : \ Hola \ ; El símbolo + tiene más de una función (está sobrecargado) para proporcionar la concatenación de strings y la suma de números. Junto con +=, son los únicos operadores sobrecargados en Java. S t r i n g t = En un l u g a r de l a + Mancha ; S t r i n g t2 = t + de cuyo nombre... ; Java crea un único objeto String a partir de la concatenación de strings y las ofrece como el resultado de la expresión. 0 [26-40] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

41 Sentencias Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Las sentencias aparecen dentro de métodos y clases. Describen todas las actividades de un programa. Las declaraciones de variables y asignaciones, como las de la sección anterior, son sentencias que constituyen la estructura básica del lenguaje, como las condiciones y los bucles. Las sentencias y expresiones aparecen dentro de bloques de código. 1 [41-51] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

42 Sentencias Bloques de código Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Un bloque de código es, desde el punto de vista de la sintaxis, una serie se sentencias dentro de unas llaves. Las sentencias dentro de un bloque de código pueden contener declaraciones de variables: { i n t tam = 5 ; setnombre ( KK ) ;... 2 [41-51] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

43 Sentencias Bloques de código: Métodos Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Los métodos, son en cierto sentido bloques de código que toman parámetros y que pueden llamarse por su nombre: setnombre ( S t r i n g nombre ) { i n t tam=5; setnombre ( nombre ) ; El ámbito de las declaraciones de variables se encuentra limitado al bloque se código que la encierra: { i n t i = 5 ; i = 6 ; // E r r o r de c o m p i l a c i o n 3 [41-51] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

44 Introducción Sentencias Bloques de código: Condicionales Comentarios Tipos Sentencias Expresiones Excepciones Arrays El uso más común es definir un grupo de sentencias para su uso en una sentencia condicional o iterativa. Un condición se define como: i f ( c o n d i c i o n ) { s e n t e n c i a 1 ; s e n t e n c i a 2 ;... e l s e { s e n t e n c i a 3 ; s e n t e n c i a 4 ;.... condicion es una expresión booleana. 4 [41-51] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

45 Introducción Sentencias Bloques de código: Condicionales Comentarios Tipos Sentencias Expresiones Excepciones Arrays Para generar blucles condicionales se usan las sentencias do y while: while ( c o n d i c i o n ) { s e n t e n c i a ; s e n t e n c i a ;... ; do { s e n t e n c i a ; s e n t e n c i a ;... while ( c o n d i c i o n ) ; 5 [41-51] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

46 Sentencias Bloques de código: For Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Se pueden crear blucles for de la forma: f o r ( i n i c i a l i z a c i o n ; c o n d i c i o n ; i n c r e m e n t o ) s e n t e n c i a ; La expresión que inicializa una variable puede declarar una nueva variable que será restringida al ámbito del bucle for: f o r ( i n t i = 0 ; i < 100; i ++) { System. out. p r i n t l n ( i ) ; i n t j = i ;... 6 [41-51] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

47 Sentencias Bloques de código: for Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Se pueden usar múltiples expresiones separadaspor coma en secciones de inicialización y de incremento de un bucle for. Por ejemplo: f o r ( i n t i =0, j =10; i < j ; i ++, j ) {... 7 [41-51] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

48 Sentencias Bloques de código: switch Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays La sentencia switch recibe un tipo entero y hace una selección entre varias opciones case: switch ( e x p r e s i o n e n t e r a ) { case e x p r e s i o n e n t e r a : s e n t e n c i a ; [ case e x p r e s i o n e n t e r a : s e n t e n c i a ;... d e f a u l t : s e n t e n c i a ; ] default se usa para recoger las condiciones que no se cumplen. 8 [41-51] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

49 Sentencias Bloques de código: switch Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Normalmente se usa la sentencia break para finalizar una ramificación de switch: switch ( v a l o r ){ case 1 :... break ; case 2 :... break ; Las sentencias break y continue se utilizan para realizar saltos incondicionales fuera de un bucle o de una sentencia condicional. 9 [41-51] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

50 Sentencias Bloques de código: etiquetas Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Las sentencias encerradas como bloques de código e iteradores pueden ser etiquetados con una sentencia de identificación: uno : w h i l e ( c o n d i c i o n ) {... dos : w h i l e ( c o n d i c i o n ) {... // romper o c o n t i n u a r // d e s p u e s de dos // d e s p u e s de uno 0 [41-51] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

51 Sentencias Bloques de código: ejemplo Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays En este ejemplo, un break o un continue sin argumentos en la posición indicada hubiera hecho que el proceso continuase en el punto después de dos (break) o volviera a comprobar la condición (continue). Un break dos haría lo mismoque un break normal, pero un break uno iría al punto despues de uno. Análogamente, continue dos habría hecho lo mismo que continue, pero continue uno haría volver a la prueba del bucle uno. 1 [41-51] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

52 Expresiones Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Las expresiones describen valores. Una expresión se evalua para obtener un resultado que va a ser usado como parte de otra expresión o en una sentencia. Al evaluar una expresión se obtiene un resultado o valor. El valor de una expresión puede ser de tipo numérico, como en una operacion aritmética, de tipo referencia, como en la ubicación de un objeto o un tipo especial void, que es el tipo que se declara a un método que no devuelve ningun valor. El tipo de una expresión se conoce en tiempo de compilación. 2 [52-63] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

53 Operadores Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Precedente Operador Tipo Descripción 1 ++, Aritmético Incrementa y decrementa. 1 +, Aritmético Más y menos unarios. 1 ~ Integral Complemento bitwise. 1! Boolean Complemento lógico. 1 (type) Cualquiera Cast. 2, /, % Aritmético Multiplicación, división, resto de la división. 3 +, Aritmético Adición y sustracción. 3 + Cadena Concatenación de cadenas. 4 << Integral Cambia a la izquierda. 4 >> Integral Cambio por la derecha con la extensión del signo. 4 >>> Integral Cambio por la derecha sin extensión. 5 >, <=, >, >= Aritmético Comparación numérica. 5 instanceof Objeto Comparación del tipo. 3 [52-63] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

54 Operadores Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Precedente Operador Tipo Descripción 6 ==,!= Primitivo Igualdad y desigualdad de valor. 6 ==,!= Objeto Igualdad y desigualdad de referencia. 7 & Integral AND bitwise. 7 & Boolean AND booleano. 8 ^ Integral XOR bitwise. 8 ^ Boolean XOR booleano. 9 Integral OR bitwise. 9 Boolean OR booleano. 10 && Boolean AND condicional. 11 Boolean OR condicional. 12?: NA Operador ternario condicional. 13 = Cualquiera Asignación. 13 =, / =, %=, + =, Cualquiera Asignación con operación. =, <<=, >>=, >>>=, &=, ^=, = 4 [52-63] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

55 Introducción Operadores: observaciones Comentarios Tipos Sentencias Expresiones Excepciones Arrays Java no permite la manipulación directa del puntero, por lo que no soporta operadores de referencia y dereferencia (que tiene, por ejemplo, C). Tambien añade operadores como la concatenación de cadenas. La asignacion se puede usar como una valor por parte de otra expresión: j = ( i = 5 ) ; La expresión null puede asignarse a cualquier tipo de referencia. Tiene el significado de sin referencia. Una referencia null no puede utilizarse para hacer referencia a algo y su intento genera un NullPointerException durante la ejecución. 5 [52-63] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

56 Introducción Operadores: operador punto Comentarios Tipos Sentencias Expresiones Excepciones Arrays El operador punto (.) tiene varios significados. Puede recuperar el valor de un contenido (de algún objeto) o de una variable static (de una clase). También puede especificar un método para que sea invocado en un objeto o clase. El uso de punto (.) para acceder a una variable en un objeto es una expresión que da como resultado el valor de la variable a la que se accede. Ésta puede ser un tipo numérico o un tipo referencia: i n t i ; S t r i n g s ; i = miobjeto. l e n g t h ; s = miobjeto. nombre ; 6 [52-63] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

57 Introducción Operadores: operador punto Comentarios Tipos Sentencias Expresiones Excepciones Arrays Una expresión del tipo referencia puede usarse en evaluaciones posteriores, seleccionando variables o llamando a métodos dentro de ella: i n t l e n = miobjeto. nombre. l e n g t h ( ) ; i n t i n i c i a l i z a c i o n = miobjeto. nombre. s u b s t r i n g ( 5, 1 0 ). l e n g t h ( ) ; Aquí hemos consultado la longitud de la variable nombre invocando el método length() del objeto String. El segundo caso, se solicita una subcadena de la cadena nombre y preguntamos su longitud. 7 [52-63] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

58 Introducción Operadores: operador punto Comentarios Tipos Sentencias Expresiones Excepciones Arrays Una llamada a un método es esencialmente una llamada a una función: una expresión que da como resultado un valor. El tipo de valor es el tipo que devuelve el método. System. out. p r i n t l n ( Hola mundo! ) ; i n t long = micadena. l e n g t h ( ) ; La elección de que método se ejecuta es más complicada de lo que parece porque Java permite la sobrecarga y la anulación de un método (como veremos más adelante). 8 [52-63] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

59 Introducción Operadores: operador punto Comentarios Tipos Sentencias Expresiones Excepciones Arrays Al igual que el resultado de cualquier expresión, el resultado de una invocación puede utilizarse en evaluaciones posteriores, como ya vimos. Puede crear valiables intermedias para hacer más claro el código. Por ejemplo: i n t i n i c i a l i z a c i o n = miobjeto. nombre. s u b s t r i n g ( 5, 1 0 ). l e n g t h ( ) ; es equivalente a: S t r i n g temp1 = miobjeto. nombre ; S t r i n g temp2 = temp1. s u b s t r i n g ( 5, 1 0 ) ; i n t i n i c i a l i z a c i o n = temp2. l e n g t h ( ) ; 9 [52-63] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

60 Operadores: new Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays El operador new se usa para crear objetos: Object o = new Object ( ) ; El argumento para new es el constructor de la clase. El constructor es un método que siempre tiene el mismo nombre que la clase y especifica cuales son los parámetros necesarios para construir la clase. El valor de la expresión new es una referencia del tipo de objeto creado. Los objetos siempre tienen uno más constructores. Ya veremos más adelante la creación de un objeto con detalle. Podemos crear un objeto e invocar un método con el directamente: i n t h o r a s = new Date ( ). gethours ( ) ; 0 [52-63] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

61 Introducción Operadores: instanceof Comentarios Tipos Sentencias Expresiones Excepciones Arrays Para determinar el tipo de un objeto en tiempo de ejecución se usa el operador instanceof. Este operador comprueba si un objeto es de un tipo concreto y devuelve un boolean que indica si el objeto es de una clase especificada: Boolean b ; S t r i n g s t r = cosa ; b = ( s t r i n s t a n c e o f S t r i n g ) ; // t r u e b = ( s t r i n s t a n c e o f Object ) ; // t r u e b = ( s t r i n s t a n c e o f Date ) ; // f a l s e instanceof tambien informa correctamente si el objeto es del tipo del array o de la interfaz especificada: i f ( cosa i n s t a n c e o f byte [ ] )... 1 [52-63] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

62 Introducción Operadores: instanceof Comentarios Tipos Sentencias Expresiones Excepciones Arrays El valor null no se considera un caso de ningun objeto, por ejemplo: S t r i n g s = n u l l ; i f ( s instanceof S t r i n g ) // nunca se e v a l u a nunca será cierto. 2 [52-63] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

63 Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Operadores: operador condicional Éste operador es equivalente a la sentencia if, su sintaxis es de la forma: por ejemplo: condición?expresión:expresión a == b? X. f u n c i o n 1 ( ) : X. f u n c i o n 2 ( ) ; es equivalente a: i f ( a == b ) X. f u n c i o n 1 ( ) ; e l s e X. f u n c i o n 2 ( ) ; 3 [52-63] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

64 Excepciones Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Las raices de Java se encuentrar en sistemas embebidos. En estos tipos de aplicaciones, es especialmente importante que los errores software sean tratados de forma consistente. Java ofrece una solución elegante al manejo de errores con el tratamiento de las excepciones. Una excepción inicia una condición que no es habitual o una condición de error. El control del programa se transfiere incodicionalmente a una sección de código donde se recoge y se trata. No tenemos que tener valores de retorno especiales para los métodos para indicar que hay un error, los errores los trata un mecanismo distinto. 4 [64-80] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

65 Excepciones Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays El control puede pasar una gran distancia entre una rutina muy anidada y ser tratada en una ubicación única cuando así se quiere; un error puede tratarse inmediatamente en su fuente. Java tiene un modo de indicar las excepciones que se pueden lanzar. Esto significa que el compilador puede estar seguro de que las tratamos. De este modo, la información sobre los errores que puede dar un método promueve al mismo nivel de importancia que sus argumentos y tipos que devuelve. 5 [64-80] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

66 Excepciones Clases de excepciones y errores Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Las excepciones en Java se representan por medio de instancias de la clase java.lang.exception y sus subclases. Ejemplos: java.io.ioexception para problemas normales de E/S (como, por ejemplo, FileNotFoundException) y problemas de red (como, por ejemplo, SocketException). El API de Java tambien define subclases de java.lang.error para errores que son irrecuperables. Estas subclases son menos comunes que las de Exception. No hay que preocuparse por estos errores, normalmente indican errores graves en los enlaces o en la máquina virtual y suele hacer que el intérprete Java finalice y muestre un mensaje de error. 6 [64-80] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

67 Excepciones Tratamiento de excepciones Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Las sentencias de protección try/catch envuelven un trozo de código y recogen los tipos de excepciones designados que se dan dentro de él: t r y { r e a d F r o m F i l e ( f i c h e r o ) ;... catch ( E x c e p t i o n e ) { // Manejar e l e r r o r System. out. p r i n t l n ( Excepcion : +e ) ; 7 [64-80] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

68 Excepciones Tratamiento de excepciones Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Las excepciones que se dan dentro del cuerpo de la parte try de la sentencia se dirigen a la cláusula catch para un posible tratamiento. La sentencia catch actúa como un método, especifica un argumento del tipo de excepción que quiere tratar, y si es invocado recibe el objeto Exception como un argumento. En el ejemplo anterior, recibimos el objeto en la variable e y se imprime junto con un mensaje. 8 [64-80] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

69 Excepciones Tratamiento de excepciones Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Una sentencia try puede tener múltiples cláusulas catch que especifican distintos tipos (subclases) de Exception: t r y { r e a d F r o m F i l e ( f i c h e r o ) ;... catch ( F i l e N o t F o u n d E x c e p t i o n e ) { // A r c h i v o no e ncontrado... catch ( IOException e ) { // E r r o r de E/S... catch ( E x c e p t i o n e ) { // C u a l q u i e r o t r o e r r o r... 9 [64-80] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

70 Excepciones Tratamiento de excepciones Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Las cláusulas catch se evalúan en orden y se toma la primera que puede coincidir (es asignable). Como mucho se ejecuta una cláusula catch, lo que significa que las excepciones deberían listarse desde la más a la menos específica. En el ejemplo anterior la tercera cláusula catch actúa como la cláusula default en una sentencia switch y maneja todas las excepciones no capturadas por los dos catch anteriores. 0 [64-80] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

71 Excepciones Tratamiento de excepciones Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays En Java se dividen las excepciones en dos categorías excepciones comprobadas y excepciones sin comprobar. La mayoría de las excepciones son comprobadas, lo que significa que cualquier método que lanza una excepción, bien porque la genera el mismo o bien porque la ignoró, debe declarar que puede lanzar este tipo de excepción en una cláusula throws al declarar el método.: void r e a d F i l e ( S t r i n g s ) throws IOException, I n t e r r u p t e d E x c e p t i o n {... 1 [64-80] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

72 Excepciones Tratamiento de excepciones Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays La cláusula throws le dice al compilador que excepciones puede lanzar el método y los métodos que llamen a éste deben protegerse con bloque try/catch o declarando la excepción con una cláusula throws. Las excepciones que son subclases de java.lang.runtimeexception o de la clase java.lang.error son excepciones que no se comprueban, es decir, no es un error en tiempo de compilación no declararlas en una cláusula throws o no encerrarlas en un bloque try/catch. 2 [64-80] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

73 Excepciones Lanzar excepciones Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Podemos lanzar nuestras propias excepciones mediante la sentencia throw, por ejemplo: o throw new E x c e p t i o n ( ) ; throw new E x c e p t i o n ( Hubo un e r r o r ) ; Con la segunda forma del constructor podemos recoger el mensaje usando el método getmessage(). Por convenio todos los tipos de Exception tienen un constructor que recibe un String. Podemos tener nuestra propia de jerarquía de excepciones para tratar los errores específicos de nuestra aplicación. 3 [64-80] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

74 Excepciones Propagación de excepciones Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Que pasa si no recogemos una excepción? Si no hay hay sentencias dentro del try/catch, la excepción es lanzada desde el método en la que apareció hasta quien la llamó. Si este punto en el método que llamo está dentro de una cláusula try, el control pasa a la correspondiente cláusula catch. Si no, la excepción sigue propagándose hasta la pila de la llamada. De este modo la excepción sube como una burbuja hasta que es recogida o hasta que sale en la parte superior del programa, terminando con un mensaje de error de tiempo de ejecución. 4 [64-80] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

75 Introducción Excepciones Propagación de excepciones: Ejemplo Comentarios Tipos Sentencias Expresiones Excepciones Arrays Veamos un ejemplo de propagación de excepciones: p u b l i c c l a s s Prueba { p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { t r y { metodo1 ( ) ; catch ( E x c e p t i o n e ) { e. p r i n t S t a c k T r a c e ( ) ; s t a t i c v o i d metodo1 ( ) throws E x c e p t i o n { metodo2 ( ) ; s t a t i c v o i d metodo2 ( ) throws E x c e p t i o n { throw new E x c e p t i o n ( Errooooooooooooooooooor!!!!!! ) ; 5 [64-80] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

76 Excepciones Propagación de excepciones Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Como una excepción puede subir una distancia considerable antes de que sea recogida y tratada; puede que necesitemos un medio para determinar exactamente dónde se lanzó. Todas las excepciones pueden volcar una pila de seguimiento (trace stack) que lista su método de origen y todas las llamadas a los métodos anidados, usando en método printstacktrace(): t r y { // Tarea catch ( E x c e p t i o n e ) { e. p r i n t S t a c k T r a c e ( System. e r r ) ; 6 [64-80] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

77 Excepciones Acerca del try Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays La sentencia try impone una condición en las sentencias que guarda. Si se produce una excepción en su interior las sentencias restantes deberán ser abandonadas. Esto tiene consecuencias importantes para la inicialización de variables locales. Si el compilador no puede determinar si una variable va a ser inicializada dentro de un bloque try/catch, no nos dejará utilizar la variable: 7 [64-80] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

78 Excepciones Acerca del try Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays void metodo ( ) { i n t cosa ; t r y { cosa = c o g e r R e s u l t a d o s ( ) ;... catch ( E x c e p t i o n e ) {... i n t v a r = cosa ; // E r r o r de c o m p i l a c i o n 8 [64-80] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

79 Excepciones La cláusula finally Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Hay veces que queremos asegurarnos de que ciertas sentencias se ejecuten, por ejemplo, para liberar recursos, cerrar ficheros... que se utilizaron en una sentencia try. Para eso se usa la cláusula finally, esta sentencia asegura que lo que vaya dentro de ella se ejecutará independientemente de que se lanze una excepción o no. Las cláusulas finally se ejecutan igualmente aunque se ejecute un return, break o continue. 9 [64-80] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

80 Excepciones La cláusula finally Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays t r y { // Cosas catch ( E x c e p c i o n 1 e ) {... catch ( E x c e p t i o n 2 e ) {... f i n a l l y { // L i m p i a r t r y { // Hacer c o s a s... r e t u r n ; f i n a l l y { System. out. p r i n t l n ( me e j e c u t o i g u a l ) ; 80 [64-80] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

81 Arrays Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Un array es un tipo de objeto especial que puede contener una colección ordenada de elementos. El tipo de los elementos del array se denomina tipo base del array. El número de elementos que contiene es un atributo fijo llamado length. Java soporta arrays de todos los tipos primitivos y referencias. 1 [81-97] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

82 Arrays Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Para crear un array un array de una longitud específica y acceder a sus elementos utilizamos el operador índice []. Los objetos array se diferencian del resto de los objetos Java en tres cosas: Java crea de forma impĺıcita una clase especial de arrays para nosotros, siempre que declaremos una variable del tipo array. Java nos permite utilizar el operador especial [] para acceder a los elementos de un array, por lo que los arrays tienen el aspecto que se espera. Java proporciona una forma especial del operador new que nos permite crear una instacia de un array y especificar su longitud con la notación [] 2 [81-97] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

83 Arrays Tipos de arrays Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Una variable del tipo array se representa con un tipo base seguido por corchetes vacíos [], aunque tambien es válido poner los corchetes antes del nombre del array. Por ejemplo, estas dos declaraciones son equivalentes: i n t [ ] a r r a y E n t e r o s ; i n t a r r a y E n t e r o s [ ] ; En estas declaraciones no dimos el tamaño del array, sólo estamos declarando la variable de tipo array. El tamaño lo daremos al crear el array. Podemos crear un array de objetos con la misma sintaxis: S t r i n g [ ] s t r i n g s ; Cosa c o s a s [ ] ; 3 [81-97] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

84 Introducción Arrays Creación e inicialización de arrays Comentarios Tipos Sentencias Expresiones Excepciones Arrays El operador new se usa para crear una instancia de un array. Tras el operador new se especificará el tipo base del array o su longitud con una expresión entera encerrada entre corchetes: a r r a y E n t e r o s = new i n t [ 2 0 ] ; s t r i n g s = new S t r i n g [ numero +2]; Se puede crear e inicializar un array a la vez: double [ ] numeros = new double [ 1 2 ] ; 4 [81-97] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

85 Introducción Arrays Creación e inicialización de arrays Comentarios Tipos Sentencias Expresiones Excepciones Arrays Los indices comienzan en cero. Tras la creación los valores del array se inicializan a valores por defecto que dependen del tipo de los elementos: i n t [ ] numeros = i n t [ 1 0 ] ; numeros [ 0 ] = 4 ; numeros [ 1 ] = 7 ; // numeros [ 2 ] == 0 5 [81-97] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

86 Introducción Arrays Creación e inicialización de arrays Comentarios Tipos Sentencias Expresiones Excepciones Arrays Los elementos de un array de objetos son referencias a los objetos. Su valor por defecto es null hasta que asignemos instancias de objetos: S t r i n g nombres [ ] = new S t r i n g [ 4 ] ; nombres [ 0 ] = new S t r i n g ( ) ; nombres [ 1 ] = C a r l o s ; nombres [ 2 ] = c u a l q u i e r O b j e t o. g e t S t r i n g ( ) ; // nombres [ 3 ] == n u l l 6 [81-97] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

87 Introducción Arrays Creación e inicialización de arrays Comentarios Tipos Sentencias Expresiones Excepciones Arrays En Java se puede crear un array e inicializar sus elementos usando la construcción {: i n t [ ] primos = {1, 2, 3, 5, 5+2; Así se crea un objeto de tipo y longitud adecuada de forma impĺıcita y los valores de la lista de expresiones separadas por coma se asignan a sus elementos. 7 [81-97] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

88 Introducción Arrays Creación e inicialización de arrays Comentarios Tipos Sentencias Expresiones Excepciones Arrays Podemos usar la sintaxis { con una array de objetos. En ese caso cada una de las expresiones se debe evaluar a un objeto: S t r i n g v e r b o s = { c o r r e r, s a l t a r, p a l a b r a. t o S t r i n g ( ) ; Object [ ] o b j e t o s = {new Button ( OK ), una p a l a b r a, n u l l ; Es equivalente: Button [ ] t r e s B o t o n e s = new Button [ 3 ] ; Button [ ] t r e s B o t o n e s = { n u l l, n u l l, n u l l ; 8 [81-97] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

89 Arrays Uso de arrays Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays El tamaño de un array se encuentra en la variable pública length: char [ ] a l f a b e t o = new char [ 2 6 ] ; i n t a l f L o n g = a l f a b e t o. l e n g t h ; // a l f L o n g == 2 6 ; S t r i n g numeros [ ] = { uno, dos, t r e s ; i n t num = numeros. l e n g t h ; //num == 3 length es el único campo accesible del array. Es una variable, no un método. 9 [81-97] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

90 Arrays Uso de arrays Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Para acceder a los elementos de un array se usa el operador [] con una expresión que evalue a un entero. El uso de este operador puede lanzar la excepción ArrayIndexOutOfBoundsException si se intenta acceder a una posición más allá de la longitud del array. Este es un tipo de RuntimeException por lo tanto puede ser ignorado si se quiere: S t r i n g cadenas [ ] = new S t r i n g [ 4 ] ; t r y { cadenas [ 0 ] = kk ; cadenas [ 4 ] = c o s a ; // E r r o r catch ( Arra yindexoutofb oundse xc epti on ex ) { System. out. p r i n t l n ( E r r o r : +ex. getmessage ( ) ) ; 0 [81-97] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

91 Arrays Uso de arrays Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Una tarea común es la de copiar un rango de elementos de dos arrays. Para eso en Java se proporcciona el método arraycopy() de la clase utilidad System: System. a r r a y c o p y ( o r i g e n, i n i c i o O r i g e n, d e s t i n o, i n i c i o D e s t i n o, l o n g i t u d ) ; El ejemplo siguiente duplicará el tamaño del array nombres: S t r i n g [ ] tmp = new S t r i n g [ 2 nombres. l e n g t h ] ; System. a r r a y c o p y ( nombres, 0, tmp, 0, nombres. l e n g t h ) ; nombres = tmp ; 1 [81-97] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

92 Arrays Arrays anónimos Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Java permite la creación de arrays anónimos. Por ejemplo: sumaenteros (new i n t [ ] {1, 2, 3 ) ; La sintaxis se parece a la inicialización de variables, pero como no estamos declarando una variable tenemos que usar expĺıcitamente el operador new para crear el objeto de tipo array. 2 [81-97] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

93 Arrays Arrays multidimensionales Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Java soporta arrays multidimensionales con el formato de arrays de objetos del tipo array. Se usan múltiples corchetes, uno para cada dimensión. Tambien se usa esta sintaxis para acceder a los elementos de las distintas dimensiones. Por ejemplo: P i e z a A j e d r e z [ ] [ ] t a b l e r o ; t a b l e r o = new P i e z a A j e d r e z [ 8 ] [ 8 ] ; t a b l e r o [ 0 ] [ 0 ] = new P i e z a A j e d r e z ( Torre ) ; t a b l e r o [ 1 ] [ 0 ] = new P i e z a A j e d r e z ( A l f i l ) ; Se pueden crear arrays con más de dos dimensiones, por ejemplo: C o l o r [ ] [ ] [ ] cuborgb = new C o l o r [ ] [ ] [ ] ; 3 [81-97] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

94 Arrays Arrays multidimensionales Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Se puede especificar el índice inicial de un array multidimensional para obtener un objeto de tipo array con menos dimensiones. P i e z a A j e d r e z [ ] f i l a I n i c i a l = { new P i e z a A j e d r e z ( Torre ), new P i e z a A j e d r e z ( C a b a l l o ), new P i e z a A j e d r e z ( A l f i l ), new P i e z a A j e d r e z ( Rey ), new P i e z a A j e d r e z ( Reina ), new P i e z a A j e d r e z ( A l f i l ), new P i e z a A j e d r e z ( C a b a l l o ), new P i e z a A j e d r e z ( Torre ) ; t a b l e r o [ 0 ] = f i l a I n i c i a l ; La variable tablero pertenece al tipo PiezaAjedrez[][]. La expresión tablero[0] es válida y se refiere al primer elemento de tablero que es de tipo PiezaAjedrez[]. 4 [81-97] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

95 Arrays Arrays multidimensionales Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays No es necesario especificar los tamaños de todas las dimensiones de un array multidimensional con una única operación new. La sintaxis del operador permite dejar los tamaños de algunas dimensiones sin especificar. Hay que especificar por lo menos la menor dimensión (la dimension más significativa del array). Las dimensiones restantes se podrán asignar más adelante los valores del tipo array apropiados. 5 [81-97] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

96 Introducción Arrays Arrays multidimensionales: Ejemplo Comentarios Tipos Sentencias Expresiones Excepciones Arrays Creamos un tablero de ajedrez de valores booleanos: boolean [ ] [ ] t a b l e r o ; t a b l e r o = new boolean [ 8 ] [ ] ; Se dejan vacíos los ocho objetos de tipo boolean[] del nivel siguiente. Así, por ejemplo, tablero[0] es null hasta que se le asigne un array: t a b l e r o [ 0 ] = new boolean [ 8 ] ;... t a b l e r o [ 7 ] = new boolean [ 8 ] ; El código de los dos ejemplos anteriores es equivalente a: boolean [ ] [ ] t a b l e r o = new boolean [ 8 ] [ 8 ] ; 6 [81-97] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

97 Arrays Arrays multidimensionales Introducción Comentarios Tipos Sentencias Expresiones Excepciones Arrays Hay que observar que como la longitud no forma parte del tipo, las dimensiones no tienen porque tener todas la misma longitud. Es decir, los arrays multidimensionales no tienen porque ser rectangulares, por ejemplo: t a b l e r o [ 2 ] = new boolean [ 3 ] ; t a b l e r o [ 3 ] = new boolean [ 1 0 ] ; Por ejemplo, podemos crear un array triangular; i n t [ ] [ ] t r i a n g u l o = new i n t [ 5 ] [ ] ; f o r ( i n t i =0; i < t r i a n g u l o. l e n g t h ; i ++) { t r i a n g u l o [ i ] = new i n t [ i +1]; f o r ( i n t j =0; j <i +1; j ++) { t r i a n g u l o [ i ] [ j ] = i+j ; 7 [81-97] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

98 Introducción Clases Creación de objetos Destrucción de objetos Índice 3 Clases Creación de objetos Destrucción de objetos 98 [98-99] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

99 Introducción Clases Creación de objetos Destrucción de objetos Objetos Los objetos son los actores principales del paradigma orientado a objetos Un objeto procede de una clase que es una especificación de los campos y los métodos que el objeto puede ejecutar. Cada objeto presenta al exterior una vista concisa y consistente en función de la clase a la que pertenece y no proporciona detalles del interior de la misma. 9 [98-99] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

100 Introducción Clases Creación de objetos Destrucción de objetos Objetos Clases En el mundo real existen muchos objetos de la misma clase. Por ejemplo, hay muchos coches en el mundo. Usando la terminología orientada a objetos, se dice que un objeto coche es una instancia de una clase de objetos conocida como coche. Los coches tienen todos un estado común (velocidad, numero de puertas, modelo... ) y un comportamiento (acelerar, frenar girar... ). Sin embargo, cada estado de un coche es independiente y puede ser diferente de otros coches. 00 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

101 Introducción Clases Creación de objetos Destrucción de objetos Objetos Clases Podemos ver una clase como una plantilla o modelo que se utiliza para crear objetos concretos. Consta de variables denominadas campos junto con métodos que operan sobre esos campos. Encapsula los componentes pasivos (campos) y componentes activos (métodos) en una única entidad. Una vez se declara una clase, se debe instanciar, es decir, crear un objeto de ella, antes de que se pueda utilizar. Cuando se crea una instancia de una clase, se crea un objeto de ese tipo y el sistema asigna memoria para las variables declaradas por la clase. A continuación se puede invocar a los métodos del objeto. 01 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

102 Introducción Clases Creación de objetos Destrucción de objetos Objetos Clases En java una clase se declara utilizando la palabra clave class. Los métodos y variables aparecen dentro de los corchetes de declaración de la clase, por ejemplo: c l a s s MiClase { i n t var1 ; Object var2 ;... void metodo1 ( f l o a t n ) {... S t r i n g metodo2 ( ) { [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

103 Introducción Clases Creación de objetos Destrucción de objetos Objetos Clases Ahora podemos crear un objeto de la clase MiClase: MiClase c ; c = new MiClase ( ) ; Una vez tenemos el objeto podemos acceder a sus variables y métodos: c. var1 = 8 ; c. metodo1 ( 5. 7 ) ; S t r i n g s = c. metodo2 ( ) ; 03 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

104 Introducción Clases Creación de objetos Destrucción de objetos Objetos Variables Una clase puede definir dos tipos de variables: variables de contenido y variables static. Cada objeto tiene su propio juego de variables de contenido y los valores que tienen esas variables pueden ser diferentes en cada objeto de esa clase. En cambio las variables static viven en la clase y son compartidas por todas las instancias. 04 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

105 Introducción Clases Creación de objetos Destrucción de objetos Objetos Variables: Ejemplo c l a s s MiClase {... s t a t i c f l o a t var3 = 4. 0 ;... Ahora todos los objetos de la clase MiClase tendrán como valor para var3 4.0 y si el valor se modifica desde uno de ellos queda modificado para todos. Como los miembros static existen en la misma clase tambiem podemos acceder a ellos empleando directamente la clase: MiClase. var3 = 8 ; 05 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

106 Introducción Clases Creación de objetos Destrucción de objetos Objetos Variables Las variables static se pueden declarar final para que no puedan ser modificadas, de este modo pueden ser utilizadas a modo de constantes. c l a s s Cons { s t a t i c f i n a l f l o a t PI =3.14; s t a t i c f i n a l f l o a t G=9.80; [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

107 Introducción Clases Creación de objetos Destrucción de objetos Objetos Métodos Al igual que las variables, los métodos pueden ser métodos de contenido o métodos static. Los métodos static pertenecen a la clase al igual que las variables static, éstos sólo pueden acceder a variables static de la clase, porque no están asociados a ninguna instancia concreta de la clase: c l a s s MyClase { s t a t i c i n t v a r 1 = 4 ; f l o a t v a r 2 ; s t a t i c v o i d metodo1 ( ) { System. out. p r i n t l n ( v a r 1 = +v a r 1 ) ; System. out. p r i n t l n ( v a r 2 = +v a r 2 ) ; // E r r o r de // c o m p i l a c i o n 07 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

108 Introducción Clases Creación de objetos Destrucción de objetos Objetos Métodos Las variables declaradas dentro de los métodos son locales al método, es decir, no se pueden referenciar desde fuera del método en el que están declaradas. Las variables locales se inicializan cuando se llama el método y se destruyen cuando el método termina. Los objetos creados dentro del método pueden ser destruidos o no cuando el método finaliza, pueden no ser destruidos si todavía quedan referencias al objeto creado (por ejemplo, si se pasa como parámetro a otro método). El objeto será destruido por el recolector de basura cuando no queden más referencias a él. 08 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

109 Introducción Clases Creación de objetos Destrucción de objetos Objetos Métodos: Ocultación de variables Si una variable local y una de contenido tienen el mismo nombre, la variable local oculta el nombre de la variable de contenido dentro del ámbito de método: c l a s s P a j a r o { i n t xpos, ypos ; i n t xnext, ynext ;... double f l y T o N e x t ( ) { i n t xpos=xnest ; i n t ypos=ynext ; r e t u r n ( f l y ( xpos, ypos ) ; En este ejemplo (un poco forzado) las variables xpos e ypos son ocultadas en el método flytonext(). 09 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

110 Introducción Clases Creación de objetos Destrucción de objetos Objetos Métodos: Ocultación de variables Si se quiere hacer referencia a variables de contenido ocultas se puede usar la referecia this. Esta referencia es una referencia al objeto actual. Por ejemplo: c l a s s P a j a r o { i n t xpos, ypos ; double f l y ( i n t xpos, i n t ypos ) { double d i s t = Math. s q r t ( xpos xpos+ypos ypos ) ; t h i s. xpos=xpos ; t h i s. ypos=ypos ; return d i s t ; 10 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

111 Introducción Clases Creación de objetos Destrucción de objetos Objetos Sobrecarga de métodos La sobrecarga es la capacidad de definir múltiples métodos con el mismo nombre en una clase. Al invocar el método el compilador selecciona el correcto dependiendo de los argumentos que se le hayan pasado al método. Por ejemplo: c l a s s Habla { s t a t i c S t r i n g h a b l a ( P e r r o p ) { r e t u r n guau ; s t a t i c S t r i n g h a b l a ( Gato g ) { r e t u r n miau ; s t a t i c S t r i n g h a b l a ( P a j a r o p ) { r e t u r n p i o p i o ; 11 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

112 Introducción Clases Creación de objetos Destrucción de objetos Objetos Sobrecarga de métodos Ahora podemos llamar al método habla con distintos tipos de objetos: Habla. h a b l a (new Perro ( ) ) ; // d e v u e l v e guau Habla. h a b l a (new Gato ( ) ) ; // d e v u e l v e miau Habla. h a b l a (new P a j a r o ( ) ) ; // d e v u e l v e p i o p i o Aún no vimos la herencia de clases, pero anticiparemos que si un tipo encaja en más de un método, se ejecutará el que reciba el tipo más específico. 12 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

113 Introducción Clases Creación de objetos Destrucción de objetos Objetos Creación de objetos Para crear un objeto se usa el operador new junto con un constructor. Los constructores son métodos especiales que tienen el mismo nombre que la clase y no devuelven ningun valor. Al igual que los otros métodos pueden recibir parámetros y ser sobrecargados, pero no se heredan (la herencia la veremos más adelante). 13 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

114 Introducción Clases Creación de objetos Destrucción de objetos Objetos Creación de objetos: Ejemplo c l a s s Persona { i n t edad ; Persona ( ) { edad = 1 8 ; Persona ( i n t edad ) { t h i s. edad = edad ; 14 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

115 Introducción Clases Creación de objetos Destrucción de objetos Objetos Creación de objetos Si no se declara ningún constructor Java crea un constructor por defecto sin argumentos. Un constructor puede invocar a otro constructor sobrecargado usando la referencia this() con los argumentos necesarios para llamar al constructor deseado. Si hace una llamada a this() debe ser la primera del constructor que la realiza. 15 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

116 Introducción Clases Creación de objetos Destrucción de objetos Objetos Creación e objetos: Ejemplo c l a s s Persona { S t r i n g c a l l e ; i n t edad ; Persona ( ) { t h i s (, 1 8 ) ; Persona ( S t r i n g c, i n t e ) { c a l l e = c ; edad = e ; Persona ( i n t e ) { S t r i n g c = mi c a l l e ; // E r r o r de t h i s ( c, e ) ; // c o m p i l a c i o n 16 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

117 Introducción Clases Creación de objetos Destrucción de objetos Objetos Creación de objetos Ni siquiera se puede acceder a las variables de contenido antes de llamar a this() aunque sean final: c l a s s Persona { f i n a l i n t edad = 1 8 ;... Persona ( S t r i n g c ) { t h i s ( c, edad ) ; // E r r o r 17 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

118 Introducción Clases Creación de objetos Destrucción de objetos Objetos Creación de objetos Si queremos hacer esto podemos declarar la variable como static puesto que las secciones static se inicializan cuando se carga la clase por primera vez (antes de que se ejecute el constructor) c l a s s Persona { s t a t i c f i n a l i n t EDAD = 1 8 ;... Persona ( S t r i n g c ) { t h i s ( c, EDAD) ; // Sin e r r o r 18 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

119 Introducción Clases Creación de objetos Destrucción de objetos Objetos Creación de objetos Se pueden declarar bloques de código en la clase que no pertenecen a ningun método, estas secciones se indican entre llaves y se evaluan al mismo tiempo que la evaluación de las variables de contenido (despues de la ejecución de constructor). Se pueden usar, por ejemplo, para inicializar valores en variables: c l a s s Cosa { H a s h t a b l e numeros = new H a s h t a b l e ( ) ; { numeros. put (new I n t e g e r ( 1 ), Uno ) ; numeros. put (new I n t e g e r ( 2 ), Dos ) ; [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

120 Introducción Clases Creación de objetos Destrucción de objetos Objetos Creación de objetos Estos bloques de código pueden ser clarados como static, en ese caso sólo se puede hacer referencia a variables static: c l a s s Cosa { s t a t i c H a s h t a b l e numeros = new H a s h t a b l e ( ) ; s t a t i c { numeros. put (new I n t e g e r ( 1 ), Uno ) ; numeros. put (new I n t e g e r ( 2 ), Dos ) ; [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

121 Introducción Clases Creación de objetos Destrucción de objetos Objetos Destrucción de objetos Java se encarga de la destrucción de objetos, no tenemos que preocuparnos por ella.para ello usa una técnica conocida como recolección de basura. Lo que hace es observar las referencias que tiene un objeto, cuando un objeto ya no tiene referencias a él en la máquina virtual, Java destruye el objeto y libera la memoria que éste ocupaba. Podemos forzar la recolección de basura invocando el método System.gc() 21 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

122 Introducción Clases Creación de objetos Destrucción de objetos Objetos Destrucción de objetos Antes de que la recolección de basura borre un objeto, se llama a su método finalize() para que pueda realizar acciones para liberar recursos como por ejemplo cierre de ficheros o cerrar conexiones de red. Es interesante observar que la finalización se produce antes que la recolección: los objetos ejecutan su método finalize() y luego son liberados, si un objeto crea una referencia a si mismo en el método finalize() no será recogido. 22 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

123 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Índice 4 Herencia Interfaces Paquetes Visibilidad Clases internas 23 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

124 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Herencia En Java las clases pueden formar jerarquías. Una clase se puede declarar como subclase de otra usando la palabra clave extends. Una subclase hereda todas las variables y métodos de su superclase y las usa como si hubieran sido declaradas dentro de la propia subclase: 24 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

125 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Herencia c l a s s Animal { i n t peso ;... v o i d come ( ) { c l a s s P e r r o extends Animal { i n t r a z a ; // h e r e d a peso v o i d l a d r a ( ) {... // h e r e d a come Ahora podemos crear una instancia de Perro e invocar los métodos definidos en su superclase Animal: P e r r o p = new P e r r o ( ) ; p. l a d r a ( ) ; p. come ( ) ; 25 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

126 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Herencia Sólo se permite heredar de una única clase, esto es herencia única. No se heredan los miembros de la superclase que hayan sido declarados como private. Una subclase siempre tiene el mismo conjunto de miembros visibles que su ascendente, por eso las subclases pueden usarse en todos los sitios donde se puede usar la superclase: P e r r o p = new P e r r o ( ) ; Animal a = p ; Por medio del mecanismo de la herencia se pueden anular variables y métodos de la superclase, el comportamiento es distinto si se trata de variables o de métodos. 26 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

127 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Herencia Anulación de variables Si redefinimos una variable en una subclase, cuando nos refiramos a ella trataremos con la variable redefinida. Depende del contexto en el que nos refiramos, es decir, se hará uso de la variable redefinida en la subclase y en las subclases de la subclase. 27 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

128 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Herencia Anulación de variables p u b l i c c l a s s A n u l a c i o n { p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { B b = new B ( ) ; b. imprimevara ( ) ; // v a r = 2 b. imprimevarb ( ) ; // v a r = 4 c l a s s A { i n t v a r = 2 ; p u b l i c v o i d imprimevara ( ) { System. out. p r i n t l n ( metodo A v a r= +v a r ) ; c l a s s B extends A { i n t v a r = 4 ; p u b l i c v o i d imprimevarb ( ) { System. out. p r i n t l n ( metodo B v a r= +v a r ) ; 28 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

129 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Herencia Anulación de variables El resultado de este programa es: $ java Anulacion metodo A var=2 metodo B var=4 Al anular variables, se les puede cambiar el tipo. 29 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

130 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Herencia Anulación de métodos Se pueden anular métodos de la superclase declarando un método con igual firma, es decir con el mismo número de argumentos y tipos y en el mismo orden. Además deberá declarar una clausula throws con la mismas excepciones que puede lanzar el método que se anula o con subclases de las mismas. Cuando se anula un método la nueva versión es invocada siempre en cualquier contexto, lo veremos mejor con un ejemplo: 30 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

131 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Herencia Anulación de métodos c l a s s A { i n t v a r = 2 ; p u b l i c v o i d imprimevara ( ) { System. out. p r i n t l n ( metodo A v a r= +v a r ) ; c l a s s B extends A { i n t v a r = 4 ; p u b l i c v o i d imprimevara ( ) { System. out. p r i n t l n ( metodo A v a r= +v a r ) ; p u b l i c v o i d imprimevarb ( ) { System. out. p r i n t l n ( metodo B v a r= +v a r ) ; 31 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

132 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Herencia Anulación de métodos p u b l i c c l a s s A n u l a c i o n { p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) { B b = new B ( ) ; b. imprimevara ( ) ; // v a r = 4 b. imprimevarb ( ) ; // v a r = 4 A a = b ; a. imprimevara ( ) ; // v a r = 4 ; A a2 = new A ( ) ; a2. imprimevara ( ) ; // v a r = 2 32 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

133 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Herencia Anulación de métodos En ese ejemplo además vemos el acceso a una variable anulada. Al crear un objeto de la clase B, esta redefine la variable var y el método imprimevara(). Cuando se llama al método anulado, como el contexto en el que se ejecuta es en el de al clase B accede a la versión de var que tiene la clase B. Esto es así aunque estemos trabajando desde la clase A (superclase de B). En cambio, si creamos una instancia de A se accede a la versión de var que tiene esa clase. 33 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

134 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Herencia Anulación de métodos Podemos evitar la anulación de un método declarándolo como final, el intento de anulación de un método final da lugar a un error de compilación. Si queremos hacer referencia a método anulado de la superclase podemos usar la referencia especial super. Al hacer esto se accede a la implementación que usa la superclase no el de la subclase. Podemos usar esto para extender el comportamiento de un método. Tambien se puede usar super para acceder a variables. 34 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

135 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Herencia Anulación de métodos c l a s s A { i n t v a r = 2 ; p u b l i c v o i d imprimevar ( ) { System. out. p r i n t l n ( v a r= +v a r ) ; c l a s s B extends A { i n t v a r = 4 ; p u b l i c v o i d imprimevar ( ) { System. out. p r i n t l n ( v a r= +v a r ) ; s u p e r. imprimevar ( ) ; 35 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

136 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Herencia Casting Con un cast se le dice al compilador que cambie el tipo de la referencia a un objeto. Los cast no cambian el tipo del objeto, sólo cambian la noción que tiene el compilador del objeto apuntado por una referencia. Animal animal =... Perro p e r r o =... animal = p e r r o ; p e r r o = ( Perro ) animal ; p e r r o = animal ; // E rror, t i p o i n c o m p a t i b l e 36 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

137 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Herencia Casting En el ejemplo, asignamos una variable de tipo Perro a una de tipo Animal esto es legal, como vimos anteriormente, porque Perro es una subclase de Animal. Para asignar la referencia en animal a perro tenemos que realizar el cast apropiado. Esto se llama hacer un downcast. Cuando hacemos un downcast hay que estar seguros de que lo hacemos a la clase correcta, si el objeto no pertenece a la clase a la que tratamos de hacer el downcast se lanza la excepción ClassCastException. Siempre que asignamos una referencia a una clase a una referencia a una de sus superclases se está produciendo un cast de forma automática y no es necesario especificarlo. 37 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

138 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Herencia Contructores de superclase Con la sentencia super() se puede invocar al constructor de una superclase. Java ya introduce automáticamente una llamada al constructor sin argumentos de la superclase si no le decimos nada, pero si queremos que se ejecute un constructor con argumentos hay que especificar cual. La llamada a super(), al igual que con this(), debe ser la primera en el constructor: 38 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

139 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Herencia Contructores de superclase c l a s s Animal {... Animal ( S t r i n g nombre ) { // I n i c i a l i z a c i o n de v a l o r e s... c l a s s P e r r o extends Animal {... P e r r o ( S t r i n g nombre, S t r i n g dueno ) { s u p e r ( nombre ) ; // mas v a l o r e s [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

140 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Herencia Constructores de superclase Es el ejemplo se usa super() para aprovechar la implementación del constructor de la superclase. Además en este ejemplo concreto es obligado hacerlo porque la superclase no tiene un constructor sin argumentos. El contructor sin argumentos es el que llama automáticamente Java, y el compilador habria protestado si no hacemos la llamada correcta a super(). 40 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

141 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Herencia Constructores de superclase: Reglas Las regla que se aplica para inicializar las variables de contenido y hacer las llamadas a los constructores depende de la primera sentencia del constructor: 1 Si es una sentencia ordinaria, Java inserta una llamada impĺıcita a super(), inicializa las variables de contenido de clase actual y luego continua con la ejecución de las sentencias del constructor actual. 2 Si es una llamada a un constructor de una superclase por medio de super(), se invoca al constructor de la superclase. Al volver de esta llamada, inicializa las variables de contenido de clase actual y luego continua con la ejecución de las sentencias del constructor actual. 41 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

142 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Herencia Constructores de superclase: Reglas 3 Si es una llamada a un constructor sobrecargado por medio de this(), se invoca al constructor seleccionado. Al volver de esta llamada, continua con la ejecución de las sentencias del constructor actual. En la última regla, la llamada al constructor de la superclase se produjo con el constructor sobrecargado, bien impĺıcita o expĺıcitamente, con cual la inicialización de variables ya se ha producido. 42 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

143 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Herencia Métodos y clases abstract Un método Java se puede declarar con el modificador abstract indicando que es un protoripo. Este tipo de métodos no tienen cuerpo y solo se declara la cabecera seguida de punto y coma. Una clase que contenga un método abstract debe ser declarada como abstract y no puede ser instanciada. Para ello hay que crear una subclase que anule los métodos abstract proporcionándoles una implementación. Si una subclase no anula todos los métodos abstract debe ser declarada como abstract también. 43 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

144 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Herencia Metodos y clases abstract abstract c l a s s Animal {... abstract void s a l t a ( ) ; c l a s s Perro extends Animal... void s a l t a ( ) {... La clase abstracta Animal declara un método abstracto salta(), que cada animal debe implementar. Ahora no podemos crear animales si no son una subclase de Animal: Animal a = new Animal ( ) ; // E r r o r Animal a = new Perro ( ) ; // OK 44 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

145 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Interfaces Las interfaces son parecidas a clases abstractas con todos los métodos abstractos, solo que declarar interfaces tiene sus ventajas como veremos a continuación. Una interfaz define un conjunto de métodos que deben ser implementadas por una clase. Los tipos de interfaz actúan como tipos de clase, se pueden declarar variables del tipo de una interfaz, los métodos pueden devolver tipos interfaz... Las interfaces son una declaración de méritos, realmente son como un contrato que la clase se compromete a cumplir. Una clase puede decir que implementa tantas interfaces como quiera. De esta manera se pueden resolver algunos casos en los que necesita la herencia múltiple. 45 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

146 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Interfaces Ejemplo p u b l i c i n t e r f a c e A d i e s t r a b l e { p u b l i c void s a l t a ( ) ; p u b l i c void ven ( ) ; p u b l i c void c o g e l o ( ) ; p u b l i c c l a s s Perro extends Animal implements A d i e s t r a b l e {... p u b l i c void s a l t a ( ) {... p u b l i c void ven ( ) {... p u b l i c void c o g e l o ( ) { [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

147 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Interfaces Ejemplo La clase Perro es una subclase de Animal y el mismo tiempo implementa la interfaz Adiestrable. Ahora podemos declarar variables de tipo Adiestrable y asignarlas a cualquier instancia de un objeto Adiestrable: A d i e s t r a b l e a = new Perro ( ) ; a. c o g e l o ( ) ; 47 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

148 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Interfaces Una declaración de una interfaz puede contener variables static final para ser usadas como constantes. Además se permite la declaración de interfaces vacías, es decir, que no contienen la especificación de ningún método o variable. En este caso se usan como marcadores. Finalmente, las interfaces pueden formar jerarquías igual que las clases usando el mecanismo de la herencia. Una clase que implemente una interfaz que extienda a otra interfaz debe implementar todos los métodos de la interfaz y de todos sus ancestros. 48 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

149 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Interfaces Ejemplo de jerarquía p u b l i c i n t e r f a c e I n t e r f a z A { p u b l i c void metodoa ( ) ; p u b l i c i n t e r f a c e I n t e r f a z B { p u b l i c void metodob ( ) ; p u b l i c i n t e r f a c e I n t e r f a z C extends I n t e r f a z A { p u b l i c void metodoc ( ) ; p u b l i c c l a s s Cosa implements I n t e r f a z B, I n t e r f a z C { p u b l i c void metodoa (){ p u b l i c void metodob (){ p u b l i c void metodoc (){ 49 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

150 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Interfaces Ejemplo de jerarquía La clase Cosa implementa las interfaces InterfazB e InterfazC. Esta última hereda de la interfaz InterfazA. La clase debe implementar los métodos que especifican todas las interfaces del ejemplo. 50 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

151 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Paquetes Un paquete es un nombre para un grupo de clases e interfaces relacionadas, además crean un nivel de alcance para sus clases y las variables y métodos que están dentro de ellas. Para declarar que una clase pertenece a un paquete concreto se utiliza la sentencia package, esta sentencia debe ser la primera en el fichero y no puede aparecer más de una: package a n i m a l e s ; c l a s s Animal { [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

152 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Paquetes En el ejemplo declaramos la clase Animal como perteneciente al paquete animales. Ahora para referirse a ella desde otra clase que no pertenece al paquete hay usar la notación nombre paquete.nombre clase. Los nombres de paquete están formados por nombres separados por puntos. Esto no implica una jerarquía dentro de los paquetes, es decir, las clases del paquete animales.mamiferos.perros no pertenecen al paquete animales.mamiferos 52 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

153 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Paquetes Si no queremos estar anteponiendo el nombre del paquete al de la clase todo el tiempo podemos utilizar la sentencia import que indica al compilador cual es el paquete al que pertenece la clase: import a n i m a l e s. Animal ; c l a s s Zoo {.... v o i d b l a b l a ( ) { Animal a = new Animal ( ) ;.. Se pueden importar todas las clases de un paquete usando * al final del nombre del paquete: import a n i m a l e s. ; 53 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

154 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Visibilidad Visibilidad de clases Por defecto una clase sólo es accesible para otras clases dentro de su propio paquete. Para que sea visible en cualquier parte hay que declararla como public: package a n i m a l e s ; p u b l i c c l a s s Animal {... Sólo puede exitir un clase pública por fichero y el nombre de la clase pública debe ser igual al nombre del fichero. Al hacer publicas sólo algunas clases de un paquete proporcionamos a los usuarios del paquete una interfaz bien definida para su uso, ocultando partes internas del mismo. 54 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

155 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Visibilidad Visibilidad de variables y métodos Las variables y métodos de una clase, por defecto, son accesibles desde la propia clase y desde el resto de clases del mismo paquete. Este es el nivel por defecto de visibilidad. El modificador private hace que los miembros declarados como tal sean visibles únicamente desde la propia clase. Los miembros declarados como public pueden verse desde cualquier clase en cualquier paquete, siempre que la clase pueda verse. El modificador protected proporciona permisos parciales para subclases. Los miembros protected, además de la visibilidad por defecto, son visibles para las subclases de la clase, aunque estén definidas fuera del paquete de la clase. 55 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

156 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Visibilidad Visibilidad de variables y métodos Modificador private (ninguno) protected public Visibilidad Ninguna Clases en el paquete Clases en el paquete y en las subclases dentro o fuera del paquete Todas las clases Cuadro: Modificadores de visibilidad Debemos tener en cuenta que cuando se anulan métodos en una subclase, el método de anulación debe ser al memos tan visible como el método anulado. Por ejemplo, podemos anular un método private con un método public, pero no al revés. 56 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

157 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Visibilidad Visibilidad de interfaces Las interfaces se comportan como clases dentro de los paquetes. Pueden ser declaradas como public para hacerlas visibles fuera del paquete. Bajo la visibilidad por defecto sólo son visibles dentro del paquete. Sólo puede haber una interfaz pública por fichero. 57 [ ] Carlos Varela Paz Introducción al lenguaje de programación Java

158 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Clases internas En Java se puede declarar una clase dentro de cualquier juego de llaves y su visibilidad se limita de igual modo que una variable o un método. Por ejemplo: c l a s s Animal { c l a s s Cerebro { [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

159 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Clases internas La clase Cerebro es una clase interna de Animal. Ahora añadimos un método a la clase Animal: p u b l i c c l a s s Animal { S t r i n g nombre ; c l a s s C e r e b r o { p u b l i c v o i d p i e n s a ( ) {... p u b l i c v o i d r e a l i z a C o m p o r t a m i e n t o ( ) {... C e r e b r o c = new C e r e b r o ( ) ; c. p i e n s a ( ) ;... Tanto la clase Cerebro como realizacomportamiento() están dentro del ámbito de Animal. Por lo tanto en cualquier parte dentro de Animal podemos hacer referencia a Cerebro y a realizacomportamiento() por nombre. 59 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

160 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Clases internas Dentro del cuerpo de Cerebro tenemos acceso directo al resto de métodos y variables de clase Animal. Desde el interior del método realizacomportamiento() se podría trabajar con la clase Cerebro y crear instancias de Cerebro. El código dentro de la clase Cerebro puede invocar al método realizacomportamiento() de Animal. 60 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

161 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Clases internas Un uso particular importante para las clases internas es la de crear clases adaptadoras. Una clase adaptador es una clase de ayuda que relaciona una clase con otra de una forma específica. Por ejemplo, si tenemos un objeto ListaEmpleados: p u b l i c c l a s s L i s t a E m p l e a d o s { p r i v a t e Empleado [ ] empleados =... ; [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

162 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Clases internas Nos gustaría que esta clase nos proporcionara sus elementos por medio de un iterador, que es una interfaz sencilla para listar objetos. La interfaz java.util.iterator tiene varios métodos como: p u b l i c i n t e r f a c e I t e r a t o r { p u b l i c boolean hasnext ( ) ; p u b l i c Object next ( ) ; p u b l i c void remove ( ) ; Esto nos permite ver los elementos preguntando por el siguiente y preguntando si queda alguno más. 62 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

163 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Clases internas Para crear un iterador podemos usar una clase interna: public c l a s s L i s t a E m p l e a d o s { p r i v a t e Empleado [ ] empleados =... ;... c l a s s I t e r a d o r implements j a v a. u t i l. I t e r a t o r { i n t elemento = 0 ; p u b l i c boolean hasnext ( ) { r e t u r n elemento<emplados. l e n g t h ; p u b l i c Object next ( ) { i f ( hasnext ( ) ) { r e t u r n empleados [ elemento ++]; e l s e { throw new RuntimeException ( No hay mas elementos ) ; p u b l i c v o i d remove ( ) { throw new UnsupportedOperationException ( ) ; [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

164 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Clases internas Al estar dentro de la clase ListaEmpleados, la clase Iterador tiene acceso a la lista de miembros privada, por lo que puede acceder directamente al array empleados. Podemos introducir un método para obtener el iterador: p u b l i c c l a s s L i s t a E m p l e a d o s {... I t e r a t o r g e t I t e r a t o r ( ) { return new I t e r a d o r ( ) ; [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

165 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Clases internas Clases internas dentro de métodos Las clases internas tambien pueden declararse dentro de métodos: c l a s s Animal { void r e a l i z a C o m p o r t a m i e n t o ( ) { c l a s s Cerebro {... En este caso, el cuerpo de Cerebro puede ver todo lo que se encuentra en el ámbito del método incluidos los miembros de Animal. 65 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

166 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Clases internas Clases internas dentro de métodos Esto tiene limitaciones: Los métodos tienen una vida limitada, cuando terminan sus variables locales desaparecen, pero una instancia de Cerebro vivirá mientras queden referencias ella. Por ello Java debe estar seguro de que cualquier variable local utilizada por las instancias de Cerebro dentro de la invocación del método debe estar viva. Todas las instancias de Cerebro creadas dentro de una invocación al método deben ver las mismas variables locales. Para poder hacer esto el compilador ha de ser capaz de crear copias de las variables locales. Por lo tanto las variables locales de métodos a las que se ha hecho referencia por la clase interna deben ser final. 66 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

167 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Clases internas Ocultación de variables Las clases internas pueden ocultar variables de las clases que las contienen. Para acceder a las variables ocultas se puede usar la referencia this. Lo que pasa es que la clase interna tiene ahora más de una referencia this (la suya y la clase que la contiene). Se puede especificar la referencia a la que se refiere anteponiendo el nombre de la clase. 67 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

168 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Clases internas Ocultación de variables: Ejemplo c l a s s Cerebro { Animal mianimal = Animal. t h i s ; Tambien podemos hacer referencia a las variables de la clase del mismo modo: c l a s s Animal { i n t s i z e = 1 0 ; c l a s s Cerebro { i n t s i z e = 2 ; i n t a n i m a l S i z e = Animal. t h i s. s i z e ; 68 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

169 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Clases internas Clases internas anónimas Las clases internas anónimas son una extensión del operador new. Tras el operador new se especifica el nombre de una clase o de una interfaz seguido del cuerpo de una clase. El cuerpo se convierte en una clase interna. Por ejemplo, en el ejemplo de la lista de empleados podemos suprimir la declaración de la clase Iterador haciendo: 69 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

170 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Clases internas Clases internas anónimas: Ejemplo public c l a s s L i s t a E m p l e a d o s { p r i v a t e Empleado [ ] empleados ;... I t e r a t o r g e t I t e r a t o r ( ) { r e t u r n new j a v a. u t i l. I t e r a t o r ( ) { i n t elemento = 0 ; p u b l i c boolean hasnext ( ) { r e t u r n elemento<emplados. l e n g t h ; p u b l i c Object next ( ) { i f ( hasnext ( ) ) { r e t u r n empleados [ elemento ++]; e l s e { throw new RuntimeException ( No hay mas elementos ) ; p u b l i c v o i d remove ( ) { throw new UnsupportedOperationException ( ) ; 70 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

171 Introducción Herencia Interfaces Paquetes Visibilidad Clases internas Clases internas Clases internas anónimas: Ejemplo Tambien podemos usarlo para anular métodos o variables: p u b l i c c l a s s Prueba { p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) { Animal a1 = new Animal ( ) ; h a z H a b l a r ( a1 ) ; Animal a2 = new Animal ( ) { p u b l i c v o i d habla ( ) { System. out. p r i n t l n ( o t r a c o s a ) ; ; h a z H a b l a r ( a2 ) ; s t a t i c v o i d h a z H a b l a r ( Animal a ) { a. h a b l a ( ) ; c l a s s Animal { p u b l i c v o i d habla ( ) { System. out. p r i n t l n ( h o l a! ) ; 71 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

172 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Parte II Usos del lenguaje 72 [ ] Carlos Varela Paz Introducción al lenguaje de programación Java

173 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Introducción Sincronización Índice 5 Threads Introducción Sincronización 173 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

174 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Introducción Sincronización Introducción Conceptualmente un thread es un flujo de control dentro de un programa. Un thread es parecido a un proceso, excepto por el hecho de que múltiples threads dentro de la misma aplicación comparten muchas cosas, como por ejemplo, ejecutarse en el mismo espacio de direcciones. Compartir el mismo espacio de direcciones significa que los threads comparten las variables de contenido pero no las variables locales. Los múltiples threads de una aplicación deben sincronizarse. No puede haber varios threads intentando acceder a las mismas variables sin nigún tipo de coordinación. 74 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

175 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Introducción Sincronización Introducción Composición Al usar threads siempre hay dos actores principales: Uno representa al thread El otro contiene el método que el thread va a ejecutar. A veces, es posible combinarlos, pero ésto no cambia la relación. Un thread nace cuando creamos una instancia de la clase java.lang.thread. El objeto Thread representa un thread real del intérprete Java y sirve como gestor que controla y sincroniza su ejecución. Con él podemos comenzar el thread, detenerlo o cancelarlo de forma temporal. 175 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

176 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Introducción Sincronización Introducción El contructor de la clase Thread recibe información sobre dónde debe comenzar la ejecución del thread. Para indicar qué debe ejecutar el thread existe la interfaz java.lang.runnable. Esta interfaz define el método run() que es el que invocará el thread al ser iniciado: p u b l i c i n t e r f a c e Runnable { p u b l i c void run ( ) ; Cada thread comienza su vida con la ejecución del método run() en el objeto Runnable (el objeto destino ) que se pasó al thread. 76 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

177 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Introducción Sincronización Introducción Un Thread recién creado permanece inactivo hasta que llamanos al método start(). Entoces el thread despierta y ejecuta el método run() de su objeto destino. Sólo se puede llamar a start() una vez en la vida de un Thread. El thread se sigue ejecutando hasta que que vuelve el método run() del objeto destino. 77 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

178 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Introducción Sincronización Introducción Ejemplo c l a s s Animacion implements Runnable {... p u b l i c void run ( ) { while ( true ) { // d i b u j a... Esta clase podría ser la encargada de dibujar una animación en una interfaz. Para usarlo: Animacion anim = new Animacion ( ) ; Thread t = new Thread ( anim ) ; t. s t a r t ( ) ; 78 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

179 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Introducción Sincronización Introducción Ejemplo Si no se quiere que esta responsabilidad la lleve a cabo un objeto externo, puede ser realizado desde la propia clase que implementa la interfaz Runnable: c l a s s Animacion implements Runnable { Thread t h r e a d ;... p u b l i c void i n i c i a A n i m a c i o n ( ) { t h r e a d = new Thread ( t h i s ) ; t h r e a d. s t a r t ( ) ; 79 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

180 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Introducción Sincronización Introducción Ejemplo p u b l i c c l a s s C o r r e d o r { p r i v a t e S t r i n g nombre ; p u b l i c C o r r e d o r ( S t r i n g nombre ) { t h i s. nombre = nombre ; p u b l i c v o i d c o r r e ( i n t n ) { f o r ( i n t i =0; i <n ; i ++) { System. out. p r i n t l n ( +nombre+ : +i ) ; // Simula una o p e r a c i o n c o s t o s a de d u r a c i o n // v a r i a b l e t r y { i n t t = ( i n t ) ( Math. random ( ) ) ; Thread. s l e e p ( t ) ; catch ( E x c e p t i o n e ) { System. out. p r i n t l n ( +nombre+ : Termineeee!!! ) ; 80 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

181 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Introducción Sincronización Introducción Ejemplo p u b l i c c l a s s C a r r e r a { p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) { C o r r e d o r c o r r e d o r 1, c o r r e d o r 2 ; c o r r e d o r 1 = new C o r r e d o r ( A ) ; c o r r e d o r 2 = new C o r r e d o r ( B ) ; c o r r e d o r 1. c o r r e ( 1 0 ) ; c o r r e d o r 2. c o r r e ( 1 0 ) ; Que sucede? Primero se ejecuta uno y despúes el otro. Vamos a añadir concurrencia para que sea una carrera de verdad. 81 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

182 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Introducción Sincronización Introducción Ejemplo: Añadiendo concurrencia c l a s s C o r r e d o r 2 implements Runnable {... p u b l i c v o i d run ( ) { c o r r e ( 1 0 ) ; p u b l i c c l a s s C a r r e r a 2 { p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) { Thread c o r r e d o r 1, c o r r e d o r 2 ; c o r r e d o r 1 = new Thread ( new C o r r e d o r 2 ( A ) ) ; c o r r e d o r 2 = new Thread ( new C o r r e d o r 2 ( B ) ) ; c o r r e d o r 1. s t a r t ( ) ; c o r r e d o r 2. s t a r t ( ) ; 82 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

183 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Introducción Sincronización Introducción Recordamos La interfaz Runnable permite crear un objeto arbitrario de destino de un thread. Éste es el uso general más importante de la clase Thread. En la mayoría de los casos en los que se tiene que usar threads se creará una clase que implemente la interfaz Runnable. 83 [ ] Carlos Varela Paz Introducción al lenguaje de programación Java

184 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Introducción Sincronización Introducción Otro modo Hay una segunda forma de crear threads, podemos hacer una subclase de Thread, por ejemplo: c l a s s Animacion extends Thread {... p u b l i c void run ( ) { while ( true ) { // d i b u j a... La clase Thread, si se usa el constructor por defecto ejecuta su propio método run() cuando llamamos a start(). 84 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

185 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Introducción Sincronización Introducción Otro modo Para usar la nueva clase Animacion y llamamos a su método start(): Animacion animacion = new Animacion ( ) ; animacion. s t a r t ( ) ; 85 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

186 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Introducción Sincronización Introducción Control de un Thread Los threads se inician con el método start(). Otros métodos de contenido nos permiten ejecutar de forma expĺıcita la ejecución de un Thread: El método sleep() hace que el thread actual espere el tiempo establecido, sin consumir mucho tiempo de la CPU. El método interrupt() despierta a un thread que está durmiendo o que se encuentra bloqueado en una operación de E/S. Los métodos wait() y join() coordinan la ejecución de dos o más threads. 86 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

187 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Introducción Sincronización Introducción Control de un Thread A menudo necesitamos decirle a un thread que permanezca inactivo durante un tiempo. Para ello llamamos al método sleep() o invocar a Thread.sleep(). En cualquiera de los dos métodos, la llamada hará que el thread actualmente en ejecución se retrase el número especificado de milisegundos: t r y { Thread. s l e e p ( ) ; catch ( I n t e r r u p t e d E x c e p t i o n e ) { // Se d e s p e r t o prematuramente sleep() lanza la excepción InterruptedException si es interrumpido por otro thread usando interrupt(). 87 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

188 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Introducción Sincronización Introducción Control de un Thread Si se tienen que coordinar las actividades de dos threads de manera que uno tiene que esperar a un termine para poder continuar se puede usar el método join(). join() hace que hace que quien llame se bloquee hasta que el thread objetivo muere. Esta es una forma muy simple de sincronización, más adelante veremos otros mecanismos. 88 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

189 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Introducción Sincronización Introducción Control de un Thread p u b l i c c l a s s C a r r e r a { p u b l i c s t a t i c void main ( S t r i n g a r g s [ ] ) { Thread c o r r e d o r 1, c o r r e d o r 2 ; c o r r e d o r 1 = new Thread (new C o r r e d o r ( A ) ) ; c o r r e d o r 2 = new Thread (new C o r r e d o r ( B ) ) ; c o r r e d o r 1. s t a r t ( ) ; t r y { c o r r e d o r 1. j o i n ( ) ; catch ( E x c e p t i o n e ) { c o r r e d o r 2. s t a r t ( ) ; 89 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

190 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Introducción Sincronización Introducción Vida de un Thread Hay que tener cuidado con como terminan los threads: Un thread puede vivir incluso después de que la parte de la aplicación que la había creado haya terminado. El interprete Java se sigue ejecutando hasta que todos los threads se hayan terminado. Pueden quedar threads huerfanos que se continuen ejecutando una vez que la aplicación se finalice. Podemos marcar ciertos threads para que sean eliminados cuando sólo queden ellos, esto se hace con el método setdaemon(). Cuando los threads demonio son los únicos que quedan en la máquina virtual, éstos son eliminados. 90 [ ] Carlos Varela Paz Introducción al lenguaje de programación Java

191 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Introducción Sincronización Introducción Control de un Thread p u b l i c c l a s s C a r r e r a { p u b l i c s t a t i c void main ( S t r i n g a r g s [ ] ) { Thread c o r r e d o r 1, c o r r e d o r 2 ; c o r r e d o r 1 = new Thread (new C o r r e d o r ( A ) ) ; c o r r e d o r 2 = new Thread (new C o r r e d o r ( B ) ) ; c o r r e d o r 1. setdaemon ( true ) ; c o r r e d o r 2. setdaemon ( true ) ; c o r r e d o r 1. s t a r t ( ) ; c o r r e d o r 2. s t a r t ( ) ; 91 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

192 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Introducción Sincronización Sincronización Cada thread tiene una vida propia. Los thread pueden repartirse en en tiempo, lo que significa que pueden ejecutarse en un momento dado y anularse según indique el sistema operativo. Java proporciona estructuras sencillas para la sincronización de las actividades de los threads. La sincronización se basa en el concepto de monitores que son básicamente cerrojos. Para acceder a un recurso compartido un thread tiene que obtener el cerrojo. 92 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

193 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Introducción Sincronización Sincronización Acceso en serie a métodos La necesidad más normal de sincronización es serializar el acceso a un objeto o una variable. Cada objeto tiene un cierre asociado. Para marcar lugares donde un thread tiene que adquirir el cierre antes de continuar se usa la palabra clave synchronized 93 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

194 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Introducción Sincronización Sincronización Acceso en serie a métodos: Ejemplo Imaginemos que tenemos un sintetizador de voz. No nos interesa que múltiples threads traten de hacerlo funcionar a la vez: p u b l i c c l a s s S i n t e t i z a d o r V o z { p u b l i c void d i ( S t r i n g f r a s e ) { char p [ ] = f r a s e. tochararray ( ) ; f o r ( i n t i =0; i <p. l e n g t h ; i ++) { System. out. p r i n t ( p [ i ] ) ; t r y { Thread. s l e e p ( ) ; catch ( E x c e p t i o n e ) { System. out. p r i n t l n ( ) ; 94 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

195 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Introducción Sincronización Sincronización Acceso en serie a métodos: Ejemplo p u b l i c c l a s s S i n c r o n i z a c i o n { p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) { S i n t e t i z a d o r V o z s = new S i n t e t i z a d o r V o z ( ) ; d i ( s, h o l a a t o d o s ) ; d i ( s, HOLA A TODOS ) ; s t a t i c v o i d d i ( f i n a l S i n t e t i z a d o r V o z s, f i n a l S t r i n g f r a s e ) { ( new Thread ( new Runnable ( ) { p u b l i c v o i d run ( ) { s. d i ( f r a s e ) ; ) ). s t a r t ( ) ; La salida es la siguiente: hhoollaa aa ttooddooss 95 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

196 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Introducción Sincronización Sincronización Acceso en serie a métodos: Ejemplo Esto no es lo que queremos. Marcamos el método como synchronized: c l a s s S i n t e t i z a d o r V o z {... synchronized p u b l i c void d i ( S t r i n g f r a s e ) {... La salida es la siguiente: hola a todos HOLA A TODOS 96 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

197 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Introducción Sincronización Sincronización Acceso en serie a métodos: Ejemplo Que pasa si ponemos esto en la clase principal? S i n t e t i z a d o r V o z s = new S i n t e t i z a d o r V o z ( ) ; S i n t e t i z a d o r V o z s2 = new S i n t e t i z a d o r V o z ( ) ; d i ( s, h o l a a todos ) ; d i ( s2, HOLA A TODOS ) ; 97 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

198 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Introducción Sincronización Sincronización Acceso en serie a métodos: Ejemplo Vuelven a mezclarse El motivo es que el cierre está en el objeto Se soluciona haciendo el método di(string frase) estático con lo que el cierre pasa a la clase 98 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

199 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Introducción Sincronización Sincronización Si se pone más de un método synchronized, sólo se ejecuta uno de ellos a la vez. Ejemplo: Esto es debido a que todos tienen el mismo cierre. Con esto mantenemos la consistencia en los resultados i n t a, b ; synchronized i n t sum ( ) { return a+b ; synchronized void s e t ( i n t a, i n t b ) { t h i s. a = a ; t h i s. b = b ; 99 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

200 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Introducción Sincronización Sincronización Bloques de código La palabra clave synchronized se puede usar para serializar el acceso a bloques de código arbitrarios. Se usa la forma: s y n c h r o n i z e d ( miobjeto ) {... El objeto pasado es el que contiene el cierre que hay que obtener para acceder al bloque Segun esto, hacer: synchronized void metodo ( ) {... es equivalente a: void metodo ( ) { synchronized ( t h i s ) { [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

201 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Introducción Sincronización Sincronización Métodos wait() y notify() Con wait() y notify(), un thread puede abandonar su contenido en un cerrojo en un punto arbitrario y esperar hasta que otro thread se lo devuelva para continuar. Toda actividad coordinada todavía sucede dentro de los bloques sincronizados y sólo se ejecuta un thread a la vez. Al ejecutar wait() desde un bloque sincronizado, un thread libera su cerrojo y se va a dormir. Cuando otro thread ejecute notify() sobre el mismo cerrojo, el primero se despertará e intentará adquirir el nuevo cierre. 01 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

202 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Introducción Sincronización Sincronización Métodos wait() y notify(): Ejemplo public c l a s s Consumidor extends Thread { Productor productor ; S t r i n g nombre ; Consumidor ( String n, Productor p ) { nombre = n ; productor = p ; p u b l i c v o i d run ( ) { t r y { w h i l e ( t r u e ) { S t r i n g mensaje = productor. getmensaje ( ) ; System. out. p r i n t l n ( nombre+ o b t i e n e mensaje : +mensaje ) ; s l e e p ( ) ; catch ( InterruptedException e ) { 02 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

203 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Introducción Sincronización Sincronización Métodos wait() y notify(): Ejemplo import j a v a. u t i l. V e c t o r ; public c l a s s P r o d u c t o r extends Thread { s t a t i c f i n a l i n t LONG COLA = 5 ; p r i v a t e Vector mensajes = new Vector ( ) ; p u b l i c v o i d run ( ) { t r y { w h i l e ( t r u e ) { generamensaje ( ) ; s l e e p ( ) ; catch ( InterruptedException e ) { p r i v a t e s y n c h r o n i z e d v o i d generamensaje ( ) throws I n t e r r u p t e d E x c e p t i o n { w h i l e ( m e n s a j e s. s i z e ( ) == LONG COLA) w a i t ( ) ; m e n s a j e s. addelement ( new j a v a. u t i l. Date ( ). t o S t r i n g ( ) ) ; n o t i f y A l l ( ) ; p u b l i c s y n c h r o n i z e d S t r i n g getmensaje ( ) throws I n t e r r u p t e d E x c e p t i o n { n o t i f y ( ) ; w h i l e ( m e n s a j e s. s i z e ( ) == 0) w a i t ( ) ; S t r i n g mensaje = ( S t r i n g ) m e n s a j e s. f i r s t E l e m e n t ( ) ; mensajes. removeelement ( mensaje ) ; r e t u r n mensaje ; 03 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

204 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Introducción Sincronización Sincronización Métodos wait() y notify(): Ejemplo En la clase principal: P r o d u c t o r p = new P r o d u c t o r ( ) ; p. s t a r t ( ) ; new Consumidor ( Uno :, p ). s t a r t ( ) ; new Consumidor ( Dos :, p ). s t a r t ( ) ; 04 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

205 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II E/S Estándar Ficheros Índice 6 Entrada/Salida E/S Estándar Ficheros 205 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

206 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II E/S Estándar Ficheros Entrada/Salida La E/S de Java está basada en secuencias Una secuencia representa una corriente de datos o un canal de comunicaciones con un lector a un lado y un escritor al otro. Las secuencias son caminos unidireccionales. Si se quieren comunicaciones bidireccionales hay que usar dos secuencias, una para cada sentido. Las clases abstractas InputStream y OutputStream definen las secuencias de bytes. Las clases abstractas Reader y Writer definen las secuencias de caracteres (Unicode). 06 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

207 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II E/S Estándar Ficheros Entrada/Salida Primer ejemplo El ejemplo más basico es la entrada y la salida estándar Son accesibles desde la clase System accediendo a los campos in y out System.in implementa stdin como una instancia de la clase InputStream. Con System.in, se accede a los métodos read() y skip(). El método read() permite leer un byte de la entrada. skip( long n ), salta n bytes de la entrada. System.out implementa stdout como una instancia de la clase PrintStream. Se pueden utilizar los métodos print() y println() con cualquier tipo básico Java como argumento. 07 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

208 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II E/S Estándar Ficheros Entrada/Salida Primer ejemplo import j a v a. i o. ; p u b l i c c l a s s Ejemplo { p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) throws I O E x c e p t i o n { i n t c ; i n t c o n t a d o r = 0 ; w h i l e ( ( c = System. i n. r e a d ( ) )!= 1 ) { c o n t a d o r ++; System. out. p r i n t ( ( char ) c ) ; System. out. p r i n t l n ( ) ; // L i n e a en b l a n c o System. e r r. p r i n t l n ( Contados + c o n t a d o r + b y t e s. ) ; 208 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

209 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II E/S Estándar Ficheros Entrada/Salida Ficheros El acceso básico se hace a través de la clase File. Para crear un objeto File nuevo, se puede utilizar cualquiera de los tres constructores siguientes: F i l e m i F i c h e r o ; m i F i c h e r o = new F i l e ( / e t c / kk ) ; m i F i c h e r o = new F i l e ( / e t c, kk ) ; F i l e m i D i r e c t o r i o = new F i l e ( / e t c ) ; m i F i c h e r o = new F i l e ( m i D i r e c t o r i o, kk ) ; 09 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

210 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II E/S Estándar Ficheros Entrada/Salida Ficheros: Ejemplo import j a v a. i o. ; c l a s s I n f o F i c h e r o { public s t a t i c void main ( String args [ ] ) throws IOException { i f ( a r g s. l e n g t h > 0 ) { f o r ( i n t i =0; i < a r g s. l e n g t h ; i++ ) { F i l e f = new F i l e ( a r g s [ i ] ) ; System. out. p r i n t l n ( Nombre : +f. getname ( ) ) ; System. out. p r i n t l n ( Camino : +f. getpath ( ) ) ; i f ( f. e x i s t s ( ) ) { System. out. p r i n t ( F i c h e r o e x i s t e n t e ) ; System. out. p r i n t ( ( f. canread ( )?, s e puede L e e r : ) ) ; System. out. p r i n t ( ( f. canwrite ( )?, s e puese E s c r i b i r : ) ) ; System. out. p r i n t l n (. ) ; System. out. p r i n t l n ( La l o n g i t u d d e l f i c h e r o son + f. l e n g t h ()+ b y t e s ) ; e l s e System. out. p r i n t l n ( E l f i c h e r o no e x i s t e. ) ; e l s e System. out. p r i n t l n ( Debe i n d i c a r un f i c h e r o. ) ; 10 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

211 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II E/S Estándar Ficheros Entrada/Salida Ficheros: Lectura Para leer de un fichero usamos una subclase de InputStream: FileInputStream Para abrir un FileInputStream sobre un fichero, se le da al constructor un String o un objeto File: F i l e I n p u t S t r e a m mi F i c h e r o S t ; m i F i c h e r o S t = new F i l e I n p u t S t r e a m ( / e t c /kk ) ; También se puede utilizar: F i l e m i F i c h e r o F i l e I n p u t S t r e a m m i F i c h e r o S t ; m i F i c h e r o = new F i l e ( / e t c /kk ) ; m i F i c h e r o S t = new F i l e I n p u t S t r e a m ( m i F i c h e r o ) ; 11 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

212 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II E/S Estándar Ficheros Entrada/Salida Ficheros: Lectura import j a v a. i o. ; p u b l i c c l a s s V e r F i c h e r o { p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) { i f ( a r g s. l e n g t h > 0 ) { t r y { i n t c ; FileInputStream f i s = new FileInputStream ( args [ 0 ] ) ; w h i l e ( ( c= f i s. r e a d ())!= 1) { System. out. p r i n t ( ( char ) c ) ; catch ( F i l e N o t F o u n d E x c e p t i o n e ) { System. out. p r i n t l n ( E l f i c h e r o no e x i s t e. ) ; return ; catch ( I O E x c e p t i o n e ) { System. out. p r i n t l n ( E r r o r de E/S. ) ; e l s e System. out. p r i n t l n ( Debe i n d i c a r un f i c h e r o. ) ; 12 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

213 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II E/S Estándar Ficheros Entrada/Salida Ficheros: Escritura Para escribir un fichero usamos una subclase de OutputStream: FileOutputStream Para abrir un FileOutputStream sobre un fichero, se le da al constructor un String o un objeto File: FileOutputStream m i F i c h e r o S t ; m i F i c h e r o S t = new FileOutputStream ( / e t c /kk ) ; También se puede utilizar: F i l e m i F i c h e r o FileOutputStream m i F i c h e r o S t ; m i F i c h e r o = new F i l e ( / e t c /kk ) ; m i F i c h e r o S t = new FileOutputStream ( m i F i c h e r o ) ; 13 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

214 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II E/S Estándar Ficheros Entrada/Salida Ficheros: Escritura import j a v a. i o. ; p u b l i c c l a s s S a l i d a { s t a t i c F i l e O u t p u t S t r e a m f o s ; p u b l i c s t a t i c f i n a l i n t l o n g L i n e a = 8 1 ; public s t a t i c void main ( String args [ ] ) throws IOException { byte datos [ ] = new byte [ longlinea ] ; fos = new FileOutputStream ( datos. dat ) ; w h i l e ( t r u e ) { System. e r r. p r i n t ( T e c l e a a l g o : ) ; l e e L i n e a ( d a t o s ) ; f o r ( i n t i =0; d a t o s [ i ]!= 0 ; i++ ) f o s. w r i t e ( d a t o s [ i ] ) ; f o s. w r i t e ( \n ) ; p r i v a t e s t a t i c v o i d l e e L i n e a ( byte l i n e a [ ] ) throws I O E x c e p t i o n { i n t b = 0, i = 0 ; w h i l e ( ( i < ( l o n g L i n e a 1) ) && ( ( b = System. i n. r e a d ( ) )!= \n ) ) l i n e a [ i ++] = ( byte ) b ; l i n e a [ i ] = ( byte ) 0 ; 14 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

215 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II E/S Estándar Ficheros Entrada/Salida Ficheros Al usar un FileInputStream estamos leyendo bytes, en el código anterior podemos utilizar en su lugar un FileReader, que al hededar de Reader trabaja directamente con caracteres. Idem para FileOutputStream y Writer Para muchas de las subclases de InputStream y OutputStream están definidas las subclases equivalentes de Reader y Writer. Existen una serie de adaptadores que se pueden utilizar para ayudarnos a leer o escribir los datos formateandolos (en lugar de tener que leer y escribir bytes o caracteres) A continuación veremos ejemplos de estos adaptadores 15 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

216 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II E/S Estándar Ficheros Entrada/Salida Ficheros InputStreamReader/OutputStreamReader Convierten un InputStream/OutputStream en un Reader/Writer. BufferedInputStream/BufferedOutputStream/BufferedReader/BufferedWriter Añaden memoria de almacenamiento temporal. DataInputStream/DataOutputStream Permiten leer modelos simples de datos como tipos primitivos y String PrintWriter/PrintStream Simplifican la impresión de texto 16 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

217 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II E/S Estándar Ficheros Entrada/Salida Ficheros: Ejemplo import j a v a. i o. ; p u b l i c c l a s s S a l i d a 2 { p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) throws I O E x c e p t i o n { P r i n t W r i t e r pw = new P r i n t W r i t e r ( new F i l e W r i t e r ( d a t o s. dat ) ) ; B u f f e r e d R e a d e r br = new B u f f e r e d R e a d e r ( ( new I n p u t S t r e a m R e a d e r ( System. i n ) ) ) ; w h i l e ( t r u e ) { System. e r r. p r i n t ( T e c l e a a l g o : ) ; pw. p r i n t l n ( br. r e a d L i n e ( ) ) ; 17 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

218 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II E/S Estándar Ficheros Entrada/Salida Ficheros: Ejemplo Usamos un PrintWriter que nos permite usar el método println Convertimos el InputStream en un Reader y lo adaptamos con un BufferedReader para usar readline Además vemos como podemos usar un FileWriter en lugar de un FileOutputStream 18 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

219 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Hola mundo Mini-aplicación Entrada de datos Layouts Ejercicio Índice 7 Interfaces Gráficas de usuario Hola mundo Mini-aplicación Entrada de datos Layouts Ejercicio 19 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

220 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Hola mundo Mini-aplicación Entrada de datos Layouts Ejercicio Interfaces Gráficas de usuario Las interfaces Swing deben tener al menos un contendor top-level. Un contenedor top-level proporciona el soporte para pintar y manejar eventos. Hay 3 contenedores top-level comunes: JFrame, JDialog y JApplet. Cada JFrame implementa una ventana principal y cada JDialog implementa una ventana secundaria. Los JApplet implementan applets. 20 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

221 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Hola mundo Mini-aplicación Entrada de datos Layouts Ejercicio Interfaces Gráficas de usuario Hola mundo import j a v a x. swing. ; p u b l i c c l a s s HolaMundoSwing { p r i v a t e s t a t i c v o i d createandshowgui ( ) { JFrame. s e t D e f a u l t L o o k A n d F e e l D e c o r a t e d ( t r u e ) ; JFrame frame = new JFrame ( Ventana h o l a mundo ) ; frame. s e t D e f a u l t C l o s e O p e r a t i o n ( JFrame. EXIT ON CLOSE ) ; J L a b e l l a b e l = new J L a b e l ( Hola mundo! ) ; frame. getcontentpane ( ). add ( l a b e l ) ; frame. pack ( ) ; frame. s e t V i s i b l e ( t r u e ) ; p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { j a v a x. swing. S w i n g U t i l i t i e s. i n v o k e L a t e r ( new Runnable ( ) { p u b l i c v o i d run ( ) { createandshowgui ( ) ; ) ; 221 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

222 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Hola mundo Mini-aplicación Entrada de datos Layouts Ejercicio Interfaces Gráficas de usuario Hola mundo JFrame. s e t D e f a u l t L o o k A n d F e e l D e c o r a t e d ( true ) ; JFrame frame = new JFrame ( Ventana h o l a mundo ) ;... frame. pack ( ) ; frame. s e t V i s i b l e ( true ) ; Con la primera linea decimos que use las decoraciones de java en lugar de las decoraciones del gestor de ventanas. Al JFrame le damos el título de la ventana. pack() compacta la ventana de modo que quepan todos sus elementos. setvisible(true) hace que se muestre la ventana. 22 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

223 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Hola mundo Mini-aplicación Entrada de datos Layouts Ejercicio Interfaces Gráficas de usuario Hola mundo J L a b e l l a b e l = new J L a b e l ( Hola mundo! ) ; frame. getcontentpane ( ). add ( l a b e l ) ; Los componentes Swing, excepto los contenedores top-level, son descendientes de JComponent. En este ejemplo usamos JLabel. Para añadir la etiqueta a la ventana, se añade al content pane En Java5 bastará con hacer: frame.add(label); frame. s e t D e f a u l t C l o s e O p e r a t i o n ( JFrame. EXIT ON CLOSE ) ; Con esta instrucción se hace que la ventana se cierre al darle al botón de cerrar la ventana. 23 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

224 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Hola mundo Mini-aplicación Entrada de datos Layouts Ejercicio Interfaces Gráficas de usuario Hola mundo j a v a x. swing. S w i n g U t i l i t i e s. i n v o k e L a t e r ( new Runnable ( ) { p u b l i c v o i d run ( ) { / c r e a r y m o s t r a r l a GUI / ) ; El control de eventos y dibujado de la interfaz suceden todos en un thread especial: el thread de manejo de eventos. Así un evento no finaliza antes de que otro empieze, ni el dibujado es interrumpido para gestiónar un evento. La clase SwingUtilities controla la ejecución dentro del thread de eventos de swing. Con invokelater ejecutamos algo dentro del thread de eventos. 24 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

225 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Hola mundo Mini-aplicación Entrada de datos Layouts Ejercicio Interfaces Gráficas de usuario Mini-aplicación En este ejemplo veremos: Look and Feel Establecer botones y etiquetas Añadir componentes a contenedores Poner bordes a componentes Manejar eventos 25 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

226 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Hola mundo Mini-aplicación Entrada de datos Layouts Ejercicio Interfaces Gráficas de usuario Mini-aplicación Con UIManager.setLookAndFeel(LOOKANDFEEL); establecemos la apariencia de la aplicación. El parámetro es el nombre del Look and Feel Hay unos cuantos predefinidos: com.sun.java.swing.plaf.gtk.gtklookandfeel javax.swing.plaf.metal.metallookandfeel com.sun.java.swing.plaf.windows.windowslookandfeel com.sun.java.swing.plaf.motif.motiflookandfeel Ademas: UIManager.getCrossPlatformLookAndFeelClassName(): Devuelve un look and feel multiplataforma. UIManager.getSystemLookAndFeelClassName(): Look and feel de la plataforma actual 26 [ ] Carlos Varela Paz Introducción al lenguaje de programación Java

227 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Hola mundo Mini-aplicación Entrada de datos Layouts Ejercicio Interfaces Gráficas de usuario Mini-aplicación Para crear un botón usamos la clase JButton. Podemos asignarle teclas abreviadas. JButton button = new JButton ( Soy un boton! ) ; button. setmnemonic ( KeyEvent. VK I ) ; Para añadirle comportamiento usamos un ActionListener: button. a d d A c t i o n L i s t e n e r ( t h i s ) ;... p u b l i c void a c t i o n P e r f o r m e d ( ActionEvent e ) { [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

228 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Hola mundo Mini-aplicación Entrada de datos Layouts Ejercicio Interfaces Gráficas de usuario Mini-aplicación En general, para detectar cuando un usuario hace click en un botón: El programa debe tener un objeto que implemente la interfaz ActionListener Se debe registrar este objeto como action listener del botón usando addactionlistener Cuando el usuario hace click el botón lanza un evento de acción y llama al método actionperformed 28 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

229 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Hola mundo Mini-aplicación Entrada de datos Layouts Ejercicio Interfaces Gráficas de usuario Mini-aplicación Los componentes Swing pueden generar distintos tipos de eventos: Lanzador del evento Click en botón, Enter en campo de texto, o se escoge item de un menú. Cierre de la ventana (ventana principal) Pulsación de un botón mientras el cursor está sobre un componente Se mueve el ratón sobre un componente El componente se hace visible El componente consigue el foco Cambia la selección en una tabla Cambia la propiedad de un componente Tipo ActionListener WindowListener MouseListener MouseMotionListener ComponentListener FocusListener ListSelectionListener PropertyChangeListener 29 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

230 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Hola mundo Mini-aplicación Entrada de datos Layouts Ejercicio Interfaces Gráficas de usuario Mini-aplicación Para crear la etiqueta: f i n a l J L a b e l l a b e l = new J L a b e l ( l a b e l P r e f i x + 0 ) ; Para cambiar el texto de la etiqueta: l a b e l. s e t T e x t ( l a b e l P r e f i x + numclicks ) ; 230 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

231 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Hola mundo Mini-aplicación Entrada de datos Layouts Ejercicio Interfaces Gráficas de usuario Mini-aplicación Usamos un contenedor para agrupar los componentes antes de añadirlos al JFrame: JPanel p a n e l = new JPanel (new G ridlayout ( 2, 1 ) ) ; p a n e l. add ( button ) ; p a n e l. add ( l a b e l ) ; p a n e l. s e t B o r d e r ( B o r d e r F a c t o r y. createemptyborder (... ) ) ; La primera linea crea un layout con dos filas y una columna. Luego añadirmos los componentes y finalmente añadimos un borde. 31 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

232 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Hola mundo Mini-aplicación Entrada de datos Layouts Ejercicio Interfaces Gráficas de usuario Mini-aplicación Para añadir el borde, usamos pane. s e t B o r d e r ( B o r d e r F a c t o r y. createemptyborder ( 30, 30, 10, 30) ) ; Crea un borde al panel de manera que separa los componentes añadidos del borde exterior. 32 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

233 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Hola mundo Mini-aplicación Entrada de datos Layouts Ejercicio Interfaces Gráficas de usuario Conversor Celsius-Fahrenheit Para introducir el valor usamos un JTextField: J T e x t F i e l d t e m p C e l s i u s = n u l l ;... t e m p C e l s i u s = new J T e x t F i e l d ( 2 ) ; Para recoger el valor: t e m p C e l s i u s. gettext ( ) ; 33 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

234 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Hola mundo Mini-aplicación Entrada de datos Layouts Ejercicio Interfaces Gráficas de usuario Layouts Nos ineteresa manejar los layouts de los JPanel y los content pane. Se puede establecer un layout en sus constructores o usando el método setlayout: JPanel p a n e l = new JPanel (new BorderLayout ( ) ) ; C o n t a i n e r contentpane = frame. getcontentpane ( ) ; contentpane. s e t L a y o u t (new FlowLayout ( ) ) ; 34 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

235 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Hola mundo Mini-aplicación Entrada de datos Layouts Ejercicio Interfaces Gráficas de usuario Layouts: Tipos Hay varias elecciones a la hora de usar un layout, como siempre depende de nuestras necesidades: FlowLayout Para tener los componentes en una fila con su tamaño natural. Es el layout por defecto. BorderLayout Se usa si queremos que los componentes ocupen todo el espacio libre. GridLayout Componentes de mismo tamaño distribuidos en filas y columnas. BoxLayout Componentes en una fila o columa con diferentes espacios entre ellos, distintas alineaciones o tamaños. GribBagLayout y SpringLayout Si tenemos un escenario complejo y queremos mucho control sobre como se disponen los elementos. 35 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

236 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Hola mundo Mini-aplicación Entrada de datos Layouts Ejercicio Interfaces Gráficas de usuario Layouts: FlowLayout Cuando un contenedor tienen un FlowLayout añadimos elementos en el usando add(componente). Los elementos se distribuyen en fila si variar su tamaño. Es el layout por defecto. 36 [ ] Carlos Varela Paz Introducción al lenguaje de programación Java

237 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Hola mundo Mini-aplicación Entrada de datos Layouts Ejercicio Interfaces Gráficas de usuario Layouts: BorderLayout Se divide el contenedor en 5 regiones: PAGE START Parte superior del contenedor PAGE END Parte inferior del contenedor LINE START Parte izquierdadel contenedor LINE END Parte derecha del contenedor CENTER Centro del contenedor Los elementos ocupan todo el espacio posible (se cambia su tamaño para logarlo) incluso si se modifica el tamaño de la ventana. Para añadir elementos se usa add(componente, BorderLayout.REGION) donde REGION es una de las regiones anteriores. 37 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

238 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Hola mundo Mini-aplicación Entrada de datos Layouts Ejercicio Interfaces Gráficas de usuario Ejercicio Crearemos un mini editor de texto. Usaremos lo aprendido de entrada/salida de ficheros. Leemos un fichero y escribimos su contenido en un JTextArea. Usar un BorderLayout. JTextArea Podemos usar el método settext(string t) para poner todo el texto o append(string t) para ir añadiendo poco a poco. Con gettext() obtenemos todo el texto que contiene. 238 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

239 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Hola mundo Mini-aplicación Entrada de datos Layouts Ejercicio Interfaces Gráficas de usuario Dialogo de apertura de fichero Con JFileChooser tenemos un dialogo que pide un fichero: J F i l e C h o o s e r c h o o s e r = new J F i l e C h o o s e r ( ) ; i n t r e t u r n V a l = c h o o s e r. showopendialog ( frame ) ; i f ( r e t u r n V a l == J F i l e C h o o s e r. APPROVE OPTION) { t r y { l e e F i c h e r o ( c h o o s e r. g e t S e l e c t e d F i l e ( ). g e t A b s o l u t e P a t h ( ) ) ; catch ( E x c e p t i o n ex ) { ex. p r i n t S t a c k T r a c e ( ) ; Como podemos con getselectedfile() nos devuelve un objeto File que representa el fichero elejido. 39 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

240 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Hola mundo Mini-aplicación Entrada de datos Layouts Ejercicio Interfaces Gráficas de usuario Acciones Podemos establecer el comportamiento de un botón usando acciones. button. s e t A c t i o n (new A c t i o n A b r i r ( ) ) ; Para ello creamos una subclase de AbstractAction e implementamos el método actionperformed 40 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

241 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Hola mundo Mini-aplicación Entrada de datos Layouts Ejercicio Interfaces Gráficas de usuario Acciones c l a s s A c t i o n A b r i r extends A b s t r a c t A c t i o n { p u b l i c A c t i o n A b r i r ( ) { s u p e r ( A b r i r ) ; p u b l i c v o i d a c t i o n P e r f o r m e d ( A c t i o n E v e n t e ) { J F i l e C h o o s e r c h o o s e r = new J F i l e C h o o s e r ( ) ; i n t r e t u r n V a l = c h o o s e r. showopendialog ( frame ) ; i f ( r e t u r n V a l == J F i l e C h o o s e r. APPROVE OPTION) { t r y { l e e F i c h e r o ( c h o o s e r. g e t S e l e c t e d F i l e ( ). g e t A b s o l u t e P a t h ( ) ) catch ( E x c e p t i o n ex ) { ex. p r i n t S t a c k T r a c e ( ) ; 41 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

242 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Hola mundo Mini-aplicación Entrada de datos Layouts Ejercicio Interfaces Gráficas de usuario Menu Podemos añadir menus a las ventanas. Para ellos creamos un JMenuBar y se lo añadimos al JFrame haciendo setjmenubar(menu) El JMenuBar está formado por elementos JMenu Los JMenu contienen elementos del tipo JMenuItem Los JMenuItem reciben como argumento una acción. 42 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

243 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Hola mundo Mini-aplicación Entrada de datos Layouts Ejercicio Interfaces Gráficas de usuario Menu JMenuBar menubar = new JMenuBar ( ) ; JMenu menu = new JMenu ( F i c h e r o ) ; menu. add (new JMenuItem (new A c t i o n A b r i r ( ) ) ) ; menu. add (new JMenuItem (new ActionGuardar ( ) ) ) ; menubar. add ( menu ) ; frame. addjmenubar ( menubar ) ; 43 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

244 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Hola mundo Mini-aplicación Entrada de datos Layouts Ejercicio Interfaces Gráficas de usuario Popup Además podemos añadir un menu popup a nuestro editor. Usamos un JPopupMenu Son parecidos a los JMenu, contienen JMenuItem Para hacer que aparezca al pulsar el botón derecho tenemos que registrarnos en los eventos del ratón. Usamos el método addmouselistener que espera recibir un MouseListener. Podemos extender la clase MouseAdapter y anular los métodos que nos interesan. 44 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

245 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Hola mundo Mini-aplicación Entrada de datos Layouts Ejercicio Interfaces Gráficas de usuario Popup c l a s s P o p u p L i s t e n e r extends MouseAdapter { p u b l i c void mousepressed ( MouseEvent e ) { maybeshowpopup ( e ) ; p u b l i c void mousereleased ( MouseEvent e ) { maybeshowpopup ( e ) ; p r i v a t e void maybeshowpopup ( MouseEvent e ) { i f ( e. i s P o p u p T r i g g e r ( ) ) { popup. show ( e. getcomponent ( ), e. getx ( ), e. gety ( ) ) ; 45 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

246 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Hola mundo Mini-aplicación Entrada de datos Layouts Ejercicio Interfaces Gráficas de usuario Popup Con e.ispopuptrigger() sabemos si es el evento de mostrar el popup en la plataforma en la que se ejecuta la aplicación Añadimos el evento al JTextArea t e x t o. addmouselistener ( new P o p u p L i s t e n e r ( ) ) ; 46 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

247 Índice Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Checkboxes Botones de radio ComboBox Imágenes Tabs SplitPane Rendimiento 8 Interfaces Gráficas de usuario II Checkboxes Botones de radio ComboBox Imágenes Tabs SplitPane Rendimiento 47 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

248 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Interfaces Gráficas de usuario II Checkboxes Checkboxes Botones de radio ComboBox Imágenes Tabs SplitPane Rendimiento Un checkbox es un botón especializado que muestra un estado de selección. Suele utilizarse para seleccionar opciones en una interfaz En Java se representa con la clase JCheckBox Para crear uno se hace: JCheckBox ck = new JCheckBox ( Opcion 1 ) ; La cadena de texto es el texto que aparecerá al lado de la marca de selección Para conocer el estado usamos isselected() Si queremos modificarlo expĺıcitamente usamos setselected(boolean b) 48 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

249 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Interfaces Gráficas de usuario II Botones de radio Checkboxes Botones de radio ComboBox Imágenes Tabs SplitPane Rendimiento Con checkboxes podemos hacer elegir entre varias opciones Si queremos que esas opciones sean excluyentes se suelen utilizar botones de radio Representados con la clase JRadioButton Para crear uno se hace: JRadioButton ck = new JRadioButton ( Opcion 1 ) ; La cadena de texto es el texto que aparecerá al lado de la marca de selección Para conocer el estado usamos isselected() Si queremos modificarlo expĺıcitamente usamos setselected(boolean b) 49 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

250 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Interfaces Gráficas de usuario II Botones de radio Checkboxes Botones de radio ComboBox Imágenes Tabs SplitPane Rendimiento Para lograr un comportamiento exclusivo (sólo uno de los botones está seleccionado) se usa ButtonGroup Esta clase se encarga de que sólo un botón se encuentre seleccionado en cada momento ButtonGroup grupo = new ButtonGroup ( ) ; grupo. add ( rb1 ) ; grupo. add ( rb2 ) ; 50 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

251 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Interfaces Gráficas de usuario II ComboBox Checkboxes Botones de radio ComboBox Imágenes Tabs SplitPane Rendimiento Con las comboboxes podemos seleccionar un elemento de una lista. Se usa la clase JComboBox Podemos inicializar un combobox haciendo: S t r i n g a n i m a l e s [ ] = { Perro, Gato, P o l l o ; JComboBox cb = new JComboBox ( a n i m a l e s ) ; Con setselectedindex(int i) indicamos qué elemento queremos que aparezca seleccionado Podemos registrar un ActionListener para saber cuando se selecciona un elemento. 51 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

252 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Interfaces Gráficas de usuario II Imágenes Checkboxes Botones de radio ComboBox Imágenes Tabs SplitPane Rendimiento El tratamiento de imágenes en Java es un mundo por si solo. Veremos una forma sencilla de visualizar imágenes en nuestra interfaz. Usaremos un objeto ImageIcon y se lo asociaremos a un JLabel para que dibuje la imagen. Para crear un ImageIcon hacemos: j a v a. net. URL imgurl = NombreDeClase. c l a s s. g e t R e s o u r c e ( path ) ; ImageIcon i = new ImageIcon ( imgurl ) ; Ahora podemos asignar el icono al JLabel: J L a b e l l = new J L a b e l ( ) ; l. s e t I c o n ( i ) ; 52 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

253 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Interfaces Gráficas de usuario II Imágenes Checkboxes Botones de radio ComboBox Imágenes Tabs SplitPane Rendimiento j a v a. net. URL imgurl = NombreDeClase. c l a s s. g e t R e s o u r c e ( path ) ; El método getresource hace que el cargador de clases busque en los directorios del classpath y en los.jar y devuelva una URL con la dirección del fichero. 53 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

254 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Interfaces Gráficas de usuario II Tabs Checkboxes Botones de radio ComboBox Imágenes Tabs SplitPane Rendimiento En las interfaces gráficas es común ver solapas que al pincharlas muestran un contenido. En Java se puede utilizar un contenedor especial para lograr ese efecto: JTabbedPane Para añadir elementos al panel se usa el método addtab que creará una nueva solapa: JTabbedPane p = new JTabbedPane ( ) ; p. addtab ( T i t u l o, componente ) ; 54 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

255 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Interfaces Gráficas de usuario II Tabs: Orientación Checkboxes Botones de radio ComboBox Imágenes Tabs SplitPane Rendimiento Podemos cambiar e lugar en el que aparecen las solapas usando el método settabplacement(int placement), el parámetro puede valer: JTabbedPane.TOP JTabbedPane.BOTTOM; JTabbedPane.LEFT JTabbedPane.RIGHT 55 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

256 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Interfaces Gráficas de usuario II SplitPane Checkboxes Botones de radio ComboBox Imágenes Tabs SplitPane Rendimiento Con un JSplitPane creamos un contenedor dividido en dos paneles. Para indicar los componentes que van a cada lado se usan los métodos setrightcomponent(component c) y setleftcomponent(component c) Ahora podemos modificar el tamaño de los paneles con el ratón moviendo la barra divisora. 56 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

257 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Interfaces Gráficas de usuario II SplitPane Checkboxes Botones de radio ComboBox Imágenes Tabs SplitPane Rendimiento Podemos cambiar la orientación de la barra de división utilizando el método setorientation(int orientation). Los valores permitidos son: JSplitPane.VERTICAL SPLIT JSplitPane.HORIZONTAL SPLIT Si se usa JSplitPane.HORIZONTAL SPLIT podemos añadir los componentes usando settopcomponent(component comp) y setbottomcomponent(component comp) 57 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

258 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Interfaces Gráficas de usuario II Rendimiento Checkboxes Botones de radio ComboBox Imágenes Tabs SplitPane Rendimiento Ya comentamos que los eventos se manejan en el thread de eventos y que se tratan secuencialmente. Además sabemos que el dibujado tambien ocurre ahí. Que sucede si hacemos una operación muy costosa en un evento? La interfaz queda bloqueada hasta que la operación termine. Puede haber distintas operaciones costosas: Cargar una imagen grande. Hacer peticiones a una base de datos remota. Realizar un cálculo complejo [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

259 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Interfaces Gráficas de usuario II Rendimiento Checkboxes Botones de radio ComboBox Imágenes Tabs SplitPane Rendimiento Es este tipo de casos deberiamos: Crear un thread que realice la operación que tarda Al terminar actualizar la interfaz usando SwingUtilities.invokeLater(...) En los tutoriales de Sun nos proporcionan una clase SwingWorker que hace esto por nosotros. Para usarla hay que: Crear una subclase de SwingWorker. Anular el método construct() poniendo el código costoso Anular el método finished() poniendo el código de actualización de la interfaz. 59 [ ] Carlos Varela Paz Introducción al lenguaje de programación Java

260 Threads Entrada/Salida Interfaces Gráficas de usuario Interfaces Gráficas de usuario II Interfaces Gráficas de usuario II Rendimiento Checkboxes Botones de radio ComboBox Imágenes Tabs SplitPane Rendimiento contruct() de vuelve un Object que puede ser utilizado el mètodo getvalue() getvalue() espera a que el thread generado en construct() termine si no había terminado. SwingWorker worker = new SwingWorker ( ) { p u b l i c O b j e c t c o n s t r u c t ( ) { //Hemos una o p e r a c i o n c o s t o s i i i i i i m a r e t u r n r e s u l t a d o ; // Se e j e c u t a en e l t h r e a d de e v e n t o s. p u b l i c v o i d f i n i s h e d ( ) { O b j e c t r = g e t V a l u e ( ) ; // A c t u a l i z a m o s l a i n t e r f a z usando e l v a l o r ; worker. s t a r t ( ) ; 60 [ ] Carlos Varela Paz ([email protected]) Introducción al lenguaje de programación Java

Elementos léxicos del lenguaje de programación Java

Elementos léxicos del lenguaje de programación Java Elementos léxicos del lenguaje de programación Java Elementos léxicos del lenguaje de programación Java Palabras reservadas Identificadores Literales Operadores Delimitadores Comentarios Apéndices Operadores

Más detalles

Tema 2. El lenguaje de programación Java (Parte 1)

Tema 2. El lenguaje de programación Java (Parte 1) Programación en Java Tema 2. El lenguaje de programación Java (Parte 1) Luis Rodríguez Baena Facultad de Informática Elementos del lenguaje (I) El juego de caracteres. No utiliza ASCII, sino Unicode de

Más detalles

EXCEPCIONES EN JAVA. Las sentencias que tratan las excepciones son try y catch. La sintaxis es:

EXCEPCIONES EN JAVA. Las sentencias que tratan las excepciones son try y catch. La sintaxis es: EXCEPCIONES EN JAVA Uno de los problemas más importantes al escribir aplicaciones es el tratamiento de los errores. Errores no previstos que distorsionan la ejecución del programa. Las excepciones de Java

Más detalles

CONCEPTOS BASICOS DEL LENGUAJE JAVA

CONCEPTOS BASICOS DEL LENGUAJE JAVA CONCEPTOS BASICOS DEL LENGUAJE JAVA NOMENCLATURA GENERAL En Java se distinguen las letras mayúsculas y minúsculas. Las reglas del lenguaje respecto a los nombres de variables son muy amplias y permiten

Más detalles

TEMA 2. Agenda. Fundamentos de JAVA

TEMA 2. Agenda. Fundamentos de JAVA TEMA 2 Fundamentos de JAVA V1.3 Manuel Pereira González Agenda Introducción Historia de Java Características Principales Hello World Tipos Operadores Control de Flujo E/S básica Atributos y Métodos Resumen

Más detalles

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA UNED Centro Asociado de Cádiz RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA 1. OBJETOS Cualquier elemento del programa es un objeto. Un programa es un conjunto de objetos que se comunican entre sí

Más detalles

Modulo 1 El lenguaje Java

Modulo 1 El lenguaje Java Modulo 1 El lenguaje Java 13 - Codificación en Java Una de las grandes diferencias entre Java y Pascal en cuando a la codificación es que Java se trata de un lenguaje de los llamados case sensitive Esto

Más detalles

Uso de excepciones en Java

Uso de excepciones en Java Uso de excepciones en Java En Java, cuando se produce un error en un método, se lanza un objeto Throwable. Cualquier método que haya llamado al método puede capturar la excepción y tomar las medidas que

Más detalles

Objetivo de aprendizaje del tema

Objetivo de aprendizaje del tema Computación II Tema 3. Identificadores, palabras clave y tipos de datos Objetivo de aprendizaje del tema Al finalizar el tema serás capaz de: Distinguir i entre modificadores d válidos y no válidos. Enumerar

Más detalles

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java Identificadores Las variables se utilizan en programación para almacenar temporalmente

Más detalles

Para leer la entrada de consola, lo primero que se hace es construir un Scanner que este asociado al flujo de entrada estándar System.

Para leer la entrada de consola, lo primero que se hace es construir un Scanner que este asociado al flujo de entrada estándar System. CICLO: 01/2010 Universidad Don Bosco Materia: Lenguaje de Programación III Contenido: 1-Lectura de Datos de entrada. 2-Introduccion a JOPTIONPANE. 3-Estructuras de Control. ->LECTURA DE DATOS DE ENTRADA

Más detalles

Tema 3 Elementos básicos de programación

Tema 3 Elementos básicos de programación Representación de Datos y Aplicaciones Tema 3 Elementos básicos de programación Natividad Martínez Madrid [email protected] Objetivos del tema 3 Conocer la estructura básica de un programa Java Comprender

Más detalles

Introduccion al Lenguaje C. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia

Introduccion al Lenguaje C. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia Introduccion al Lenguaje C Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia Introducción C es un lenguaje de programación creado en 1972 por

Más detalles

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

En cualquier caso, tampoco es demasiado importante el significado de la B, si es que lo tiene, lo interesante realmente es el algoritmo. Arboles-B Características Los árboles-b son árboles de búsqueda. La "B" probablemente se debe a que el algoritmo fue desarrollado por "Rudolf Bayer" y "Eduard M. McCreight", que trabajan para la empresa

Más detalles

Gestor de aplicaciones Java. Esta herramienta es el intérprete de los archivos de clase generados por el javac (compilador).

Gestor de aplicaciones Java. Esta herramienta es el intérprete de los archivos de clase generados por el javac (compilador). CAPÍTULO 4 Requerimientos de software Este capítulo presenta las herramientas necesarias para la construcción y ejecución de programas en el lenguaje de programación JAVA, los requerimientos mínimos de

Más detalles

Tema 1. Introducción a JAVA

Tema 1. Introducción a JAVA Tema 1. Introducción a JAVA Historia Características Plataforma Java Entorno de desarrollo Ejemplo: Hola mundo Estructura general de un programa Java 1 Historia de Java (i) Surge en 1991: Sun Microsystems

Más detalles

Preliminares. Tipos de variables y Expresiones

Preliminares. Tipos de variables y Expresiones Preliminares. Tipos de variables y Expresiones Felipe Osorio Instituto de Estadística Pontificia Universidad Católica de Valparaíso Marzo 5, 2015 1 / 20 Preliminares Computadoras desarrollan tareas a un

Más detalles

Introducción al lenguaje de programación java

Introducción al lenguaje de programación java Introducción al lenguaje de programación java Algoritmia y Programación Slide 1 LENGUAJES DE PROGRAMACION Un lenguaje de programación es un idioma artificial diseñado y creado para expresar algoritmos

Más detalles

Introducción a Java LSUB. 15 de enero de 2015 GSYC

Introducción a Java LSUB. 15 de enero de 2015 GSYC Introducción a LSUB GSYC 15 de enero de 2015 (cc) 2014 Laboratorio de Sistemas, Algunos derechos reservados. Este trabajo se entrega bajo la licencia Creative Commons Reconocimiento - NoComercial - SinObraDerivada

Más detalles

Objetos y Clases en Java. ELO 329: Diseño y Programación Orientados a Objetos

Objetos y Clases en Java. ELO 329: Diseño y Programación Orientados a Objetos Objetos y Clases en Java ELO 329: Diseño y Programación Orientados a Objetos 1 Elementos de Análisis y Diseño orientado a objetos Notación y relaciones entre clases: Las clases son abstracciones para los

Más detalles

Unidad I. 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal)

Unidad I. 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal) Unidad I Sistemas numéricos 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal) Los computadores manipulan y almacenan los datos usando interruptores electrónicos que están ENCENDIDOS o APAGADOS.

Más detalles

Curso de Java POO: Programación orientada a objetos

Curso de Java POO: Programación orientada a objetos Curso de Java POO: Programación orientada a objetos Luis Guerra Velasco Curso INEM 02830. Programación en Java Marzo 2010 Índice 1 Introducción a la POO 2 Herencia y polimorfismo 3 Empaquetado de proyectos

Más detalles

Repaso de las características más importantes de la programación Java y su adaptación a Android

Repaso de las características más importantes de la programación Java y su adaptación a Android Repaso de las características más importantes de la programación Java y su adaptación a Android 1. Entorno de programación en java 2. Variables y tipos de datos 3. Operaciones y operadores 4. Clases y

Más detalles

2. Estructura de un programa en Java

2. Estructura de un programa en Java 24 A. García-Beltrán y J.M. Arranz 2. Estructura de un programa en Java Objetivos: a) Describir la estructura del código fuente de una aplicación Java b) Presentar los conceptos de comentario y de identificador

Más detalles

Introducción a la programación orientada a objetos

Introducción a la programación orientada a objetos Introducción a la programación orientada a objetos 1. Introducción a la programación orientada a objetos 2. Las clases 3. El tipo Struct 4. Diferencias entre Class y Struct 5. Pilares de la Programación

Más detalles

GESTIÓN DE EXCEPCIONES EN JAVA. CAPTURA CON BLOQUES TRY CATCH Y FINALLY. EJEMPLOS RESUELTOS. (CU00927C)

GESTIÓN DE EXCEPCIONES EN JAVA. CAPTURA CON BLOQUES TRY CATCH Y FINALLY. EJEMPLOS RESUELTOS. (CU00927C) APRENDERAPROGRAMAR.COM GESTIÓN DE EXCEPCIONES EN JAVA. CAPTURA CON BLOQUES TRY CATCH Y FINALLY. EJEMPLOS RESUELTOS. (CU00927C) Sección: Cursos Categoría: Lenguaje de programación Java nivel avanzado I

Más detalles

Curso PHP Módulo 1 R-Luis

Curso PHP Módulo 1 R-Luis Lenguaje PHP Introducción Archivos HTML y PHP: Crear un archivo php es tan sencillo como cambiarle la extensión a un archivo html, por ejemplo podemos pasar de index.html a index.php sin ningún inconveniente.

Más detalles

INTELIGENCIA ARTIFICIAL 2015 TALLER RÁPIDO DE PROGRAMACIÓN EN JAVA

INTELIGENCIA ARTIFICIAL 2015 TALLER RÁPIDO DE PROGRAMACIÓN EN JAVA INTELIGENCIA ARTIFICIAL 2015 TALLER RÁPIDO DE PROGRAMACIÓN EN JAVA Fuente: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html Por qué Java? TIOBE Index for March 2015 Fuente: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

Más detalles

Programación Orientada a Objetos con Java

Programación Orientada a Objetos con Java Programación Orientada a Objetos con Java M.C. Jorge Eduardo Ibarra Esquer [email protected] Sobrecarga de métodos Java permite la definición de dos o más métodos que tengan el mismo nombre, dentro de la

Más detalles

GENERACIÓN DE CÓDIGO

GENERACIÓN DE CÓDIGO GENERACIÓN DE CÓDIGO INTRODUCCION La generación de código es la fase más compleja de un compilador, puesto que no sólo depende de las características del lenguaje fuente sino también de contar con información

Más detalles

TIPOS DE VARIABLES EN PHP. DECLARACIÓN Y ASIGNACIÓN. LA INSTRUCCIÓN ECHO PARA INSERTAR TEXTO O CÓDIGO. (CU00816B)

TIPOS DE VARIABLES EN PHP. DECLARACIÓN Y ASIGNACIÓN. LA INSTRUCCIÓN ECHO PARA INSERTAR TEXTO O CÓDIGO. (CU00816B) APRENDERAPROGRAMAR.COM TIPOS DE VARIABLES EN PHP. DECLARACIÓN Y ASIGNACIÓN. LA INSTRUCCIÓN ECHO PARA INSERTAR TEXTO O CÓDIGO. (CU00816B) Sección: Cursos Categoría: Tutorial básico del programador web:

Más detalles

Una variable de clase escalar tiene un nivel de indirección igual a 1. Por ejemplo, las variables i, b y x definidas como se muestra a continuación.

Una variable de clase escalar tiene un nivel de indirección igual a 1. Por ejemplo, las variables i, b y x definidas como se muestra a continuación. Descripción de la semántica de ALFA En esta descripción sólo se mencionarán los aspectos en los que el lenguaje de programación ALFA pueda diferir de otros lenguajes de programación de alto nivel. Se sobreentienden

Más detalles

Lo que necesitaremos para programar en Java, será un editor de texto o IDE y la JDK.

Lo que necesitaremos para programar en Java, será un editor de texto o IDE y la JDK. Introducción Java surgió en 1991 dentro de la empresa Sun Microsystems como un lenguaje de programación sencillo y universal destinado a electrodomésticos. La reducida potencia de cálculo y memoria de

Más detalles

Práctica 3 mtp. metodoloxía e tecnoloxía da programación. Presentar detalles básicos sobre la sintaxis del lenguaje de programación Java.

Práctica 3 mtp. metodoloxía e tecnoloxía da programación. Presentar detalles básicos sobre la sintaxis del lenguaje de programación Java. Práctica 3 mtp metodoloxía e tecnoloxía da programación Objetivos: Duración: Presentar detalles básicos sobre la sintaxis del lenguaje de programación Java. 1 semana 1.- Identificadores Los identificadores

Más detalles

Tutorial Básico de vbscript

Tutorial Básico de vbscript Tutorial Básico de vbscript Bueno, primero aclarar que este tutorial, pretende explicar de manera básica las distintas instrucciones aplicadas en visual basic script (vbs de aquí en más), para que así

Más detalles

FACULTAD DE INGENIERÍA

FACULTAD DE INGENIERÍA NOMBRE DEL PROFESOR: Ing. Héctor Manuel Quej Cosgaya NOMBRE DE LA PRÁCTICA: Variables y Tipos de Datos PRÁCTICA NÚM. [ 1 ] LABORATORIO: MATERIA: UNIDAD: TIEMPO: Centro de Ingeniería Computacional Lenguaje

Más detalles

Programación Orientada a Objetos. Java: Excepciones

Programación Orientada a Objetos. Java: Excepciones Programación Orientada a Objetos Java: Excepciones Eduardo Mosqueira Rey LIDIA Laboratorio de Investigación y desarrollo en Inteligencia Artificial Departamento de Computación Universidade da Coruña, España

Más detalles

8. Sentencia return y métodos

8. Sentencia return y métodos 92 A. García-Beltrán y J.M. Arranz 8. Sentencia return y métodos Objetivos: a) Describir el funcionamiento de la sentencia return b) Interpretar el resultado de una sentencia return en el código fuente

Más detalles

www.aprendoencasa.com Curso Introducción JAVA Pág.: 1

www.aprendoencasa.com Curso Introducción JAVA Pág.: 1 www.aprendoencasa.com Curso Introducción JAVA Pág.: 1 Introducción Java es un lenguaje basado en la programación orientada a objetos (POO), este tipo de programación va más allá del tipo de programación

Más detalles

Introducción a la Programación 11 O. Humberto Cervantes Maceda

Introducción a la Programación 11 O. Humberto Cervantes Maceda Introducción a la Programación 11 O Humberto Cervantes Maceda Recordando En la sesión anterior vimos que la información almacenada en la memoria, y por lo tanto aquella que procesa la unidad central de

Más detalles

Tema 6. Reutilización de código. Programación 2015-2016. Programación - Tema 6: Reutilización de código

Tema 6. Reutilización de código. Programación 2015-2016. Programación - Tema 6: Reutilización de código Tema 6 Reutilización de código Programación 2015-2016 Programación - Tema 6: Reutilización de código 1 Tema 6. Reutilización de código Modularidad. Implementación de métodos. Uso de métodos. Programación

Más detalles

Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero.

Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero. Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero. Uso de Ficheros Todas las estructuras de datos vistas hasta ahora utilizan la

Más detalles

Introducción... 1 Qué es Java?... 1 Compilando a Bytecode... 1 Usando jgrasp Para Hacer el Trabajo Sucio... 5 El Entorno de jgrasp...

Introducción... 1 Qué es Java?... 1 Compilando a Bytecode... 1 Usando jgrasp Para Hacer el Trabajo Sucio... 5 El Entorno de jgrasp... Contenido Introducción... 1 Qué es Java?... 1 Compilando a Bytecode... 1 Usando jgrasp Para Hacer el Trabajo Sucio... 5 El Entorno de jgrasp... 5 Introducción Es tiempo de hablar en detalle de lo que significa

Más detalles

1 ELEMENTOS BASICOS DEL LENGUAJE

1 ELEMENTOS BASICOS DEL LENGUAJE 1 ELEMENTOS SICOS DEL LENGUJE Contenido: Variables su declaracion y asignacion Caracteres en java Secuencias de escape y comentarios Tipos de datos Operadores aritméticos, relacionales y lógicos Entrada

Más detalles

9. Objetos y clases. 9.1. Clases

9. Objetos y clases. 9.1. Clases Programación orientada a objetos con Java 103 9. Objetos y clases Objetivos: a) Presentar el concepto de objeto, clase, atributo, método e instancia b) Interpretar el código fuente de una aplicación Java

Más detalles

En términos generales, un foro es un espacio de debate donde pueden expresarse ideas o comentarios sobre uno o varios temas.

En términos generales, un foro es un espacio de debate donde pueden expresarse ideas o comentarios sobre uno o varios temas. 1 de 18 Inicio Qué es un foro En términos generales, un foro es un espacio de debate donde pueden expresarse ideas o comentarios sobre uno o varios temas. En el campus virtual, el foro es una herramienta

Más detalles

Carmen. Estándares de codificación. Manuel Arias Calleja

Carmen. Estándares de codificación. Manuel Arias Calleja Carmen. Estándares de codificación Manuel Arias Calleja II Índice general 1. Estandares de codificación 1 1.1. Nombres de ficheros........................ 1 1.2. Organización de ficheros......................

Más detalles

Programa Java. El lenguaje de programación Java. Comentarios. Programa Java. Palabras reservadas. Identificadores

Programa Java. El lenguaje de programación Java. Comentarios. Programa Java. Palabras reservadas. Identificadores El lenguaje de programación Java Programa Java Un programa Java está formado por un conjunto de clases que interactúan entre sí La clase es la unidad básica de programación La ejecución depende de la clase

Más detalles

Solución al Examen de Prácticas de Programación (Ingeniería Informática)

Solución al Examen de Prácticas de Programación (Ingeniería Informática) Solución al Examen de Prácticas de Programación (Ingeniería Informática) Junio 2006 Parte I. Cuestiones (3 puntos=50% nota del examen) 1) Se desea crear un conjunto de clases para representar en un programa

Más detalles

Programación Orientada a Objetos. Java: Excepciones

Programación Orientada a Objetos. Java: Excepciones Programación Orientada a Objetos Java: Excepciones Eduardo Mosqueira Rey Laboratorio de Investigación y desarrollo en Inteligencia Artificial Departamento de Computación Universidade da Coruña, España

Más detalles

Se guardan en archivos con extencion c y los cabezales con extension h

Se guardan en archivos con extencion c y los cabezales con extension h Se guardan en archivos con extencion c y los cabezales con extension h Tipos de Variables: Tipo Tamaño(bytes) Limite inferior Limite superior char 1 -- -- unsigned char 1 0 255 short int 2-32768 +32767

Más detalles

Fundamentos del Lenguaje de Programación Java

Fundamentos del Lenguaje de Programación Java Fundamentos del Lenguaje de Programación Java M.C. Jorge Eduardo Ibarra Esquer [email protected] El lenguaje Java Estándares de codificación Comentarios Programas con Java Identificadores Palabras clave

Más detalles

11. Algunas clases estándar de Java (II)

11. Algunas clases estándar de Java (II) 122 A. García-Beltrán y J.M. Arranz 11. Algunas clases estándar de Java (II) Objetivos: a) Presentar la clase predefinida en Java para trabajar con arrays b) Interpretar el código fuente de una aplicación

Más detalles

Excepciones. Gonzalo Méndez - Dpto. Ingeniería de Software e Inteligencia Artificial. Excepciones

Excepciones. Gonzalo Méndez - Dpto. Ingeniería de Software e Inteligencia Artificial. Excepciones Programación Orientada a Objetos en Java Curso 2006-2007 Tema 6 Excepciones Gonzalo Méndez Pozo Dpto. de Ingeniería de Software e Inteligencia Artificial Universidad Complutense de Madrid Qué son? Excepciones

Más detalles

Manual del Protocolo XML-RPC de Mensajería Negocios

Manual del Protocolo XML-RPC de Mensajería Negocios Manual del Protocolo XML-RPC de Mensajería Negocios Índice de contenidos 1 INTRODUCCIÓN... 3 2 FUNCIONALIDADES DEL API DE COMUNICACIÓN XML-RPC... 4 2.1 Envío Libre... 4 2.2 Envío a Grupo de Contactos...

Más detalles

Centro de Capacitación en Informática

Centro de Capacitación en Informática Fórmulas y Funciones Las fórmulas constituyen el núcleo de cualquier hoja de cálculo, y por tanto de Excel. Mediante fórmulas, se llevan a cabo todos los cálculos que se necesitan en una hoja de cálculo.

Más detalles

Introducción al lenguaje Java

Introducción al lenguaje Java Tipo de entrega: Fecha límite: Lugar: Introducción al lenguaje Java por grupos de prácticas sesión de laboratorio Atenea Objetivos de la práctica: Escribir aplicaciones simples en Java Utilizar el entorno

Más detalles

Tipos de variables en Visual Basic (integer, single, double, string, object, etc.). Ejemplos. (CU00308A)

Tipos de variables en Visual Basic (integer, single, double, string, object, etc.). Ejemplos. (CU00308A) aprenderaprogramar.com Tipos de variables en Visual Basic (integer, single, double, string, object, etc.). Ejemplos. (CU00308A) Sección: Cursos Categoría: Curso Visual Basic Nivel I Fecha revisión: 2029

Más detalles

Visual Basic 1. Empleo de módulos y Procedimientos. Procedimientos definidos por el usuario

Visual Basic 1. Empleo de módulos y Procedimientos. Procedimientos definidos por el usuario Empleo de módulos y Procedimientos Procedimientos definidos por el usuario Según lo que hemos visto hasta ahora, Visual Basic, almacena el código en módulos. Hay tres clases de módulos: formularios (.frm),

Más detalles

El lenguaje C. #define MAX LINEA 1000 /* maximo tamanio de linea de entrada */

El lenguaje C. #define MAX LINEA 1000 /* maximo tamanio de linea de entrada */ Principios de Programación El lenguaje C 1. Variables locales y globales 1.1. Variables locales Las funciones permiten al programador modularizar un programa. Todas las variables declaradas en las definiciones

Más detalles

Aprendiendo a programar Microcontroladores PIC en Lenguaje C con CCS

Aprendiendo a programar Microcontroladores PIC en Lenguaje C con CCS Aprendiendo a programar Microcontroladores PIC en Lenguaje C con CCS Por Andrés Raúl Bruno Saravia Entrega Nº 5. Cómo declaramos una variable en Lenguaje C? En C siempre se deben declarar las variables.

Más detalles

SISTEMAS DE NUMERACIÓN. Sistema decimal

SISTEMAS DE NUMERACIÓN. Sistema decimal SISTEMAS DE NUMERACIÓN Sistema decimal Desde antiguo el Hombre ha ideado sistemas para numerar objetos, algunos sistemas primitivos han llegado hasta nuestros días, tal es el caso de los "números romanos",

Más detalles

Que es PHP? Que se puede hacer con PHP? Sintaxis del lenguaje. Variables. Operadores básicos. Condicionales. Ciclos.

Que es PHP? Que se puede hacer con PHP? Sintaxis del lenguaje. Variables. Operadores básicos. Condicionales. Ciclos. Que es PHP? Que se puede hacer con PHP? Sintaxis del lenguaje. Variables. Operadores básicos. Condicionales. Ciclos. Qué es PHP? PHP (Hypertext Preprocessor). Es un lenguaje de programación: De código

Más detalles

Introducción al tipo de dato ARRAY

Introducción al tipo de dato ARRAY CONTENIDOS. Introducción al tipo de dato ARRAY. Definición, Características, Declaración, Acceso e Inicialización.. Arrays multidimensionales Definición, Declaración, Acceso e Inicialización. Introducción

Más detalles

Introducción - por qué usarlas?(1)

Introducción - por qué usarlas?(1) Excepciones en Java Introducción - por qué usarlas?(1) En el mundo de la programación hay algo que siempre ocurre: los errores en los programas. Pero qué sucede realmente después de que ha ocurrido el

Más detalles

PL/SQL. Con PL/SQL vamos a poder programar las unidades de programa de la base de datos Oracle:

PL/SQL. Con PL/SQL vamos a poder programar las unidades de programa de la base de datos Oracle: PL/SQL (Procedural Language/Structured Query Language) PL/SQL es el lenguaje de programación que proporciona Oracle para extender el SQL estándar con otro tipo de instrucciones y elementos propios de los

Más detalles

LABORATORIO Nº 2 GUÍA PARA REALIZAR FORMULAS EN EXCEL

LABORATORIO Nº 2 GUÍA PARA REALIZAR FORMULAS EN EXCEL OBJETIVO Mejorar el nivel de comprensión y el manejo de las destrezas del estudiante para utilizar formulas en Microsoft Excel 2010. 1) DEFINICIÓN Una fórmula de Excel es un código especial que introducimos

Más detalles

UNIDAD 2 Configuración y operación de un sistema de cómputo Representación de datos Conceptos El concepto de bit (abreviatura de binary digit) es fundamental para el almacenamiento de datos Puede representarse

Más detalles

Definición de clases: Herencia, polimorfismo, ligadura dinámica

Definición de clases: Herencia, polimorfismo, ligadura dinámica Tema 7 Definición de clases: Herencia, polimorfismo, ligadura dinámica Con alguna frecuencia es necesario definir clases de objetos entre las cuales hay elementos comunes. En una aplicación en la cual

Más detalles

Capítulo 9. Archivos de sintaxis

Capítulo 9. Archivos de sintaxis Capítulo 9 Archivos de sintaxis El SPSS permite generar y editar archivos de texto con sintaxis SPSS, es decir, archivos de texto con instrucciones de programación en un lenguaje propio del SPSS. Esta

Más detalles

Objetivo: Introducción conceptual y aplicación básica de los lenguajes del lado del servidor.

Objetivo: Introducción conceptual y aplicación básica de los lenguajes del lado del servidor. Sesión 03: Lenguajes web del servidor Competencias a Conseguir: - Conocer el entorno de trabajo a nivel de servidores web. - Instalación del localhost (Servidor Local). - Repaso general de PHP y ejercicios

Más detalles

Basic Object Oriented Programming (BOOP) Gramática del Lenguaje. Ever Mitta Flores

Basic Object Oriented Programming (BOOP) Gramática del Lenguaje. Ever Mitta Flores Ever Mitta Flores Índice 1. Clase @Principal...3 2. Comentarios...3 3. Definición de Atributos...3 4. Definición de Métodos...4 5. Declaración de Variables...4 6. Asignación de Valores...5 7. Definición

Más detalles

UNIDADES DE ALMACENAMIENTO DE DATOS

UNIDADES DE ALMACENAMIENTO DE DATOS 1.2 MATÉMATICAS DE REDES 1.2.1 REPRESENTACIÓN BINARIA DE DATOS Los computadores manipulan y almacenan los datos usando interruptores electrónicos que están ENCENDIDOS o APAGADOS. Los computadores sólo

Más detalles

Apuntes de ACCESS. Apuntes de Access. Campos de Búsqueda:

Apuntes de ACCESS. Apuntes de Access. Campos de Búsqueda: Apuntes de ACCESS Campos de Búsqueda: Los campos de búsqueda permiten seleccionar el valor de un campo de una lista desplegable en lugar de tener que escribirlos. El usuario sólo tiene que elegir un valor

Más detalles

VARIABLES, CONSTANTES Y EXPRESIONES ASIGNACIÓN. TIPOS ELEMENTALES. PRECEDENCIA DE LOS ESTRUCTURAS DE CONTROL. CONDICIONAL E

VARIABLES, CONSTANTES Y EXPRESIONES ASIGNACIÓN. TIPOS ELEMENTALES. PRECEDENCIA DE LOS ESTRUCTURAS DE CONTROL. CONDICIONAL E Java Java es un lenguaje de programación presentado en 1995 enfocado a: soportar los fundamentos de la programación orientada a objetos. generar código independiente de la arquitectura de la computadora

Más detalles

Adaptación al NPGC. Introducción. NPGC.doc. Qué cambios hay en el NPGC? Telf.: 93.410.92.92 Fax.: 93.419.86.49 e-mail:atcliente@websie.

Adaptación al NPGC. Introducción. NPGC.doc. Qué cambios hay en el NPGC? Telf.: 93.410.92.92 Fax.: 93.419.86.49 e-mail:atcliente@websie. Adaptación al NPGC Introducción Nexus 620, ya recoge el Nuevo Plan General Contable, que entrará en vigor el 1 de Enero de 2008. Este documento mostrará que debemos hacer a partir de esa fecha, según nuestra

Más detalles

1.00 Clase 3. Tipos de datos en Java

1.00 Clase 3. Tipos de datos en Java 1.00 Clase 3 Tipos de datos básicos en Java, Estructuras de control Tipos de datos en Java 8 tipos de datos primitivos o integrados: - 4 tipos enteros (byte, short, int, long). - 2 tipos de coma flotante

Más detalles

COPIAS DE SEGURIDAD AUTOMÁTICAS DE DIRECCIONES CALLEÇPAÑA

COPIAS DE SEGURIDAD AUTOMÁTICAS DE DIRECCIONES CALLEÇPAÑA COPIAS DE SEGURIDAD AUTOMÁTICAS DE DIRECCIONES CALLEÇPAÑA Autor: Carlos Javier Martín González. Licenciado en Física Teórica por la Universidad Autónoma de Madrid. Analista programador y funcional. Desarrollador

Más detalles

Sintaxis y Convenciones de Java. M. en C. Erika Vilches

Sintaxis y Convenciones de Java. M. en C. Erika Vilches Sintaxis y Convenciones de Java M. en C. Erika Vilches Estructura del Código en Java Hay una clase en un archivo fuente Hay métodos en una clase Hay enunciados en un método Anatomía de una Clase Cuando

Más detalles

ACTIONSCRIPT (AS) Proyectos II. Audiovisuales. Dpto. Escultura. UPV. [sintaxis elemental]

ACTIONSCRIPT (AS) Proyectos II. Audiovisuales. Dpto. Escultura. UPV. [sintaxis elemental] ACTIONSCRIPT (AS) Proyectos II. Audiovisuales. Dpto. Escultura. UPV. [sintaxis elemental] Action script es el lenguaje de programación que lleva incorporado el software de creación multimedia Macromedia

Más detalles

2.1.- EJEMPLO DE UN PROGRAMA FORTRAN

2.1.- EJEMPLO DE UN PROGRAMA FORTRAN 2.1.- EJEMPLO DE UN PROGRAMA FORTRAN Con el presente apartado comenzaremos a conocer cómo se escribe un programa en lenguaje FORTRAN bajo el entorno de programación FORTRAN. En primer lugar conozcamos

Más detalles

PART II: Moviendo al jugador

PART II: Moviendo al jugador UNITY PART II: Moviendo al jugador El movimiento se lo vamos a dar a través de un programa Definición de programa: Un programa es una secuencia de instrucciones, escritas para realizar una tarea específica

Más detalles

Práctica 2 Gráficos Vectoriales con SVG (versión 29.09.14)

Práctica 2 Gráficos Vectoriales con SVG (versión 29.09.14) Práctica 2 Gráficos Vectoriales con SVG (versión 29.09.14) Programación 3 Curso 2011-2012 Departamento de Lenguajes y Sistemas Informáticos Universidad de Alicante 1. Introducción En esta segunda práctica

Más detalles

Java Inicial (20 horas)

Java Inicial (20 horas) Java Inicial (20 horas) 1 Temario 1. Programación Orientada a Objetos 2. Introducción y Sintaxis Java 3. Sentencias Control Flujo 4. POO en Java 5. Relaciones entre Objetos 6. Polimorfismo, abstracción

Más detalles

Capítulo 1 Documentos HTML5

Capítulo 1 Documentos HTML5 Capítulo 1 Documentos HTML5 1.1 Componentes básicos HTML5 provee básicamente tres características: estructura, estilo y funcionalidad. Nunca fue declarado oficialmente pero, incluso cuando algunas APIs

Más detalles

MATERIAL 2 EXCEL 2007

MATERIAL 2 EXCEL 2007 INTRODUCCIÓN A EXCEL 2007 MATERIAL 2 EXCEL 2007 Excel 2007 es una planilla de cálculo, un programa que permite manejar datos de diferente tipo, realizar cálculos, hacer gráficos y tablas; una herramienta

Más detalles

Lenguaje C. Tipos de Datos Simples y Estructuras de Control

Lenguaje C. Tipos de Datos Simples y Estructuras de Control Lenguaje C Tipos de Datos Simples y Estructuras de Control Lenguaje C C es un lenguaje de programación creado en 1972 por Dennis M. Ritchie en los Laboratorios Bell como evolución del anterior lenguaje

Más detalles

Objetos y Clases en Java. ELO-329: Diseño y Programación Orientados a Objetos

Objetos y Clases en Java. ELO-329: Diseño y Programación Orientados a Objetos Objetos y Clases en Java ELO-329: Diseño y Programación Orientados a Objetos 1 Creación de objetos nuevos Se usa el constructor de la clase MiClase a = new MiClase(); Todos los objetos son creados en el

Más detalles

Examen Junio- Grupo A Lunes 17 de Junio - Programación en C++ Pág. 1

Examen Junio- Grupo A Lunes 17 de Junio - Programación en C++ Pág. 1 Examen Junio- Grupo A Lunes 17 de Junio - Programación en C++ Pág. 1 ÍNDICE ÍNDICE... 1 1.1 Ejercicio 1: Máquina Expendedora (3.5 ptos.)... 1 1.2 Ejercicio 2: Clase Circulo (1.0 pto.)... 3 1.3 Ejercicio

Más detalles

INTRODUCCIÓN AL TIPO COMPUESTO CADENA CONTENIDOS

INTRODUCCIÓN AL TIPO COMPUESTO CADENA CONTENIDOS CONTENIDOS 1. Introducción a las cadenas 2. Definición 3. Declaración de cadenas 4. Inicialización de cadenas 5. Escritura y Lectura de datos tipo cadena 6. Funciones de manipulación de cadenas 7. Arrays

Más detalles

SOLUCION EXAMEN junio 2006

SOLUCION EXAMEN junio 2006 SOLUCION EXAMEN junio 2006 1. Explique razonadamente si las siguientes afirmaciones son verdaderas o falsas: I) (1 p) En UNIX únicamente se distinguen dos tipos de procesos: los procesos de usuario y los

Más detalles

Tema 3: Herencia en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

Tema 3: Herencia en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle Tema 3: Herencia en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle Contenido Tipos de herencia Herencia y niveles de visibilidad Herencia y creación Redefinición de métodos Conversión

Más detalles

Examen Septiembre Curso 2001-2002 -- Programación en C++ Pág. 1

Examen Septiembre Curso 2001-2002 -- Programación en C++ Pág. 1 Examen Septiembre Curso 2001-2002 -- Programación en C++ Pág. 1 ÍNDICE ÍNDICE... 1 1.1 Ejercicio 1: Convertidor Dec->Hex y Hex->Dec (5.0 ptos.)... 1 1.1.1 Apartado A (4.0 ptos.)... 1 1.1.2 Apartado B (1.0

Más detalles

La plantilla propone aprovechar esta estructura en común y sólo modificar el contenido del área del documento que sea diferente.

La plantilla propone aprovechar esta estructura en común y sólo modificar el contenido del área del documento que sea diferente. PLANTILLAS EN PHP El concepto de plantilla, es un criterio del desarrollo web que propone optimizar la cantidad de documentos HTML que se usan en el desarrollo de un sitio web. A lo largo de la navegación

Más detalles

Arrays y Cadenas en C

Arrays y Cadenas en C Arrays y Cadenas en C Los arrays son variables estructuradas, donde cada elemento se almacena de forma consecutiva en memoria. Las cadenas de caracteres son declaradas en C como arrays de caracteres y

Más detalles

Anexo B. Comunicaciones entre mc y PC

Anexo B. Comunicaciones entre mc y PC Anexo B Comunicaciones entre mc y PC En este apartado se hará hincapié en los comandos para el manejo del módulo de comunicaciones desde el PC. Conociendo estos comando se podrá realizar una aplicación

Más detalles

❷ Aritmética Binaria Entera

❷ Aritmética Binaria Entera ❷ Una de las principales aplicaciones de la electrónica digital es el diseño de dispositivos capaces de efectuar cálculos aritméticos, ya sea como principal objetivo (calculadoras, computadoras, máquinas

Más detalles

Ejemplos de conversión de reales a enteros

Ejemplos de conversión de reales a enteros Ejemplos de conversión de reales a enteros Con el siguiente programa se pueden apreciar las diferencias entre las cuatro funciones para convertir de reales a enteros: program convertir_real_a_entero print

Más detalles

CONSULTAS CON SQL. 3. Hacer clic sobre el botón Nuevo de la ventana de la base de datos. Aparecerá el siguiente cuadro de diálogo.

CONSULTAS CON SQL. 3. Hacer clic sobre el botón Nuevo de la ventana de la base de datos. Aparecerá el siguiente cuadro de diálogo. CONSULTAS CON SQL 1. Qué es SQL? Debido a la diversidad de lenguajes y de bases de datos existentes, la manera de comunicar entre unos y otras sería realmente complicada a gestionar de no ser por la existencia

Más detalles

TEMA 5. EXCEPCIONES EN JAVA... 1 5.1 DEFINICIÓN DE EXCEPCIONES EN PROGRAMACIÓN... 2 5.2 TIPOS DE EXCEPCIONES / ERRORES Y CÓMO TRATARLOS... 10 5.

TEMA 5. EXCEPCIONES EN JAVA... 1 5.1 DEFINICIÓN DE EXCEPCIONES EN PROGRAMACIÓN... 2 5.2 TIPOS DE EXCEPCIONES / ERRORES Y CÓMO TRATARLOS... 10 5. TEMA 5. EXCEPCIONES EN JAVA... 1 5.1 DEFINICIÓN DE EXCEPCIONES EN PROGRAMACIÓN... 2 5.2 TIPOS DE EXCEPCIONES / ERRORES Y CÓMO TRATARLOS... 10 5.3 TRABAJANDO CON EXCEPCIONES: DECLARACIÓN, CONSTRUCCIÓN,

Más detalles