java java java (1995) fue desarrollado en sun microsystems por james gosling, bill joy y guy steele...

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

Upload: cristian-florida

Post on 24-Jan-2016

217 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Java Java Java (1995) fue desarrollado en Sun Microsystems por James Gosling, Bill Joy y Guy Steele Influenciado por C++ Soporta clases, encapsulación,

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

1

Page 2: Java Java Java (1995) fue desarrollado en Sun Microsystems por James Gosling, Bill Joy y Guy Steele Influenciado por C++ Soporta clases, encapsulación,

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

2

Page 3: Java Java Java (1995) fue desarrollado en Sun Microsystems por James Gosling, Bill Joy y Guy Steele Influenciado por C++ Soporta clases, encapsulación,

El Modelo Java• El código bytecode es portable entre

diferentes plataformas

3

Page 4: Java Java Java (1995) fue desarrollado en Sun Microsystems por James Gosling, Bill Joy y Guy Steele Influenciado por C++ Soporta clases, encapsulación,

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

4

Page 5: Java Java Java (1995) fue desarrollado en Sun Microsystems por James Gosling, Bill Joy y Guy Steele Influenciado por C++ Soporta clases, encapsulación,

Un archivo básico para hacer un programa que corra

5

public class MiClase { 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 MiClase.java (MiClase es el nombre de la “clase” y lo inventa el programador, por convención empieza con mayúscula

• Al compilarse se generará el archivo MiClase.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

Page 6: Java Java Java (1995) fue desarrollado en Sun Microsystems por James Gosling, Bill Joy y Guy Steele Influenciado por C++ Soporta clases, encapsulación,

Ejemplo 1

6

import java.util.*; //para usa Scannerpublic 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″); }}

Page 7: Java Java Java (1995) fue desarrollado en Sun Microsystems por James Gosling, Bill Joy y Guy Steele Influenciado por C++ Soporta clases, encapsulación,

Ejemplo 2

7

import java.util.*; //para usa Scannerpublic class Procentajes { static public void main(String[] args) { System.out.println(“Porcentajes de enteros a,b,c“); Scanner U = new Scanner(System.in); System.out.println(“Ingrese 3 nums. “); int a = U.nextInt(); int b = U.nextInt(); int c = U.nextInt(); double factor=100.0/(a+b+c);

System.out.println(”a=” + a*factor + ”%”); System.out.println(”b=” + b*factor + ”%”); System.out.println(”c=” + c*factor + ”%”); }}

Page 8: Java Java Java (1995) fue desarrollado en Sun Microsystems por James Gosling, Bill Joy y Guy Steele Influenciado por C++ Soporta clases, encapsulación,

Ejemplo 3

8

import java.util.*; //para usa Scanner

public class CambiarFormatoFecha { static public void main(String[] args) { Scanner U = new Scanner(System.in); System.out.print(“Fecha en aaaammdd : “); int n = U.nextInt(); int a=n/10000, d=n%100, d2=n%10000/100; System.out.print(“Fecha en dd/mm/aaaa : “); System.out.print(d+“/”+m+”/“+a); }}

Page 9: Java Java Java (1995) fue desarrollado en Sun Microsystems por James Gosling, Bill Joy y Guy Steele Influenciado por C++ Soporta clases, encapsulación,

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 (listas de valores)

• Una variable es un espacio de memoria que puede almacenar:

9

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

Page 10: Java Java Java (1995) fue desarrollado en Sun Microsystems por James Gosling, Bill Joy y Guy Steele Influenciado por C++ Soporta clases, encapsulación,

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

10

Page 11: Java Java Java (1995) fue desarrollado en Sun Microsystems por James Gosling, Bill Joy y Guy Steele Influenciado por C++ Soporta clases, encapsulación,

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

11

Page 12: Java Java Java (1995) fue desarrollado en Sun Microsystems por James Gosling, Bill Joy y Guy Steele Influenciado por C++ Soporta clases, encapsulació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 doublemás chico más grande

• Ejemploint i = 1000;double d = i;

12

Page 13: Java Java Java (1995) fue desarrollado en Sun Microsystems por James Gosling, Bill Joy y Guy Steele Influenciado por C++ Soporta clases, encapsulación,

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

13

Page 14: Java Java Java (1995) fue desarrollado en Sun Microsystems por James Gosling, Bill Joy y Guy Steele Influenciado por C++ Soporta clases, encapsulación,

Cast de Tipos Primitivos• Puede perderse precisión

double d = 20.5;long l = (long) d;System.out.println(l);

• Pueden perderse dígitoslong l = 1000000;short s;s = (short) l;System.out.println(s);

14

20

16960

Page 15: Java Java Java (1995) fue desarrollado en Sun Microsystems por James Gosling, Bill Joy y Guy Steele Influenciado por C++ Soporta clases, encapsulación,

Funciones Matemáticas Predefinidasimport java.util.*; //para usa Scannerpublic 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.nextDouble(), b=U.nextDouble(), alfa = U.nextDouble()* 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))); }}

15

Page 16: Java Java Java (1995) fue desarrollado en Sun Microsystems por James Gosling, Bill Joy y Guy Steele Influenciado por C++ Soporta clases, encapsulación,

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 !

16

Page 17: Java Java Java (1995) fue desarrollado en Sun Microsystems por James Gosling, Bill Joy y Guy Steele Influenciado por C++ Soporta clases, encapsulación,

Métodos en la misma clase

17

public class MiClase {

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)); }

}

Page 18: Java Java Java (1995) fue desarrollado en Sun Microsystems por James Gosling, Bill Joy y Guy Steele Influenciado por C++ Soporta clases, encapsulación,

Métodos en otra clase

public class MiClase { //En archivo MiClase.java static public void main(String[] args) { int f1=15032015, f2=25052014; // fecha DDMMAAAA System.out.println(“mayor=“+ Math.max( F.aaaammdd(f1), F.aaaammdd(f2)));

}}

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; }}

Page 19: Java Java Java (1995) fue desarrollado en Sun Microsystems por James Gosling, Bill Joy y Guy Steele Influenciado por C++ Soporta clases, encapsulación,

función significado arg* resultado ejemplo resultado sqrt(x) x, x 0 double double sqrt(4.0) 2.0

pow(x,y) xy double double pow(2.0,3.0) 8.0

exp(x) ex double double exp(1.0) 2.71...

log(x) logex double double log(Math.E) 1.0

sin(x) seno de angulo x double double sin(Math.PI) 0.0

cos(x) coseno de x double double cos(Math.PI) 1.0

tan(x) tangente de x double double tan(Math.PI) 0.0

asin(x) arco-seno de x double double asin(1.0) Π/2

acos(x) arco-coseno x double double acos(1.0) 0.0

atan(x) arco-tangente x double double atan(0.0) 0.0

abs(x) |x| int double

int double

abs(-3) abs(-3.0)

3 3.0

max(x,y) mayor entre x e y int double

int double

max(4, 6) max(4.1, 6.5)

6 6.5

min(x,y) menor entre x e y int double

int double

min(4, 6) min(4.1, 6.5)

4 4.1

random() Nº al azar en [0,1[ double random( ) 0.xxx....

Nota 1. un argumento double admite un int (int es asignable a double) Nota 2. Se usan Math.nombre(argumentos), ejemplo: Math.pow(3.1, 4.3)

Funciones definidas en clase Math

Page 20: Java Java Java (1995) fue desarrollado en Sun Microsystems por James Gosling, Bill Joy y Guy Steele Influenciado por C++ Soporta clases, encapsulación,

Sentencias de Control de Flujo

• if / else• switch• for• while• do / while

20

Page 21: Java Java Java (1995) fue desarrollado en Sun Microsystems por James Gosling, Bill Joy y Guy Steele Influenciado por C++ Soporta clases, encapsulación,

If / if elseif ( money == 0 ) {System.out.println(“Pide prestado mejor!");

}// si es solo una instruccion los parentesis pueden omitirse

if ( money >= 20000) { System.out.println(“Yo invito !”);} else { System.out.println(“Hazte el leso”);}

21

Page 22: Java Java Java (1995) fue desarrollado en Sun Microsystems por James Gosling, Bill Joy y Guy Steele Influenciado por C++ Soporta clases, encapsulación,

Operadores Relacionales

> Mayor>= Mayor o igual< Menor<= Menor o igual== Igual!= Distinto

22

&& and|| or! not

Operadores Lógicos

Page 23: Java Java Java (1995) fue desarrollado en Sun Microsystems por James Gosling, Bill Joy y Guy Steele Influenciado por C++ Soporta clases, encapsulación,

Ejemplo diasMes

23

static public int diasMes(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;}

Page 24: Java Java Java (1995) fue desarrollado en Sun Microsystems por James Gosling, Bill Joy y Guy Steele Influenciado por C++ Soporta clases, encapsulació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

24

switch (<expresión>) { case <expresión>: ... break; case <expresión>: ... break; default: ...}

Page 25: Java Java Java (1995) fue desarrollado en Sun Microsystems por James Gosling, Bill Joy y Guy Steele Influenciado por C++ Soporta clases, encapsulación,

Ejemplo diasMes Con switch 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;

Page 26: Java Java Java (1995) fue desarrollado en Sun Microsystems por James Gosling, Bill Joy y Guy Steele Influenciado por C++ Soporta clases, encapsulación,

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;

Page 27: Java Java Java (1995) fue desarrollado en Sun Microsystems por James Gosling, Bill Joy y Guy Steele Influenciado por C++ Soporta clases, encapsulación,

while y do while

• Sintaxis 1: se ejecuta 0 o más veceswhile ( condición )

{ sentencias }

• Sintaxis 2: se ejecuta 1 o más vecesdo

{ sentencias }while ( condición );

27

Page 28: Java Java Java (1995) fue desarrollado en Sun Microsystems por James Gosling, Bill Joy y Guy Steele Influenciado por C++ Soporta clases, encapsulació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…}

28

Page 29: Java Java Java (1995) fue desarrollado en Sun Microsystems por James Gosling, Bill Joy y Guy Steele Influenciado por C++ Soporta clases, encapsulación,

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)

29

Page 30: Java Java Java (1995) fue desarrollado en Sun Microsystems por James Gosling, Bill Joy y Guy Steele Influenciado por C++ Soporta clases, encapsulación,

Ejemplos

//tabla celsius – fahrenheit cada 5°Cint 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álidasint suma = 0, n = 0; Scanner U = new Scanner(System.in); while(true) { double x = U.nextDouble(); if (x == 0) break; // fin de datos if (x < 1.0 || x > 7.0) continue; suma += x; x++; }System.out.println(“Promedio = “+suma/n);

Page 31: Java Java Java (1995) fue desarrollado en Sun Microsystems por James Gosling, Bill Joy y Guy Steele Influenciado por C++ Soporta clases, encapsulación,

Operadores especiales

double suma, mayor, numero; int n;suma = mayor = n = 0;while((numero=U.readDouble("nº?"))!=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;}

Page 32: Java Java Java (1995) fue desarrollado en Sun Microsystems por James Gosling, Bill Joy y Guy Steele Influenciado por C++ Soporta clases, encapsulación,

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

} 32

Page 33: Java Java Java (1995) fue desarrollado en Sun Microsystems por James Gosling, Bill Joy y Guy Steele Influenciado por C++ Soporta clases, encapsulación,

33

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);}

Ejemplos de for