Lenguaje de Programacin JAVA PROGRAMACION III 4 0

  • Slides: 178
Download presentation
Lenguaje de Programación JAVA PROGRAMACION III (4 -0 -8) Dynadata Copyright, 2014 © Dyna.

Lenguaje de Programación JAVA PROGRAMACION III (4 -0 -8) Dynadata Copyright, 2014 © Dyna. Data S. A. 1/178

Características de JAVA Programa poco voluminoso Garantiza seguridad (protección de la computadora) Independiente del

Características de JAVA Programa poco voluminoso Garantiza seguridad (protección de la computadora) Independiente del tipo Macintosh, UNIX, etc. ) de computadora (PC, Ø Ideal para ejecutar programas en paginas WEB Dynadata Copyright, 2014 © Dyna. Data S. A. 2/178

Características de JAVA Incluye todo lo necesario para programar paginas WEB Genera ejecutables de

Características de JAVA Incluye todo lo necesario para programar paginas WEB Genera ejecutables de tamaño muy pequeño Integra una seguridad muy severa para evitar todo acceso indeseable a la computadora Genera ejecutables independientes de la máquina Orientadocompatibilidad objeto C simplicidad C++ Dynadata Copyright, 2014 © Dyna. Data S. A. JAVA 3/178

Convención de código (notación húngara) En programación, la notación húngara es un sistema usado

Convención de código (notación húngara) En programación, la notación húngara es un sistema usado normalmente para crear los nombres de variables. El nombre de la notación proviene del hecho de que su inventor, Charles Simonyi, nació en Hungría. Dynadata Copyright, 2014 © Dyna. Data S. A. 4

Convención de código (notación húngara) • Los nombres comienzan con mayúscula • Los objetos

Convención de código (notación húngara) • Los nombres comienzan con mayúscula • Los objetos comienzan con minúscula • Las variables comienzan con una letra que indica el tipo Prefijo Significado b Boleano ( b. Flag ) y Byte ( y. Field ) c Char ( c. One. Char ) n Int ( n. Value ) l long ( l. Value ) d double ( d. Value ) rgb Valor de color RGB … Dynadata Copyright, 2014 © Dyna. Data S. A. 5/178

Convención de código (notación húngara) Los miembros de una clase comienzan con m_ int

Convención de código (notación húngara) Los miembros de una clase comienzan con m_ int m_n. Int. Member Las funciones comienzan con una letra minúscula public void a. Func(); Las funciones no son precedidas por ninguna letra de tipo public int some. Other. Function(); Los objetos usan nombres compuestos con mayúsculas char c. One. Char Dynadata Copyright, 2014 © Dyna. Data S. A. 6/178

Convención de código (notación húngara) Las “{“ y “}” deben de usarse después de

Convención de código (notación húngara) Las “{“ y “}” deben de usarse después de cada estructura de control, incluso cuando se trate de una sola instrucción. if ( n. A > n. B ) { n. A = n. B; } Dynadata Copyright, 2014 © Dyna. Data S. A. 7/178

Tipos de Programas JAVA puede producir dos tipos de programas : Un app ,

Tipos de Programas JAVA puede producir dos tipos de programas : Un app , programa autónomo o aplicación JAVA Un “applets” , programa concebido para ejecutarse en una pagina WEB Dynadata Copyright, 2014 © Dyna. Data S. A. 8/178

Declaraciones JAVA es un lenguaje orientado objeto Expresiones Una expresión JAVA puede ser un

Declaraciones JAVA es un lenguaje orientado objeto Expresiones Una expresión JAVA puede ser un comentario, un bloc, una declaración o una expresión. La mayor parte de las instrucciones se terminan con “; ” Dynadata Copyright, 2014 © Dyna. Data S. A. 9/178

Declaraciones Los espacios, tabulaciones ni CR (Carriage Return) no cuentan excepto en medio de

Declaraciones Los espacios, tabulaciones ni CR (Carriage Return) no cuentan excepto en medio de las palabras reservadas La mayor parte de las instrucciones se terminan con “; ” Existen 3 tipos de comentarios // /* /** para documentación del programa Dynadata Copyright, 2014 © Dyna. Data S. A. 10/178

Declaración de Variables Todas las variables deben de ser declaradas antes de ser utilizadas

Declaración de Variables Todas las variables deben de ser declaradas antes de ser utilizadas La declaración de variable esta constituida del tipo, del nombre, del operador de afectación “=“ y del valor de la variable : int n. ASecond = 10; Dynadata Copyright, 2014 © Dyna. Data S. A. 11/178

Variables Intrínsecas Lista de variables intrínsecas JAVA : C++ Tipo Tamaño Valor Inicial boolean

Variables Intrínsecas Lista de variables intrínsecas JAVA : C++ Tipo Tamaño Valor Inicial boolean octet char short int long float double 8 8 16 16 32 64 false 0 ‘x 0’ 0 0. 0 F 0. 0 D Dynadata Copyright, 2014 © Dyna. Data S. A. 12/178

Variables Intrínsecas JAVA define el tamaño de un tipo de variable únicamente para los

Variables Intrínsecas JAVA define el tamaño de un tipo de variable únicamente para los cálculos. ØEl tamaño en memoria puede ser muy diferente que el especificado ØUn compilador puede guardar un short en 32 bits y truncarlo a 16 bits para el calculo. Dynadata Copyright, 2014 © Dyna. Data S. A. 13/178

UNICODE C++ Un carácter esta considerado como un entero a 16 bits. Los caracteres

UNICODE C++ Un carácter esta considerado como un entero a 16 bits. Los caracteres se ajustan a la norma UNICODE En Código ANSI 8 bits ASCII : 0 > 127 ANSI : 128 > 255 Dynadata Copyright, 2014 © Dyna. Data S. A. 14/178

UNICODE En código UNICODE 16 bits cada letra tiene su propio valor. Los caracteres

UNICODE En código UNICODE 16 bits cada letra tiene su propio valor. Los caracteres UNICODE tienen un valor superior a 0 x. C 0. Dynadata Copyright, 2014 © Dyna. Data S. A. 15/178

Las Variables C++ Los nombres de las variables pueden comenzar con : • Una

Las Variables C++ Los nombres de las variables pueden comenzar con : • Una letra del alfabeto a – z ó A - Z • Un guión bajo (Underscore) • El signo dólar $ Los caracteres siguientes pueden incluir números del 0 al 9. Se recomienda no comenzar el nombre de una variable por un guión bajo ni por el signo de $ (reservado para variables sistema) Dynadata Copyright, 2014 © Dyna. Data S. A. 16/178

Las Literales Las literales enteras son números decimales 32 bits con signo. 0 =

Las Literales Las literales enteras son números decimales 32 bits con signo. 0 = octales 0 x, 0 X = hexadecimales Las letras A, B, C, D, E, F pueden ser en mayúscula o minúscula 255, 0377, 0 xff, 0 x. FF, 0 XFF tienen el mismo valor Las literales superiores a 0 x 7 FFFFFF (2 147 483 647 ) son automáticamente de tipo long Dynadata Copyright, 2014 © Dyna. Data S. A. 17/178

Las Literales Una literal precedida de la letra ‘l’ o ‘L’ es de tipo

Las Literales Una literal precedida de la letra ‘l’ o ‘L’ es de tipo long. Una literal con exponente o con punto decimal es de tipo double. 3. 14159 1. 6 E-19 1. 0 La letra ‘F’ o ‘f’ fuerza un valor a ser de tipo float. 3. 14159 F La letra ‘D’ o ‘d’ fuerza un valor a ser de tipo double. Dynadata Copyright, 2014 © Dyna. Data S. A. 18/178

Las Literales Los valores de tipo carácter true y false son verdaderos valores literales

Las Literales Los valores de tipo carácter true y false son verdaderos valores literales y son predefinidos. true y false no son valores numéricos y no pueden ser convertidos en valores enteros. Los caracteres son colocados entre ‘ ‘ ‘ es un espacio Se puede definir un carácter con ‘x. NN’ donde NN es el valor UNICODE: ‘x 20’ es también un espacio. Dynadata Copyright, 2014 © Dyna. Data S. A. 19/178

Las Literales El carácter de control ‘’ Todo carácter precedido de  es un

Las Literales El carácter de control ‘’ Todo carácter precedido de es un carácter de control : n t b ’ ” \ Los literales alfanuméricos están constituidos de todo tipo de caracteres entre “. Los literales alfanuméricos están implementados por la clase String. Dynadata Copyright, 2014 © Dyna. Data S. A. 20/178

Las Literales C++ En JAVA una cadena alfanumérica no es implementada como un arreglo

Las Literales C++ En JAVA una cadena alfanumérica no es implementada como un arreglo de caracteres terminado por un carácter nulo (0) también llamado ASCIIZ. Dynadata Copyright, 2014 © Dyna. Data S. A. 21/178

La Promoción La promoción (casting) permite convertir un tipo en otro. La promoción es

La Promoción La promoción (casting) permite convertir un tipo en otro. La promoción es la conversión explicita de un tipo a otro. float f. Value = 3. 14159; int n. Value = (int)f. Value; JAVA realiza la promoción explicita de un valor de tamaño pequeño hacia uno mas grande. long l. Value = n. Value; int l. Value = f. Value; Dynadata Copyright, 2014 © Dyna. Data S. A. // Error 22/178

Los Operadores Jerarquía de los operadores JAVA : Importancia 1 2 3 4 5

Los Operadores Jerarquía de los operadores JAVA : Importancia 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Operador []() ++ -- ! ~ instanceof */% +<< >> >>> < > <= >= == != & ^ ¦ && ¦¦ ? : = op= , Dynadata Copyright, 2014 © Dyna. Data S. A. 23/178

Los Operadores sobre Enteros Los operadores sobre enteros pueden ser de 2 tipos :

Los Operadores sobre Enteros Los operadores sobre enteros pueden ser de 2 tipos : Unarios y Binarios. Los operadores unarios no tratan datos mas pequeños que un int. Existe también un operador ternario ! Dynadata Copyright, 2014 © Dyna. Data S. A. 24/178

Los Operadores sobre Enteros ~ ++ -- Negación complemento a 1 (bit) post y

Los Operadores sobre Enteros ~ ++ -- Negación complemento a 1 (bit) post y pre incremento post y pre decremento Dynadata Copyright, 2014 © Dyna. Data S. A. 25/178

Los Operadores sobre Enteros Los operadores binarios implican 2 argumentos. JAVA convierte la expresión

Los Operadores sobre Enteros Los operadores binarios implican 2 argumentos. JAVA convierte la expresión al tipo mayor. Byte b 1 = 2; Byte b 2 = 3; Byte B 3 = b 1 * b 2; + * / % // Error Suma resta multiplicación división modulo Dynadata Copyright, 2014 © Dyna. Data S. A. 26/178

Los Operadores Binarios & ¦ ^ << >> > < >= <= == !=

Los Operadores Binarios & ¦ ^ << >> > < >= <= == != C++ AND OR NOR Left Shift Right Shift Signed Right Shift Not Signed retornan un valor boleano Los operadores de comparación no retornan ningún valor entero ! Dynadata Copyright, 2014 © Dyna. Data S. A. 27/178

Los Operadores con Valores de Punto Flotante ++ % incrementa 1. 0 modulo ?

Los Operadores con Valores de Punto Flotante ++ % incrementa 1. 0 modulo ? Norma del IEEE : ninguna excepción es generada a partir de un calculo entre valores de punto flotante. 1. 0 / 0. 0 genera +Inf (infinidad positiva) Sqr(-1. 0) genera Not a Number (Na. N) Na. N * x (= 0 si x = 0) (= Inf si x = Inf) si no Na. N Dynadata Copyright, 2014 © Dyna. Data S. A. 28/178

Los Operadores sobre Valores Boléanos C++ Dynadata Copyright, 2014 © Dyna. Data S. A.

Los Operadores sobre Valores Boléanos C++ Dynadata Copyright, 2014 © Dyna. Data S. A. 29/178

Los Operadores sobre Cadenas Alfanuméricas El único operador definido para una cadena alfanumérica aparte

Los Operadores sobre Cadenas Alfanuméricas El único operador definido para una cadena alfanumérica aparte del operador new es el operador +. El operador + puede convertir un argumento en String. int i = 1; int j = 2; System. out. println(“i = “ + i + “, j = “ + j + ’n’); Dynadata Copyright, 2014 © Dyna. Data S. A. 30/178

Los Operadores Especiales Combinación de un operador binario con el de asignación : a

Los Operadores Especiales Combinación de un operador binario con el de asignación : a op= b; // equivalente a : a = a op b; Separador de expresiones: “, ” (solo para la instrucción for) for (i = 0, j = 0 ; i < j; i++, j--) La evaluación es realizada de derecha a izquierda. Dynadata Copyright, 2014 © Dyna. Data S. A. 31/178

Los Operadores Ternarios (booexp) ? Expr 1 : expr 2, Int n. Value =

Los Operadores Ternarios (booexp) ? Expr 1 : expr 2, Int n. Value = (n. Var 1 > n. Var 2) ? n. Var 1 * n. Var 2 : n. Var 1 + n. Var 2; Dynadata Copyright, 2014 © Dyna. Data S. A. 32/178

Control de Flujo • La sentencia if • La sentencia for • La sentencia

Control de Flujo • La sentencia if • La sentencia for • La sentencia while • La sentencia do … while • La sentencia break • La sentencia continue C++ Una variable declarada en JAVA en un bloc no es visible del exterior después de la salida del bloc. Dynadata Copyright, 2014 © Dyna. Data S. A. 33/178

LABORATORIO 1 Escribir un programa que calcule los números primos comprendidos entre 3 y

LABORATORIO 1 Escribir un programa que calcule los números primos comprendidos entre 3 y 100. Los números primos tienen la siguiente característica: un número primo es solamente divisible por sí mismo y por la unidad, por tanto, un número primo no puede ser par excepto el 2. Para saber si un número impar es primo, dividimos dicho número por todos los números impares comprendidos entre 3 y la mitad de dicho número. Por ejemplo, para saber si 13 es un número primo basta dividirlo por 3, y 5. Para saber si 25 es número primo se divide entre 3, 5, 7, 9, y 11. Si el resto de la división (operación módulo %) es cero, el número no es primo. Dynadata Copyright, 2014 © Dyna. Data S. A. 34/178

Los Números Primos public class Primos. App { public static void main(String[] args) {

Los Números Primos public class Primos. App { public static void main(String[] args) { boolean b. Primo; System. out. println("Números primos comprendidos entre 3 y 100"); for(int numero=3; numero<100; numero+=2) { b. Primo=true; for(int i=3; i<numero/2; i+=2) { if(numero%i==0) { b. Primo=false; break; } } if(b. Primo) { System. out. print(numero+" - "); } } Dynadata Copyright, 2014 © Dyna. Data S. A. 35/178

Definición de una Clase Una clase es la única posibilidad que ofrece JAVA de

Definición de una Clase Una clase es la única posibilidad que ofrece JAVA de crear un nuevo tipo: JAVA no tiene equivalente de typedef, struct o enum. class My. Class { …………. . } Dynadata Copyright, 2014 © Dyna. Data S. A. 36/178

Definición de una Clase Los miembros de una clase son sus datos que pertenecen

Definición de una Clase Los miembros de una clase son sus datos que pertenecen a la clase. Los miembros son variables que siguen la notación Húngara: int m_n. Value; Dynadata Copyright, 2014 © Dyna. Data S. A. 37/178

Definición de una Clase Un miembro de una clase puede también ser una función.

Definición de una Clase Un miembro de una clase puede también ser una función. Las funciones son llamadas Métodos de la clase. La definición de una función comienza por el tipo (int, void, etc) de valor que regresa la función. Dynadata Copyright, 2014 © Dyna. Data S. A. 38/178

Definición de una Clase El nombre de una función sigue la notación Húngara sin

Definición de una Clase El nombre de una función sigue la notación Húngara sin el prefijo de tipo. Una función tiene una lista de parámetros entre paréntesis. Si la función no tiene paréntesis, la lista debe ser vacía. Dynadata Copyright, 2014 © Dyna. Data S. A. 39/178

Definición de una Clase Los métodos en JAVA son definidos e implementados al interior

Definición de una Clase Los métodos en JAVA son definidos e implementados al interior de la clase. Una clase describe un tipo de elemento. Un objeto es una instancia de una clase. Se accede a los miembros de un objeto a través del operador “. ” Dynadata Copyright, 2014 © Dyna. Data S. A. 40/178

La Sobrecarga de una Función El nombre de una función ( método) comprende la

La Sobrecarga de una Función El nombre de una función ( método) comprende la lista de parámetros. Una clase puede tener 2 funciones con el mismo nombre si los parámetros son diferentes. Dynadata Copyright, 2014 © Dyna. Data S. A. 41/178

La Sobrecarga de una Función El nombre de una función esta circunscrita a la

La Sobrecarga de una Función El nombre de una función esta circunscrita a la clase. 2 clases pueden tener la misma función … Como es posible ignorar le valor de retorno de una función, el valor de retorno es ignorado para el nombre de una función. Dynadata Copyright, 2014 © Dyna. Data S. A. 42/178

Los Miembros de una Clase Los miembros de una clase son propiedades compartidas por

Los Miembros de una Clase Los miembros de una clase son propiedades compartidas por todas las instancias de la misma clase. Los miembros de clase son definidos por la palabra clave static float m_f. Rate; Dynadata Copyright, 2014 © Dyna. Data S. A. 43/178

Los Miembros de una Clase Los miembros de clase son llamados miembros estáticos. Los

Los Miembros de una Clase Los miembros de clase son llamados miembros estáticos. Los miembros de una clase no compartidos se llaman miembros del objeto. Los miembros de los objetos son llamados también miembros no estáticos. Dynadata Copyright, 2014 © Dyna. Data S. A. 44/178

Los Métodos (funciones) Estáticos Los métodos de una clase también pueden ser estáticos. Class

Los Métodos (funciones) Estáticos Los métodos de una clase también pueden ser estáticos. Class Bank. Account { static float m_f. Rate; static float Rate() { return m_f. Rate; } } Float f. Taux = Bank. Account. Rate(); Los métodos estáticos son visibles por todos los objetos. Dynadata Copyright, 2014 © Dyna. Data S. A. 45/178

Los Miembros Finales El valor de los miembros finales no puede ser modificado. Class

Los Miembros Finales El valor de los miembros finales no puede ser modificado. Class Bank. Account { final int m_n_ITV_Year. Creation = 1957; m_n_ITV_Year. Creation++; // ERROR } C++ En C++ el equivalente es “const” Dynadata Copyright, 2014 © Dyna. Data S. A. 46/178

Los Miembros Finales y Estáticos El valor de los miembros puede ser final y

Los Miembros Finales y Estáticos El valor de los miembros puede ser final y estático. Class Bank. Account { final static int m_n_ITV_Year. Creation = 1957; m_n_ITV_Year. Creation++; // ERROR } Dynadata Copyright, 2014 © Dyna. Data S. A. 47/178

Los Miembros Privados, Publicos y Amigables Los miembros de una clase pueden ser de

Los Miembros Privados, Publicos y Amigables Los miembros de una clase pueden ser de tipo : • default : • public : • private : • protected : accesibles a todos en el mismo archivo (friendly) accesibles a todos accesible dentro de la clase misma. private int m_n. Channel; Dynadata Copyright, 2014 © Dyna. Data S. A. 48/178

Las Clases Publicas y Amigables Las clases pueden ser de tipo : • friendly

Las Clases Publicas y Amigables Las clases pueden ser de tipo : • friendly • public : el archivo debe de llevar el mismo nombre … Una clase no puede ser private. Dynadata Copyright, 2014 © Dyna. Data S. A. 49/178

Las Referencias En JAVA hay 2 tipos de objetos: • Objeto de clase •

Las Referencias En JAVA hay 2 tipos de objetos: • Objeto de clase • Objeto intrínseco My. Class my. Obj = new My. Class(); // Objeto de clase int m. My. Int; // Objeto intrínseco Dynadata Copyright, 2014 © Dyna. Data S. A. 50/178

Las Referencias En JAVA la declaración de un objeto de clase no instancia el

Las Referencias En JAVA la declaración de un objeto de clase no instancia el objeto. Únicamente crea una referencia a ese tipo de objeto. My. Class my. Obj; // Referencia a un objeto de clase My. Class Una referencia debe de ser inicializada antes de usarla : My. Obj = null; Una referencia puede referenciar un objeto de clase : my. Obj = new My. Class; Dynadata Copyright, 2014 © Dyna. Data S. A. 51/178

Las Referencias Los objetos de clase se alojan en la zona de memoria llamada

Las Referencias Los objetos de clase se alojan en la zona de memoria llamada Heap. 2 referencias pueden referenciar al mismo objeto : My. Class my. Obj 1 = new My. Class; my. Obj 2 = my. Obj 1; Una referencia puede ser redirigida : My. Class my. Obj 1 = new My. Class; My. Class my. Obj 2 = new my. Obj 2 = my. Obj 1; My. Class; Dynadata Copyright, 2014 © Dyna. Data S. A. 52/178

Las Referencias Las funciones pasan los objetos de clase por referencia y los objetos

Las Referencias Las funciones pasan los objetos de clase por referencia y los objetos intrínsecos por valor. Se utilizan los paquetes de clases para pasar objetos intrínsecos por referencia, utilizando una clase por cada tipo intrínseco (int, short, etc. ). Dynadata Copyright, 2014 © Dyna. Data S. A. 53/178

LABORATORIO 2 Las Listas Ligadas Una lista ligada es una estructura de datos que

LABORATORIO 2 Las Listas Ligadas Una lista ligada es una estructura de datos que contiene un nombre variable de objetos (nodos). Cada objeto mantiene una referencia al objeto siguiente en la lista. El ultimo objeto no mantiene ninguna referencia (null). Dos miembros especiales (nodos), la cabeza (head) y la cola (tail) se refieren al primer y al ultimo de los nodos. Dynadata Copyright, 2014 © Dyna. Data S. A. 54/178

head Las Listas Ligadas m_next m_data Data m_next m_data Dynadata Copyright, 2014 © Dyna.

head Las Listas Ligadas m_next m_data Data m_next m_data Dynadata Copyright, 2014 © Dyna. Data S. A. tail m_next m_data Data 55/178

Recolector de Basura (Garbage Collector) Un objeto que no es destruido crea hoyos de

Recolector de Basura (Garbage Collector) Un objeto que no es destruido crea hoyos de memoria (memory leaks). En JAVA un objeto mantiene un contador de referencias. Cada vez que un objeto es referenciado el contador se incrementa de 1. Dynadata Copyright, 2014 © Dyna. Data S. A. 56/178

Recolector de Basura (Garbage Collector) Cada vez que una referencia es destruida, el contador

Recolector de Basura (Garbage Collector) Cada vez que una referencia es destruida, el contador del objeto referenciado se decrementa de 1. El objeto puede ser destruido por el Recolector de Basura cuando el contador del objeto es 0. Dynadata Copyright, 2014 © Dyna. Data S. A. 57/178

Recolector de Basura (Garbage Collector) El Recolector de Basura se ejecuta cuando : 1.

Recolector de Basura (Garbage Collector) El Recolector de Basura se ejecuta cuando : 1. Cada vez que el sistema necesita mas memoria 2. Cada vez que el programa ejecuta la función System. gc. 3. Cada vez que el sistema tiene tiempo (ocioso) Dynadata Copyright, 2014 © Dyna. Data S. A. 58/178

Referencias de Arreglos Las declaraciones siguientes declara una referencia a un arreglo : int

Referencias de Arreglos Las declaraciones siguientes declara una referencia a un arreglo : int n. Array [ ]; int [ ] n. Array; // sin dimensiones n. Array = new int [10]; int n. Array [ ] = {0, 2, 25, 56}; // inicialización a la declaración // crea implícitamente un objeto String System. out. println(“Hello World”); static public void main (String [ ] args ) // crea una referencia … Dynadata Copyright, 2014 © Dyna. Data S. A. 59/178

Referencias de Arreglos JAVA verifica la validez del índice de un arreglo: C++ int

Referencias de Arreglos JAVA verifica la validez del índice de un arreglo: C++ int [ ] n. Array; n. Array = new int [10]; n. Array [25] = 2; // ERROR Tamaño de un arreglo : Int n. Lenght = n. Array. length; Dynadata Copyright, 2014 © Dyna. Data S. A. 60/178

Referencias de Arreglos Múltiples referencias a un arreglo. int [ ] n. Array =

Referencias de Arreglos Múltiples referencias a un arreglo. int [ ] n. Array = new int [10]; Int [ ] n. Alias; n. Alias = n. Array; if (n. Alias = = n. Array ) { } n. Array [ 5 ] = 450: // n. Alias[ 5 ] == 450 también Dynadata Copyright, 2014 © Dyna. Data S. A. 61/178

Referencias de Arreglos Ejemplos de declaración de arreglos: int A[ ]; int A[10]; int[

Referencias de Arreglos Ejemplos de declaración de arreglos: int A[ ]; int A[10]; int[ ] A; int A, B[ ]; int[ ] A, B; String S[ ]; S[1] = "" // A es un arreglo de enteros // error, el tamaño no va aquí // A es un arreglo de enteros // A es un entero, B un arreglo // A y B son arreglos // S es un arreglo de strings // error, el arreglo no ha sido creado Dynadata Copyright, 2014 © Dyna. Data S. A. 62/178

Referencias de Arreglos La instrucción siguiente crea un arreglo de 10 referencias de objeto

Referencias de Arreglos La instrucción siguiente crea un arreglo de 10 referencias de objeto TV : TV [ ] tv. Array = new TV [10]; // cada referencia vale null Para crear los objetos : for (int i=0; i<10; i++ ) { tv. Array [ i ] = new TV( ); } // crea los objetos Dynadata Copyright, 2014 © Dyna. Data S. A. 63/178

Arreglos Multidimensionales JAVA no acepta arreglos multidimensionales pero acepta arreglos de arreglos. TV [

Arreglos Multidimensionales JAVA no acepta arreglos multidimensionales pero acepta arreglos de arreglos. TV [ ] tv. Matrix = new TV [2] [ ]; for (int i=0; i<2; i++) { tv. Matrix [i] = new TV [3] ; for (int j=0; j< 3; j++) { tv. Matrix [ i ] [ j ] = new TV ( ); } } El tamaño de cada columna puede ser diferente. Dynadata Copyright, 2014 © Dyna. Data S. A. 64/178

Arreglos Multidimensionales Si todas las columnas son iguales : TV [ ] tv. Matrix

Arreglos Multidimensionales Si todas las columnas son iguales : TV [ ] tv. Matrix = new TV [2] [ 3 ]; for (int i=0; i<2; i++) { for (int j=0; j< 3; j++) { tv. Matrix [ i ] [ j ] = new TV ( ); } } Dynadata Copyright, 2014 © Dyna. Data S. A. 65/178

Los Arreglos son Clases En JAVA por cada clase, incluidas las clases que uno

Los Arreglos son Clases En JAVA por cada clase, incluidas las clases que uno crea, JAVA crea una clase “arreglo” asociada. Como los arreglos son una clase, es posible utilizar las funciones miembro de las clases como por ejemplo la función length. Dynadata Copyright, 2014 © Dyna. Data S. A. 66/178

Los Constructores de Objetos El constructor es una fusión de objetos que JAVA llama

Los Constructores de Objetos El constructor es una fusión de objetos que JAVA llama a la creación de un objeto. Si un objeto no implementa una función “Constructor”, JAVA ejecuta una que inicializa las variables. El nombre de un constructor es el mismo de la clase. Dynadata Copyright, 2014 © Dyna. Data S. A. 67/178

Los Constructores de Objetos Un constructor no tiene tipo de regreso. Un constructor debe

Los Constructores de Objetos Un constructor no tiene tipo de regreso. Un constructor debe de ser de tipo public. Un constructor solo se invoca por la función new. Dynadata Copyright, 2014 © Dyna. Data S. A. 68/178

Los Constructores con Argumentos Un constructor puede tener argumentos. Si una clase define un

Los Constructores con Argumentos Un constructor puede tener argumentos. Si una clase define un constructor (con o sin argumentos ) JAVA ya no proporciona un constructor C++ por default : class TV { TV (int n. Channel) { } TV n. TV = new TV(); // Error } Dynadata Copyright, 2014 © Dyna. Data S. A. 69/178

Constructores Múltiples Una clase puede tener n constructores, pero todos con parámetros diferentes. Dynadata

Constructores Múltiples Una clase puede tener n constructores, pero todos con parámetros diferentes. Dynadata Copyright, 2014 © Dyna. Data S. A. 70/178

Constructores de Copia En JAVA no se puede copiar un objeto directamente : C++

Constructores de Copia En JAVA no se puede copiar un objeto directamente : C++ TV TVMaster = new TV(); TV TVObject; TVObject = TVMaster; // copia una referencia no un objeto Dynadata Copyright, 2014 © Dyna. Data S. A. 71/178

Constructores de Copia El constructor de copia presenta la sintaxis siguiente : X(X) Es

Constructores de Copia El constructor de copia presenta la sintaxis siguiente : X(X) Es decir que lleva como argumento una referencia al objeto a copiar: TV TVOriginal = new TV(), TV TVCopy = new TV (TVOriginal); Dynadata Copyright, 2014 © Dyna. Data S. A. 72/178

Constructores de Copia El constructor de copia usa el objeto fuente pasado como parámetro

Constructores de Copia El constructor de copia usa el objeto fuente pasado como parámetro para inicializar los objetos internos. Dynadata Copyright, 2014 © Dyna. Data S. A. 73/178

Constructores de Copia Un constructor puede invocar otro constructor de la misma clase. TV

Constructores de Copia Un constructor puede invocar otro constructor de la misma clase. TV (int n. Channel ) { } // constructor complejo TV () { // constructor simple this ( 0 ); // invoca el constructor complejo } Dynadata Copyright, 2014 © Dyna. Data S. A. 74/178

Las Variables Estáticas JAVA ejecuta la inicialización de las variables estáticas antes de invocar

Las Variables Estáticas JAVA ejecuta la inicialización de las variables estáticas antes de invocar el constructor. Class TV { static private int m_n. Tab = 1000; … } Las variables estáticas deben de ser definidas en la clase misma. Dynadata Copyright, 2014 © Dyna. Data S. A. 75/178

Los Inicializadores Estáticos Los Inicializadores estáticos permiten ejecutar un bloque de código únicamente cuando

Los Inicializadores Estáticos Los Inicializadores estáticos permiten ejecutar un bloque de código únicamente cuando la clase es creada por la primera vez : Class TV { static channel [ ] m_channel = new Channel [64]; … static { for (int i=0; i<64; i++) { m_channel [ i ] = new Channel ( i ); } } } Dynadata Copyright, 2014 © Dyna. Data S. A. 76/178

Los Finalizadores (finalizer) La función finalize es llamada antes de que un C++ objeto

Los Finalizadores (finalizer) La función finalize es llamada antes de que un C++ objeto no sea destruido por el recolector de basura …. El finalizador debe de ser utilizado con prudencia. Dynadata Copyright, 2014 © Dyna. Data S. A. 77/178

La Herencia Los métodos y los miembros que posee una clase define el objeto

La Herencia Los métodos y los miembros que posee una clase define el objeto a la cual pertenece. class B extends A { } Los objetos de la clase B también pertenecen a la clase A Los objetos de la clase B posee además otros métodos y otros miembros que no posee la clase A. Dynadata Copyright, 2014 © Dyna. Data S. A. 78/178

La Herencia Object A C B D Se dice que B es una subclase

La Herencia Object A C B D Se dice que B es una subclase de A y que A es la clase de base de B. Todo el código que se haya escrito para objetos de la clase A también funcionara con objetos de la clase B. Dynadata Copyright, 2014 © Dyna. Data S. A. 79/178

La Proyección Una referencia a la clase A también puede contener referencias a objetos

La Proyección Una referencia a la clase A también puede contener referencias a objetos de la clase B. A esta característica se le llama proyección. A a; a = new B( ); Se dice que A es el tipo estático de la referencia a y que B es el tipo dinámico de a. El tipo estático se determina a la compilación y el dinámico a la ejecución y puede cambiar. Dynadata Copyright, 2014 © Dyna. Data S. A. 80/178

Los Tipos Estáticos y Dinámicos JAVA solo permite invocar los métodos y acceder las

Los Tipos Estáticos y Dinámicos JAVA solo permite invocar los métodos y acceder las variables conocidas para el tipo estático de una referencia. A a; a = new B( ); a. func_a( ); a. func_b ( ) ; // OK // Error si la función func_b no esta definida para A Dynadata Copyright, 2014 © Dyna. Data S. A. 81/178

Los Tipos Estáticos y Dinámicos JAVA solo permite asignar una referencia si el objeto

Los Tipos Estáticos y Dinámicos JAVA solo permite asignar una referencia si el objeto es del mismo tipo o de una clase derivada. B b = new A ( ); A a = new B ( ); B b = a; // Error // OK // Error Dynadata Copyright, 2014 © Dyna. Data S. A. 82/178

La Promoción Una referencia se puede convertir en otra mediante la Promoción (casting). A

La Promoción Una referencia se puede convertir en otra mediante la Promoción (casting). A a = new B ( ); B b = (B) a; b. func_b ( ) ; ( ( B ) a ). func_b ( ) ; // OK No todo objeto se puede convertir … A a = new A ( ); B b = ( B ) a; // OK compilación // Error runtime (excepción) Dynadata Copyright, 2014 © Dyna. Data S. A. 83/178

El Operador instanceof El operador instanceof permite saber si una referencia pertenece a una

El Operador instanceof El operador instanceof permite saber si una referencia pertenece a una clase. If ( obj instanceof A ) { A a = (A) obj; } Los objetos de la clase B también son instancias de la clase A : Object obj = new B ( ); If ( obj instanceof A ) { A a = (A)Obj; } Dynadata Copyright, 2014 © Dyna. Data S. A. 84/178

Los Constructores de una Subclase Los constructores no se heredan. El constructor de la

Los Constructores de una Subclase Los constructores no se heredan. El constructor de la clase de base se puede invocar con super : Class B extends A { B(int nx, int ny) ( super(nx, ny); … …. ) } Dynadata Copyright, 2014 © Dyna. Data S. A. 85/178

Los Constructores de una Subclase La invocación al constructor de base siempre debe de

Los Constructores de una Subclase La invocación al constructor de base siempre debe de ser la primera instrucción del constructor de la case derivada. Dynadata Copyright, 2014 © Dyna. Data S. A. 86/178

La Redefinición de Métodos Una clase derivada puede redefinir los métodos de las clases

La Redefinición de Métodos Una clase derivada puede redefinir los métodos de las clases de base. El numero y tipo de los parámetros del método redefinido debe coincidir exactamente con los del método original de lo contrario se define un nuevo método. Dynadata Copyright, 2014 © Dyna. Data S. A. 87/178

El Enlace Dinámico El enlace dinámico permite a una referencia ejecutar el método redefinido

El Enlace Dinámico El enlace dinámico permite a una referencia ejecutar el método redefinido por el tipo dinámico. A a = new A( ); a. Print(); B b = new B( ); A a = b; a. Print(); Dynadata Copyright, 2014 © Dyna. Data S. A. // Print función de A // Print función de B 88/178

Clases y Métodos Abstractos Una clase abstracta es una clase que se introduce solo

Clases y Métodos Abstractos Una clase abstracta es una clase que se introduce solo para que se deriven nuevas clases de ella. Un método abstracto es un método que se introduce para que sea redefinido en una clase derivada. abstract class Graph. Obj { fn 1( ) { …} abstract void Paint (Graphics g); // Abstracto abstract void Move (int n. X, int n. Y); // Abstracto } Dynadata Copyright, 2014 © Dyna. Data S. A. 89/178

Clases y Métodos Abstractos No se puede definir un método abstracto en una clase

Clases y Métodos Abstractos No se puede definir un método abstracto en una clase concreta. Una clase que deriva una clase abstracta, no puede ser concreta que si redefine todos los métodos abstractos. Una clase concreta no puede heredar de un método abstracto. Dynadata Copyright, 2014 © Dyna. Data S. A. 90/178

Clases y Métodos Abstractos Graph. Obj go = new Graph. Obj ( ); //

Clases y Métodos Abstractos Graph. Obj go = new Graph. Obj ( ); // Error A es abstracto La clase derivada puede ser instanciada : Class Line extends Graph. Obj { void Paint (Graphics g) {…} void Move (int n. X, int n. Y) {… } } Line Ln = new Line ( ); Dynadata Copyright, 2014 © Dyna. Data S. A. // OK 91/178

Clases y Métodos Abstractos La palabra clave super puede ser utilizada para llamar funciones

Clases y Métodos Abstractos La palabra clave super puede ser utilizada para llamar funciones de la clase de base : Class Line extends Graph. Obj { void Paint (Graphics g) { super Paint (g); } void Move (int n. X, int n. Y) {… } } Dynadata Copyright, 2014 © Dyna. Data S. A. 92/178

Clases, Métodos y Campos Finales Una clase final es una clase que no se

Clases, Métodos y Campos Finales Una clase final es una clase que no se puede derivar. final class B extends A { … } class C extends B { } Dynadata Copyright, 2014 © Dyna. Data S. A. // Error 93

Clases, Métodos y Campos Finales Un método final es un método que no se

Clases, Métodos y Campos Finales Un método final es un método que no se puede redefinir. final void Move (int n. X, int n. Y) { … } Todo método private es un método final. Dynadata Copyright, 2014 © Dyna. Data S. A. 94

Clases, Métodos y Campos Finales Un miembro final es un miembro al que no

Clases, Métodos y Campos Finales Un miembro final es un miembro al que no se puede asignar un valor. La variable se inicializa durante su declaración y luego no se puede cambiar. class Bank. Account { final int m_n_ITV_Year. Creation = 1957; m_n_ITV_Year. Creation++; // ERROR } Dynadata Copyright, 2014 © Dyna. Data S. A. 95

Las Interfaces Una interfaz es una colección de métodos abstractos. Una interfaz puede ser

Las Interfaces Una interfaz es una colección de métodos abstractos. Una interfaz puede ser publica o privada. Todos los métodos de una interfaz son públicos y abstractos. Los miembros de una interfaz son implícitamente finales, públicos y estáticos (constantes). Dynadata Copyright, 2014 © Dyna. Data S. A. 96

Las Interfaces Una interfaz permite describir un conjunto de capacidades que debe implementar una

Las Interfaces Una interfaz permite describir un conjunto de capacidades que debe implementar una clase. interface Cuenta. Bancaria { int m_f. Saldo; void Deposito( ); void Retiro( ); float f. Saldo( ); } Dynadata Copyright, 2014 © Dyna. Data S. A. 97

Las Interfaces Una clase hereda de una interfaz con la palabra clave implements. class

Las Interfaces Una clase hereda de una interfaz con la palabra clave implements. class Ciudadano implements Humano Toda clase que implemente una interfaz debe redefinir todos los métodos abstractos. Dynadata Copyright, 2014 © Dyna. Data S. A. 98

Las Interfaces Una clase que implementa una interfaz no hereda nada. Una clase que

Las Interfaces Una clase que implementa una interfaz no hereda nada. Una clase que implementa una interfaz y que no redefina todos los métodos abstractos sigue siendo abstracta y toda clase que la derive de ella seguirá siendo abstracta hasta que todos los métodos abstractos hayan sido redefinidos. Dynadata Copyright, 2014 © Dyna. Data S. A. 99

La Herencia Múltiple JAVA no soporta la herencia múltiple. Una clase JAVA no puede

La Herencia Múltiple JAVA no soporta la herencia múltiple. Una clase JAVA no puede extender mas de una clase. Las interfaces permiten heredar de 2 clases a la vez. class Derechoabiente extends Ciudadano implements Cuenta. Bancaria { … } Dynadata Copyright, 2014 © Dyna. Data S. A. 100

Los Paquetes Un paquete (Package) es un conjunto de clases. Los paquetes no tienen

Los Paquetes Un paquete (Package) es un conjunto de clases. Los paquetes no tienen necesariamente alguna relación de jerarquía entre clases ( clase – subclase). Los miembros declarados friendly no son visibles que por las clases del mismo paquete. Dynadata Copyright, 2014 © Dyna. Data S. A. 101

Los Paquetes Toda clase pertenece obligatoriamente a un paquete. La clase es añadida al

Los Paquetes Toda clase pertenece obligatoriamente a un paquete. La clase es añadida al paquete al momento de su compilación. Un paquete se declara con la palabra clave package mamiferos; public class Ballena { …. } Dynadata Copyright, 2014 © Dyna. Data S. A. 102

Los Paquetes Si la palabra package esta presente, debe ser la primera línea útil

Los Paquetes Si la palabra package esta presente, debe ser la primera línea útil del archivo fuente y solo puede haber una declaración de paquete por archivo. Si ningún paquete esta indicado, la clase es añadida al paquete anónimo, conocido por el nombre unnamed. Un paquete puede acceder a las clases de otro paquete precediendo el nombre de la clase por el nombre del paquete. Dynadata Copyright, 2014 © Dyna. Data S. A. 103

Los Paquetes El compilador JAVA requiere que todas las clases publicas sean declaradas en

Los Paquetes El compilador JAVA requiere que todas las clases publicas sean declaradas en archivos separados. Las clases no publicas pueden ser colocadas en el mismo archivo fuente. Dynadata Copyright, 2014 © Dyna. Data S. A. 104

La Jerarquía des Paquetes Los paquetes VAJA pueden organizarse jerárquicamente separando los nombres de

La Jerarquía des Paquetes Los paquetes VAJA pueden organizarse jerárquicamente separando los nombres de los paquetes por puntos : package animales. mamiferos. marinos; public class Ballena { int Get. Size( ); } Dynadata Copyright, 2014 © Dyna. Data S. A. 105

La Jerarquía des Paquetes Una clase puede acceder a otra clase situada en otro

La Jerarquía des Paquetes Una clase puede acceder a otra clase situada en otro paquete por su nombre completo que incluye el nombre del paquete : public static void main(String [ ] s ) { int n. Size = animales. mamiferos. marinos. Ballena. Get. Size( ); } Dynadata Copyright, 2014 © Dyna. Data S. A. 106

La Importación de Paquetes Una clase puede ser importada al interior de un paquete

La Importación de Paquetes Una clase puede ser importada al interior de un paquete con la palabra clave import animales. mamiferos. marinos. Ballena; public static void main(String [ ] s ) { int n. Size = Ballena. Get. Size( ); } Una clase importada puede invocarse por su nombre sin el prefijo del paquete. Dynadata Copyright, 2014 © Dyna. Data S. A. 107

La Importación de Paquetes La palabra import debe seguir la instrucción de package pero

La Importación de Paquetes La palabra import debe seguir la instrucción de package pero debe estar antes de las otras líneas de código. Si varias clases en paquetes diferentes llevan el mismo nombre, es necesario utilizar el nombre completo. Un “*” permite importar todas las clases de un paquete. Import java. io. *; Dynadata Copyright, 2014 © Dyna. Data S. A. 108

La Importación de Paquetes La importación de un paquete no importa los paquetes incluidos

La Importación de Paquetes La importación de un paquete no importa los paquetes incluidos por ese paquete. El paquete java. lang es automáticamente importado por todos los paquetes. Dynadata Copyright, 2014 © Dyna. Data S. A. 109

Los Paquetes y los Archivos Los paquetes permiten hacer una abstracción del sistema de

Los Paquetes y los Archivos Los paquetes permiten hacer una abstracción del sistema de archivos de la maquina. El nombre del archivo JAVA debe de ser el mismo que la clase JAVA publica que el archivo contiene. JAVA coloca cada clase en su propio archivo. El nombre del archivo es el mismo que el del paquete a partir del repertorio definido por la variable CLASSPATH. Dynadata Copyright, 2014 © Dyna. Data S. A. 110

Los Paquetes y los Archivos El nombre del repertorio de cada paquete es el

Los Paquetes y los Archivos El nombre del repertorio de cada paquete es el mismo que el del paquete separado por “” : Si CLASSPATH = C: msdevvjclasses entonces el paquete package animales. mamiferos. marinos; estaría colocado en el repertorio. C: msdevvjclasses animalesmamiferosmarinosBallena Dynadata Copyright, 2014 © Dyna. Data S. A. 111

Los Paquetes de la Biblioteca JAVA La biblioteca JAVA contiene los paquetes siguientes :

Los Paquetes de la Biblioteca JAVA La biblioteca JAVA contiene los paquetes siguientes : java. lang Contiene las clases fundamentales. java. applet Contiene las clases necesarias para la creación de applets. java. awt Conjunto Abstract Window Toolkit para la gestión de ventanas. Dynadata Copyright, 2014 © Dyna. Data S. A. 112

Los Paquetes de la Biblioteca JAVA La biblioteca JAVA contiene los paquetes siguientes :

Los Paquetes de la Biblioteca JAVA La biblioteca JAVA contiene los paquetes siguientes : java. io Contiene las clases que ejecutan la E/S de archivos. java. net Contiene las clases necesarias para la ejecución de E/S Internet. java. util Conjunto de clases generales. Dynadata Copyright, 2014 © Dyna. Data S. A. 113

La Clase Object Todas las clases en JAVA derivan de la clase Object. class

La Clase Object Todas las clases en JAVA derivan de la clase Object. class Myclass { } Y Class Myclass extends Object { } Son equivalentes. Dynadata Copyright, 2014 © Dyna. Data S. A. 114

La Clase Object La clase Object tiene metodos deben ser redefinidos : protected Object

La Clase Object La clase Object tiene metodos deben ser redefinidos : protected Object clone Retorna una copia del objeto Public final Class get. Class Retorna el objeto Class. El objeto Class describe la clase. Class. to. String retorna el nombre de la clase. String to. String Retorna una descripción UNICODE del objeto. Object. to. String retorna únicamente la dirección del objeto. Dynadata Copyright, 2014 © Dyna. Data S. A. 115

Les Templates C++ JAVA no soporta los Templates pero la derivación de Object facilita

Les Templates C++ JAVA no soporta los Templates pero la derivación de Object facilita la creación de clases genéricas. Dynadata Copyright, 2014 © Dyna. Data S. A. 116

Los Wrappers Cada tipo numérico tiene su propia clase de objetos. El tipo int

Los Wrappers Cada tipo numérico tiene su propia clase de objetos. El tipo int tiene la clase Integer. int i; Integer I; // variable // objeto Dynadata Copyright, 2014 © Dyna. Data S. A. 117

Los Wrappers Metodos de Integer : String to. String (int i); int I. parse.

Los Wrappers Metodos de Integer : String to. String (int i); int I. parse. Int (String s); Integer. value. Of (String s); … long I. long. Vaqlue ( ); … Boolean I. equals (Object obj ); Dynadata Copyright, 2014 © Dyna. Data S. A. 118

La Clase String La clase String es utilizada para representar cadenas alfanuméricas en UNICODE.

La Clase String La clase String es utilizada para representar cadenas alfanuméricas en UNICODE. La clase String representa una cadena de tamaño fijo. La clase String. Buffer es utilizada para cadenas de tamaño variable. Dynadata Copyright, 2014 © Dyna. Data S. A. 119

Las Excepciones Un programa debe de prever que hacer cuando un error grave ocurre.

Las Excepciones Un programa debe de prever que hacer cuando un error grave ocurre. SOLUCION : Cada función debería de retornar un de código de error y cada función que la llama debería analizar el código de error. Pero si la función necesita regresar un valor útil entonces hay que retornar una estructura y analizarla cada vez que se llama la función. Dynadata Copyright, 2014 © Dyna. Data S. A. 120

Las Excepciones El análisis del código de retorno complica el programa e impide ver

Las Excepciones El análisis del código de retorno complica el programa e impide ver lo esencial. La solución : Las excepciones permiten recuperar los errores fatales que se producen en las funciones. Una excepción es una condición de error que interrumpe el flujo del programa. Dynadata Copyright, 2014 © Dyna. Data S. A. 121

Las Excepciones Una excepción esta compuesta de: 1. un bloque de test try 2.

Las Excepciones Una excepción esta compuesta de: 1. un bloque de test try 2. un bloque de tratamiento catch 3. De un objeto Exception o de una subclase de él 4. De la expresión throws Exception añadida a la declaración de una función que puede generar una excepción 5. La instrucción throw al interior de la función que puede generar la excepción Dynadata Copyright, 2014 © Dyna. Data S. A. 122

Los bloques try - catch El bloque de test try contiene instrucciones en donde

Los bloques try - catch El bloque de test try contiene instrucciones en donde una excepción puede ocurrir. El bloque de captura catch contiene el código para tratar la excepción. try { … } catch ( Exception e ) { … } Dynadata Copyright, 2014 © Dyna. Data S. A. 123

La declaracion throws Exception Un método debe declarar que es susceptible de generar una

La declaracion throws Exception Un método debe declarar que es susceptible de generar una excepción añadiendo la declaración throws Exception al final de la función : public float Divide( double f. Divd, double f. Divs ) throws Exception { if ( f. Divs == 0 ) { throw new Exception ( “División por cero” ); } return f. Divd / f. Divs } Dynadata Copyright, 2014 © Dyna. Data S. A. 124

La declaracion throws Exception En principio, todo método que llama al método declarado como

La declaracion throws Exception En principio, todo método que llama al método declarado como throws Exception debe de tratar la excepción o bien debe declarar también throws Exception. La declaración throws Exception indica que esta función o método envía un objeto de tipo Exception si un error ocurre. Dynadata Copyright, 2014 © Dyna. Data S. A. 125

La Instrucción throw Una excepción ocurre cuando un método declarado throws Exception ejecuta la

La Instrucción throw Una excepción ocurre cuando un método declarado throws Exception ejecuta la instrucción throw. Esta instrucción pasa el control al bloque de captura. Si ningún bloque de captura está declarado en el método ejecutándose, el método regresa ( return ) sin ningún valor al método que la llamó ( call stack ) y así sucesivamente hasta encontrar un bloque de captura o bien sale del programa. Dynadata Copyright, 2014 © Dyna. Data S. A. 126

La Instrucción throw La instrucción throw transmite un objeto de tipo Exception o uno

La Instrucción throw La instrucción throw transmite un objeto de tipo Exception o uno derivado al bloque de captura catch. Dynadata Copyright, 2014 © Dyna. Data S. A. 127

Las Excepciones Personalizadas Es posible derivar una clase de la clase Exception y definir

Las Excepciones Personalizadas Es posible derivar una clase de la clase Exception y definir su propia clase de excepción. Try { } Catch (My. Exception me) { } Catch (Second. Exception se) { } Catch( Exception e) { } Dynadata Copyright, 2014 © Dyna. Data S. A. 128

El Bloque Finally La ejecución de un programa deja el bloque de test cuando

El Bloque Finally La ejecución de un programa deja el bloque de test cuando encuentra la instrucción return o cuando hay una excepción. El bloque finally permite ejecutar un ultimo código antes de que el control no salga del método. El bloque finally se ejecuta antes de salir de la función. Dynadata Copyright, 2014 © Dyna. Data S. A. 129

El Bloque Finally try { … } catch { … } finally { …

El Bloque Finally try { … } catch { … } finally { … } C++ no tiene equivalente de bloque finally Dynadata Copyright, 2014 © Dyna. Data S. A. 130

Las Entradas - Salidas Las entradas – salidas JAVA son implementadas por la clase

Las Entradas - Salidas Las entradas – salidas JAVA son implementadas por la clase java. io. Las entradas – salidas JAVA son protegidas, lo que quiere decir que no es posible generar errores debido al tipo de dato tratado. No es posible efectuar operaciones de entrada – salida a partir de un Applet. Dynadata Copyright, 2014 © Dyna. Data S. A. 131

Las Entradas - Salidas Las entradas – salidas JAVA están implementadas en diferentes clases

Las Entradas - Salidas Las entradas – salidas JAVA están implementadas en diferentes clases que incrementan funcionalidades. La clase fundamental de flujo de datos es Input. Stream que no tiene memoria tampón. La clase Buffered. Input. Stream añade un tampón a la clase Input. Stream. Dynadata Copyright, 2014 © Dyna. Data S. A. 132

Las Entradas – Salidas Standard A la ejecución del método main(), 3 objetos estáticos

Las Entradas – Salidas Standard A la ejecución del método main(), 3 objetos estáticos de entrada – salida son creados automáticamente. Objeto Tipo Aplicación System. in Buffered. Input. Stream Entrada standard (teclado) System. out Print. Stream Salida standard (pantalla) System. err Print. Stream Salida error (pantalla) Dynadata Copyright, 2014 © Dyna. Data S. A. 133

Las Entradas – Salidas import java. io. *; public class IOTest { public static

Las Entradas – Salidas import java. io. *; public class IOTest { public static void main (String[] args) { try { byte b. Array [ ] = new byte[128]; // Buffer de captura System. out. println(“Escriba algo : ”); // Invitacion System. in. read(b. Array); // Lectura del teclado System. out. print(“Ud. Escribio : ”); System. out. println(b. Array); // Imprime el texto Class In. Class = System. in. get. Class(); // Examinemos … Class Out. Class = System. out. get. Class(); System. out. println(“in es : ” + In. Class. to. String()); System. out. println(“out es : ” + Out. Class. to. String()); } catch (IOException ioe ) { System. out. println(ioe. to. String()); ioe. print. Stack. Trace(); } } Dynadata Copyright, 2014 © Dyna. Data S. A. 134

Las Entradas – Salidas La ejecución del código da como resultado : Escriba algo

Las Entradas – Salidas La ejecución del código da como resultado : Escriba algo : Hello, World Ud. escribió : B 434 D 778 in es : class java. io. Buffered. Input. Stream out es : class java. io. Print. Stream Dynadata Copyright, 2014 © Dyna. Data S. A. 135

Las Entradas – Salidas import java. io. *; public class IOTest { public static

Las Entradas – Salidas import java. io. *; public class IOTest { public static void main (String[] args) { try { byte b. Array [ ] = new byte[128]; System. out. println(“Escriba algo : ”); System. in. read(b. Array); System. out. print(“Ud. Escribio : 2); String s = new String(b. Array, 0); System. out. println(s); … } catch (IOException ioe ) { System. out. println(ioe. to. String()); Ioe. print. Stack. Trace(); } } Dynadata Copyright, 2014 © Dyna. Data S. A. // Buffer de captura // Invitación // Lectura del teclado // Convierte en texto // Imprime texto 136

Las Entradas – Salidas La ejecución del código da como resultado : Escriba algo

Las Entradas – Salidas La ejecución del código da como resultado : Escriba algo : Hello, World Ud. escribió : Hello, World in es : class java. io. Buffered. Input. Stream out es : class java. io. Print. Stream Dynadata Copyright, 2014 © Dyna. Data S. A. 137

Creación de un Archivo La clase File. Input. Stream sirve para abrir un archivo

Creación de un Archivo La clase File. Input. Stream sirve para abrir un archivo en escritura. La clase File. Output. Stream sirve para abrir un archivo en lectura. Dynadata Copyright, 2014 © Dyna. Data S. A. 138

Copia de Archivo import java. io. *; public class File. IO { public static

Copia de Archivo import java. io. *; public class File. IO { public static void main(String[] args) { try { // open args[0] for input File. Input. Stream in = new File. Input. Stream(args[0]); // add buffering to that Input. Stream Buffered. Input. Stream bin = new Buffered. Input. Stream(in); // open args[1] for output and add buffering to it as well File. Output. Stream out = new File. Output. Stream(args[1]); Buffered. Output. Stream bout = new Buffered. Output. Stream(out); Dynadata Copyright, 2014 © Dyna. Data S. A. 139

Copia de Archivo // now read as long as there is something to read

Copia de Archivo // now read as long as there is something to read byte b. Array[] = new byte[256]; int n. Bytes. Read; while(bin. available() > 0) { // read up a block - remember how many bytes read n. Bytes. Read = bin. read(b. Array); // write that many bytes back out starting at offset 0 in the array bout. write(b. Array, 0, n. Bytes. Read); } bout. flush(); } catch(IOException ioe) { System. out. println(ioe. to. String()); } } } Dynadata Copyright, 2014 © Dyna. Data S. A. 140

Las Entradas – Salidas con Memoria Tampón La primera vez que el programa hace

Las Entradas – Salidas con Memoria Tampón La primera vez que el programa hace una lectura en bin, la función Buffered. Input. Stream leerá un gran bloque de datos de in, pero solo copia a la función el numero de datos solicitados por b. Array. bin conserva el resto de los datos para la siguiente lectura. Así, bin no releerá de nuevo in, hasta que el tampón de entrada no haya sido vaciado. Este proceso es transparente a la aplicación. Dynadata Copyright, 2014 © Dyna. Data S. A. 141

La Función flush Un programa puede forzar el vaciado de la memoria tampón hacia

La Función flush Un programa puede forzar el vaciado de la memoria tampón hacia el disco llamando la función flush( ); La mayoría de flujos de archivos funcionan en modo autoflush, es decir que realiza la escritura en el disco duro cada vez que una nueva operación es solicitada. Dynadata Copyright, 2014 © Dyna. Data S. A. 142

La Clase Print. Stream Las clases Buffered. File. Input. Stream y Buffered. File. Output.

La Clase Print. Stream Las clases Buffered. File. Input. Stream y Buffered. File. Output. Stream son eficaces para transmitir grandes bloques de datos en formato binario. Para efectuar Entradas – Salidas formateadas del tipo println, se puede utilizar un objeto Print. Stream. Dynadata Copyright, 2014 © Dyna. Data S. A. 143

Las Clases Data. Input. Stream y Data. Output. Stream La clase Data. Input. Stream

Las Clases Data. Input. Stream y Data. Output. Stream La clase Data. Input. Stream permite leer tipos intrinsecos : read. Int, read. Short, read. Float, etc. La clase Data. Output. Stream permite escribir tipos intrinsecos : write. Int, write. Short, write. Float, etc. Dynadata Copyright, 2014 © Dyna. Data S. A. 144

Los Applets Un Applet es un programa que se ejecuta en un navegador WEB.

Los Applets Un Applet es un programa que se ejecuta en un navegador WEB. Los Applets son activados por los navegadores que ejecutan los archivos. class de Java. Dynadata Copyright, 2014 © Dyna. Data S. A. 145

Un Ejemplo de Applet import java. applet. Applet; import java. awt. *; public class

Un Ejemplo de Applet import java. applet. Applet; import java. awt. *; public class Hello. World extends Applet { public void paint ( Graphics g ) { g. draw. String(“Hello, World”, 0, 20); } } Dynadata Copyright, 2014 © Dyna. Data S. A. 146

La pagina WEB de un Applet La pagina HTML (Hypertext Markup Language) para ejecutar

La pagina WEB de un Applet La pagina HTML (Hypertext Markup Language) para ejecutar el Applet es la siguiente : <HTML> <HEAD> <TITLE>Hello world</TITLE> </HEAD> <BODY> <APPLET CODE=“Hello. World. class” WIDTH=250 HEIGHT=100> </APPLET> </BODY> </HTML> Dynadata Copyright, 2014 © Dyna. Data S. A. 147

Los Mensajes y Acontecimientos de un Applet El sistema de explotación comunica con un

Los Mensajes y Acontecimientos de un Applet El sistema de explotación comunica con un Applet a base de mensajes y acontecimientos. La función paint es invocada por el sistema cada vez que hay que dibujar el Applet porque algún otro programa (ventana) lo cubrió y luego lo puso al descubierto. Dynadata Copyright, 2014 © Dyna. Data S. A. 148

Un Applet con Contador en la Función de paint import java. applet. Applet; import

Un Applet con Contador en la Función de paint import java. applet. Applet; import java. awt. *; public class Hello. World extends Applet { static private int m_n. Repaint. Count = 0; public void paint ( Graphics g ) { String s = “Hello, world” (“ + ++m_n. Repaint. Count + “)”; g. draw. String(s, 0, 20); } } Dynadata Copyright, 2014 © Dyna. Data S. A. 149

Las Funciones de Base de un Applet I Método Llamado cuando … Uso en

Las Funciones de Base de un Applet I Método Llamado cuando … Uso en general Hello. Auto El Applet arranca Inicializa miembros no estáticos get. Applet. Info Por el usuario Informa sobre el Applet init Al primer arranque. Es llamado por el constructor Inicializa estructuras y datos que no cambian durante la existencia del Applet. destroy A la destrucción Al revés de init paint Cuando se repinta Dibuja la ventana start El navegador entra al Applet Arranca la animación del Applet stop El navegador sale del Applet Para la animación del Applet Dynadata Copyright, 2014 © Dyna. Data S. A. 150

Las Funciones de Base de un Applet II Las 4 funciones init, start, stop

Las Funciones de Base de un Applet II Las 4 funciones init, start, stop y destroy son llamadas según una secuencia particular cuando el usuario sale y regresa a la pagina WEB donde reside el Applet. La función init es llamada cada vez que se carga el Applet. La función start es llamada cada vez que el Applet es dibujado: Dynadata Copyright, 2014 © Dyna. Data S. A. 151

Las Funciones de Base de un Applet III La función stop es llamada cuando

Las Funciones de Base de un Applet III La función stop es llamada cuando el Applet ya no es visible. La función destroy es llamada cuando el usuario abandona el Applet. Dynadata Copyright, 2014 © Dyna. Data S. A. 152

Las Secuencia de las Funciones de un Applet Cuando el usuario entra por la

Las Secuencia de las Funciones de un Applet Cuando el usuario entra por la primera vez a la pagina con el Applet, el navegador llama la función init. Luego llama la función start porque el Applet va a ser visible y la función paint. Si el utilizador activa otra pagina WEB el navegador llamara la función stop. Luego si el usuario regresa a la pagina donde esta el Applet, el navegador llama de nuevo la función start. Dynadata Copyright, 2014 © Dyna. Data S. A. 153

Ejemplo de las Funciones de Base de un Applet import java. applet. *; import

Ejemplo de las Funciones de Base de un Applet import java. applet. *; import java. awt. *; public class Hello. Auto extends Applet { private int m_n. Init. Cnt; // user defined data private int m_n. Start. Cnt; private int m_n. Stop. Cnt; private int m_n. Destroy. Cnt; public Hello. Auto() // Hello. Auto Class Constructor { m_n. Init. Cnt = 0; m_n. Start. Cnt = 0; m_n. Stop. Cnt = 0; m_n. Destroy. Cnt = 0; } Dynadata Copyright, 2014 © Dyna. Data S. A. 154

La Funcion get. Applet. Info ( ) // APPLET INFO SUPPORT: // The get.

La Funcion get. Applet. Info ( ) // APPLET INFO SUPPORT: // The get. Applet. Info() method returns a string describing the // applet's author, copyright date, or miscellaneous information. public String get. Applet. Info() { return "Name: Hello. Autorn" + "Author: José Garridorn" + "Created for Learn Java Now (c)"; } Dynadata Copyright, 2014 © Dyna. Data S. A. 155

La Funcion init () // The init() method is called by the AWT when

La Funcion init () // The init() method is called by the AWT when an applet is first // loaded or reloaded. Override this method to perform whatever // initialization your applet needs, such as initializing data // structures, loading images or fonts, creating frame windows, // setting the layout manager, or adding UI components. public void init() { resize(320, 240); m_n. Init. Cnt++; } Dynadata Copyright, 2014 © Dyna. Data S. A. 156

La Funcion destroy( ) // Place additional applet clean up code here. destroy() is

La Funcion destroy( ) // Place additional applet clean up code here. destroy() is called // when you applet is terminating and being unloaded. public void destroy() { m_n. Destroy. Cnt++; } Dynadata Copyright, 2014 © Dyna. Data S. A. 157

La Funcion paint ( ) // Hello. Auto Paint Handler public void paint(Graphics g)

La Funcion paint ( ) // Hello. Auto Paint Handler public void paint(Graphics g) { g. draw. String("Hello, world", 0, 10); g. draw. String("Init count = " + m_n. Init. Cnt, 0, 20); g. draw. String("Start count = " + m_n. Start. Cnt, 0, 30); g. draw. String("Stop count = " + m_n. Stop. Cnt, 0, 40); g. draw. String("Destroy count = " + m_n. Destroy. Cnt, 0, 50); } Dynadata Copyright, 2014 © Dyna. Data S. A. 158

La Funcion start ( ) // The start() method is called when the page

La Funcion start ( ) // The start() method is called when the page containing the applet // first appears on the screen. The Applet. Wizard's initial // implementation of this method starts execution of the applet's // thread. public void start() { m_n. Start. Cnt++; } Dynadata Copyright, 2014 © Dyna. Data S. A. 159

La Funcion stop ( ) // The stop() method is called when the page

La Funcion stop ( ) // The stop() method is called when the page containing the applet // is no longer on the screen. The Applet. Wizard's initial // implementation of this method stops execution of the applet's // thread. public void stop() { m_n. Stop. Cnt++; } Dynadata Copyright, 2014 © Dyna. Data S. A. 160

Los Eventos Todos los Applets tienen la función paint() y otras funciones. Todos los

Los Eventos Todos los Applets tienen la función paint() y otras funciones. Todos los Applets heredan del método handle. Event(Event) de la clase Applet que a su vez la hereda de la clase Component. Este método es llamado cada vez que hay un eventos generado por el sistema y al cuan el Applet debe responder. Dynadata Copyright, 2014 © Dyna. Data S. A. 161

Los Eventos de la clase Component I El objeto Event pasado por el método

Los Eventos de la clase Component I El objeto Event pasado por el método handle. Event (Event ) tiene las propiedades siguientes: id Numero identificando el tipo de evento target Objeto sobre el cual el evento tuvo lugar. E. g. una ventana si hubo un cambio de tamaño. when Momento en que el evento tuvo lugar modifiers Informa sobre el estado de las teclas May, Ctrl y Alt x, y Coordenadas de la posición del cursor (solo para los eventos del ratón) Dynadata Copyright, 2014 © Dyna. Data S. A. 162

Los Eventos de la clase Component II click. Count Número de clicks que el

Los Eventos de la clase Component II click. Count Número de clicks que el ratón recibió en un lapso corto (evento mouse. Down únicamente) key Tecla oprimida o liberada (eventos key. Down y key. Up únicamente) arg Contiene un segundo objeto cuando el evento lo requiere La acción por default del Applet hacia los eventos es ignorarlos. Dynadata Copyright, 2014 © Dyna. Data S. A. 163

El Tratamiento de los Eventos Para tratar un evento hay que redefinir el método

El Tratamiento de los Eventos Para tratar un evento hay que redefinir el método handle. Event(Event) y probar el valor de Event. id para realizar una acción por el evento deseado. Sin embargo, el método handle. Event(Event) de la clase de base llama un método por cada uno de los eventos mas importantes. Por lo que es posible solo redefinir el método particular que se quiere modificar. Dynadata Copyright, 2014 © Dyna. Data S. A. 164

Métodos Importantes I Métodos definidos por el método handle. Event(Event) : mouse. Enter Llamado

Métodos Importantes I Métodos definidos por el método handle. Event(Event) : mouse. Enter Llamado cuando el cursor entra a la ventana del Applet mouse. Exit Llamado cuando el cursor sale de la ventana del Applet mouse. Move Llamado cuando el cursor se desplaza dentro del Applet y que ningún botón está oprimido mouse. Drag Llamado cuando el cursor se desplaza dentro del Applet y que un botón está oprimido mouse. Down Llamado cuando el botón del ratón es oprimido Dynadata Copyright, 2014 © Dyna. Data S. A. 165

Métodos Importantes II mouse. Up Llamado cuando el botón del ratón es liberado key.

Métodos Importantes II mouse. Up Llamado cuando el botón del ratón es liberado key. Down Llamado cuando una tecla del teclado es oprimida y que el Applet tiene el focus key. Up Llamado cuando una tecla del teclado es soltada y que el Applet tiene el focus get. Focus Llamado cuando la ventana del Applet recibe el focus y se vuelve la ventana activa. lost. Focus Llamado cuando la ventana del Applet pierde el focus Dynadata Copyright, 2014 © Dyna. Data S. A. 166

Los Eventos del Ratón Los eventos del ratón usan 3 elementos en particular :

Los Eventos del Ratón Los eventos del ratón usan 3 elementos en particular : El tipo de evento Se trata de un mouse. Move o de un mouse. Click ? El estado del botón del ratón El botón esta oprimido o liberado ? La posición del ratón Las coordenadas del ratón dadas según un sistema con el origen (0, 0) situado arriba a la izquierda del Applet y con los ejes positivos corriendo hacia abajo a la derecha. JAVA no reconoce mas que un botón del ratón e ignora los botones del centro y de la derecha. Dynadata Copyright, 2014 © Dyna. Data S. A. 167

La Función get. Parameter La función get. Parameter retorna el valor de una variable

La Función get. Parameter La función get. Parameter retorna el valor de una variable especificada en la pagina HTML que lanza el Applet. La funcion String s. Color = get. Parameter(“Color”); Retorna en la variable s. Color el texto “blue”. <applet code="Clock" width=50 height=50> <param name=Color value="blue"> </applet> Dynadata Copyright, 2014 © Dyna. Data S. A. 168

Multithreading VS Multiprocesos El sistema de multiprocesos permite ejecutar al mismo tiempo varios programas

Multithreading VS Multiprocesos El sistema de multiprocesos permite ejecutar al mismo tiempo varios programas en espacios de memoria diferente. El multithreading permite ejecutar una parte de un programa en el mismo espacio de memoria. Un Thread (hilo) es otra línea de ejecución de un programa. Dynadata Copyright, 2014 © Dyna. Data S. A. 169

Los Threads JAVA implementa el multithreading a travez de la clase Thread. Para crear

Los Threads JAVA implementa el multithreading a travez de la clase Thread. Para crear un thread un programa crea un objeto de la clase Thread que sirve para guardar el estado de un programa en un instante dado (conserva el PC, la callstack y los registros). El argumento del constructor de un Thread es un objeto de la clase abstracta Runnable. m_Thread = new Thread(Runnable Rn); Dynadata Copyright, 2014 © Dyna. Data S. A. 170

La Clase Runnable La clase Runnable permite crear un Thread. La clase Runnable no

La Clase Runnable La clase Runnable permite crear un Thread. La clase Runnable no contiene mas que un método abstracto llamado run(). Un thread comienza su ejecución con el llamado de la funcion Thread. start(). Cuando el thread padre ejecuta esta función, regresa y continua su ejecución. En ese mismo momento, el thread hijo comienza ejecutando la función run() de la clase Runnable que le fué pasado por el constructor. Dynadata Copyright, 2014 © Dyna. Data S. A. 171

El Ciclo de Vida de un Thread El ciclo de vida de un thread

El Ciclo de Vida de un Thread El ciclo de vida de un thread dura la ejecución de la función run() de la clase Runnable que le fué pasado por el constructor. Un thread se termina cuando la función run() regresa o cuando es llamada la función stop() del thread. Dynadata Copyright, 2014 © Dyna. Data S. A. 172

Una Clase Runnable class My. Runnable. Class implements Runnable { Thread m_Thread; // referencia

Una Clase Runnable class My. Runnable. Class implements Runnable { Thread m_Thread; // referencia a un thread public void run() { // Hacer algo aquí … } // el control pasa a esta función cuando // el thread arranca void start. New. Thread() // esta nueva función permite crear un // nuevo thread { m_Thread = new Thread(this); m_Thread. start(); // Crea un thread // Arranca el thread } } Dynadata Copyright, 2014 © Dyna. Data S. A. 173

Un Applet Runnable public class My. Applet extends Applet implements Runnable { Thread m_Thread;

Un Applet Runnable public class My. Applet extends Applet implements Runnable { Thread m_Thread; // referencia a un thread public void start() { Dynadata Copyright, 2014 © Dyna. Data S. A. 174

La Protección de los Datos Cuando mas de un hilo de ejecución comparten las

La Protección de los Datos Cuando mas de un hilo de ejecución comparten las mismos datos, un conflicto de escritura-lectura puede ocurrir. JAVA implementa la declaración synchronize para marcar un método de tal manera que solo un thread pueda penetrar al mismo tiempo en el. La sincronización de los threads se realiza al nivel del objeto. Ello quiere decir que es posible proteger varios métodos de un objeto. Dynadata Copyright, 2014 © Dyna. Data S. A. 175/178

La Declaracion synchronized La declaración presenta la forma : class My. Class { public

La Declaracion synchronized La declaración presenta la forma : class My. Class { public synchronized void My. Function() { } public synchronized void My. Other. Function() { } } Dynadata Copyright, 2014 © Dyna. Data S. A. 176/178

La Protección de Objetos Es posible proteger enteramente un objeto como lo muestra el

La Protección de Objetos Es posible proteger enteramente un objeto como lo muestra el ejemplo siguiente: class My. Class { public My. Function(Ba ba) { synchronized (ba) // nadie puede usar ba mientras estoy aquí { } } } Dynadata Copyright, 2014 © Dyna. Data S. A. 177/178

Links www. javasoft. com www. msdn. microsoft. com/vjsharp www. mailxmail. com/curso/informatica/java Dynadata Copyright, 2014

Links www. javasoft. com www. msdn. microsoft. com/vjsharp www. mailxmail. com/curso/informatica/java Dynadata Copyright, 2014 © Dyna. Data S. A. 178/178