410 likes | 601 Vues
Java. Java (1995) fue desarrollado en Sun Microsystems por James Gosling, Bill Joy y Guy Steele Influenciado por C++ Soporta clases, encapsulación, herencia simple, polimorfismo, interfaces, garbage collection. El Modelo Java.
E N D
Java • Java (1995) fue desarrollado enSun Microsystems por James Gosling, Bill Joy y Guy Steele • Influenciado por C++ • Soporta clases, encapsulación, herencia simple, polimorfismo, interfaces, garbage collection
El Modelo Java • Al compilar un programa Java, se genera un código de máquina intermedio definido por Sun, que recibe el nombre de bytecode
El Modelo Java • El códigobytecodees portable entre diferentesplataformas
Tipos de Archivos Java • Todo archivo define una clase o una interfaz • Clase: • Define e implementa un tipo de objeto • Variables (representación) • Procedimientos (funciones) • estáticos (especial: main) • y dinámicos (se ejecutan sobre un objeto) • Interfaz • Define la firma de un procedimiento
Un archivo básico para hacer un programa que corra public class MiClase{ static public void main(String[] args) { Aquivan lasinstruccionesque se ejecutaráncuando se “eche a correr” la clase } } • El programadebe ser escrito en un archivollamadoMiClase.java (MiClasees el nombre de la “clase” y lo inventa el programador, porconvenciónempieza con mayúscula • Al compilarse se generará el archivoMiClase.class, quees el que se ejecuta • Si se cambia algo en el programa hay quecompilarlo de nuevoparaque se refleje el cambio en el archivo class
Ejemplo 1 import java.util.*; //parausa Scanner public class MiClase { static public void main(String[] args) { Scanner s = new Scanner(System.in); System.out.print(″Distancia (metros) ? ″); double d = s.nextDouble(); System.out.print(″Tiempo (segundos) ? ″); double t = s.nextDouble(); double v = (d/1000)/(t/3600); System.out.println(″Velocidad = ″+v+″ km/h″); } }
Ejemplo 2 import java.util.*; //parausa Scanner public class ChequeoEdad { static public void main(String[] args) { Scanner s = new Scanner(System.in); System.out.print(″Cualestunombre ? ″); String nomb = s.nectLine(); System.out.print(″Quéañonasciste ? ″); int an = s.nextInt(); intmls = System.currentTimeMillis(); int ah = (int)(mls/1000/3600/24/365.25 +1970); System.out.print(nomb+″ tienecerca de “); System.out.print((an-ah)+” años “); } }
Tipos, Valores y Variables • En Java existen 2 categorías de tipos: • Primitivos: boolean, char, byte, short, int, long, float, double • Referencias: objetos, interfaces, arreglos • Una variable es un espacio de memoria que puede almacenar:
Constantes • Una vez inicializadas, no pueden ser modificadas • Se utiliza la palabra reservada final para definir una constante • Típicamente las constantes se definen como static, para no instanciarlas con cada objeto • Ejemplo class Circulo { static final double PI = 3.1416; }
Conversión de Tipos • Java es fuertemente tipeado • Chequea compatibilidad de tipos en tiempo de compilación • Permite hacer cast entre tipos • Provee operadores para determinar el tipo de un objeto en tiempo de ejecución
Conversion Implícita • Cualquier valor numérico puede ser asignado a una variable numérica que seoporte un rango de valores más amplio byte short int long float double más chico más grande • Ejemplo int i = 1000; double d = i;
Cast Explícito • Cuando una conversión implícita no es posible, un cast explicita la conversión a realizar • Sólo se permiten casts que tienen sentido
Cast de TiposPrimitivos • Puede perderse precisión double d = 20.5; long l = (long) d; System.out.println(l); • Pueden perderse dígitos long l = 1000000; short s; s = (short) l; System.out.println(s); 20 16960
Bloque • Cualquier número de sentencias agrupadas entre un par de llaves { } • Puede ser usado en cualquier lugar donde se acepta una sentencia simple • El bloque define el ámbito (scope) de las variables • El bloque provee contornos para el control de flujo del procesamiento
Ambito de Variables public class MiClase{ int a; static int b; public void miMetodo( ) { int c; if (condicion){ { int d; . . . } } d fuera de ámbito } c fuera de ámbito } a y b fuera de ámbito
MétodosEstáticos • Se identifican con el selector static • Devuelven o no un resultado de un cierto tipo • Reciben un número determinado de parámetros de tipo determinado • Métodos de igual nombre pero con distinto número o tipo de parámetros son métodos distintos !
Métodos en la mismaclase public class MiClase{ ststic public intsuma(int x, int y ) { return x+y; } static public intsuma(int x, int y, int z) { return x+y+z } static public void main(String[] args) { System.out.println(suma(5,4)+” “+suma(2,3,4)); } }
Métodos en otraclase public class Sumas { //En archivo Sumas.java public intsuma(int x, int y ) { return x+y; } static public intsuma(int x, int y, int z) { return x+y+z } } public class MiClase{ //En archivo MiClase.java static public void main(String[] args) { System.out.println(Sumas.suma(5,4)+” “+ Sumas.suma(2,3,4)); } }
Sentencias de Control de Flujo • if / else • switch • for • while • do / while
if if ( result == 0 ) { System.out.println("No encontrado!"); }
if / else if (rol.equals("administrador")) { // acceso a administración; } else { // no tieneacceso a administración }
OperadoresRelacionales > Mayor >= Mayor o igual < Menor <= Menor o igual ==Igual != Distinto
OperadoresLógicos && and || or ! not • Ejemplo boolean fin = eof || (str != null && str.equals(patron));
if / else if / else public static diasVac(intaños) { if ( años < 0 || años > 100) vacaciones = -1; if ( años < 5 ) { vacaciones = 10; } else if ( años < 10 ) { vacaciones = 15; } else { vacaciones = 20; } return vacaciones; }
Operador "?" • Expresión condicional: • condición ? expresión 1: expresión 2 • El valor de la expresión es expresión 1 si la condición es verdadera, y expresión 2 de lo contrario • Ejemplo montoNeto = hayImpuesto ? p * 1.05 : p; es equivalente a: if (hayImpuesto) { montoNeto = p * 1.05; } else { montoNeto = p; }
Másejemplos: static public intfactorial(int x){ return x==0 ? 1 : x*factorial(x-1); } esequivalente a: static public intfactorial(int x){ if(x==0) return 1; else return x*factorial(x-1); } static public intdigitos(int x){ return x<10 ? 1 : 1+digitos(x/10); } esequivalente a: static public intdigitos(int x){ if(x<10) return 1; else return 1+digitos(x/10); }
while y do while • Sintaxis 1: se ejecuta 0 o más veces while ( condición ) { sentencias } • Sintaxis 2: se ejecuta 1 o más veces do { sentencias } while ( condición );
break • break causa el fin del ciclo en el que se encuentra while ( condición ) { sentencias… if (condición de salida) { break; } más sentencias… }
continue • continuecausa el fin de la iteración actual y el paso a la siguiente while ( condición ) { sentencias… if (condiciónsiguienteiteración) { continue; } mássentencias… } (verejemplosinstruccionesespeciales)
Programa que calcule el promedio de una cantidad indeterminada de números: Scanner s = new Scanner(System.in); double suma=0; int n=0; double numero=s.nextDouble(); while( numero != 0 ) { suma=suma+numero; n=n+1; System.out.println(“promedio=”+suma/n); numero=s.nextDouble(); }
Refinamiento : La asignación como expresión Scanner s = new Scanner(System.in); double suma, numero; int n; suma = n = 0; while((numero=s.nextDouble())!=0) System.out.println(“promedio=” + (suma=suma+numero)/(n=n+1)); } //otra posibilidad System.out.println(“promedio=”+ (suma+=numero)/(n+=1));
switch switch (<expresión>) { case <expresión>: ... break; case <expresión>: ... break; default: ... } • Selección múltiple • switch <expresión> debe evaluar un int • case <expresión> debe ser un literal o un campo static final • break abandona el bloque del switch (de otra manera los siguientes cases son ejecutados sin ser evaluados) • El bloque default es opcional
Ejemplo de switch public static void main(String[] args) { switch (args.length) { case 0: FileEditor e = new FileEditor(); break; case 1: FileEditor e = new FileEditor(args[0]); break; default: // mensaje de error y fin } }
Función que entregue el Nº de días de un mes static public intdiasMes(int x){ ... } Solución 1. Con if sin else int d=0; if( x==1 ) d=31; if( x==2 ) d=28; if( x==3 ) d=31; if( x==4 ) d=30; if( x==5 ) d=31; if( x==6 ) d=30; if( x==7 ) d=31; if( x==8 ) d=31; if( x==9 ) d=30; if( x==10 ) d=31; if( x==11 ) d=30; if( x==12 ) d=31; return d; evalúa 12 condiciones siempre
Solución 2. Con selección múltiple if-elseif-...-else int d=0; if( x==1 ) d=31; else if( x==2 ) d=28 else if( x==3 ) d=31; else if( x==4 ) d=30; else if( x==5 ) d=31; else if( x==6 ) d=30; else if( x==7 ) d=31; else if( x==8 ) d=31; else if( x==9 ) d=30; else if( x==10 ) d=31; else if( x==11 ) d=30; else if( x==12 ) d=31; return d; evalúa x condiciones (12 en el peor caso)
Solución 3. Con Instrucción switch (una evaluación) int d; switch(x){ case 1: d=31; break; case 2: d=28; break; case 3: d=31; break; case 4: d=30; break; case 5: d=31; break; case 6: d=30; break; case 7: d=31; break; case 8: d=31; break; case 9: d=30; break; case 10: d=31; break; case 11: d=30; break; case 12: d=31; break; default: d=0; } return d;
Solución 4 int d=0; switch(x){ case 1:case 3:case 5:case 7:case 8:case 10:case 12: d=31; break; case 4:case 6:case 9:case 11: d=30; break; case 2: d=28; break; } return d; alternativamente: switch(x){ case 1:case 3:case 5:case 7:case 8:case 10:case 12: return 31; case 4:case 6:case 9:case 11: return 30; case 2: return 28; } return 0;
for • Sintaxis for (inicialización; condición; reinicialización) { sentencias } • Nota • inicialización y reinicialización pueden ser listas de expresiones separadas por comas
Ejemplo de for for ( x=0; x<10; x++ ) { // ejecuta el bloquemientras x < 10 } for ( x=0, y=0; y<20; x++, y+=x ) { // ejecuta el bloquemientras y < 20 }
Ejemplo de for static public boolean primo(int x){ if(x%2==0) return x==2; for(inti=3; i<=(int)Math.sqrt(x); i+=2) if(x%i==0) return false; return true; } System.out.println(“primos terminados en 1:”); for(inti=1; i<=100; i+=10) if(primo(i)) U.println(i); System.out.println(“primos terminados en 3:”); for(inti=3; i<=100; i+=10) if(primo(i)) U.println(i); for(inti=1; i<=9; i+=2){ System.out.println(“primos terminados en “+i); for(int j=i; j<=100; j+=10) if(primo(j)) U.println(j); }