Vous êtes sur la page 1sur 78

Representacin de Datos

Todo lo que necesitas saber de Java

M. Carmen Fernndez Panadero Julio Villena Romn


{mcfp, jvillena}@it.uc3m.es

ndice
1. De qu estamos hablando? 2. Java es un lenguaje de programacin orientado a objetos: OO
Objetos y clases Variables y mtodos Modificadores de acceso, constructores y mtodo main

3. Ms orientacin a objetos:
Leng. Prog. Herencia Reescritura, sobrecarga Operadores Arrays Strings Control de flujo de programa: condicionales y bucles Excepciones

4. Sintaxis del lenguaje:

1. De qu estamos hablando?

Arquitectura de desarrollo
Editores Notepad Herramientas de Desarrollo
- Netbeans (JDK) - Visual J++ - Visual .Net - Visual Caf - Java Workshop - J Builder - Visual Age

Fase I: Editar Fase II: Compilar Compiladores

Grasp
Cdigo Java fichero.java

JDK
Bytecode

Otros
fichero.class

Otros

javac fichero.java

Una Aplicacin Bsica en Java


// Aplicacin de ejemplo // Hola Mundo // class HolaMundo{ public static void main(String args[]){ System.out.println(Hola Mundo); } }

HolaMundo.class

HolaMundo.java
Hola Mundo

1. Compilamos: 2. Ejecutamos:

javac HolaMundo.java java HolaMundo

Anatoma de una aplicacin


// Aplicacin de ejemplo // Hola Mundo // class HolaMundo{ public static void main(String args[]){ System.out.println(Hola Mundo); } }
Comentarios (3 tipos) // Para comentar una lnea /*Para comentar una lnea o ms*/ /**Para documentacin usando javadoc*/

Anatoma de una aplicacin


// Aplicacin de ejemplo // Hola Mundo // class HolaMundo{ public static void main(String args[]){ System.out.println(Hola Mundo); } }
Declaracin de la clase El nombre de la clase (que debe ser igual que el del fichero fuente HolaMundo.java) se utiliza para crear el fichero class en el mismo directorio en el que se compila la aplicacin.

Anatoma de una aplicacin


// Aplicacin de ejemplo // Hola Mundo // class HolaMundo{ public static void main(String args[]){ System.out.println(Hola Mundo); } }
Mtodo main Es el mtodo que busca el intrprete para ejecutar en primer lugar. Se le pasa como argumento un array de objetos String llamado args.

Anatoma de una aplicacin


// Aplicacin de ejemplo // Hola Mundo // class HolaMundo{ public public static void main(String args[]){ System.out.println(Hola Mundo); } }
public Indica la accesibilidad del mtodo. Un mtodo pblico puede ser llamado por cualquiera incluyendo el intrprete java.

Anatoma de una aplicacin


// Aplicacin de ejemplo // Hola Mundo // class HolaMundo{ public static void main(String args[]){ static System.out.println(Hola Mundo); } }
static Indica al compilador que main es un mtodo de clase, es decir se refiere a toda la clase y no a ninguna instancia en particular. Si alguien instancia esta clase el mtodo main no se instanciara.

Anatoma de una aplicacin


// Aplicacin de ejemplo // Hola Mundo // class HolaMundo{ public static void main(String args[]){ void System.out.println(Hola Mundo); } }
void Indica que el mtodo main no devuelve ningn valor. Es importante indicar el valor de retorno porque java hace una comprobacin estricta de tipos. Los constructores son los nicos mtodos sin valor de retorno.

Anatoma de una aplicacin


// Aplicacin de ejemplo // Hola Mundo // class HolaMundo{ public static void main(String args[]){ String args[] System.out.println(Hola Mundo); } }
String args[] Es la declaracin de un array de Strings Son los argumentos que se pasan por la lnea de comandos.

java HolaMundo arg1 arg2 ...

Anatoma de una aplicacin


// Aplicacin de ejemplo // Hola Mundo // class HolaMundo{ public static void main(String args[]){ System.out.println(Hola Mundo); } }
Funcionalidad Utiliza el mtodo println de la clase out que est en el paquete System. El mtodo println toma como argumento una cadena (String) y la saca por la salida estndar (es decir por pantalla).

Arquitectura de Ejecucin

Fase III: Cargar Fase IV: Verificar Fase V: Ejecutar

Aplicaciones en formato Bytecode


Cargador de clases Verificador de Bytecode
Java Virtual Machine

Java Class Libraries (java extension API) Java Class Libraries (Java Base API)

Java Interpreter

JIT (Just in Time Compiler)

Java Runtime Sistema Operativo Hardware java fichero


14

2. Java es un lenguaje de programacin orientado a objetos

Qu es un objeto?

Los objetos son representaciones (simples/complejas) (reales/imaginarias) de cosas: reloj, avin empleado, etc. No todo puede ser considerado como un objeto, algunas cosas son simplemente caractersticas o atributos de los objetos: color, velocidad, etc.

Tipos de abstraccin

Abstraccin funcional Abstraccin de datos


Hay cosas que sabemos que los coches hacen, pero no cmo lo hacen:
avanzar parar girar a la dcha girar a la izda

Un coche tiene adems ciertos atributos:


color velocidad tamao etc.

La forma en que se definen los atributos no tiene importancia para el diseo 17

Definicin de objetos
Miembros pblicos
describen qu pueden hacer los objetos de esa clase Qu es el objeto (su abstraccin) Qu puede hacer el objeto (mtodos)

Miembros privados
describen la implementacin de cmo lo hace.
Ej: el objeto contacto interacciona con el circuito elctrico del vehculo, ste con el motor, etc. En sistemas orientados a objetos puros, todo el estado es privado y slo se puede cambiar a travs de la interfaz pblica. Ej: el mtodo pblico frenar puede cambiar el valor del atributo privado velocidad.

Encapsulacin
Encapsulacin: describe la vinculacin de un
comportamiento y un estado a un objeto en particular

Ocultacin de informacin: Permite definir

qu partes del objeto son visibles (pblicas) y qu partes son ocultas (privadas)

La llave de contacto es una interfaz pblica del mecanismo de arranque de un coche La implementacin de cmo arranca realmente es privada y sobre ella slo puede actuar la llave de contacto

Acceso a variables
Los objetos encapsulan variables permitiendo acceso a ellas slo a travs de los mtodos Variables: Contenedores de valores Mtodos: Contenedores de funciones Un objeto tiene Estado: representado por los valores de sus variables/atributos Comportamiento definido por sus mtodos
Normalmente: Los mtodos son pblicos Las variables son privadas Puede haber mtodos privados Es peligroso tener variables pblicas
20

10

Qu es una clase?

Clase: Conjunto de objetos con estados y comportamientos similares Ej: podemos referirnos a la clase coche (cualquier instancia genrica de coche) Mi coche es un objeto, es decir una instancia particular de la clase coche Plantilla a partir de la cual crear objetos
Datos (atributos) Mtodos que operan sobre los datos

Objetos vs. Clases


Una clase es una entidad abstracta
Es un tipo de clasificacin de datos Define el comportamiento y atributos de un grupo de de estructura y comportamientos similar
Clase coche Mtodos: arrancar, avanzar, parar, ... Atributos: color, velocidad, etc. Nombre de la clase Mtodos (funciones) Atributos (datos)

Un objeto es una instancia o variable de una clase


Un objeto se distingue de otros miembros de la clase por sus atributos.
Objeto Ferrari Perteneciente a la clase coche Nombre: Ferrari Mtodos: arrancar, avanzar, parar, ... Atributos: color = rojo; velocidad 300Km/h

11

Interacciones entre objetos


El modelado de objetos modela: los objetos y sus interrelaciones Para realizar su tarea el objeto puede delegar trabajos en otro, que puede ser parte de l mismo o cualquier otro objeto del sistema. Los objetos interaccionan entre s envindose mensajes

Paso de Mensajes
Interfaz Pblica

Implementacin

Arrancar

Un objeto enva un mensaje a otro


Esto lo hace mediante una llamada a sus atributos o mtodos

Los mensajes son tratados por la interfaz pblica del objeto que los recibe
Eso quiere decir que slo podemos hacer llamadas a aquellos atributos o mtodos de otro objeto que sean pblicos o accesibles desde el objeto que hace la llamada

El objeto receptor reaccionar


Cambiando su estado (es decir, modificando sus atributos) Enviando otros mensajes (es decir, llamando a otros atributos o mtodos del mismo objeto -pblicos o privados- o de otros objetos -pblicos o accesibles desde ese objeto) 24

12

Declaracin de una clase


public class Coche{ //Declaracin de atributos // (color, velocidad, etc) //Declaracin de mtodos // (arrancar, parar, etc.) } Sintaxis (modificadores) class NombreClase{ //cdigo de la clase } Coche.java Estilo
Nombre fichero = nombre clase 1 letra mayscula Sin espacios en blanco ni guiones Las palabras se separan con maysculas MiPrimeraClase Indentacin
25

Identificadores
Sirven para nombrar variables, mtodos, clases, objetos y todo lo que el programador necesite identificar Comienzan con una letra, un subrayado o un smbolo $ Distinguen maysculas y minsculas y no tienen longitud mxima Por convenio: Los nombres de variables, mtodos y objetos comienzan por minscula. Los nombres de las clases comienzan por mayscula Si contienen varias palabras se unen evitando subrayado y separando palabras con maysculas deEsteModo

Los identificadores no pueden ser palabras reservadas

13

Palabras reservadas
Reservadas:
abstract boolean break byte case catch char class const * continue default do
cast operator

double else extends final finally float for goto if implements import instanceOf
future outer

int interface long native new null package private protected public return short
generic rest

static super switch synchronized this throw throws transient* try void volatile while
inner var

Reservadas aunque no se utilizan:

Variables
Son las entidades sobre las que actan los programas Declarar una variable es decir su nombre y tipo Usar una variable es insertarla en una sentencia Podemos encontrar variables en: como miembros de la clase (dentro de una

clase) como variables locales (dentro del cdigo de un mtodo) como parmetro de un mtodo.

14

Declaracin de variables
public class Coche{ //Declaracin de atributos String color; int velocidad; //Declaracin de mtodos // (arrancar, parar, etc.) }

Sintaxis tipo nombre; tipo nombre1, nombre2, nombre3; tipo nombre = valor;
Inicializacin de la variable a un valor

Coche.java Estilo
Nombres intuitivos 1 letra minscula Sin espacios en blanco ni guiones Las palabras se separan con maysculas: miVariable Indentacin
29

Tipos bsicos en Java


Todas las variables son de un determinado tipo de datos. El tipo de la variable determina:
Los valores que puede tomar Las operaciones que se pueden realizar

En Java existen:
Tipos primitivos Tipos de referencia

15

Tipos primitivos
Contienen un nico valor Son los siguientes:
Tipo byte short int long float double char Tamao/Formato 8-bit complemento a 2 16-bit complemento a 2 32-bit complemento a 2 64-bit complemento a 2 32-bit IEEE 754 64-bit IEEE 754 16-bit Unicode carcter Descripcin [-128, 127] [-32768, 32767] [-2147483648,2147483647] [-9223372036854775808, 9223372036854775807] [min=1.4E-45, max=3.4028235E38] [min=4.9E-324, max=1.7976931348623157E308] Un carcter Un valor booleano (Nmeros enteros)

(Nmeros en punto flotante)

(Otros tipos) boolean true o false

Tipos de referencia
Su valor es una referencia (puntero) al valor representado por la variable Son tipos de referencia:
Las matrices (arrays) Las clases
En particular, String

Las interfaces

16

Constantes
Son valores invariantes de los tipos bsicos (primitivos ms el String), que pueden asignarse a variables o usarse en operaciones
Tipo (Nmeros enteros) byte, short , int , long 37 045 0x25 (Nmeros en punto flotante) float , double (Otros tipos) char boolean String a \n, \\,\, true, false hola letra a nueva lnea, \, y verdadero, falso la cadena de caracteres hola 3.14159f 314159E-1 nmero pi en notacin coma flotante nmero pi con base y exponente 37 en notacin decimal 37 en notacin octal (base 8) 37 en notacin hexadecimal (base 16) Constantes Descripcin

Variables
Hay que distinguir: nmeros = 0 byte = 0 variables de instancia boleanos = false variables de clase char= \0 variables automticas String = null referencias = null Las variables pueden inicializarse en la declaracin pueden declararse sin inicializar Sin inicializacin tienen un valor por defecto salvo las automticas Constantes (variables que no se pueden modificar): usar la palabra clave final inicializarla obligatoriamente en la declaracin
Valores por defecto:

17

Declaracin de variables
Objetos como atributos
public class Coche{ //Declaracin de atributos String color; int velocidad; Equipamiento equipamientoSerie; //Declaracin de mtodos Estilo // (arrancar, parar, etc.) Recordad que las clases (tipo) }

Sintaxis

Coche.java

NombreClase nombre; NombreClase nombre1, nombre2; NombreClase nombre = new Equipamiento();


Declaracin de un objeto
similar a variables, donde antes ponamos el tipo ahora ponemos el nombre de la clase

se nombran con mayscula y los identificadores (nombreObjeto) con minscula

Creacin de un objeto
Las variables se inicializan Los objetos se crean!!!

mbito
Es el bloque de cdigo dentro del cual una variable es accesible Variable de instancia o de clase es accesible dentro de las {} de la clase que la contiene, y para el resto de las clases segn los permisos establecidos por los modificadores:
private protected public friendly

Variable local: su mbito queda fijado por {} del mtodo en que se encuentra Parmetro: su mbito queda fijado por {} del mtodo en que se encuentra

18

Mtodos
Son bloques de cdigo que describen el comportamiento de los objetos Pueden ser llamadas dentro de la clase en la que se encuentran o desde otras clases En los programas slo puede haber cdigo dentro de los mtodos Mtodos especiales El constructor El mtodo main

Declaracin de mtodos
public class Coche{ //Declaracin de atributos private String color; private int velocidad; //Declaracin de mtodos public void arrancar(){ //codigo para el metodo arrancar } public void avanzar(int velocidad){ //codigo para el mtodo avanzar } public String queColor(){ //codigo para averiguar el color return color; } }

Estilo
Nombres intuitivos 1 letra minscula Sin espacios en blanco ni guiones Las palabras se separan con maysculas miMetodo() Indentacin

Coche.java

19

Declaracin de mtodos
public class Coche{ //... public void avanzar(int velocidad){ //codigo para el mtodo avanzar } //... }

Coche.java Resultado

parmetros (param1, param2)

Mtodo

(modificadores) tipoRetorno NombreMetodo(tipo1 param1, tipo2 param2) { //cdigo del mtodo return expresion; //cuando el tipoRetorno es void no es necesario }

Declaracin de mtodos
public class Coche{ //... public String queColor(){ //codigo para averiguar el color return color; } //... }

Coche.java Resultado

parmetros (param1, param2)

Mtodo

(modificadores) tipoRetorno NombreMetodo(tipo1 param1, tipo2 param2) { //cdigo del mtodo return expresion; }

20

Declaracin de mtodos
Los mtodos
tienen 0, 1 o ms argumentos (parmetros) definen el tipo de resultado en su declaracin (salvo los constructores!) pueden tener variables locales

En el cuerpo de un mtodo no se pueden declarar otros mtodos. Si el mtodo devuelve un resultado la ltima sentencia debe ser un return

Mtodos constructores
Cuando se crea un objeto sus miembros se inicializan con un mtodo constructor Los constructores:
llevan el mismo nombre que la clase no tienen tipo de resultado

Conviene que haya al menos un constructor Si no existe, Java crea un constructor por defecto que inicializa las variables a su valor por defecto Pueden existir varios que se distinguirn por los parmetros que aceptan (sobrecarga)
IMPORTANTE: Si la clase tiene algn constructor, el constructor por defecto deja de existir
42

21

El mtodo principal (main)


Es el mtodo que busca el intrprete para empezar a ejecutar el programa Los parmetros del main (String args[ ]) son un array de Strings que guarda los argumentos que escribimos en la lnea de comandos al ejecutar el programa.
java HolaMundo arg1 arg2 ...

void indica que no devuelve ningn tipo de datos static indica que este mtodo se refiere a toda la clase, es decir no hay un mtodo main por cada objeto.

Ejemplo (I)
Declaracin de atributos y mtodos

Crear una clase Empleado que tenga:


dos atributos:
nombre DNI

dos mtodos:
decirNombre(); decirDNI();

Rellenar el cuerpo de los mtodos que tienen los comportamientos para que imprima por pantalla

22

Ejemplo (II)
Invocacin de atributos y mtodos

Crear una clase PruebaEmpleado con un mtodo main para comprobar el correcto funcionamiento de la clase.

Acceso a miembros
Modificadores de acceso
Miembros (Variables y mtodos) (friendly) Accesible slo desde clases que estn en el mismo paquete Accesible para todas las clases public Accesible slo en la propia clase private protected Accesible para la propia clase y todas las que hereden de ella.

Otros Modificadores
abstract static final

23

Acceso a miembros
Accesos a clases Dos opciones: friendly o public Friendly: por defecto (sin nada)
Todas las dems clases del paquete tienen acceso, pero para las dems es privada

Public: la clase es accesible por cualquier otra clase, independientemente de su ubicacin


Slo podemos tener una clase public por unidad de compilacin (fichero) El nombre de la clase public debe ser exactamente igual al del fichero

Acceso a miembros
Accesos a elementos de una clase (Elementos: variables o mtodos de una clase) Friendly Las que Public utilizaremos Private de momento
Nadie puede acceder a los elementos privados de una clase, excepto ella misma (ni siquiera las clases del mismo paquete)

Protected
Similar a private, pero permite el acceso a clases derivadas de sta. Adems, tambin es friendly (permite acceso a clases del mismo paquete)

24

Acceso a miembros
Constantes definidas por el usuario
Se definen con la designacin static final
static: variable global final: su valor no se altera Pueden ser public, private o protected Suelen aparecer como todo en MAYSCULAS
class Circunferencia { private static final float PI = 3.14159; private float radio; private float area; public Circunferencia (float radio) { area= 2 * PI * radio; }//constructor } //class OperadoreUnario

Dependiendo de la accesibilidad que se desee

Acceso a miembros
Miembros estticos Modificador static Slo existen una vez por clase, independientemente del nmero de instancias (objetos) de la clase que hayamos creado y aunque no exista ninguna Se puede acceder a los miembros estticos utilizando el nombre de la clase Un mtodo esttico no puede acceder a miembros no estticos directamente, tiene que crear primero un objeto

25

Acceso a miembros
Algunas reglas
Los miembros estticos se invocan con: NombreClase.metodoEstatico(); NombreClase.atributoEstatico; Para acceder a los miembros no estticos necesitamos disponer de una instancia (objeto) de la clase NombreClase nombreObjeto = new NombreClase(); Los miembros no estticos se invocan con: nombreObjeto.metodoNormal(); nombreObjeto.atributoNormal; Cuando invocacin (llamada) a un miembro esttico de la clase se realiza dentro de la propia clase se puede omitir el nombre de la misma. Es decir podemos escribir:
metodoEstatico(); atributoEstatico;

en vez de:

NombreClase.metodoEstatico(); NombreClase.atributoEstatico;

MODIFICADORES

clase

mtodo

atributo

public acceso otros (friendly) protected private abstract

Accesible desde cualquier otra clase Accesible slo desde clases de su propio paquete Accesible desde la clase y sus subclases Accesibles slo dentro de la clase
No se pueden instanciar Son para heredar de ellas Al menos 1 mtodo abstracto No se puede heredar de ellas. Es la hoja en el rbol de herencia No tiene cdigo Se implementa en las subclases o clases hijas

final static

No se puede ocultar Es constante y no puede ser modificado en las clases hijas

No se puede cambiar su valor, es constante Se suele utilizar en combinacin con static Es la misma para todos los objetos de la clase.

Aplicable slo a clases Es el mismo para internas todos los objetos de la clase. Se utiliza: Clase.metodo();

26

Ejemplo (III)
Modificadores de acceso

Modificar la clase empleado para que:


Los dos atributos sean privados Tenga dos mtodos que devuelvan el valor de los atributos:
getNombre(); getDNI();

Rellenar el cuerpo de los mtodos que tienen los comportamientos

Ejemplo (IV)
Invocacin cuando hay modificadores de acceso

Modificar el mtodo main de la clase PruebaEmpleado para realizar la comprobacin de su correcto funcionamiento

27

Ejemplo (V):
Uso de constructores

Modificar el cdigo de la clase empleado para que contenga un constructor con los siguientes parmetros:
nombre, DNI

De este modo nadie podr crear un objeto de la clase empleado sin asignarle un nombre y un DNI

Ejemplo (VI):
Mtodo main

Copia el mtodo main de la clase PruebaEmpleado a la clase empleado Elimina la clase PruebaEmpleado Ejecuta de nuevo tu aplicacin
Sigue funcionando programa? Dnde es mejor poner el main?
En la misma clase: Empleado En una clase independiente: PruebaEmpleado

28

Resumen
Programa Clases (ficheros.java) Miembros Atributos Tipo de referencia Arrays Objetos Tipo Bsico Mtodos Normales Mtodos Mtodos Especiales Main

Constructor

3. Ms orientacin a objetos

29

Herencia
Permite definir a partir de una clase otras clases relacionadas que supongan una:
Especializacin de la clase dada (ej: la clase coche es una especializacin de la clase vehculo) Generalizacin de la clase dada (ej: la clase vehculo es una generalizacin de la clase coche).

Si definimos la clase coche a partir de la clase vehculo se dice que:


coche hereda las variables y mtodos de vehculo, coche extiende de vehculo coche es subclase de vehculo vehculo es superclase de coche.
59

Para qu sirve?
Recurso
nombre descripcion decirNombre() decirDescripcion()

Recurso
nombre descripcion decirNombre() decirDescripcion()

Aula
nombre descripcion localizacion decirNombre() decirDescripcion() decirLocalizacion()

Ordenador
nombre descripcion sistemaOperativo decirNombre() decirDescripcion() decirSistemaOp()

Aula
localizacion decirLocalizacion()

Ordenador
sistemaOperativo decirSistemaOp()

public class Aula extends Recurso public class Ordenador extends Recurso

Los atributos y mtodos que aparecen en azul en la clase padre se repiten en las clases hijas (a la izquierda) No es necesario repetir el cdigo, basta con decir que una clase extiende a la otra o hereda de ella (a la derecha)

30

Ejemplo (VII):
Clase derivada

Crear una clase gerente que extienda a empleado y tenga:


Nueva variable:
Salario

Un constructor:
Con 3 parmetros: nombre, DNI y salario

Dos mtodos:
getSalario(); setSalario(salario);

Rellenar el cuerpo de los mtodos que tienen los comportamientos

Ejemplo (VIII):
Otra clase derivada Crear una clase comercial que extienda a empleado y tenga:
Dos nuevas variables:
comision ventasMes

Un constructor:
Con 3 parmetros: nombre, DNI y comisin

Los mtodos:
getComision(); setComision(comision); sumarVenta(venta); getVentas(); setVentas(ventas); inicioMes();

Rellenar el cuerpo de los mtodos que tienen los comportamientos

31

Ejemplo (IX):
Mtodo main

Programar una pequea aplicacin que permita comprobar el correcto funcionamiento de las clases anteriores:
public class Test { public static void main (String[] args) { ... } }

Ocultacin de variables (shadowing)


Si definimos en una subclase una variable del mismo nombre y tipo que en la superclase, la de la superclase queda oculta Podemos acceder a la variable de la subclase o de la superclase utilizando this y super
Ej: coche extiende de vehiculo y vehiculo extiende de transporte Definimos en las tres clases la variable String nombre Cmo sabemos si nos estamos refiriendo al nombre del transporte, al nombre del vehculo o al nombre del coche?

32

Ocultacin de variables (shadowing)


clase abuela" clase padre clase hija

transporte vehiculo coche

String nombre String nombre String nombre

= "terrestre" = "turismo" = "Ferrari"


variables clase hija: visibles Variables clases padre ocultas

convoy

moto

Cmo acceder a variables ocultas?


nombre (nombre del coche) this.nombre (nombre del coche) super.nombre (nombre del vehculo) ((vehiculo)this).nombre (nombre del vehculo) super.super.nombre (Mal) ((transporte)this).nombre (nombre del transporte)

Redefinicin (overriding)
Si definimos en una subclase un mtodo del mismo nombre y tipo que en la superclase el de la superclase queda oculto Si ponemos el modificador final a un mtodo no lo podemos redefinir Cmo acceder a mtodos ocultos?:
arrancar() (ejecuta el mtodo arrancar del coche) this.arrancar() (mtodo arrancar del coche) super.arrancar() (mtodo arrancar del vehculo) super.super.nombre (Mal)
mtodos clase hija: visibles mtodos clases padre: ocultos

33

Para qu sirve?
Recurso
nombre descripcion decirNombre() decirDescripcion()

Recurso
nombre descripcion decirNombre() decirDescripcion()

Aula
nombre descripcion localizacion decirNombre() decirDescripcion() decirLocalizacion()

Ordenador
nombre descripcion sistemaOperativo decirNombre() decirDescripcion() decirSistemaOp()

Aula
descripcion localizacion decirLocalizacion()

Ordenador
sistemaOperativo decirSistemaOp()

this.descripcion

public class Aula extends Recurso super.descripcion public class Ordenador extends Recurso
67

Modificador Final
En argumentos: Dentro del mtodo no podemos cambiar el valor de ese argumento:
public class Prueba { void Inutil(final Objeto o) { o = new Objeto(); // Ilegal: o es final o.adios(); } }

En mtodos:
Las clases derivadas no podrn sobrescribir el mtodo Adems aporta eficiencia: el compilador convierte llamadas al mtodo en llamadas inline

34

Modificador Final (2)


En clases:
Impido la extensin de la clase (no es posible heredar de ella)
final class Dinosaurio { void andar() { }; } class Velociraptor extends Dinosaurio {}

Error!!

Sobrecarga (overloading)
Podemos definir una clase con dos mtodos con el mismo nombre si los argumentos son distintos Se utiliza mucho para los constructores Sabemos cul de los dos mtodos tenemos que ejecutar por los parmetros que le pasamos cuando le llamamos En este caso no hay ocultacin de la informacin, se puede acceder a los dos mtodos

35

Para qu sirve?
Aula
nombre descripcion localizacion decirNombre() decirDescripcion() decirDescripcion(String mobiliario) decirLocalizacion()

Son dos mtodos distintos porque aunque tengan el mismo nombre tienen distintos argumentos Tienen distinta funcionalidad como ocurre en el caso que se muestra en el ejemplo

describe el aula en general describe el mueble que se encuentra en el aula y que le pasamos como parametro

Conversin de tipos (casting)


Sintaxis: (tipo)identificador Dos tipos de casting:
widening: Una subclase se utiliza como instancia de la superclase (ej: llamamos a un mtodo de la clase padre que no ha sido sobreescrito). Es implcito. narrowing: La superclase se utiliza como instancia de una subclase. Conversin explcita.

Slo se puede hacer casting entre clases padre e hija no entre clases hermanas

36

Clases abstractas
Aquellas que tienen algunos mtodos abstractos (sin cdigo) y otros no No podemos crear objetos de una clase abstracta Las clases y mtodos abstractos llevan la palabra clave abstract No pueden llevar el modificador abstract:
los constructores los mtodos estticos los mtodos privados

Para qu sirve?
La clase Recurso es abstracta porque uno de sus mtodos decirDescripcion() no tiene cdigo
* El color gris claro indica que no tiene cdigo

Recurso
nombre descripcion decirNombre() decirDescripcion()*

Todas las clases que hereden de recurso tienen que tener un mtodo decirDescripcion() donde pongamos el cdigo
** La negrita indica que tiene cdigo

Aula
descripcion localizacion decirDescripcion()** decirLocalizacion()

Ordenador
sistemaOperativo decirSistemaOp() decirDescripcion()**

public abstract class Recurso public class Aula extends Recurso public class Ordenador extends Recurso
74

37

Interfaces
Clase en la que todos los mtodos son abstractos
Las variables en las interfaces son public Los mtodos en las interfaces no tienen modificadores de acceso

El acceso a una interfaz es publico Los interfaces son implementados por clases
una clase implementa una interfaz definiendo los cuerpos de todos los mtodos. una clase abstracta implementa una interfaz rellenando el cuerpo de algunos mtodos. una clase puede implementar una o ms interfaces (herencia mltiple)
75

Para qu sirve?
Recurso no es una clase sino una interfaz porque ninguno de sus mtodos tiene cdigo Recurso
nombre descripcion decirNombre() decirDescripcion()

Todas las clases que implementen Recurso tienen que tener todos los mtodos de Recurso donde pongamos el cdigo

Aula
descripcion localizacion decirNombre() decirDescripcion() decirLocalizacion()

Ordenador
sistemaOperativo decirSistemaOp() decirNombre() decirDescripcion()

public interfaz Recurso public class Aula implements Recurso public class Ordenador implements Recurso
76

38

Paquetes
Un paquete agrupa clases e interfaces Las jerarquas de un paquete se corresponden con las jerarquas de directorios Para referirse a miembros y clases de un paquete se utiliza la notacin de separarlos por puntos. Ej: Cuando hacemos una aplicacin e importamos la clase Vector que nos proporciona Java La clase java.util.Vector est en el directorio java/util
import java.util.Vector;

Paquetes
Cmo utilizar paquetes creados por otros?
Incluimos en el CLASSPATH la direccin de la carpeta que da nombre al paquete por ej: PaqueteDeOtro
set CLASSPATH=c:\PaqueteDeOtro;%CLASSPATH%;. setenv CLASSPATH c:\PaqueteDeOtro:$CLASSPATH

(windows) (linux)

En la clase que queramos utilizarlo ponemos antes de la declaracin de la clase la sentencia import correspondiente
import PaqueteDeOtro.*;

Cmo crear mis propios paquetes?


Almaceno mis clases en un directorio con el nombre del paquete Pongo al principio de todas las clases que pertenezcan al paquete la siguiente instruccin:
package MiPropioPaquete;
78

39

OO: Resumen I
Clase (concreta)
tiene todos los mtodos implementados

Clase abstracta
Slo algunos mtodos implementados modificador abstract

Interfaz
Ningn mtodo implementado palabra reservada: interface

OO: Resumen II
Clase (concreta o abstracta)
puede extender (extends) a una sola clase (herencia simple) puede implementar (implements) uno o ms interfaces (herencia mltiple)
palabra reservada: extends

Interfaz
puede extender (extends) a uno o ms interfaces

Paquetes
Agrupan clases e interfaces

40

4. Sintaxis del lenguaje

Operadores Unarios
Unarios toman un nico argumento:
++,--, etc. Pueden tener notacin prefijo o sufijo.
class OperadorUnario { public static void main(String[] args) { int i=0; System.out.println("i= "+(i++)); // 0: Prefijo System.out.println("i= "+(++i)); // 2 : Sufijo } //main( ) } //class OperadoreUnario

Los operadores prefijo devuelven un valor antes de realizar la operacin y los sufijo despus.

41

Operadores Binarios
Binarios toman dos argumentos:
=, +, etc.
class OperadorBinario { public static void main(String[] args) { int a = 3; int b = a + 5; System.out.println(b= "+ b); // 8 } //main( ) } //class OperadorBinario

Adems de realizar una operacin, los operadores devuelven un valor El valor y su tipo dependen del operador y del tipo y valor de sus operandos

Operadores Aritmticos
Operador + * / % Uso op1 + op2 op1 - op2 op1 * op2 op1 / op2 op1 % op2 Descripcin Suma op1 y op2 Resta op1 y op2 Multiplica op1 y op2 Divide op1 y op2 Resto de dividir op1 por op2

+ y - tienen versiones unarias para fijar el signo de un operando:


Operador + Uso + op - op Descripcin Indica un valor positivo Cambia el signo de op

42

Operadores Relacionales
Los operadores relacionales comparan dos valores y determinan la relacin entre ellos
Operador > >= < <= == != Uso op1 > op2 op1 >= op2 op1 < op2 op1 <= op2 op1 == op2 op1 != op2 Descripcin op1 es mayor que op2 op1 es mayor o igual a op2 op1 es menor que op2 op1 es menor o igual a op2 op1 y op2 son iguales op1 y op2 no son iguales

Cuidado!
El operador = asigna
Ej. var = 5, asigna 5 a var

El operador == compara
Ej. var == 5, devuelve true (tras la asignacin anterior)

Operadores Condicionales
Hay tres operadores relacionales Operador Uso Devuelve true si && || ! p1 && op2 op1 | | op2 ! op op1 y op2 son ambos true op1 o op2 es true op es false

Se utilizan junto con los operadores relacionales para construir expresiones booleanas ms complejas
class Cuenta { public static void main(String[] args) { int cuenta = args.length; int max = 5; boolean enElRango = 0 < cuenta && cuenta < max; System.out.println(Est + cuenta + en el rango? + enElRango); } //main( ) }

43

Operadores de Asignacin
El operador = asigna una valor a una variable.
int cuenta = 0;

Existen abreviaturas:
i = i + 2; i += 2;

Operador += -= *= %=

Uso op1 += op2 op1 -= op2 op1 *= op2 op1 %= op2

Equivale a op1 = op1 + op2 op1 = op1 op2 op1 = op1 * op2 op1 = op1 % op2

Arrays (matrices)
Arrays
Declaracin, creacin e inicializacin Insercin, eliminacin y localizacin de elementos Arrays multidimensionales

44

Arrays (matrices)
Qu son?

Coleccin de entidades del mismo tipo almacenadas en una unidad El operador indexacin [ ] permite el acceso a cada elemento del array El atributo length nos permite saber el n de elementos que contiene el array Rango del Array
De 0 hasta length 1 Cuidado no sobrepasar la longitud mxima
Surge la excepcin IndexOutOfBoundsException

Arrays (matrices)
Declaracin, Creacin, Inicializacin

Declaracin: Consiste en asignar un identificador

al array y decir de qu tipo son los elementos que va a almacenar. tipo nombreArray[];
tipo []nombreArray; Se puede hacer de dos formas Despus de la declaracin an no se ha asignado memoria para almacenar el array no podemos acceder a su contenido Valores por defecto: int, short, long = 0 float, double = 0.0 boleanos = false String = null Object = null

Creacin: Consiste en reservar


espacio en memoria para el array

Es necesario utilizar new y especificar tamao del array nombreArray[] = new tipo[numPosiciones]; Una vez creado el array sus elementos tienen los valores por defecto hasta que el array sea inicializado

45

Arrays (matrices)
Declaracin, Creacin, Inicializacin

Inicializacin: Consiste en dar valores a los


Elemento a elemento
nombreArray[0] = elemento0; nombreArray[1] = elemento1; ...

distintos elementos del array podemos hacerlo de varias formas:

Mediante un bucle
for(int i = 0; i < nombreArray.length; i++) { nombreArray[i] = elemento-i; }

Por asignacin directa


nombreArray = {elem1, elem2, elem3, ...};

Ejemplos
Declaracin, Creacin, Inicializacin Arrays de tipos bsicos
int a[]; //Declara a = new int[3] //Crea a[0]=1; //Inicializa a[1]=2; a[2]=3; int a[] = new int[3] //Declara y Crea a[0]=1; //Inicializacin a[1]=2; a[2]=3; int a[] = new int[3] //Declara y crea for(int i=0; i<a.length;i++){ //inicializa a[i]=i+1; }

int a[] = {1, 2, 3}; //Declaracin, creacin Inicializacin

Arrays de objetos (Tipos de referencia)


MiClase a[]; //Declara a = new MiClase[3] //Crea a[0]=new MiClase(param1); a[1]=new MiClase(param2); a[2]=new MiClase(param3); MiClase a[] = new MiClase[3] //inicializa a[0]=new MiClase(param1); a[1]=new MiClase(param2); a[2]=new MiClase(param3); MiClase a[] = new MiClase[3] //inicializa for(int i=0; i<a.length;i++){ a[i]=new MiClase(param-i); }

MiClase[] a = {new MiClase(param1), new MiClase(param2), new MiClase(param3)};

46

Errores frecuentes
Declaracin, Creacin, Inicializacin public class EjemplosMatrices{ public static void main(String args[]){ double miMatriz[]; Sintaxis System.out.println(miMatriz[0]); } }

compilar MAL Falla la compilacin

variable miMatriz may not have been initialized

Cuando la matriz slo ha sido declarada no podemos acceder a sus elementos: el programa no compilara y dara un error

Errores frecuentes
Declaracin, Creacin, Inicializacin
public class EjemplosMatrices2{ public static void main(String args[]){ int miMatrizDeEnteros[] = new int[10]; compilar float miMatrizDeReales[]= new float[10]; boolean miMatrizDeBooleanos[] = new boolean[10]; Ejecutar char miMatrizDeCaracteres[] = new char[10]; String miMatrizDeStrings[] = new String[10]; Object miMatrizDeObjetos[] = new Object[10]; System.out.println("Entero por defecto: " + miMatrizDeEnteros[0]); System.out.println("Real por defecto: " + miMatrizDeReales[0]); System.out.println("Booleano por defecto: " + miMatrizDeBooleanos[0]); System.out.println(Carcter por defecto: " + miMatrizDeCaracteres[0]); System.out.println("String por defecto: " + miMatrizDeStrings[0]); System.out.println("Objeto por defecto: " + miMatrizDeObjetos[0]); Entero por defecto: 0 } Real por defecto: 0.0 } Booleano por defecto: false Carcter por defecto: Cuando la matriz slo ha sido declarada y creada String por defecto: null pero no inicializada podemos acceder a sus Objeto por defecto: null elementos pero estos tienen su valor por defecto

47

Arrays Multidimensionales
Es un array en el que el acceso a los elementos se hace utilizando ms de un ndice 0 1 2
0 0 1 2 1 2 0 0 1 2 1 2
a j r b k s c l t

t i r z l w z q

A B C D E F G H I
a[0][2]=C
//Declara //Crea //Inicializa

a d g

b e h

c f i

a[0][2][1]=l
char a[][][]; //Declara a = new char[3][3][3] //Crea a[0][0][0]=a

char a[][]; a = new char[3][3] a[0][0]=A;

...

...

Arrays Multidimensionales
Ejemplos Declarar y crear directamente
//Declaracin y Creacin String [][]miMatriz = new String[3][4]
null null null null null null null null null null null null

Declarar y crear por pasos


int [][] miMatriz ; // Declarar el array miMatriz = new int[numFilas][]; // Crear el array de referencia para las filas for(int i=0; i<numFilas; i++){ // Reservar memoria para las filas miMatriz[i]= new int[numColumnas]; }

Otros ejemplos
// Matriz 3x3 inicializada a 0 int [][] a= new int[3][3]; int [][] b= {{1, 2, 3}, {4, 5, 6}};
0 0 0 0 0 0 0 0 0

1 4

2 5

3 6

int [][] c = new[3][]; c[0] = new int[5]; c[1] = new int[4]; c[2] = new int[3];

0 0 0

0 0 0

0 0 0

0 0

48

Cadenas (Strings)

Son secuencias de caracteres implementadas en la clase String (dentro del paquete java.lang) Creacin de Strings
String vaco= new String(); String vacio= ; String mensaje= hola String repeticion= mensaje;

Concatenacin de cadenas
La concatenacin de cadenas se hace utilizando el operador sobrecargado +.
este + aquel abc + 5 a + b + c a + 1 + 2 1 + 2 + a 1 + (2 + a) // Genera esteaquel // Genera abc5 // Genera abc // Genera a12 // Genera 3a // Genera 12a

Comparando Cadenas

Sobre Strings no funcionan los operadores relacionales (<, >, <=, <=) y de igualdad (==, !=)
Estos operadores comparan objetos y no el contenido

En su sustitucin, existen mtodos de comparacin en la clase String


Mtodo equals
cadenaA.equals(cadenaB) true, si los valores de cadenaA y cadenaB son idnticos

Mtodo compareTo
cadenaA.compareTo(cadenaB) entero negativo, si cadenaA es menor que cadenaB 0, si cadenaA es igual que cadenaB entero positivo, si cadenaA es mayor que cadenaB

49

Otros mtodos del tipo String

Longitud de un objeto String Usar mtodo length() Como length() es un mtodo, es necesario usar parntesis Acceso a los caracteres individuales de un String Usar mtodo charAt(), con la posicin
La primera posicin es la posicin 0

Subcadenas Usar mtodo substring()


Devuelve la referencia a un nuevo String. La llamada se realiza especificando la posicin de inicio y la primera posicin no incluida
String saludo= hola; int lon = saludo.length(); char ch = saludo.charAt(1); String sub = saludo.substring(2,4); // lon es 4 // ch es 0 // sub es la

Conversin entre cadenas y tipos primitivos

Para ello se utilizan las llamadas clases envoltorio (wrapper) que se encuentran en java.lang
Se llaman as porque envuelven a los tipos primitivos Integer, Double, Float, Double, Character, Conversin a String
toString(), doubleValue(), ... sin argumentos

Conversin de String al valor del tipo primitivo


parseInt(), parseFloat(), ... sin argumentos

Conversin de String a objeto de la clase envoltorio


valueOf(), con argumento

Conversin de a objeto de la clase envoltorio al valor del tipo primitivo


doubleValue(), intValue(), ... sin argumento
System.out.println(Integer.toString(55,2)); int x = Integer.parseInt(75); Double y= Double.valueOf(3.14).doubleValue();

50

Control de flujo en Java


Java tiene diferentes sentencias de control del flujo del programa:
3 de seleccin (o condicionales) (if, if/else, switch) 3 de repeticin (while, do/while, for)

La sentencia de Seleccin if
Seleccin: elegir entre varias alternativas de cursos
Pseudocdigo:

Si la nota del estudiante es mayor o igual que 5 Imprimir Aprobado


Java:

if (notaEstudiante >= 5) System.out.println( Aprobado );

51

La Sentencia if/else
Pseudocdigo:

Si la nota del estudiante es mayor o igual que 5 Imprimir Aprobado si no Imprimir Suspenso
Java:

if (notaEstudiante >= 5) System.out.println ( Aprobado ); else System.out.println (Suspenso);

El Operador Condicional
Relacionado con if/else...
Java:

System.out.println( notaEstudiante >= 5 ? Aprobado : Suspenso );

En programas complejos, el ooperador condicional Es mucho ms difcil de leer que la simple sentencia if/else !

52

Sentencias if/else anidadas


Pseudocdigo:

si la nota del estudiante es mayor o igual que 9 Imprimir A si no si la nota del estudiante es mayor o igual que 8 Imprimir B si no si la nota del estudiante es mayor o igual que 7 Imprimir C si no si la nota del estudiante es mayor o igual que 5 Imprimir D si no Imprimir E

Sentencias if/else anidadas


Java:

if (notaEstudiante >= 9) System.out.println( A ); else if (notaEstudiante >= 8) System.out.println( B ); else if (notaEstudiante >= 7) System.out.println( C ); else if (notaEstudiante >= 5) System.out.println( D ); else System.out.println(E);

53

Sentencias if/else anidadas


Java Mejorado:

if (notaEstudiante >= 9) System.out.println( A ); else if (notaEstudiante >= 8) System.out.println( B ); else if (notaEstudiante >= 7) System.out.println( C ); else if (notaEstudiante >= 5) System.out.println( D ); else System.out.println(F);
Los programas indentados adecuadamente son ms fciles de entender

Sentencias Compuestas
Una sentencia compuesta puede aparecer all donde apareca cualquier sentencia simple
Se introducen ente llaves { } Las llaves fijan el mbito de todo lo declarado entre las llaves
Java:

if (notaEstudiante >= 5) System.out.println ( Aprobado ); else { System.out.println ( Suspenso ); System.out.println ( Debe recuperar ); }

54

Sentencia switch: switch


Palabra clave switch.
Tipos expresin validos:

switch ( expresion ) { byte, short, int, long y char. ... No String } Dentro del switch aparecen case, break, y default. Ejemplos:
int num=5; switch(num){} char character=z; switch(character){} String string=cadena; switch(cadena){}

Sentencia switch: case.


Palabra clave case.
Selecciona bloque de cdigo que se va a ejecutar. Cada bloque acaba con break;
public class Switch{ public static void main(String[] s){ int mes=1; switch (mes){ case 1: System.out.println("Enero"); break; case 2: System.out.println("Febrero"); break; }}}

55

Sentencia switch: break


Palabra clave break.
Sale del bloque switch, si no aparece se sigue la ejecucin de los siguientes bloques hasta un break o el final del switch;
public class Switch{ public static void main(String[] s){ int mes=1; switch (mes){ case 1: System.out.println("Enero"); case 2: System.out.println("Febrero"); break; }}} Ej: Imprime los valores Enero y Febrero.

Sentencia switch: default


Uso de default:
Se ejecuta cuando la expresin no coincide con ningn selector.
public class Switch{ public static void main(String[] s){ int mes=13; switch (mes){ case 1: System.out.println("Enero"); case 2: System.out.println("Febrero"); break; defaut: System.out.println("Mes desconocido"); }}} Ej: El resultado sera Mes desconocido

56

Sentencia switch: semntica


Semntica
switch ( expresion ) {
case valor1: sentencias1; break; [ case valor2: sentencias2; break; ] [ default: sentencias3; ]
break? sentencias3 ==valor1 sentencias1 break? == valor2 sentencias2

Ejemplo secuencia Switch


Problema:
Tenemos en una variable notaestudiante un valor entero con la nota numrica de cada alumno y queremos sacar para cada valor numrico un mensaje.

Solucin:
(1) Usando ifs anidados. (2) Usando la sentencia switch.

57

Ejemplo sentencia Switch


con if:

if (notaEstudiante == 10) System.out.println(Matricula); else if (notaEstudiante == 9) System.out.println(Sobresaliente); else if (notaEstudiante == 8) System.out.println(Notable alto); else if (notaEstudiante == 7) System.out.println(Notable bajo); else if (notaEstudiante == 6) System.out.println(Aprobado alto); else if (notaEstudiante == 5) System.out.println(Aprobado bajo); else System.out.println(Suspenso);

Ejemplo sentencia Switch


con switch:

switch (notaEstudiante){ case 10: System.out.println(Matricula); break; case 9: System.out.println(Sobresaliente); break; case 8: System.out.println(Notable); break; case 7: System.out.println(Notable bajo); break; case 6: System.out.println(Aprobado alto); break; case 5: System.out.println(Aprobado bajo); break; default: System.out.println(Suspenso); }

58

Sentencia switch: Semntica


A tener en cuenta:
Si no se ponen breaks se ejecuta el cdigo de todos los bloques a partir del primer bloque case que se ejecute. No hace falta colocar el cdigo asociado a cada case entre llaves {}

Sentencias de repeticin (I)


Problema:
Queremos sumar los valores de un array e indicar la suma total de los valores.
public class Suma{ public static void main(String[] s) { float[] numeros ={1,2,3,4}; } }

cmo lo hacemos?

59

Sentencias de repeticin (II)


Solucin uno: Repetir suma 4 veces.
public class Suma{ public static void main(String[] s) { float[] numeros ={1,2,3,4}; sumaTotal=0; sumaTotal+=numeros[0]; sumaTotal+=numeros[1]; sumaTotal+=numeros[2]; sumaTotal+=numeros[3]; System.out.println(La suma total es: +sumaTotal); } }

Problema: y si el array es de 1000000 elementos ?

Sentencias de repeticin (III)


Necesito estructuras de repeticin:
Java proporciona:
for(;;){ } while( condicion){ } do { } while(condicion);
En nuestro ejemplo necesito algo que repita la suma cuatro veces y la forma de saber cul es la vez que estamos repitiendo.

60

Sentencia for (I)


nicializacin; erminacin; ncremento) cializacin for (Inicializacin;Terminacin;Incremento)
{ sentencias; } sentencias;
Inicializacin: valor inicial de variables.
Ej for(int entero=1;;) for(entero=0, casa=1;;)

Terminacin: condicin que termina la ejecucin del bucle.


Ej for(int entero=0;entero<10;) //Se repite mientras entero sea mayor de diez

Incremento: actualizacin de variables en cada iteracin.


Ej: for(int entero=0; entero<10; entero ++); //

Sentencia for (II)


Ejemplo:
public class Suma{ public static void main(String[] s){ float[] numeros ={1,2,3,4}; int i=0; for(i=0; i<6;i++) System.out.println(" i vale: "+i); } }

cuntas veces sale el mensaje por pantalla? cunto vale i en cada mensaje?

61

Sentencia for (III)


Solucin dos: Usando for
public class Suma { public static void main(String[] s){ float[] numeros ={1,2,3,4}; float sumaTotal=0; for(int i=0; i<4;i++){ System.out.println(valor :+numeros[i]); sumaTotal=sumaTotal+numeros[i]; } System.out.println("La suma total es: "+sumaTotal); } }

Problema: Hay que saber a priori el tamao del vector.

Sentencia for (IV)


Solucin tres: for + tamao array.
public class Suma { public static void main(String[] s) { float[] numeros ={1,2,3,4}; float sumaTotal=0; int hasta=numeros.length; for(int i=0; i<hasta;i++) { sumaTotal=sumaTotal+numeros[i]; } System.out.println("La suma total es: "+sumaTotal); } }

Nota: numeros.length nos da el tamao del array numeros.

62

Sentencia for (V)


Sintaxis:
i=0; for (inicial; salida; actualizacin) { sentencias ....;} Ej: for (int i=0; i<10; i+=2) {a+=1; b+=2; } Si aparecen varias sentencias en inicial, salida o actualizacin, se separan con comas. Ej: for (i=0,suma=0; i<=n; i++,suma+=n) no i<10 si a+=1; b+=2; i+=2 Comprabacin condicin salida Sentencias Inicializacin

Actualizacin

Sentencia for (VI)


Ejemplos
int i=0; for (i =0;i<10;) { i=i+2;} int i=0; for ( ; ; ) { i=i+2;} int i=0; for (i=13;i<10; i++) { i=i+2;} int i, suma; for (i =0, suma=5;i<10;suma+=i) { i=i+8;} int i=4; for (;i<10;) { i=i+2;}

cuntas veces se ejecutan estos bucles? cul es el valor de i en cada caso al salir del bucle?

63

Sentencia for (VII)


Bucles for anidados
public class Suma{ public static void main(String[] s){ float[][] numeros ={ {1,2,3,4}, {5,6,7,8} ,{9,10,11,12}}; } } numeros:
1 5 9 2 6 10 3 7 11 4 8 12

cmo calculo la suma total de todos los elementos de la matriz?


Necesito recorrer la matriz por filas y columnas.

Sentencia for (VIII)


Solucin bucle for dentro de bucle for
public class Suma{ public static void main(String[] s) { float[][] numeros ={{1,2,3,4}, {5,6,7,8},{9,10,11,12}}; float total=0; for (int i=0; i<numeros.length;i++) { for (int j=0;j<numeros[i].length;j++) { System.out.println("Leyendo valor: "+numeros[i][j]); total+=numeros[i][j]; } } System.out.println("Valor total: "+total); } } i=0 1 2 j=0
1 5 9

1
2 6 10

2
3 7 11

3
4 8 12

64

Sentencia for (IX)


Notas sobre bucles anidados
La idea bsica es similar a la de ifs anidados. La anidacin de bucles ralentiza la ejecucin del programa. Se usan para recorrer estructuras en formas de matrices n-dimensionales donde cada dimensin es un bucle anidado.

Estructuras de repeticin
Estructuras de repeticin
for (;;){ } while(condicion){}; do {}while( condicion);

qu aportan que no aporte for?


Nada, todo bucle while se puede sustituir por un bucle for, pero a veces es ms intuitivo usar estructuras tipo while.

65

Sentencia while (I)


Sintaxis:
while (condicion) {
Sentencias;
System.in.read()!=1 si

}
condicion es una expresin lgica

Ej:
int cuenta=0; while (System.in.read() != -1) { cuenta++; System.out.println(He ledo: " + cuenta + veces" ); }

cuenta++; System.out.p

Sentencia while (II)


Solucin cuatro: while
public class Suma{ public static void main(String[] s){ float[] numeros ={{1,2,3,4}}; float total=0; int indice; while(indice<numeros.length) { System.out.println("Sumando valor: "+numeros[indice]); total+=numeros[indice]; indice++; } System.out.println("Valor total: "+total); } }

66

Sentencia while (III)


Intercambiando for y while
for (expr1;expr2; expr3) statement expr1; while(expr2){ statement expr3; }

for es ms compacto

Si no necesitamos inicializacin: usaremos while Si necesitamos inicializacin y o actualizacin: for.


Muchos programadores aprovechan el hecho de que los enteros se inicializan a 0 para recorrer arrays, cuyo primer elemento est en la posicin 0.

Sentencias de repeticin
Estructuras de repeticin:
for (;;){ } while (condicion){ } do{ }while(condicion);

67

Sentencia do/while (I)

Es una estructura muy parecida al while. Difiere con while en que la comprobacin se hace al final, primero se ejecuta y despus se comprueba. Siempre se ejecuta al menos una vez, el while puede no llegar a ejecutarse nunca.

Sentencia do/while (II)


Sintaxis:
do {
sentencias
} while (expBooleana);
c=in.read(); ...

Ejemplo
int c; InputStream in; do { c = in.read(); ... } while (c != -1); c!=-1 si

Ejemplo tpico: lectura de un fichero.

68

Sentencia do/while (III)


Notas:
Entre do y while siempre van llaves.
do { } while(expresion); //siempre hay llaves.

Despus de while siempre hay un punto y coma.


do { } while(expresion); //siempre acaba en ;

expresion es una expresin lgica. La sentencia do{} while es muy poco usada.

Sentencia do/while (IV)


Solucin seis: do{ }while
public class Suma{ public static void main(String[] s){ float[] numeros ={{1,2,3,4}}; float total=0; do{ System.out.println("Sumando valor: "+numeros[indice]); total+=numeros[indice]; indice++; } while(indice<4); System.out.println("Valor total: "+total); } } int indice;

Problema: si no hay ningn elemento en el array, qu pasa?

69

Comparativa ...
Comparativa for vs. while vs do while
Inic For While do while
S No No

Act
S No No

Condicin
Continuar Continuar Continuar

Min Ej Uso
0 0 1 Alto Alto Bajo

Inic: Posibilidad de inicializacin de variables. Act: Posibilidad de actualizacin de variables. Condicin: Indica si la condicin es de continuacin o salida. Min ej: nmero mnimo de veces que ejecuta el bloque de texto. Uso: Indica el grado de uso de la estructura de control.

Pautas para uso de for y while


Pautas de cuando usar while o for
Sabemos el nmero de iteraciones (Ej: array) Se desconoce el nmero de iteraciones Incremento de variables en cada ciclo Hay que inicializar variables

for while X X X X

Ej: lectura de fichero con while. Ej: recorre matrices con for.

70

Otras sentencias ...

break continue

Sentencias continue, break


break: cuando se ejecuta dentro de un
int j=0; while(j<10){ j++; break; System.out.println(Esto nunca se ejecuta); } System.out.println(j vale: +j);

while, for, do/while o switch hace que se abandone la estructura donde aparece

El bucle slo se ejecuta una nica vez y se imprime el mensaje j vale: 1.

71

Sentencias continue, break


si se ejecuta dentro de un bloque while, for o do/while se salta el resto de las sentencias del bucle y contina con la siguiente iteracin
int j=0 while(j<10){ j++; continue; System.out.println(Esto nunca se ejecuta); }

continue:

Nunca se imprime el mensaje Esto nunca se ejecuta.

Sentencias continue, break


break + etiqueta: Sirve para salir de estructuras
anidadas. Sigue la ejecucin en la etiqueta
fuera: while(bprincipal<10){ bprincipal++; System.out.println(Bucle principal +bprincipal); while(numcoche<10){ numcoche++; System.out.println(Numcoche +numcoche); if (nuncoche==5) break fuera;} }

Imprime 5 veces cada uno de los dos mensajes. Y salta a la etiqueta fuera que est fuera de la estructura de los dos bucles.

72

Clases estndar
Java Base API
Java.lang: Interfaz y ncleo de clases Java.util: Clases de utilidades Java.io: Clases de input/output Java.net: Clases de red (Basada en TCP/IP) Java.applet: Clase Applet

Java Standard Extension API


JMF J2D, J3D, etc.

Excepciones
Motivacin: Si ejecuto el programa:
public class Suma{ public static void main(String[] s){ float[] numeros ={1,2,3,4}; float valor=numeros[10]; } }

Genera: Excepcin (Exception)


Exception in thread main java.lang.ArrayIndexOutOfBoundsException at Suma.main(Suma.java: 6)

73

Excepciones
Por qu se ha generado?
Hemos tratado de acceder a una posicin no vlida del array La ha generado la mquina virtual Java La excepcin informa del tipo de error que se ha producido: java.lang.ArrayIndexOutOfBoundsException

Excepciones qu son?
Evento que al ocurrir impide la ejecucin normal del programa Cuando ocurre se crea un objeto excepcin y se pasa al sistema de control de ejecucin El sistema de control de ejecucin:
Busca un trozo de cdigo que maneje la excepcin Si no lo encuentra termina el programa

74

Excepciones: Para qu sirven?


Para separar el tratamiento de excepciones del cdigo normal (try-catch) Para propagar errores en la pila de llamadas (throws) Para agrupar y diferenciar tipos de errores (al ser objetos pueden agruparse por clases) Cualquier mtodo tiene que:
tratar (catch) o pasar (throws)

cualquier excepcin producida durante su ejecucin

Excepciones: Tipos
Hay fundamentalmente 3 tipos:
De tiempo de ejecucin (RuntimeException)
Ej: ArithmeticException, NumberFormatException, IndexOutOfBoundException, NullPointerException, etc.) De entrada y salida (IOException, FileNotFoundException, EOFException)

Definida por el usuario (MyException)

En tiempo de compilacin se comprueba que los dos ltimos tipos de excepciones:


se capturen o se declaren en los mtodos en los que puedan darse

75

Excepciones: Cmo usarlas?


Cmo se produce:
implicitamente (cuando se produce un error) explcitamente throw new IOException(mensaje)

Qu hacer:
Tratarla:
Rodear con try{} las sentencias susceptibles de lanzar excepciones Rodear con catch(nombreException){} las sentencias que se deben ejecutar cuando se produce Lanzarla public void miMetodo throws IOException

Rodear con finally{} el cdigo que queremos que se ejecute siempre

Excepciones: Semntica
Semntica
Try { Sentencias; } catch(except ) { Sentencias; } [catch(except2) {} ] [ finally{ } ]
excepcin Tipo_de_Excepcion si Manej1 catch try{ Array[10]; }

Ejemplo

no

try { Array[10]; } catch (Tipo_de_Excepcin variable_e){ Manej1; } finally { Manej2; }

Manej2 finally

76

Excepciones: Semntica
Notas:
Se encierra todo en un bloque try{ } El catch(Except){} es obligatorio Except ha de heredar de System.exception El cdigo del finally se ejecuta siempre. No suele ser muy usado (controversia) Si hay varios catch en batera y uno captura una excepcin a partir de entonces slo se podrn capturar las excepciones padre de la actual (ver ejemplo)

Excepciones: Ejemplos (I)


Captura de excepcin aritmtica
int valor; try{ for (x=0,valor=100;x<100; x++) valor /=x; } catch (ArithmeticException e){ System.out.println(Matemticas Locas); } catch (Exception e) { System.out.println(Se ha producido un error); } Se produce una divisin por cero y se genera una excepcin que imprime Matemticas locas y Se ha producido un error. Nota: ArithmeticException es subclase de Exception.

77

Excepciones: Ejemplos (II)


throw: Lanzamiento de excepciones
class LanzaException{ Static void main(String[] args ) { NullPointerException exception= new NullPointerException(demo); throw exception; } }

Se usa la palabra throw seguida del nombre de la excepcin que se quiere lanzar

Fin...
// Aplicacin final public class Final { public static void main(String[] s) { System.out.println(Se acab... ); } }

78

Vous aimerez peut-être aussi