Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porEnrique Plaza Vidal Modificado hace 9 años
1
El Lenguaje de Programación Java
2
Introducción ► Java tiene como todos los lenguajes de programación sus propias características para describir algoritmos, es decir sus propios fundamentos del lenguaje. Trataremos de dar una base para poder ir creando nuestros programas. Creo que es mucho más útil empezar a programar puesto que se aprenden mejor estas cosas cuando tenemos que resolver algún problema.
3
Comentarios ► Hay tres tipos de comentarios en Java: // Este es un comentario de una sola línea /* Este es un comentario de una o más líneas */ /** Este es un comentario de documentación */
4
Identificadores ► Un identificador es un "nombre" que nos permite dirigirnos específicamente a una de las entidades propias del lenguaje, es decir, son los nombres que podemos ponerles a nuestras variables, métodos, clases, interfaces y objetos. La única restricción en la formación de identificadores es que tienen que comenzar por letra, subrayado o por el signo '$', pudiéndoles seguir después letras o números. Hay que tener en cuenta que en Java como en otros muchos lenguajes de programación se distinguen las mayúsculas y las minúsculas.
5
Identificadores ► Hay una serie de normas muy recomendables para crear identificadores en Java: En Java es habitual escribir todos los identificadores en minúscula teniendo en cuenta las siguientes excepciones: 1. Si en un identificador queremos incluir un nombre compuesto se pone el primer nombre entero en minúscula y el resto con la primera letra en mayúscula y el resto en minúscula. Por ejemplo: miNuevaVariable = 3;
6
Identificadores 2. Los identificadores de clases e interfaces siempre empiezan en mayúscula siguiendo la anterior norma en caso de tratarse de un nombre compuesto. Por ejemplo: MiNuevaClase(); 3. Los nombres de variables finales (las más habitualmente llamadas "constantes") se escriben íntegramente en mayúscula. Por ejemplo: "PI"
7
Identificadores ► Otra restricción muy importante y evidente a la hora de elegir identificador por ejemplo para una variable es no coincidir con ciertas palabras restringidas que tiene el lenguaje, estas son: abstract, continue, for, new, switch, boolean, default, goto, null, synchronized, break, do, if, package, this, byte, double, implements, private, threadsafe, byvalue, else, import, protected, throw case, extends, instanceof, public, transient, catch, false, int, return, true, char, final, interface, short, try, class, finally, long, static, void, const, float, native, super, while.
8
Identificadores ► Serían identificadores válidos: identificador identificador nombre_usuario nombre_usuario Nombre_Usuario Nombre_Usuario _variable_del_sistema _variable_del_sistema $transaccion $transaccion y su uso sería, por ejemplo: int contador_principal; int contador_principal; char _lista_de_ficheros; char _lista_de_ficheros; float $cantidad_en_Ptas; float $cantidad_en_Ptas;
9
Identificadores Palabras Reservadas ► Además, el lenguaje se reserva unas cuantas palabras más, pero que hasta ahora no tienen un cometido específico. Son: cast future generic inner cast future generic inner operator outer rest var operator outer rest var
10
Identificadores Arrays ► Se pueden declarar en Java arrays de cualquier tipo: char s[]; char s[]; int iArray[]; int iArray[]; ► Incluso se pueden construir arrays de arrays: int tabla[][] = new int[4][5]; int tabla[][] = new int[4][5];
11
Identificadores Arrays ► Los límites de los arrays se comprueban en tiempo de ejecución para evitar desbordamientos y la corrupción de memoria. ► En Java un array es realmente un objeto, porque tiene redefinido el operador []. Tiene una función miembro: length. Se puede utilizar este método para conocer la longitud de cualquier array. int a[][] = new int[10][3]; int a[][] = new int[10][3]; a.length; /* 10 */ a.length; /* 10 */ a[0].length; /* 3 */ a[0].length; /* 3 */
12
Identificadores Arrays ► Para crear un array en Java hay dos métodos básicos. Crear un array vacío: int lista[] = new int[50]; int lista[] = new int[50]; ► o se puede crear ya el array con sus valores iniciales: String nombres[] = { String nombres[] = { "Juan","Pepe","Pedro","Maria" "Juan","Pepe","Pedro","Maria" }; };
13
Identificadores Arrays ► Esto que es equivalente a: String nombres[]; String nombres[]; nombres = new String[4]; nombres = new String[4]; nombres[0] = new String( "Juan" ); nombres[0] = new String( "Juan" ); nombres[1] = new String( "Pepe" ); nombres[1] = new String( "Pepe" ); nombres[2] = new String( "Pedro" ); nombres[2] = new String( "Pedro" ); nombres[3] = new String( "Maria" ); nombres[3] = new String( "Maria" );
14
Identificadores Arrays ► No se pueden crear arrays estáticos en tiempo de compilación: int lista[50]; // generará un error en tiempo de compilación int lista[50]; // generará un error en tiempo de compilación ► Tampoco se puede rellenar un array sin declarar el tamaño con el operador new: int lista[]; int lista[]; for( int i=0; i < 9; i++ ) for( int i=0; i < 9; i++ ) lista[i] = i; lista[i] = i; ► Es decir, todos los arrays en Java son estáticos. Para convertir un array en el equivalente a un array dinámico en C/C++, se usa la clase vector, que permite operaciones de inserción, borrado, etc. en el array.
15
Identificadores ► ARREGLOS ► Un arreglo tipo lista se define como una variable que permite almacenar un conjunto de datos del mismo tipo organizados en una sola columna y uno o mas renglones. También reciben el nombre de vectores en álgebra, o arreglos unidimensionales en programación. Los procesos normales con una lista o con sus elementos, incluyen declarar toda la lista, capturar sus elementos, desplegarlos, realizar operaciones con ellos, desplegarlos, etc.
16
Identificadores ► Para declarar una lista se usa el siguiente formato; tipodato nomlista[]= new tipodato[cant elementos]; ► No existen en java arreglos o listas tradicionales, lo que existe es un objeto, por tanto se deberá usar el operador new antes de empezar a procesar el arreglo, la ventajas son: ► a) estas listas pueden usar el método length,(ejemplo nomlista.length;) para conocer el tamaño de la misma.
17
Identificadores int edades[]= new int[12]; float sueldos[]=new float[5]; String municipios[]={"Tijuana","Tecate",“Ensenada "}; en este último caso, observar que también pueden crearse listas ya con tamaño fijo e inicializadas o cargadas en este último caso, observar que también pueden crearse listas ya con tamaño fijo e inicializadas o cargadas Notas: ► Recordar también que la primera posición o renglón en una lista es la posición o renglón 0 (cero). ► Recordar también que la primera posición o renglón en una lista es la posición o renglón 0 (cero).
18
Ejemplo import java.io.*; class Arreglos { public static void main(String[] args) { int edad[]= new int[5]; int reng; int edad[]= new int[5]; int reng; BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in)); BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in)); //ciclo de captura //ciclo de captura for(reng=0; reng <=4; reng++) for(reng=0; reng <=4; reng++) { System.out.println("dame edad "+reng+1+":"); { System.out.println("dame edad "+reng+1+":"); try { edad[reng]= Integer.parseInt(teclado.readLine()); try { edad[reng]= Integer.parseInt(teclado.readLine()); }catch(IOException varerror){}; }catch(IOException varerror){};}; //ciclo de proceso for(reng=0;reng<=4;reng++) for(reng=0;reng<=4;reng++) edad[reng]=edad[reng]*12; edad[reng]=edad[reng]*12; //ciclo de despliegue //ciclo de despliegue for(reng=0; reng <=4; reng++) for(reng=0; reng <=4; reng++) System.out.println(edad[reng]); System.out.println(edad[reng]); } // cierra main } // cierra clase
19
import java.lang.*; import java.io.*; class Califica { public static void main(String[] args) { // creando objeto teclado BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in)); int calif[][]=new int[3][4]; // creando arrreglo y variables try {// capturando arreglo for(int r=0; r<=2; r++) for(int c=0; c<=3; c++) { System.out.println("Dame Calif:"+(r+1)+","+(c+1) ); calif[r][c] = Integer.parseInt(teclado.readLine()); }; } catch(IOException variablerror) {System.out.println("error de captura "); } for(int r=0; r<=2; r++) // procesando regalando 10 puntos for(int c=0; c<=3; c++) calif[r][c]=calif[r][c] +10; for(int r=0; r<=2;r++) //desplegando { for(int c=0; c<=3;c++) {System.out.println(" calif="+calif[r][c]+" " ); };System.out.println('\n');}; } // cierra main } // cierra clase
20
Ejercicio ► CONSTRUIR UNA MATRIZ QUE CONTENGA LOS INGRESOS MENSUALES POR VENTAS DURANTE LOS TRES PRIMEROS MESES DEL AÑO DE CUATRO SUCURSALES DE UNA CADENA DE TIENDAS, AGREGAR AL FINAL UN VECTOR QUE MUESTRE LOS INGRESOS MENSUALES TOTALES POR MESES Y UN SEGUNDO VECTOR QUE MUESTRE LOS INGRESOS MENSUALES TOTALES POR SUCURSAL.
21
Tipos primitivos y variables en Java Tipos Primitivos ► Como tipos primitivos entendemos aquellos tipos de información mas usuales y básicos. Son los habituales de otros lenguajes de programación. Te describo algún dato a tener en cuenta en cada tipo. ► Boolean: No es un valor numérico, solo admite los valores true o false.
22
Tipos primitivos y variables en Java ► Char: Usa el código UNICODE y ocupa cada carácter 16 bits. ► Enteros: Difieren en las precisiones y pueden ser positivos o negativos. Byte: 1 byte. Short: 2 bytes. Int: 4 bytes. Long: 8 bytes. ► Reales en punto flotante: igual que los enteros también difieren en las precisiones y pueden ser positivos o negativos. Float: 4 bytes. Double: 8 bytes.
23
Tipos primitivos y variables en Java Variables ► Ahora que tenemos las piezas necesarias (identificadores y tipos) podemos definir variables en Java. Una variable referenciará siempre a un tipo primitivo de Java o a cualquier otro objeto creado en nuestro programa. Veamos algunas declaraciones: Int a ; // declaración de una variable 'a' //inicializada a 0 (valor por defecto). Int b = 8; // declaración de una variable 'b' // inicializada a 8.
24
Tipos primitivos y variables en Java ► NombreClase referencia; // declaración de una // variable 'referencia' preparada para llevar un // objeto de la clase 'NombreClase'. NombreClase referencia2; // lo mismo que en la // variable anterior. Referencia = new NombreClase; // se crea un // nuevo objeto de la clase 'NombreClase',y es // asignado a la variable 'Referencia' Referencia2 = referencia; // Ahora también // 'referencia2' tiene el mismo objeto a su cargo // que 'referencia'
25
Tipos primitivos y variables en Java ► Una vez tenemos un poco de idea de como declarar variables en Java, tenemos que tener en cuenta desde que sitios de nuestro programa podemos acceder a ellas, es lo que llamamos ámbito de la variable. Básicamente la norma es que la variable tiene validez dentro del bloque encerrado entre llaves donde ha sido declarada, ya sea dentro de una función o de por ejemplo una sentencia 'if'.
26
Tipos primitivos y variables en Java ► Veamos un ejemplo con un pequeño programita en java. public class AmbitoVariables { public static void main(String[] args) { if (true) { int y=5; } System.out.println(y); } } Si intentamos ejecutar este código el compilador nos dará un error diciéndonos que la variable y no está definida puesto que la hemos declarado en un bloque distinto de donde la pretendemos utilizar.
27
Tipos primitivos y variables en Java ► Hay mas normas de ámbito respecto a las variables miembro de una clase. Para acceder a ellas depende si en la clase está declarada como 'public' o como 'private'. Las variables declaradas en una clase como 'public' se acceden directamente a través de 'NombreClase.nombreVariable'. En caso de una variable 'private' solo podemos utilizarla mediante los métodos de esa clase.
28
Tipos primitivos y variables en Java ► Por otro lado desde la declaración de cualquier función propia de una clase podemos acceder a las variables internas de esa clase directamente.
29
Operadores en Java Operadores Aritméticos: Los habituales ► Suma +. ► Resta -. ► Multiplicación *. ► División /. ► Resto de la División %.
30
Operadores en Java Operadores de Asignación: ► El principal es '=' pero hay más operadores de asignación con distintas funciones: ► '+=' : op1+= op2equivale a op1 = op1 + op2 ► '-=' : op1-= op2 equivale a op1 = op1 - op2 ► '*=' : op1*= op2 equivale a op1 = op1 * op2 ► '/=' : op1 /= op2 equivale a op1 = op1 / op2 ► '%=' : op1 %= op2equivale a op1 = op1 % op2
31
Operadores en Java ► Operadores Unarios: El mas (+) y el menos (-). Para cambiar el signo del operando. ► Operador Instanceof: Nos permite saber si un objeto pertenece a una clase o no. NombreObjeto instanceof NombreClase
32
Operadores en Java ► Operadores Incrementales: Son los operadores que nos permiten incrementar las variables en una unidad. Se pueden usar delante y detrás de la variable dependiendo de lo que queramos, es decir, si queremos que incremente o viceversa antes de utilizar o lo contrario. '++''--'
33
Operadores en Java ► Operadores Relacionales: Permiten comparar variables según relación de igualdad/desigualdad o relacción mayor/menor. Devuelven siempre un valor boolean. '>': Mayor que '<': Menor que '==': Iguales '¡=': Distintos '>=': Mayor o igual que '<=': Menor o igual que
34
Operadores en Java ► Operadores Lógicos: Nos permiten construir expresiones lógicas. '&&' : devuelve true si ambos operandos son true. '||' : devuelve true si alguno de los operandos son true. '!' : Niega el operando que se le pasa.
35
Operadores en Java ► Operador de concatenación con cadena de caracteres '+': Por Ejemplo: System.out.println("El total es"+ result +"unidades")
36
Operadores en Java Separadores ► Sólo hay un par de secuencias con otros caracteres que pueden aparecer en el código Java; son los separadores simples, que van a definir la forma y función del código. Los separadores admitidos en Java son: ► () - paréntesis. Para contener listas de parámetros en la definición y llamada a métodos. También se utiliza para definir precedencia en expresiones, contener expresiones para control de flujo y rodear las conversiones de tipo.
37
Operadores en Java Separadores ► {} - llaves. Para contener los valores de matrices inicializadas automáticamente. También se utiliza para definir un bloque de código, para clases, métodos y ámbitos locales. ► [ ] - corchetes. Para declarar tipos matriz. También se utiliza cuando se referencian valores de matriz.
38
Operadores en Java Separadores ► ; punto y coma. Separa sentencias. ►, coma. Separa identificadores consecutivos en una declaración de variables. También se utiliza para encadenar sentencias dentro de una sentencia for. ►. punto. Para separar nombres de paquete de subpaquetes y clases. También se utiliza para separar una variable o método de una variable de referencia.
39
Estructuras de control de Bifurcación ► Bifurcaciones: Permiten ejecutar código en función de una expresión evaluada Bifurcaciones if: Tienen las siguientes posibilidades en su sintaxis: if (ExpresionBooleana){conjuntoDeSentencias} if (ExpresionBooleana) {conjuntoDeSentencias} else {conjuntoAlternativo} if (ExpresionBooleana) {conjuntoDeSentencias} else if {conjuntoAlternativo} else if {conjuntoAlternativo2}
40
Estructuras de control de Bifurcación ► Ejemplos: if (i == 5){ System.out.println(" i vale 5 ");} else {System.out.println("i no vale 5");} if (i == 5){ System.out.println(" i vale 5 ");} else if (i 5){System.out.println("i es mayor que 5");}
41
Estructuras de control de Bifurcación ► Bifurcaciones switch Son las que permiten realizar varias acciones distintas dependiendo del estado de una variable. Switch (Expresion){ Case valor1: conjuntoDeSentencias; break; Case valor2: SentenciasAlternativas; break; Case valor3: SentenciasAlternativas2; break; Case valor4: SentenciasAlternativas3; break; }
42
Estructuras de control de Bifurcación ► La sentencia 'break' detrás de cada opción de case sirve para que no evalúe el resto de opciones sino que se salga directamente del 'Switch', así que dependiendo de lo que quieras hacer la pondrás o no. Ejemplos: switch (i) { case '1': System.out.println( "i contiene un 1"); case '2': System.out.println( "i contiene un 2"); case '3': System.out.println( "i contiene un 3"); }
43
Estructuras de control tipo bucle ► Los bucles se utilizan para ejecutar un conjunto de instrucciones varias veces basándose siempre en una condición que decidirá si se sigue repitiendo o no. Veamos los tipos que hay. Bucle While while (expresion) {sentencias} Las instrucciones dentro de las llaves se ejecutan mientras la expresión sea verdadera. i=5; while ( i > 0 ) {i --;} // las llaves aquí se podían haber omitido, puesto // que solo hay una sentencia. System.out.println("Ahora i vale 0");
44
Estructuras de control tipo bucle ► Bucle For Es un bucle más "fijo", permite ejecutar el conjunto de sentencias un numero determinado de veces fijado al principio del bucle y funciona por tanto como un contador. Su expresión general seria como la que sigue: for (inicialización, expresionBooleana, incremento) {conjuntoDeSentencias;} for (int i= 0; i <10; i++){ System.out.println("el valor de i es: " + i); } ► También se soporta el operador coma (,) en los bucles for for( a=0,b=0; a < 7; a++,b+=2 ) for( a=0,b=0; a < 7; a++,b+=2 )
45
Estructuras de control tipo bucle ► El siguiente trocito de código Java dibuja varias líneas en pantalla alternando sus colores entre rojo, azul y verde. Este fragmento sería parte de una función Java (método): int contador; int contador; for( contador=1; contador <= 12; contador++ ) { for( contador=1; contador <= 12; contador++ ) { switch( contador % 3 ) { switch( contador % 3 ) { case 0: case 0: setColor( Color.red ); setColor( Color.red ); break; break; case 1: case 1: setColor( Color.blue ); setColor( Color.blue ); break; break; case 2: case 2: setColor( Color.green ); setColor( Color.green ); break; break; } g.drawLine( 10,contador*10,80,contador*10 ); g.drawLine( 10,contador*10,80,contador*10 ); }
46
Estructuras de control tipo bucle ► Bucle do while Es igual al bucle while anteriormente visto, solo que ahora se evalúa la expresión al final del bucle, por lo que ese conjunto de sentencias se ejecuta al menos una vez: i=5; do {i --;} // las llaves aquí se pueden omitir puesto while ( i > 0 ) // que solo hay una sentencia. Este ejemplo similar al anterior para el bucle while se diferencia en que ejecuta una vez mas las sentencias en su cuerpo puesto que comprueba la condición posteriormente
47
Estructuras de control tipo bucle ► Sentencias Break, Continue y Return Antes hemos hablado de la sentencia Break con las bifurcaciones switch. Pues bien, esta sentencia tiene un valor mas amplio. La sentencia break nos permite salirnos del bloque de sentencias (encerrado entre llaves) o el bucle que estamos ejecutando, sin ejecutar las sentencias que resten para el final o las restantes iteraciones del bucle
48
Estructuras de control tipo bucle ► Por ejemplo: i=5; do{ i --; if (i == 3) break; } while ( i > 0 ) // En este ejemplo cuando i tenga el valor 3 // se abandonará el bucle.
49
Estructuras de control tipo bucle ► La sentencia Continue solo es válida para bucles, sirve para no ejecutar las sentencias que restan para la finalización de una iteración de ese bucle, continuando después con las siguientes iteraciones del bucle. Por ejemplo: i=5; do{ if (i == 3) continue; i --; }while ( i > 0 ) // En este ejemplo cuando i tenga el valor 3 // se abandonará la iteración y por tanto el // bucle no tendrá fin puesto que no se // ejecutaría la sentencia de decremento.
50
Estructuras de control tipo bucle ► Tanto la sentencia continue como break se pueden utilizar con etiquetas para poder discriminar los bucles que quieren afectar en caso de que se encuentren en un bucle anidado. Por ejemplo: Bucle1: for (int i=0; i<10; i++){ bucle2: for (int j=0; i<10; j++){ if (j==5) {break bucle2;} } } // cuando j llega a 5 el bucle2 deja de // ejecutarse hasta la siguiente iteracion // del bloque1
51
Estructuras de control tipo bucle ► Por último vemos la sentencia return. Esta sentencia nos permite finalizar también un conjunto de sentencias, con la peculiaridad esta vez de que también finaliza el método o función que en el que se encuentre. En el caso de que queramos devolver un valor desde esa función o método lo debemos poner a continuación de return. Por ejemplo: void funcionEjemplo(){ int i=0; while (i < 100){ i++; } return i; } //esta absurda función nos devuelve al llamarla el valor 100 como has podido comprobar //esta absurda función nos devuelve al llamarla el valor 100 como has podido comprobar
52
Estructura de un programa en Java ► En Java, como en cualquier otro lenguaje orientado a objetos, abandonamos el modo de entender un programa que utilizábamos anteriormente para aproximarnos a un modo más cercano a "la vida misma". Los programas ahora estarán divididos en clases. Una clase en si se puede entender como un programa independiente, tiene sus propios datos y también maneja esos datos "a su modo".
53
Estructura de un programa en Java ► La relación con la vida misma la podemos ver en el siguiente comentario: Imaginemos que dos clases tal y como las hemos explicado anteriormente son "la clase mecánico" y la "clase panadero". Cada una de estas clases tiene sus propias herramientas y sus propias tareas, por ejemplo, el panadero tiene "harina" y una de sus tareas es "amasar", mientras que el mecánico tiene "bujías" y una de sus tareas es "limpiar bujías". Lo importante de todo esto es que cada uno hace muy bien su tarea pero no tiene sentido "llevar el coche a la panadería de la esquina" ni "pedir una baguette junto con un cambio de aceite".
54
Clases en Java ► En si, las clases marcan la estructura básica de un programa tanto en Java como en la programación orientada a objetos en general. ► Una clase es el producto de enfocar la programación a los datos más que a las funciones. Por tanto es una colección de datos y además para operar con ellos una serie de funciones propias de la clase.
55
Clases en Java ► Los tipos de clases que podemos definir son: abstract ► Una clase abstract tiene al menos un método abstracto. Una clase abstracta no se instancia, sino que se utiliza como clase base para la herencia.
56
Clases en Java final ► Una clase final se declara como la clase que termina una cadena de herencia. No se puede heredar de una clase final. Por ejemplo, la clase Math es una clase final. public ► Las clases public son accesibles desde otras clases, bien sea directamente o por herencia. Son accesibles dentro del mismo paquete en el que se han declarado. Para acceder desde otros paquetes, primero tienen que ser importadas.
57
Clases en Java synchronizable ► Este modificador especifica que todos los métodos definidos en la clase son sincronizados, es decir, que no se puede acceder al mismo tiempo a ellos desde distintos threads; el sistema se encarga de colocar los flags necesarios para evitarlo. Este mecanismo hace que desde threads diferentes se puedan modificar las mismas variables sin que haya problemas de que se sobreescriban.
58
Clases en Java ► Variables y Métodos de Instancia ► Una clase en Java puede contener variables y métodos. Las variables pueden ser tipos primitivos como int, char, etc. Los métodos son funciones.
59
Clases en Java ► Por ejemplo, en el siguiente trozo de código podemos observarlo: public MiClase { public MiClase { int i; int i; public MiClase() { public MiClase() { i = 10; i = 10; } public void Suma_a_i( int j ) { public void Suma_a_i( int j ) { i = i + j; i = i + j; } }
60
Clases en Java ► La clase MiClase contiene una variable (i) y dos métodos, MiClase que es el constructor de la clase Suma_a_i( int j ).
61
Clases en Java Ámbito de una variable ► Los bloques de sentencias compuestas en Java se delimitan con dos llaves. Las variables de Java sólo son válidas desde el punto donde están declaradas hasta el final de la sentencia compuesta que la engloba. Se pueden anidar estas sentencias compuestas, y cada una puede contener su propio conjunto de declaraciones de variables locales. Sin embargo, no se puede declarar una variable con el mismo nombre que una de ámbito exterior.
62
Clases en Java ► El siguiente ejemplo intenta declarar dos variables separadas con el mismo nombre. En C y C++ son distintas, porque están declaradas dentro de ámbitos diferentes. En Java, esto es ilegal. Class Ambito { int i = 1; // ámbito exterior int i = 1; // ámbito exterior { // crea un nuevo ámbito { // crea un nuevo ámbito int i = 2; // error de compilación int i = 2; // error de compilación } }
63
Clases en Java Métodos y Constructores ► Los métodos son funciones que pueden ser llamadas dentro de la clase o por otras clases. El constructor es un tipo específico de método que siempre tiene el mismo nombre que la clase. ► Cuando se declara una clase en Java, se pueden declarar uno o más constructores opcionales que realizan la inicialización cuando se instancia (se crea una ocurrencia) un objeto de dicha clase.
64
Clases en Java Métodos y Constructores ► Utilizando el código de ejemplo anterior, cuando se crea una nueva instancia de MiClase, se crean (instancian) todos los métodos y variables, y se llama al constructor de la clase: MiClase mc; MiClase mc; mc = new MiClase(); mc = new MiClase(); ► La palabra clave new se usa para crear una instancia de la clase. Antes de ser instanciada con new no consume memoria, simplemente es una declaración de tipo.
65
Clases en Java Métodos y Constructores ► Después de ser instanciado un nuevo objeto mc, el valor de i en el objeto mc será igual a 10. Se puede referenciar la variable (de instancia) i con el nombre del objeto: mc.i++; // incrementa la instancia de i de mc mc.i++; // incrementa la instancia de i de mc ► Al tener mc todas las variables y métodos de MiClase, se puede usar la primera sintaxis para llamar al método Suma_a_i() utilizando el nuevo nombre de clase mc: mc.Suma_a_i( 10 ); mc.Suma_a_i( 10 ); ► y ahora la variable mc.i vale 21.
66
Clases en Java Finalizadores ► Java no utiliza destructores (al contrario que C++) ya que tiene una forma de recoger automáticamente todos los objetos que se salen del alcance. No obstante proporciona un método que, cuando se especifique en el código de la clase, el reciclador de memoria (garbage collector) llamará: // Cierra el canal cuando este objeto es reciclado // Cierra el canal cuando este objeto es reciclado protected void finalize() { protected void finalize() { close(); close(); }
67
Clases en Java Alcance de Objetos y Reciclado de Memoria ► Los objetos tienen un tiempo de vida y consumen recursos durante el mismo. Cuando un objeto no se va a utilizar más, debería liberar el espacio que ocupaba en la memoria de forma que las aplicaciones no la agoten (especialmente las grandes). ► En Java, la recolección y liberación de memoria es responsabilidad de un thread llamado automatic garbage collector. Este thread monitoriza el alcance de los objetos y marca los objetos que se han salido de alcance.
68
Clases en Java Alcance de Objetos y Reciclado de Memoria ► Ejemplo: String s; // no se ha asignado todavía String s; // no se ha asignado todavía s = new String( "abc" ); // memoria asignada s = new String( "abc" ); // memoria asignada s = "def"; // se ha asignado nueva memoria (nuevo objeto) s = "def"; // se ha asignado nueva memoria (nuevo objeto) ► La clase String crea un objeto String y lo rellena con los caracteres "abc" y crear otro (nuevo) String y colocarle los caracteres "def". ► En esencia se crean dos objetos: Objeto String "abc" Objeto String "abc" Objeto String "def" Objeto String "def" ► Al final de la tercera sentencia, el primer objeto creado de nombre s que contiene "abc" se ha salido de alcance. No hay forma de acceder a él. Ahora se tiene un nuevo objeto llamado s y contiene "def". Es marcado y eliminado en la siguiente iteración del thread reciclador de memoria.
69
Clases en Java ► ► Una clase es una agrupación de datos (variables o campos) y de funciones (métodos) que operan sobre esos datos. [public] class Classname { // definición de variables y métodos... }
70
Clases en Java ► ► La palabra public es opcional: si no se pone, la clase sólo es visible para las demás clases del package. Todos los métodos y variables deben ser definidos dentro del bloque {...} de la clase. ► ► Un objeto (en inglés, instance) es un ejemplar concreto de una clase. Las clases son como tipos de variables, mientras que los objetos son como variables concretas de un tipo determinado. Classname unObjeto; Classname otroObjeto;
71
Clases en Java Características importantes de las clases: 1. 1. Todas las variables y funciones de Java deben pertenecer a una clase. No hay variables y funciones globales. 2. 2. Si una clase deriva de otra (extends), hereda todas sus variables y métodos. 3. 3. Java tiene una jerarquía de clases estándar de la que pueden derivar las clases que crean los usuarios.
72
Clases en Java 4. 4. Una clase sólo puede heredar de una única clase (en Java no hay herencia múltiple). Si al definir una clase no se especifica de qué clase deriva, por defecto la clase deriva de Object. La clase Object es la base de toda la jerarquía de clases de Java.
73
Clases en Java ► ► 5. En un archivo se pueden definir varias clases, pero en un archivo no puede haber más que una clase public. Este archivo se debe llamar como la clase public que contiene con extensión *.java. Con algunas excepciones, lo habitual es escribir una sola clase por archivo. ► ► 6. Si una clase contenida en un archivo no es public, no es necesario que el archivo se llame como la clase.
74
Clases en Java 7. 7. Los métodos de una clase pueden referirse de modo global al objeto de esa clase al que se aplican por medio de la referencia this. 8. 8. Las clases se pueden agrupar en packages, introduciendo una línea al comienzo del fichero (package packageName;). Esta agrupación en packages está relacionada con la jerarquía de directorios y archivos en la que se guardan las clases.
75
Clases en Java ► ► Concepto de Interface ► ► Una interface es un conjunto de declaraciones de funciones. Si una clase implementa (implements) una interface, debe definir todas las funciones especificadas por la interface. Las interfaces pueden definir también variables finales (constantes). Una clase puede implementar más de una interface, representando una forma alternativa de la herencia múltiple.
76
Clases en Java ► ► En algunos aspectos las interfaces pueden utilizarse en lugar de las clases. Por ejemplo, las interfaces sirven para definir referencias a cualquier objeto de las clases que implementan esa interface. Este es un aspecto importante del polimorfismo. ► ► Una interface puede derivar de otra o incluso de varias interfaces, en cuyo caso incorpora las declaraciones de todos los métodos de las interfaces de las que deriva.
77
Herencia ► La Herencia es el mecanismo por el que se crean nuevos objetos definidos en términos de objetos ya existentes. Por ejemplo, si se tiene la clase Ave, se puede crear la subclase Pato, que es una especialización de Ave. class Pato extends Ave { class Pato extends Ave { int numero_de_patas; int numero_de_patas; }
78
Herencia ► La palabra clave extends se usa para generar una subclase (especialización) de un objeto. Una Pato es una subclase de Ave. Cualquier cosa que contenga la definición de Ave será copiada a la clase Pato, además, en Pato se pueden definir sus propios métodos y variables de instancia. Se dice que Pato deriva o hereda de Ave. ► Además, se pueden sustituir los métodos proporcionados por la clase base
79
Herencia ► Utilizando nuestro anterior ejemplo de MiClase, aquí hay un ejemplo de una clase derivada sustituyendo a la función Suma_a_i(): import MiClase; import MiClase; public class MiNuevaClase extends MiClase { public class MiNuevaClase extends MiClase { public void Suma_a_i( int j ) { public void Suma_a_i( int j ) { i = i + ( j/2 ); i = i + ( j/2 ); } }
80
Herencia ► Ahora cuando se crea una instancia de MiNuevaClase, el valor de i también se inicializa a 10, pero la llamada al método Suma_a_i() produce un resultado diferente: MiNuevaClase mnc; MiNuevaClase mnc; mnc = new MiNuevaClase(); mnc = new MiNuevaClase(); mnc.Suma_a_i( 10 ); mnc.Suma_a_i( 10 );
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.