Java Java 1995 fue desarrollado en Sun Microsystems

  • Slides: 35
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++ • Implementa clases, encapsulación, herencia simple, polimorfismo, interfaces, garbage collection n 1

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 2

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

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

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 (uno especial: main) • y dinámicos (se ejecutan sobre un objeto) • Interfaz – Define la firma de un procedimiento n 4

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

Ejemplo 1 Programa lee dos números del teclado y dice cual es el mayor

Ejemplo 1 Programa lee dos números del teclado y dice cual es el mayor y el menor SIN USAR INSTRUCCIONES CONDICIONALES 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(″Numeros ? ″); double n 1 = s. next. Double(); double n 2 = s. next. Double(); double m = (n 1+n 2)/2, mdif = Math. abs((n 1 -n 2)/2); System. out. println(″Menor = ″+(m+mdif)); System. out. println(″Mayor = ″+(m-mdif)); } } n 6

Ejemplo 2 Programa que lee un número entero que contiene una fecha en formato

Ejemplo 2 Programa que lee un número entero que contiene una fecha en formato aaaammdd y lo imprime como dd/mm/aaaa import java. util. *; //para usa Scanner public class Cambiar. Formato. Fecha { static public void main(String[] args) { Scanner U = new Scanner(System. in); System. out. print(“Fecha en aaaammdd : “); int n = U. next. Int(); int a=n/10000, d=n%100, a=n%10000/100; System. out. print(“Fecha en dd/mm/aaaa : “); System. out. print(d+“/”+m+”/“+a); } } n 7

Tipos, Valores y Variables • Una variable en Java puede almacenar 2 tipos de

Tipos, Valores y Variables • Una variable en Java puede almacenar 2 tipos de valores: – Primitivos: Primitivos variable corresponde a un nombre nemotécnico de un lugar en la memoria donde está guardado el valor – Referencias: Referencias variable corresponde a un nombre del lugar en memoria que contiene la dirección donde está almacenado el dato • Variables primitivas y referencias son fuertemente “tipeadas” n 8

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 9

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 10

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

Conversión 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 11

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 12

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 13

Funciones Matemáticas Predefinidas import java. util. *; //para usa Scanner public class Triangulo {

Funciones Matemáticas Predefinidas import java. util. *; //para usa Scanner public class Triangulo { static public void main(String[] args) { System. out. println(“triángulo: lados a, b, y angulo alfa”); Scanner U = new Scanner(System. in); System. out. println(“a b alfa ”), double a = U. next. Double(), b=U. next. Double(), alfa = U. next. Double()* Math. PI/180; double c = Math. sqrt(Math. pow(a * Math. sin(alfa), 2)+ Math. pow(b - a * Math. cos(alfa), 2)); System. out. println(“Perímetro=” + (a+b+c)); double s=(a+b+c)/2; //semi-perimetro System. out. println(“Area=“+Math. sqrt(s*(s-a)*(s-b)*(s-c))); } } n 14

Funciones definidas en clase Math

Funciones definidas en clase Math

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 16

Métodos escritos y usados en la misma clase public class Mi. Clase { ststic

Métodos escritos y usados en la misma clase public class Mi. Clase { ststic public int mayor(int x, int y ) { return (x+y)/2+Math. abs((x-y)/2); } static public int mayor(int x, int y, int z) { return mayor(x, mayor(y, z)); } static public void main(String[] args) { System. out. println(mayor(5, 4)+” “+mayor(2, 3, 4)); } } n 17

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

Métodos en otra clase class F { //En archivo F. java static public int aaaammdd(int x){ int d = x/1000000, m = x/10000%100, a = x%10000; return a*10000 + m*100 + d; } static public int ddmmaaaa(int x){ int d = x%100, m = x/100%100, a = x/10000; return a + m*10000 + d*1000000; } } public class Mi. Clase { //En archivo Mi. Clase. java static public void main(String[] args) { int f 1=15032015, f 2=25052014; // fecha DDMMAAAA System. out. println(“mayor=“+ Math. max( F. aaaammdd(f 1), F. aaaammdd(f 2))); } }

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

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

If / if else Ejercicio. Escribir un programa que establezca el siguiente diálogo: Nota?

If / if else Ejercicio. Escribir un programa que establezca el siguiente diálogo: Nota? ___ Calificación = … En que la calificación se determina de acuerdo a la siguiente tabla: Nota 1. 0 – 3. 9 4. 0 – 4. 9 5. 0 – 5. 9 6. 0 – 7. 0 < 1. 0 o > 7. 0 calificación reprobado aprobado distinción máxima fuera de rango n 20

Solución 1: con if sin else nota= un. Scanner. next. Double(); System. out. print(“Calificacion=“);

Solución 1: con if sin else nota= un. Scanner. next. Double(); System. out. print(“Calificacion=“); if (1. 0 <= nota && nota <= 3. 9) System. out. println(“reprobado”); if (4. 0 <= nota && nota <= 4. 9) System. out. println(“aprobado”); if (5. 0 <= nota && nota <= 5. 9) System. out. println(“distinción”); if (6. 0 <= nota && nota <= 7. 0) System. out. println(“distinción máxima”); if (nota < 1. 0 || nota > 7. 0) System. out. println(“fuera de rango”); Nota. Siempre evalúa las 5 condiciones n 21

Solución 2: con selección múltiple if (1. 0 <= nota && nota <= 3.

Solución 2: con selección múltiple if (1. 0 <= nota && nota <= 3. 9) System. out. println(“reprobado”); else if 4. 0 <= nota && nota <= 4. 9 System. out. println(“aprobado”); else if 5. 0 <= nota && nota <= 5. 9) System. out. println(“distinción”); else if 6. 0 <= nota && nota <= 7. 0 System. out. println(“distinción máx”); else System. out. println(“fuera de rango”); Nota. más eficiente (evalúa sólo hasta la 1ª condición verdadera) n 22

Solución 3: más breve y eficiente (condiciones simples) if (nota < 1 || nota

Solución 3: más breve y eficiente (condiciones simples) if (nota < 1 || nota > 7) System. out. print(“Fuera de rango”); else if (nota < 4) System. out. print(“reprobado”); else if (nota < 5) System. out. print(“aprobado”); else if (nota < 6) System. out. print(“distinción”); else System. out. print(“distinción máxima”); n 23

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

Operadores Relacionales > >= < <= == != Mayor o igual Menor o igual Igual Distinto Operadores Lógicos && || ! and or not n 24

Ejemplo dias. Mes static public int dias. Mes(int m, int a){ if(m==1||m==3||m==5||m==7||m==8||m==10||m==12) return 31;

Ejemplo dias. Mes static public int dias. Mes(int m, int a){ if(m==1||m==3||m==5||m==7||m==8||m==10||m==12) return 31; else if(m==4||m==6||m==9||m==11) return 30; else if(m==2)//if(cond simple) sin else if(bisiesto(a)) return 29; else return 28; return 0; //mes incorrecto } static public boolean bisiesto(int x){ return x%4==0 && x%100!=0 || x%400==0; } n 25

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 26

Ejemplo dias. Mes Con switch int d; switch(x){ case 1: case 2: case 3:

Ejemplo dias. Mes Con switch 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 2 int d=0; switch(x){ case 1: case 3: case 5: case 7: case

Solución 2 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;

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 29

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 30

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 31

Ejemplos //tabla celsius – fahrenheit cada 5°C int g=-20; while(g<=40){ System. out. println(g+”ºC=“+(9. 0/5.

Ejemplos //tabla celsius – fahrenheit cada 5°C int g=-20; while(g<=40){ System. out. println(g+”ºC=“+(9. 0/5. 0*g+32)+”ºF”); g=g+5; } //calculo de promedio de notas válidas int suma = 0, n = 0; Scanner U = new Scanner(System. in); while(true) { double x = U. next. Double(); if (x == 0) break; // fin de datos if (x < 1. 0 || x > 7. 0) continue; suma += x; x++; } System. out. println(“Promedio = “+suma/n);

Operadores especiales double suma, mayor, numero; int n; suma = mayor = n =

Operadores especiales double suma, mayor, numero; int n; suma = mayor = n = 0; while((numero=U. next. Double())!=0){ U. println(“prom=”+(suma+=numero)/ ++n); mayor=max(numero, mayor); } U. println(“mayor=“+mayor); static public double max(double x, double y){ return x>y ? x : y; }

for • Sintaxis for (inicialización; condición; reinicialización) { sentencias ; (si es una sola

for • Sintaxis for (inicialización; condición; reinicialización) { sentencias ; (si es una sola se pueden omitir {}) } inicialización y reinicialización pueden ser listas de expresiones separadas por comas for ( x=0; x < 10; x++ ) { // ejecuta el bloque mientras x < 10 } for ( x=0, y=0; x < 20; x++, y++ ) { // ejecuta el bloque mientras x e y } < 20 n 34

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

Ejemplos 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; } 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)) System. out. println(j); } n 35