Java Java 1995 fue desarrollado en Sun Microsystems

  • Slides: 56
Download presentation
Java • Java (1995) fue desarrollado en Sun Microsystems por James Gosling, Bill Joy

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 n 1

Java • Objetivo inicial: un lenguaje de programación para dispositivos de consumo • Requerimientos:

Java • Objetivo inicial: un lenguaje de programación para dispositivos de consumo • Requerimientos: pequeño, rápido, confiable y portable • En 1994 se produce la explosión del Web, y Sun advierte que Java es ideal para aplicaciones Internet: – Independiente de la plataforma – Pequeño – Seguro n 2

El Lenguaje Java • • Independiente de la plataforma Seguro Simple Robusto Orientado a

El Lenguaje Java • • Independiente de la plataforma Seguro Simple Robusto Orientado a Objetos Distribuido Multi-threaded • Ref: http: //www. oracle. com/technetwork/javase/documentation/index. html n 3

El Modelo Java • Al compilar un programa Java, se genera un código de

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 n 4

El Modelo Java • El código bytecode es portable entre diferentes plataformas n 5

El Modelo Java • El código bytecode es portable entre diferentes plataformas n 5

Tipos de Archivos Java • Todo archivo define una clase o una interfaz •

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 n 6

Un archivo básico para hacer un programa que corra public class Mi. Clase {

Un archivo básico para hacer un programa que corra public class Mi. Clase { static public void main(String[] args) { Aqui van las instrucciones que se ejecutarán cuando se “eche a correr” la clase } } • El programa debe ser escrito en un archivo llamado Mi. Clase. java (Mi. Clase es el nombre de la “clase” y lo inventa el programador, por convención empieza con mayúscula • Al compilarse se generará el archivo Mi. Clase. class, que es el que se ejecuta • Si se cambia algo en el programa hay que compilarlo de nuevo para que se refleje el cambio en el archivo class 7 n

Ejemplo 1 import java. util. *; //para usa Scanner public class Mi. Clase {

Ejemplo 1 import java. util. *; //para usa Scanner public class Mi. Clase { static public void main(String[] args) { Scanner s = new Scanner(System. in); System. out. print(″Distancia (metros) ? ″); double d = s. next. Double(); System. out. print(″Tiempo (segundos) ? ″); double t = s. next. Double(); double v = (d/1000)/(t/3600); System. out. println(″Velocidad = ″+v+″ km/h″); } } n 8

Ejemplo 2 import java. util. *; //para usa Scanner public class Chequeo. Edad {

Ejemplo 2 import java. util. *; //para usa Scanner public class Chequeo. Edad { static public void main(String[] args) { Scanner s = new Scanner(System. in); System. out. print(″Cual es tu nombre ? ″); String nomb = s. nect. Line(); System. out. print(″Qué año nasciste ? ″); int an = s. next. Int(); int mls = System. current. Time. Millis(); int ah = (int)(mls/1000/3600/24/365. 25 +1970); System. out. print(nomb+″ tiene cerca de “); System. out. print((an-ah)+” años “); } } n 9

Características del Lenguaje • Case-sensitive: diferencias entre mayúsculas y minúsculas • Todas las sentencias

Características del Lenguaje • Case-sensitive: diferencias entre mayúsculas y minúsculas • Todas las sentencias terminan con un puntocoma (; ) • Los espacios blancos (incluyendo tabs y fines de línea) se ignoran, excepto al interior de strings n 10

Comentarios // comentario /* comentario */ /** comentario */ Caracteres desde // hasta el

Comentarios // comentario /* comentario */ /** comentario */ Caracteres desde // hasta el fin de línea son ignorados Caracteres entre /* y */ son ignorados Caracteres entre /** y */ son ignorados e incluidos en la documentación javadoc n 11

Javadoc n 12

Javadoc n 12

Identificadores • Nombre dado a una variable, clase, o método • Comienza con una

Identificadores • Nombre dado a una variable, clase, o método • Comienza con una letra Unicode (incluyendo _ y $), a la que pueden seguir letras y dígitos • Puede tener cualquier tamaño • Ejemplos – apellido –$ – n 13

Tipos, Valores y Variables • En Java existen 2 categorías de tipos: tipos –

Tipos, Valores y Variables • En Java existen 2 categorías de tipos: tipos – Primitivos: Primitivos boolean, char, byte, short, int, long, float, double – Referencias: Referencias objetos, interfaces, arreglos • Una variable es un espacio de memoria que puede almacenar: Tipo de la variable Puede almacenar Primitivo Un valor del tipo que se declaró Clase El valor null, o una referencia a una instancia de la clase o de alguna subclase de la clase Interfaz El valor null, o una referencia a una instancia de alguna clase que implemente la interfaz Arreglo El valor null, o una referencia a un arreglo de elementos del tipo del arreglo n 14

Tipos de Datos Primitivos Tipo Valores boolean true o false char Carácter Unicode (de

Tipos de Datos Primitivos Tipo Valores boolean true o false char Carácter Unicode (de 16 bits) byte Entero de 8 bits (con signo) short Entero de 16 bits (con signo) int Entero de 32 bits (con signo) long Entero de 64 bits (con signo) float Número flotante de 32 bits double Número flotante de 64 bits n 15

Variables • Una variable es un espacio de almacenamiento de datos, con un nombre

Variables • Una variable es un espacio de almacenamiento de datos, con un nombre y un tipo de datos asociado • La existencia de una variable está dada por su alcance: – static (variable "de clase"): se crea una vez, sin importar cuántas instancias de la clase existan – no static (variable "de instancia"): se crea una vez por cada instancia de la clase – local: ocal se crea al ejecutarse la declaración, y desaparece al finalizar el bloque en el que fue creada n 16

Valores Iniciales • Variables de instancia y de clase – tipos primitivos numéricos –

Valores Iniciales • Variables de instancia y de clase – tipos primitivos numéricos – char – boolean – referencias 0 'u 0000' false null • Variables locales – Deben ser inicializadas explícitamente antes de ser usadas; de lo contrario se produce un error de compilación n 17

Constantes • Una vez inicializadas, no pueden ser modificadas • Se utiliza la palabra

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, static para no instanciarlas con cada objeto • Ejemplo class Circulo { static final double PI = 3. 1416; } n 18

Conversión de Tipos • Java es fuertemente tipeado – Chequea compatibilidad de tipos en

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 n 19

Conversion Implícita • Cualquier valor numérico puede ser asignado a una variable numérica que

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; n 20

Cast Explícito • Cuando una conversión implícita no es posible, un cast explicita la

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 n 21

Cast de Tipos Primitivos • Puede perderse precisión double d = 20. 5; long

Cast de Tipos Primitivos • Puede perderse precisión double d = 20. 5; long l = (long) d; System. out. println(l); 20 • Pueden perderse dígitos long l = 1000000; short s; s = (short) l; System. out. println(s); 16960 n 22

Bloque • Cualquier número de sentencias agrupadas entre un par de llaves { }

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 n 23

Ambito de Variables public class Mi. Clase { int a; static int b; public

Ambito de Variables public class Mi. Clase { int a; static int b; public void mi. Metodo( ) { int c; if (condicion){ { int d; . . . } } d fuera de ámbito } c fuera de ámbito } a y b fuera de ámbito n 24

Operador de Asignación • Se usa el símbolo = para asignar un valor •

Operador de Asignación • Se usa el símbolo = para asignar un valor • Ejemplo sueldo = 1000000; validado = true; • La asignación puede ocurrir en la declaración String nombre = "Paula"; n 25

Operadores Aritméticos + * / % Suma Resta Multiplicación División Resto n 26

Operadores Aritméticos + * / % Suma Resta Multiplicación División Resto n 26

Métodos Estáticos • Se identifican con el selector static • Devuelven o no un

Métodos Está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 ! n 27

Métodos en la misma clase public class Mi. Clase { ststic public int suma(int

Métodos en la misma clase public class Mi. Clase { ststic public int suma(int x, int y ) { return x+y; } static public int suma(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)); } } n 28

Métodos en otra clase public class Sumas { //En archivo Sumas. java public int

Métodos en otra clase public class Sumas { //En archivo Sumas. java public int suma(int x, int y ) { return x+y; } static public int suma(int x, int y, int z) { return x+y+z } } public class Mi. Clase { //En archivo Mi. Clase. java static public void main(String[] args) { System. out. println(Sumas. suma(5, 4)+” “+ Sumas. suma(2, 3, 4)); } } n 29

Parámetros pasdos por valor public static int fact(int x) { resultado = 1; while

Parámetros pasdos por valor public static int fact(int x) { resultado = 1; while (x > 1) { resultado *= x; x--; } return resultado; } public static void main(String[] args) { Scanner c = new Scanner(System. in); System. out. print(“ingrese un numero: ”); int numero = c. next. Int(); int res = fact(numero); System. out. println(“El factorial de “+numero+” es “+res); //numero no se modifica porque se le pasa una copia }

Operadores Abreviados var op= expression es equivalente a: var = var op (expression) •

Operadores Abreviados var op= expression es equivalente a: var = var op (expression) • Ejemplo a *= b + 1; es equivalente a: a = a * (b + 1); n 31

Incremento y Decremento • i++ es equivalente a i = i + 1 i--

Incremento y Decremento • i++ es equivalente a i = i + 1 i-- es equivalente a i = i - 1 • El valor de la expresión es el valor de la variable antes o después de la operación, según si el operador se encuentra a la izquierda o a la derecha del operando • Ejemplo int x = 10; System. out. println( x++ ); System. out. println( ++x ); System. out. println( x ); // x=11, print 10 // x=12, print 12 // print 12 n 32

Sentencias de Control de Flujo • • • if / else switch for while

Sentencias de Control de Flujo • • • if / else switch for while do / while n 33

if if ( result == 0 ) { System. out. println("No encontrado!"); } n

if if ( result == 0 ) { System. out. println("No encontrado!"); } n 34

if / else if (rol. equals("administrador")) { // acceso a administración; } else {

if / else if (rol. equals("administrador")) { // acceso a administración; } else { // no tiene acceso a administración } n 35

Operadores Relacionales > >= < <= == != Mayor o igual Menor o igual

Operadores Relacionales > >= < <= == != Mayor o igual Menor o igual Igual Distinto n 36

Operadores Lógicos && || ! and or not • Ejemplo boolean fin = eof

Operadores Lógicos && || ! and or not • Ejemplo boolean fin = eof || (str != null && str. equals(patron)); n 37

if / else public static dias. Vac(int años) { if ( años < 0

if / else public static dias. Vac(int añ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; } n 38

Operador "? " • Expresión condicional: – condición ? expresión 1 : expresión 2

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 monto. Neto = hay. Impuesto ? p * 1. 05 : p; es equivalente a: if (hay. Impuesto) { monto. Neto = p * 1. 05; } else { monto. Neto = p; } n 39

Más ejemplos: static public int factorial(int x){ return x==0 ? 1 : x*factorial(x-1); }

Más ejemplos: static public int factorial(int x){ return x==0 ? 1 : x*factorial(x-1); } es equivalente a: static public int if(x==0) return } static public int return x<10 ? 1 } factorial(int x){ 1; else return x*factorial(x-1); digitos(int x){ : 1+digitos(x/10); es equivalente a: static public int digitos(int x){ if(x<10) return 1; else return 1+digitos(x/10); } n 40

while y do while • Sintaxis 1: se ejecuta 0 o más veces while

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 ); n 41

break • break causa el fin del ciclo en el que se encuentra while

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… } n 42

continue • continue causa el fin de la iteración actual y el paso a

continue • continue causa el fin de la iteración actual y el paso a la siguiente while ( condición ) { sentencias… if (condición siguiente iteración) { continue; } más sentencias… } (ver ejemplos instrucciones especiales) n 43

Programa que calcule el promedio de una cantidad indeterminada de números: Scanner s =

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. next. Double(); while( numero != 0 ) { suma=suma+numero; n=n+1; System. out. println(“promedio=”+suma/n); numero=s. next. Double(); } n 44

Refinamiento : La asignación como expresión Scanner s = new Scanner(System. in); double suma,

Refinamiento : La asignación como expresión Scanner s = new Scanner(System. in); double suma, numero; int n; suma = n = 0; while((numero=s. next. Double())!=0) System. out. println(“promedio=” + (suma=suma+numero)/(n=n+1)); } //otra posibilidad System. out. println(“promedio=”+ (suma+=numero)/(n+=1)); n 45

switch • Selección múltiple • switch <expresión> debe evaluar un int • case <expresión>

switch • 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 switch (<expresión>) { case <expresión>: . . . break; } default: . . . n 46

Ejemplo de switch public static void main(String[] args) { switch (args. length) { case

Ejemplo de switch public static void main(String[] args) { switch (args. length) { case 0: File. Editor e = new File. Editor(); break; case 1: File. Editor e = new File. Editor(args[0]); break; default: // mensaje de error y fin } } n 47

Función que entregue el Nº de días de un mes static public int dias.

Función que entregue el Nº de días de un mes static public int dias. Mes(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-else if-. . . -else int d=0; if( x==1

Solución 2. Con selección múltiple if-else if-. . . -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: case 2:

Solución 3. Con Instrucción switch (una evaluación) int d; switch(x){ case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12: default: } return d; d=31; d=28; d=31; d=30; d=31; d=0; break; break; break;

Solución 4 int d=0; switch(x){ case 1: case 3: case d=31; break; case 4:

Solución 4 int d=0; switch(x){ case 1: case 3: case d=31; break; case 4: case 6: case d=30; break; case 2: d=28; break; } return d; alternativamente: switch(x){ case 1: case 3: case return 31; case 4: case 6: case return 30; case 2: return 28; } return 0; 5: case 7: case 8: case 10: case 12: 9: case 11:

for • Sintaxis for (inicialización; condición; reinicialización) { sentencias } • Nota – inicialización

for • Sintaxis for (inicialización; condición; reinicialización) { sentencias } • Nota – inicialización y reinicialización pueden ser listas de expresiones separadas por comas n 52

Ejemplo de for ( x=0; x<10; x++ ) { // ejecuta el bloque mientras

Ejemplo de for ( x=0; x<10; x++ ) { // ejecuta el bloque mientras x < 10 } for ( x=0, y=0; y<20; x++, y+=x ) { // ejecuta el bloque mientras y < 20 } n 53

Ejemplo de for static public boolean primo(int x) { if(x%2==0) return x==2; for(int i=3;

Ejemplo de for static public boolean primo(int x) { if(x%2==0) return x==2; for(int i=3; i<=(int)Math. sqrt(x); i+=2) if(x%i==0) return false; return true; } System. out. println(“primos terminados en 1: ”); for(int i=1; i<=100; i+=10) if(primo(i)) U. println(i); System. out. println(“primos terminados en 3: ”); for(int i=3; i<=100; i+=10) if(primo(i)) U. println(i); for(int i=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); } n 54

Etiquetas (Labels) • Los labels se usan típicamente en bloques y ciclos • Un

Etiquetas (Labels) • Los labels se usan típicamente en bloques y ciclos • Un label es un identificador seguido de dos puntos: Label 1: • El label identifica la siguiente sentencia n 55

Ejemplo search: for (. . . ) { for (…) { if (. .

Ejemplo search: for (. . . ) { for (…) { if (. . . ) { break search; } } } n 56