52
Introducción a Java Algoritmos y Estructura de Datos

Introducción a Java Algoritmos y Estructura de Datos

Embed Size (px)

Citation preview

Page 1: Introducción a Java Algoritmos y Estructura de Datos

Introducción a JavaAlgoritmos y Estructura de Datos

Page 2: Introducción a Java Algoritmos y Estructura de Datos

El lenguaje Java

• Orientado a Objetos

• Tipos estrictos

• Clases estrictas

Page 3: Introducción a Java Algoritmos y Estructura de Datos

Tipos Primitivos• Tipos numéricos

– Tipos enteros:– byte, enteros 8-bits con signo complemento a 2,– short, enteros 16-bits con signo complemento a 2– int, enteros 32-bits con signo complemento a 2– long, enteros 64-bits con signo complemento a 2

– Tipos en coma flotante: – float, real en coma flotante, 32-bits IEEE 754– double, real en coma flotante, 64-bits IEEE 754

• Tipos no numéricos• char, carácter 16-bits Unicode• boolean, tipo lógico, cuyos valores son true (cierto) y false (falso)

Page 4: Introducción a Java Algoritmos y Estructura de Datos

Operadores

• Igualdad y desigualdad: == , !=• Comparación: <, <=, >, >=• Suma y resta unarios: +, -• Suma, multiplicación, división y módulo: +, -, *, /, %• Incremento y decremento prefijos y posfijos: ++, --• Desplazamiento con signo y sin signo: <<, >>, >>>• Negación lógica unaria de bits: ~• Lógica de bits: &, |, ^• Lógica booleana: &&, ||

Page 5: Introducción a Java Algoritmos y Estructura de Datos

Expresiones

• Grupos de Precedencia• Grupo 0: ( )• Grupo 1: ++, --, + (unario), - (unario)

• Grupo 2: *, /, %• Grupo 3: +, -, + (concatenación)

• Funciones especiales:– Seno x => Math.sin(x)– x2 => Math.pow(x,2)– Math.round(6.6) => 7

Page 6: Introducción a Java Algoritmos y Estructura de Datos

Asignación

• Utilización de operadores:– var1 = var2 + var3; // asignar a var1 el valor de var2 + var3– var1 = var2 - ver3; // asignar a var1 el valor de var2 - var3– var1 = var2 * ver3; // asignar a var1 el valor de var2 * var3– var1 = var2 / ver3; // asignar a var1 el valor de var2 / var3– var1 = var2 % ver3; // asignar a var1 el valor de var2 % var3

• Asignaciones de incremento decremento:– variable++; // añadir uno a variable– variable--; // restar uno a varibale– variable += exp; // añadir exp a variable– variable -= exp; // restar exp a variable

Page 7: Introducción a Java Algoritmos y Estructura de Datos

Declaración de Variables

– tipo nombre;– tipo nombre1, nombre2, nombre3;– tipo nombre = valor;

• Declaración de Constantes:

static final tipo nombre = valor;

Page 8: Introducción a Java Algoritmos y Estructura de Datos

Conversiones entre tipos

• Asignar una variable a otra cuyo tipo es mayor de tamaño:

byte => short => int => long => float => double

• Para pasar de un tipo a otro menor en tamaño, tenemos que hacer una conversión explícita de tipos:

(tipo)expresion

Page 9: Introducción a Java Algoritmos y Estructura de Datos

Paquetes

Paquetes Java más importantes:- lang – para funciones del lenguaje;- util – para utilidades adicionales;- io – para entrada y salida;- text – para formateo especializado;- awt – para gráficos e interfaz gráfica de usuario

Para acceder a cualquiera de estos paquetes, excepto lang que está siempre disponible, usamos el siguiente modelo:

import java.nombrepaquete.*;

Page 10: Introducción a Java Algoritmos y Estructura de Datos

Declaración de Clases

modificador class nombreClase {

< declaración de campos >

< declaración de métodos >

}

• modificador puede ser public o nada; si la clase no pertenece a un paquete, ambas definiciones son equivalentes; si la clase pertenece a un paquete, entonces, si se declara public, la clase podrá utilizarse fuera del paquete, pero si no se declara public, sólo podrá utilizarse dentro del paquete

Page 11: Introducción a Java Algoritmos y Estructura de Datos

Declaración de Objetos

– nombreClase nombreObjeto;– nombreClase nombreObjeto1, nombreObjeto2, nombreObjeto3;– nombreClase nombreObjeto = nombreOtroObjeto;– nombreClase nombreObjeto = new nombreClase();

Ejemplo:

clasePublica elObjeto;

clasePublica elObjeto1, elObjeto2, elObjeto3;

clasePublica elObjeto4 = elObjeto;

clasePublica elObjeto5 = new clasePublica();

Page 12: Introducción a Java Algoritmos y Estructura de Datos

Declaraciones de Campos

modificadores tipo nombreCampo;

• modificador puede ser: - private, accesible solo desde dentro de la propia clase- protected, accesible solo desde la propia clase, clases del mismo paquete o subclases - public,accesible por todos- package,si no se especifica nada, es el modo por defecto, accesible solo desde el propio

paquete; si la clase no se encuentra dentro de un paquete, es equivalente a public.

• Otros modificadores que se pueden añadir son:- static, indica que el campo pertenece a la clase, no a un objeto concreto- final, indica que dicho campo no puede ser sobreescrito en una subclase

• tipo es el tipo del campo (tipo primitivo o clase del objeto)• nombreCampo es el nombre del campo

Page 13: Introducción a Java Algoritmos y Estructura de Datos

Acceso a Campos

objeto.campo; // si campo no es static

nombreClase.campo; // si campo es static

elObjeto.doblePublico = 5.0;

double doble = elObjeto.doblePublico;

Clase.doblePublicoEstatico = 7.0;

Double doble = Clase.doblePublicoEstatico;

Page 14: Introducción a Java Algoritmos y Estructura de Datos

Declaración de Métodosmodificador tipo nombreMetodo(<lista de parametros formales>) {

< cuerpo del método; campos e instrucciones >

return expresion; // solo métodos que devuelven resultado

}

<lista de parametros formales> = (tipo campo, tipo campo, ...)

modificador significa lo mismo que para los campos.

tipo es el tipo devuelto por el método, puede ser:- void si el método no devuelve nada- un tipo primitivo- una clase

nombreMetodo es el nombre del método

Page 15: Introducción a Java Algoritmos y Estructura de Datos

Ejemplo de Clasepublic class Clase {

private int enteroPrivado;static private int enteroEstaticoPrivado;public void estableceEntero(int entero) {

enteroPrivado = entero; } public int recuperaEntero() { return entero; } static public void estableceEnteroEstatico(int entero) { enteroEstaticoPrivado = entero; } static public int recuperaEnteroEstatico() { return enteroEstatico; }}

Page 16: Introducción a Java Algoritmos y Estructura de Datos

Llamadas a Métodos

metodo(<lista parametros reales>); // metodos de la propia clase

objeto.metodo(<lista dparametros reales>); // metodos no estaticos

nombreclase.metodo(<lista parametros reales>); //metodos estaticos

Ejemplo:

elObjeto.estableceEntero(7);

int entero = elObjeto.recuperaEntero();

Clase.estableceEnteroEstatico(8);

int entero = Clase.recuperaEnteroEstatico();

Page 17: Introducción a Java Algoritmos y Estructura de Datos

Declaración de Métodos Constructores

modificadores nombreClase(<lista argumentos formales>) {

< cuerpo del método constructor >

}

Ejemplo:public class Clase {

private int enteroPrivado;

public Clase() {

enteroPrivado = 0;

}

public Clase(int entero) {

enteroPrivado = entero;

}}

Page 18: Introducción a Java Algoritmos y Estructura de Datos

Llamadas a Métodos Constructores

nombreClase objeto = new nombreClase(<lista parametros reales>);

Ejemplo:Clase elObjeto;

elObjeto = new Clase();

O en una sola línea:Clase elObjeto = new Clase();

Clase elObjeto = new Clase(5);

Page 19: Introducción a Java Algoritmos y Estructura de Datos

Modelo de un Programa

public class nombrePrograma {

public static void main(String[] args) {

< cuerpo del programa >

}

}

Page 20: Introducción a Java Algoritmos y Estructura de Datos

Herencia

modificadores class nombreClase extends nombreClaseQueExtiende {

}

• Ejemplopublic class ClaseExtendida extends Clase {

}

• Una clase que extiende otra, se llama subclase o clase hija, mientras que la clase a la que extiende (la original) se llama superclase o clase paterna.

• La subclase hereda los miembros (propiedades y métodos) de la superclase.

Page 21: Introducción a Java Algoritmos y Estructura de Datos

Cambio de tipo

• Cualquier objeto de una subclase puede ser asignado a un objeto de su superclase.

• Cualquier objeto de una superclase puede ser asignado a una subclase con una conversión explícita (cambio de tipo).

ClaseExtendida elObjetoExtendido = new ClaseExtendida();

Clase elObjeto = laClaseExtendida;

ClaseExtendida elObjetoExtendido = (ClaseExtendida)elObjeto;

Page 22: Introducción a Java Algoritmos y Estructura de Datos

Superconstrucción

modificadores class nombreclase extends nombreClaseQueEstiende {

public nombreClase(<lista de parametros formales>) {

super(<lista de parametros reales>);

<instrucciones de inicializacion>

}

}

• Importante: La llamada al superconstructor debe ser la primera instrucción de un constructor.

Page 23: Introducción a Java Algoritmos y Estructura de Datos

Ejemplo de Superconstrucción

public class Clase { private int enteroPrivado; public Clase(int entero) { enteroPrivado = entero; }}

public class ClaseExtendida extends Clase { private double doblePrivado; public ClaseExtendida(int entero, double doble) { super(entero); doblePrivado = doble; }}

Page 24: Introducción a Java Algoritmos y Estructura de Datos

Variables Enmascaradas

public class Clase { public int dato;}public class ClaseExtendida extends Clase { public double dato; public estableceDatos(int entero, double doble) { super.dato = entero; dato = doble;}Clase elObjeto = new Clase();ClaseExtendida elObjetoExtendido = new ClaseExtendida();elObjeto.dato = 5; // es un valor enteroelObjetoExtendido.dato = 6.4; // es un valor dobleelObjetoExtendido.estableceDatos(3,7.8);

Page 25: Introducción a Java Algoritmos y Estructura de Datos

Sobreescritura de Métodos

public class Clase {

public int dato;

public estableceDato(int entero) {

dato = entero;

}

}

public class ClaseExtendida extends Clase {

public int datoExtendido;

public estableceDato(int entero) {

super.estableceDato(entero);

datoExtendido = entero*2;

}

Page 26: Introducción a Java Algoritmos y Estructura de Datos

Paquetes

package nombrePaquete;

modificador class nombreClase {

< declaracion de la clase >

}

• Importante: Si deseamos que una clase sea utilizada fuera de su paquete, deberemos declararla como public.

Page 27: Introducción a Java Algoritmos y Estructura de Datos

Abstracción mediante interfaces

modificador interface nombreInterfaz {

< especificaciones de los métodos >

}

 

modificador class nombreClase implements nombreInterfaz {

< implementación de los metodos de la interfaz >

< implementación de metodos y datos propios de la clase >

}

Page 28: Introducción a Java Algoritmos y Estructura de Datos

Propiedades de los Objetos

• Objetos nulos: null

• El identificador this

public class Clase {

private int entero;

public Clase(int entero) {

this.entero = entero;

}

}

Page 29: Introducción a Java Algoritmos y Estructura de Datos

Objetos vs Variables

- Una variable tiene memoria para un solo valor y dispone de un conjunto predefinido de operaciones según sea su tipo.

- Un objeto tiene memoria para un grupo de varios valores, junto con un conjunto coherente de métodos que operan sobre esos valores. Tanto métodos como valores están encapsulados en la clase de la que se ha obtenido el objeto.

Page 30: Introducción a Java Algoritmos y Estructura de Datos

La superclase Object

• En Java, todas las clases son subclases de una clase especial llamada Object.

• Java alcanza la generalidad utilizando objetos de diferentes clases en las mismas partes del programa, pero todos ellos pertenecen a la clase Object.

Page 31: Introducción a Java Algoritmos y Estructura de Datos

Igualdad de Objetos

modificador class nombreClase { public boolean equals() { < instrucciones para comparar con los campos de obj > return resultado de la comparacion; }}

Ejemplo:public class Clase {

private int entero; public boolean equals(Clase c) { return (c.entero==entero); }

}

Page 32: Introducción a Java Algoritmos y Estructura de Datos

Asignación de Objetos

modificador class nombreClase implements Cloneable { public Object clone() { nombreClase obj = new nombreClase(parametros); < instrucciones para copiar los campos a obj > return obj; }}

public class Clase implements Cloneable { private int entero; public Object clone() { Clase c = new Clase(); c.entero = entero; return c; }}

Page 33: Introducción a Java Algoritmos y Estructura de Datos

Conversiones de Clase

• El método clone invocado sobre clase2 devuelve un objeto de la clase Object. Esto debe ser así, porque lo exige la interfaz Cloneable. Para convertirlo de nuevo a Clase necesitamos la conversión explícita de tipo.

Clase objeto1 = (Clase)objeto2.clone();

Page 34: Introducción a Java Algoritmos y Estructura de Datos

Arrays

Declaración e instanciación de un array de n enteros:int miArray[];

miArray = new int[n];

Lo mismo en una sola línea:int miArray[] = new int[n];

Declaración e instanciación de un array de n objetos:MiClase miArray[] = new MiClase[n];

for(int i=0;i<n;i++) miArray[i] = new MiClase();

Page 35: Introducción a Java Algoritmos y Estructura de Datos

Selección con if-else

if (condicion)

instrucción;

else instrucción;

if (velocidad>limite)

System.out.println("Multazo");

else System.out.println("Buen conductor");

Page 36: Introducción a Java Algoritmos y Estructura de Datos

Sucesivos else-if

if (condicion) instrucción;

else if (condicion) instrucción;

else if (condicion) instrucción;

....

else instrucción;

if (nota>=9) calificacion=’SB’;

else if (nota>=7) calificacion=’N’;

else if (nota>=5) calificacion=’A’;

else calificacion=’S’;

Page 37: Introducción a Java Algoritmos y Estructura de Datos

La instrucción switch

switch (expresion) { case valor: instrucción; break; case valor: instrucción; break;

....

default: instrucción; break;}

switch(nota) { case 10: case 9: calificacion = ‘SB’; break; case 8: case 7: calificacion = ‘N’; break; case 6: case 5: calificacion = ‘A’; break; default: calificacion = ‘S’; break;}

Page 38: Introducción a Java Algoritmos y Estructura de Datos

Bucles for

for(inicio; prueba; actualización) {< cuerpo del bucle for >

}

for(int i=0; i<5;i++) System.out.println("hola");

for(int i=0; i<5;i++) { cuenta += i; System.out.println("hola");}

Page 39: Introducción a Java Algoritmos y Estructura de Datos

Bucles for indeterminados

for(; ; ) {

< cuerpo del bucle for >

if (condicion) break;

}

for(inicio; ; actualización) {

< cuerpo del bucle for >

if (condicion) break;

}

Page 40: Introducción a Java Algoritmos y Estructura de Datos

Bucles condicionales while

<instrucciones para inicializar las condiciones>

while (condiciones) {

<instrucciones para llevar a cabo el bucle y cambiar condiciones >

}

int i=0;

while(i<5) {

System.out.println("hola");

i++;

}

Page 41: Introducción a Java Algoritmos y Estructura de Datos

Bucles condicionales do while

<instrucciones para inicializar las condiciones>

do {

<instrucciones para llevar a cabo el bucle y cambiar condiciones >

} while (condiciones);

int i=0;

do {

System.out.println("hola");

i++;

} while (i<5);

Page 42: Introducción a Java Algoritmos y Estructura de Datos

Cadenas de Caracteres

• La clase String• Creación de una cadena:

String miCadena = "Esta es la cadena";

• Cadena Vacía vs Cadena NulaString s1; // Cadena Nula, igual al valor null

String s2= ""; // Cadena Vacía

Page 43: Introducción a Java Algoritmos y Estructura de Datos

Cadenas (continuación)

• Comparación de cadenas:

if (cadena1.equals(cadena2))

System.out.println("Las cadenas son iguales");

else System.out.println("Las cadenas no son iguales");

• Concatenación de cadenas:String c3 = c1+c2;

Page 44: Introducción a Java Algoritmos y Estructura de Datos

Salida por pantalla

import java.io.*;

System.out.println(elementos);

System.out.println();

System.out.print(elementos);

System.out.println("hola"); // escribe "hola"

System.out.println(5); // escribe 5

int i = 5; System.out.println(i) ; // escribe 5;

double d=6.4; System.out.println(d); // escribe 6.4;

double d=6.4; System.out.println("d="+d); // escribe d=6.4;

Page 45: Introducción a Java Algoritmos y Estructura de Datos

El método toString

Cuando sobreescribimos el método toString de Object, esto nos ofreceun acceso automático al método println como sigue:public class Clase { private int entero; public Clase (int e) { entero = e; } public String toString() { return(""+e); }}Clase miClase = new Clase(5);System.out.println(miClase); // escribe "5"System.out.println("clase="+miClase); // escribe "clase=5"

Page 46: Introducción a Java Algoritmos y Estructura de Datos

Entrada desde teclado

import java.io.*;

BufferedReader in = new

BufferedReader(new InputStreamReader(System.in));

String cadena = in.readLine();

Page 47: Introducción a Java Algoritmos y Estructura de Datos

Lectura de números

int i=Integer.valueOf(in.readLine()).intValue();

double d=Double.valueOf(in.readLine()).doubleValue();

int i=Integer.valueOf(in.readLine().trim()).intValue();

double d=Double.valueOf(in.readLine().trim()).doubleValue();

Page 48: Introducción a Java Algoritmos y Estructura de Datos

Entrada/Salida desde Archivos

BufferedReader fin = new BufferedReader(new FileReader(nombreArchivo));

PrintWriter fout = new PrintWriter(new FileWriter(nombreArchivo));

fout.close();

Page 49: Introducción a Java Algoritmos y Estructura de Datos

Excepciones

• Una excepción es un objeto que avisa que ha ocurrido alguna condición inusual. Java tiene muchos objetos de excepción predefinidos y también podemos crear los nuestros propios

• Para utilizar excepciones, tenemos que hacer cuatro cosas:

– Intentar: crear un bloquee alrededor de la instrucción donde puedan ocurrir excepciones y precederlas con la palabra clave try

– Capturar: colocar a continuación de la instrucción try otro bloque precedido por la palabra catch

– Lanzar: si no se trata la excepción, ésta pasará automáticamente al método llamador; si la capturamos y la tratamos parcialmente, podemos de todas formas pasarla con una instrucción throw.

– Declarar: mencionar en la declaración del método qué excepciones se devolverán al método llamador.

Page 50: Introducción a Java Algoritmos y Estructura de Datos

Ejemplo

public void leeArchivo(String nombre) throws IOException {

BufferedReader fin = new BufferedReader(new FileReader(nombre)); try {

while(true) {

cadena = fin.readLine();

System.out.println(cadena);

}

} catch (EOFException e) {

System.out.println("Fin del archivo");

}

}

Page 51: Introducción a Java Algoritmos y Estructura de Datos

Excepciones definidas por el usuario

public class nombre extends Exception {

public nombre() {}

public nombre(String s) { }

}

throw new nombre(“mensaje”);

Page 52: Introducción a Java Algoritmos y Estructura de Datos

Ejemplo

public class DenominadorCeroException extends Exception {

public DenominadorCeroException() { super(); };

public DenominadorCeroException(String s) { super(s); };

}

public class Racional {

private int num, den;

public Racional(int n, int d) throws DenominadorCeroException {

if (d==0) throw new DenominadorCeroException("Denominador cero");

num = n;

den = d;

}

}