Está en la página 1de 62

Programacin II

Unidad 3: Elementos avanzados del lenguaje de


programacin Java.

Autor: Programacin II
DTE/ETSIST/UPM

Programacin II

Diapositiva 1

ndice

Unidad 3: Elementos avanzados del lenguaje de


programacin Java.
3.1. Herencia.

3.2. Polimorfismo.
3.3. Clases abstractas e interfaces.
3.4. Excepciones.

3.5. Paquetes.

Programacin II

Diapositiva 2

Programacin II
3.1. Herencia

Programacin II

Diapositiva 3

Herencia

La herencia es una de las principales capacidades de la POO y permite la


reutilizacin y extensibilidad de software.
Cuando se crea una clase se puede crear nuevos miembros. Tambin

podemos designar que estos se heredan de una clase ya existente, para a


continuacin modificarlos o aadirle nuevos elementos.
En Java la clase ya existente se denomina superclase (clase padre) y la
nueva clase que la extiende se denomina subclase (clase hijo).
Es fcil confundir la relacin es-un (herencia) con la relacin tiene-un
(composicin).

Programacin II

Diapositiva 4

Sintaxis de herencia
Declaracin de una subclase utilizando herencia:

public class Subclase

extends

SuperClase {

/* cdigo */
}
Reglas:
Una clase slo puede heredar de una nica superclase de forma directa (herencia
simple).
Si una clase no hereda explcitamente de otra, por defecto heredar de la clase
java.lang.Object (herencia de jerarqua nica).
Una subclase hereda los atributos y mtodos de su superclase, y de todas sus
ancestros, hasta llegar a Object.
Una subclase puede aadir nuevos elementos (atributos/mtodos). Tambin puede
modificar (tapar/re-escribir) elementos heredados.

Programacin II

Diapositiva 5

Jerarqua de clases

Las relaciones de herencia dan lugar a una jerarqua de clases:

Programacin II

Diapositiva 6

Ejemplo

Dada la clase Punto (con coordenadas (x, y) y mtodos), cmo crear la clase
Pixel (un punto con coordenadas (x, y) y un color)?

public class Punto {

private int x, y; //atributos


// mtodos
Punto ();
public int getX() { return x ; }
public int getY() { return y ; }
public void mover(int x, int y) { this.x=x; this.y=y; }
}

Programacin II

Diapositiva 7

Ejemplo de Pixel que hereda de Punto

UML
Punto

Java
public class Punto {
private int x, y;

-x : double
-y : double

public Punto (int x, int y) { this.x= 0, this.y=0);


public double getX() { return x ; }

+getX() : double
+getY() : double
+mover(int,int)

public double getY() { return y ; }


public void mover(int x, int y) { this.x=x; this.y=y; }

public class Pixel extends Punto {


private int color;

Pixel

public Pixel (int x, int y, int color){ }

-color : int

public int getColor() { return color; }


+getColor() : int

Programacin II

}
Diapositiva 8

Control de acceso en la herencia

La subclase Pixel:
Tiene acceso a las atributos y mtodos de la superclase (Punto)
declarados: public y protected.
No tiene acceso a los declarados private.
Adems, si est en el mismo paquete que la superclase puede
acceder a los miembros (atributos y mtodos) sin modificador.

Programacin II

Diapositiva 9

Sobreescritura

Una subclase puede volver a declarar una variable ya definida


(tapado) volver a codificar un mtodo ya codificado
(sobrescritura). Los mtodos declarados con final en la superclase
no pueden ser sobreescritos por la superclase.
Sobrescritura del mtodo mover en la subclase Pixel

public class Pixel extends Punto {


private int color;
public int getColor() { return color; }
// mtodos (sobreescritos)
public void mover ( int x, int y) { /* cdigo nuevo*/ }
}

Programacin II

Diapositiva 10

super

La palabra reservada super se utiliza para referirse a la clase


inmediatamente superior en la jerarqua de herencia (solo un nivel) y
acceder a sus atributos y mtodos en caso de ambigedad.
public class Pixel extends Punto {
private int color;

public int getColor() { return color; }


// mtodos (sobreescritos)
public void mover( int x, int y) {

if (x >= 0 && y >=0)


super.mover(x,y);
}

Programacin II

Diapositiva 11

La herencia en la instanciacin

Las clases heredadas quedan absorbidas. Cuando se instancia un objeto


se instancia toda la jerarqua. Cada objeto se encarga de instanciar a su
superclase y as sucesivamente.

Pixel pixel = new Pixel() ;

Pixel
Punto

Object

Pixel adems de exponer sus mtodos y atributos, aade los atributos y


mtodos heredados de Punto y los que ste hereda de Object.
Pixel hereda toda la funcionalidad de la clase Punto, a su vez, Punto
hereda toda la funcionalidad de Object.
Programacin II

Diapositiva 12

Constructores
Los constructores no se heredan. Si no se indica nada automticamente al ejecutar
un constructor se llamar al constructor sin parmetros de la superclase. Se
puede indicar en la primera lnea del constructor con la llamada super() a qu

constructor de la superclase se desea llamar (los parmetros permiten distinguirlo):


public class Punto{
private double x,y;
public Punto(int x, int y) {

// super() por defecto

this.x = x; this.y = y;
}
}
public class Pixel extends Punto{

private int color;


public Pixel(int x, int y, int color) {
super(x,y); // en la primera linea
this.color = color;
}
}
Programacin II

Diapositiva 13

Programacin II
3.2. Polimorfismo

Programacin II

Diapositiva 14

Polimorfismo

El polimorfismo en Java permite a travs de una referencia a un tipo


de objeto manejar objetos de ese tipo o de cualquiera de sus

subclases relacionados a travs de herencia (vlido con clases e


interfaces).
Por tipo nos referimos a la clase especificada o cualquiera de sus
subclases

Punto

Punto punto;
Pixel

pixel = new Pixel();

punto = pixel;

Pixel

Programacin II

// Un pixel es-un punto

punto.getX();

// OK

punto.getColor();

// NOK

Diapositiva 15

Polimorfismo

Tambin podemos hacer asignaciones hacia abajo


(downcasting) pero se necesita un moldeado para

compilar. En ejecucin puede generar un error al intentar


utilizarlo si el objeto moldeado no es del tipo al que se ha
convertido.

OK?

Punto

Punto punto = new Punto();

Pixel

pixel;

pixel = punto;

Pixel

// Error de compilacin

pixel = (Pixel) punto;


// Error en ejecucin (si no es verdad)

Programacin II

Diapositiva 16

Operador instanceof

Si en tiempo de ejecucin necesitamos determinar si un objeto


es de un cierto tipo, podemos usar el operador instanceof. Por

ejemplo, esto puede ser necesario para hacer el moldeado al


tipo correcto.
if (punto instanceof Pixel) {
Pixel pixel = (Pixel) punto;

// Ser correcto

int color=pixel.getColor();
proceso.
}

Programacin II

Diapositiva 17

Asociacin dinmica

El polimorfismo influye en la forma en que se resuelve la llamada a un


mtodo en ejecucin. El mtodo que se ejecuta depende del tipo del
objeto referenciado en ese momento.
public void actualizar(Figura[]
figuras ) {
for (i=0 ; i < figuras.length ;
i++)

figuras[i].dibujar();
/* Se sabr en ejecucin a qu tipo
de objeto estamos invocando
(Crculo, Cuadrado, ) */
}

Programacin II

Diapositiva 18

Clase java.lang.Object

La clase Object es la raz de la jerarqua de clases de Java. Todas las


clases son descendientes de esta clase (directa o indirectamente).
Proporciona un cierto nmero de mtodos de utilidad general que
heredarn todos los objetos:
Compararse uno mismo con otro objeto.
Convertir a un String cadena legible caractersticas del estado del
objeto.

Programacin II

Diapositiva 19

Clase java.lang.Object

Compararse uno mismo con otro objeto:


boolean equals (Object o)

Se utiliza este mtodo para comparar si dos objetos son iguales.


(Las referencias se comparan con ==).
En las subclases se debe sobreescribir correctamente para
comparar los objetos. Ejemplo:
String uno = new String(Texto);
String dos = new String(Texto);
if ( uno.equals(dos) )
System.out.println(Cadenas son iguales);
else
System.out.println(Cadenas no son iguales);
if (uno==dos)

// Se comparan referencias y devuelve false

....
Programacin II

Diapositiva 20

Clase java.lang.Object

Convertir a un String el estado del objeto: String toString()


Este mtodo devuelve una cadena (String) con informacin de
estado del objeto. Esta informacin es especfica de cada objeto.
En las subclases se debe sobreescribir correctamente.
Ejemplo:
Integer i = new Integer(88);
System.out.println(Resultado: + i.toString() );

Resultado: 88
Si se pasa una referencia el mtodo println llama al toString() del
objeto referenciado:
System.out.println( Resultado: + i );

Programacin II

Diapositiva 21

Programacin II
3.3. Clases abstractas e interfaces

Programacin II

Diapositiva 22

Clases y mtodos abstractos

Una clase o mtodo abstracto se declara utilizando la palabra


reservada abstract:
abstract public class ClaseAbstracta {

abstract public void metodoAbstracto();


public int otroMetodoImplementado() {
/* cdigo */

}
}

Un mtodo abstracto es un mtodo sin codificacin.

Si una clase tiene un mtodo abstracto debe ser declarada


obligatoriamente como abstracta. Una clase puede ser declarada
como abstracta y no tener mtodos abstractos.
Una clase abstracta no puede declarar mtodos abstractos
privados ni mtodos estticos (no tiene sentido).
Programacin II

Diapositiva 23

Clases y mtodos abstractos

Si una clase es abstracta no se pueden crear objetos de la


misma, solo se utilizan como superclases en las jerarquas de
herencia.
Sus subclases -para que no sean abstractas a su vez- debern
codificar todos los mtodos abstractos.

public class EjemClase extends ClaseAbstracta {


public void metodoAbstracto() {
//implementacin
}
}

Programacin II

Diapositiva 24

Interfaces

Un interfaz es un conjunto de mtodos abstractos (sin


implementacin) y valores constantes, que definen un contrato que
deber ser cumplido por cualquier clase que la implemente.
[acceso] interface UnaInterfaz [extends listaDeInterfaces]
{

int MAXIMO =10;


void unMetodo(Object obj);
Object dosMetodo(Object obj);
int tresMetodo();
}

Implcitamente las constantes son public, static y final; y los mtodos


public y abstract.

Programacin II

Diapositiva 25

Interfaces: ejemplo de uso


// Definicin de la interfaz
public interface Movil {
String medidaVelocidad = Km/h;

boolean arrancar();
void girar(int grados);
void setVelocidad(double velocidad);
}

// Clase que implementa la interfaz


public class Automovil

implements

Movil {

public boolean arrancar(){ // implementacin

public void girar(int grados){ // implementacin

public void setVelocidad(double velocidad){ // implementacin }


}

Programacin II

Diapositiva 26

Polimorfismo y asociacin dinmica con interfaces

public class Moto implements Movil { /* codigo */ }

Movil movil = new Movil();

// Incorrecto !

Automovil auto = new Automovil();


Movil mAuto = auto;

// Polimorfismo

Movil mMoto = new Moto();

// Polimorfismo

mMoto.arrancar();

// Asociacion dinmica

mAuto.arrancar();

// Asociacion dinmica

Programacin II

Diapositiva 27

Interfaces

Reglas:

La interfaz proporciona un mecanismo para facilitar que su


comportamiento (mtodos) pueda ser implementado por distintas clases
de forma independiente a la herencia.
Una interfaz puede extender ms de una interfaz, pero no puede
extender clases. Una interfaz hereda todas las constantes y mtodos de
sus superinterfaces, a no ser que tape las constantes o sobreescriba
los mtodos.
Una interfaz es un tipo de datos referencia, y como tal puede utilizarse,
tanto en argumentos de mtodos como declaracin de variables. Adems
se aplica el poliformismo con cualquier clase que la implemente de forma
similar a como se hace con la relacin de herencia.

Programacin II

Diapositiva 28

Interfaces: extensin de la interfaz

// Extensin de una interfaz


public interface MovilAereo extends Movil {
void setAltura(double altura);
}
// Implementacin de la interfaz extendida
public class Avion implements MovilAereo {
public boolean arrancar() { ... }
public void girar(int grados) { ... }
public void setVelocidad(double velocidad) {...}
public void setAltura(double altura) {...}
}
// Definicin de la interfaz con herencia mltiple
public interface ReMovil extends Comparable, MovilAereo {

Programacin II

Diapositiva 29

Programacin II
3.4. Excepciones

Programacin II

Diapositiva 30

Excepciones: Introduccin

Qu es una excepcin?
Es una indicacin de que se ha detectado una situacin anmala
durante la ejecucin de un programa.
En Java se modela como una clase de objeto ms de un programa.
Para qu se utilizan?
El uso de excepciones en POO persigue gestionar errores
fcilmente, detectarlos y, en la medida de lo posible, conseguir
que un programa pueda continuar tras producirse errores.
Ventajas

Bien utilizadas aumentan en gran medida la robustez de las


aplicaciones.
Permite separar el tratamiento de errores del cdigo normal.

Programacin II

Diapositiva 31

Excepciones: Conceptos

Actividades relacionadas con el uso de excepciones en Java:


Capturar excepciones (bloques try-catch)
Permite gestionar los errores producidos durante la ejecucin de un
conjunto de sentencias.
Lanzar excepciones
Permite indicar que se ha detectado una anomala durante la ejecucin
de un mtodo.

Hay que crear una excepcin (un objeto) que describa la


anomala en cuestin e

Indicar que se ha detectado una anomala usando la palabra


reservada throw.

Cualquier mtodo que puede lanzar una excepcin debe indicarlo en


su cabecera mediante la palabra clave throws.
Definir nuevas clases de excepciones

Programacin II

Diapositiva 32

Excepciones: Capturar

Sintaxis del bloque de sentencias try/catch/finally


try {
Sentencias Java que pueden lanzar una excepcin
}
catch (UnaExcepcion nombreVariable) {
Se captura la excepcin y se trata
}
catch (OtraExcepcion nombreVariable) {
Otro manejador de excepciones. Si se captura arriba ya
no se puede capturar aqu. Importante el orden de la
captura, debe ser de ms especfico a ms genrico.

}
finally {
Siempre se ejecuta este bloque de sentencias, se haya
producido excepcin o no.

}
Programacin II

Diapositiva 33

Captura

CAPTURA DE EXCEPCIONES (Basado en la figura 11.2 de [1])


import java.util.*;
public class Ejemplo {
// demonstrates throwing an exception when a divide-by-zero occurs
public static int quotient( int numerator, int denominator ){
return numerator / denominator; // JVM would detect error division
// by zero and would and
// throw exception.
} // end method quotient
public static void main( String[] args ) {
Scanner scanner = new Scanner( System.in ); // scanner for input
System.out.print( "Please enter an integer numerator: " );
int numerator = scanner.nextInt();
scanner.nextLine();
System.out.print( "Please enter an integer denominator: " );
int denominator = scanner.nextInt(); scanner.nextLine();
int result = quotient( numerator, denominator );
System.out.printf( "\nResult: %d.",result );
}
}

Programacin II

Diapositiva 34

Captura

Please enter an integer numerator: 100


Please enter an integer denominator: 0
Exception in thread "main" java.lang.ArithmeticException: / by zero
at Ejemplo.quotient(Ejemplo.java:4)
at Ejemplo.main(Ejemplo.java:14)

Please enter an integer numerator: 100


Please enter an integer denominator: hello
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at Ejemplo.main(Ejemplo.java:11)

Programacin II

Diapositiva 35

Excepciones: Ejemplo de captura

CAPTURA DE EXCEPCIONES (Basado en la figura 11.2 de [1])


import java.util.InputMismatchException;
import java.util.Scanner;
public class Ejemplo {
// demonstrates throwing an exception when a divide-by-zero occurs
public static int quotient( int numerator, int denominator ){
return numerator / denominator; // JVM would detect error division
// by zero and would and
// throw exception.
} // end method quotient
public static void main( String[] args ) {
Scanner scanner = new Scanner( System.in ); // scanner for input
boolean error= false; // determines if more input is needed
do{
try{ // read two numbers and calculate quotient
System.out.print( "Please enter an integer numerator: " );
int numerator = scanner.nextInt();
scanner.nextLine();
Lee de teclado
System.out.print( "Please enter an integer denominator: " );
dos nmeros
int denominator = scanner.nextInt(); scanner.nextLine();
enteros y saca
int result = quotient( numerator, denominator );
System.out.printf( "\nResult: %d.",result );
por pantalla la
error = false; // input successful; end looping
divisin entera.
} // end try

Programacin II

Diapositiva 36

Excepciones: Ejemplo de captura

CAPTURA DE EXCEPCIONES (Basado en la figura 11.2 de [1])


catch ( InputMismatchException inputMismatchException ){
scanner.nextLine(); // discard input so user can try again
System.out.println("You must enter integers. Try again.\n" );
error = true;
} // end catch
catch ( ArithmeticException arithmeticException ){
System.out.println( No 0 as denominator. Try again.\n" );
error = true;
} // end catch
} while ( error ); // end do...while
} // end main
} // end class Ejemplo

Programacin II

Diapositiva 37

Excepciones: Lanzar

Las excepciones pueden ser lanzadas por la JVM (Java Virtual


Machine) al detectar un error:
En el ejemplo anterior, la JVM lanza la excepcin
ArithmeticException cuando detecta una divisin por 0.
O por el propio programador al comprobar que no se cumple una
condicin utilizando la clausula throw y creando un objeto
correspondiente a la excepcin:
public static int quotient(int numerator, int denominator ){
if( denominator == 0 )
throw new ArithmeticException();
return numerator / denominator;
}

Programacin II

Diapositiva 38

Excepciones: Ejemplo de lanzar

CAPTURA DE EXCEPCIONES (Basado en la figura 11.2 de [1])


import java.util.InputMismatchException;
import java.util.Scanner;
public class EjemLanzar {
public static int quotient( int numerator, int denominator )
{
if ( denominator == 0 ) // The program detects the problem, creates
// the exception and throws it.
throw new IllegalArgumentException("Divide by Zero");
return numerator / denominator;
} // end method quotient
public static void main( String[] args ) {
Scanner scanner = new Scanner( System.in ); // scanner for input
boolean error= false; // determines if more input is needed
do{
try{// read two numbers and calculate quotient
System.out.print( "Please enter an integer numerator: " );
Lee de teclado
int numerator = scanner.nextInt();
scanner.nextLine();
dos nmeros
System.out.print( "Please enter an integer denominator: " );
enteros y saca
int denominator = scanner.nextInt(); scanner.nextLine();
por pantalla la
int result = quotient( numerator, denominator );
System.out.printf( "\nResult: %d.",result );
divisin entera.
error = false; // input successful; end looping
} // end try
Programacin II

Diapositiva 39

Excepciones: Ejemplo de lanzar

CAPTURA DE EXCEPCIONES (Basado en la figura 11.2 de [1])


catch ( InputMismatchException inputMismatchException ){
scanner.nextLine(); // discard input so user can try again
System.out.println("You must enter integers.Try again.\n" );
error = true;
} // end catch
catch ( IllegalArgumentException exception ){
System.out.println( "No 0 as denominator. Try again.\n" );
error = true;
} // end catch
} while ( error ); // end do...while
} // end main
} // end class EjemLanzar

Programacin II

Diapositiva 40

Excepciones: Jerarqua excepciones predefinidas

Las excepciones y su jerarqua de clases es la que se muestra en


la figura siguiente:

Programacin II

Diapositiva 41

Excepciones: Jerarqua excepciones predefinidas

La clase Throwable tiene como subclases:


La clase Error : relacionada con errores internos del sistema o de la JVM.
No se deberan capturar.

La clase Exception se subdivide en:

Clase RuntimeException y subclases (excepciones no


comprobables):
Excepciones producidas en tiempo de ejecucin, relacionadas con errores
de programacin:

NullPointerException.

ArrayIndexOutOfBoundsException.

Java no obliga a capturarlas o a declararlas en los mtodos que pueden


lanzarlas.

Programacin II

Diapositiva 42

Excepciones: Jerarqua excepciones predefinidas

Las dems clases derivadas de Exception (excepciones


comprobables) :
Son excepciones definidas por el programador
Java s obliga a capturarlas y a declararlas en los mtodos que pueden
lanzarlas.

Ejemplo definicin:
public class MiException extends Exception {

public MiException (){}


public MiException (String mensajeError){
super(s);
}
}

Programacin II

Diapositiva 43

Excepciones: Jerarqua excepciones predefinidas

Algunos mtodos de utilidad heredados de la superclase Throwable


por todas las excepciones:

void printStackTrace().
Imprime en la salida estndar todos los mtodos por los que ha
ido pasando, desde donde se gener, la excepcin

String getMessage()
Devuelve la cadena informativa con la que se cre la excepcin.
try {

// cdigo que puede lanzar excepciones


} catch(ExceptionMenorEdad e ) { //captura y tratamiento
System.out.println( Error: +e.getMessage());
e. printStackTrace():
}
Programacin II

Diapositiva 44

Ejemplo excepciones no comprobables

Ejemplo excepciones comprobables:


EXCEPCIONES COMPROBABLES
public class ExcepComprobables {
private static int quotient( int numerator,
int denominator ) throws MiException
{
if ( denominator == 0 )
throw new MiException (Divide by 0");
return numerator / denominator;
}
Java obliga a poner bloque try-catch throws
public static void main(String[] args) throws MiException
{
System.out.printf("Result: %d\n", quotient(3, 0));
}
}

Programacin II

Diapositiva 45

Excepciones: Lanzar

Las excepciones pueden ser lanzadas por el propio programador o


por clases que ste utilice.
Cuando al ejecutar un mtodo A de una clase se produce una
excepcin y la sentencia que genera la excepcin no est capturada
en un bloque try-catch, la excepcin se propaga hacia el mtodo
llamante B que fue el que invoc el mtodo A. Y a su vez, si la
sentencia dentro del mtodo B que invoc el mtodo A no est dentro
de un bloque try-catch, se propaga hacia el mtodo que invoc al
mtodo B. Este proceso se repite hasta llegar al main, donde

finalmente si no se captura provocar la finalizacin de la aplicacin.

Programacin II

Diapositiva 46

Excepciones: Propagacin de excepciones

Ejemplo 1:
public class Ejem1 {
private static void metodo1() throws Exception{
metodo2();
}
private static void metodo2() throws Exception{
throw new Exception("Excepcin en metodo2");
}
public static void main(String[] args) throws Exception{
metodo1();
Ningn mtodo captura la excepcin.
}
}
Salida por pantalla
Exception in thread "main" java.lang.Exception: Excepcin en
metodo2
at Ejem1.metodo2(Ejem1.java:6)
at Ejem1.metodo1(Ejem1.java:3)
at Ejem1.main(Ejem1.java:9)
Programacin II

Diapositiva 47

Excepciones: Propagacin de excepciones

Ejemplo 1:
public class Ejem2 {
private static void metodo1() throws Exception{
metodo2();
}
private static void metodo2() throws Exception{
throw new Exception("Excepcin en metodo2");
}
public static void main(String[] args){
try{
metodo1();
}catch(Exception e){
System.out.println("Error: "+e.getMessage());
}
main captura la excepcin.
}
}
Salida por pantalla
Error: Excepcin en metodo2
Programacin II

Diapositiva 48

Excepciones: Propagacin de excepciones

Ejemplo 1:
public class Ejem3 {
private static void metodo1(){
try{
metodo1 captura la excepcin.
metodo2();
}catch( Exception e){
System.out.println("En metodo1: "+e.getMessage());
}
}
private static void metodo2() throws Exception{
throw new Exception("Excepcin en metodo2");
}
public static void main(String[] args){
metodo1();
}
}
Salida por pantalla
En metodo1: Excepcin en metodo2
Programacin II

Diapositiva 49

Excepciones: Uso de finally

Objetivo principal:
Liberar los recursos que tenga un mtodo, una clase, un programa, y que tras
producirse una excepcin no se necesitan: cerrar un fichero, cerrar una
conexin con otro ordenador a travs de una red de datos, cerrar una
conexin con una base de datos, etc.
Sintaxis:
Siempre va al final de la ltima clusula catch o justo despus de la clusula
try si el bloque try-catch correspondiente no tiene clusula catch.
Entre llaves contiene la secuencia de sentencias asociada a la clusula finally.
Propiedades:
Las sentencias de la clusula finally se ejecutan siempre salvo que se haya
invocado el mtodo System.exit(int cause) en las clusulas try o catch.
Se ejecuta incluso a continuacin de que se llegue a una sentencia return en
las clusulas try o catch.
Si en las clusulas try o catch se generar una excepcin no capturada por
dicho bloque try-catch, primero se ejecutan las sentencias de la clusula finally
y luego se procesa la excepcin (propagarla o terminar la aplicacin).
Ver figura 11.4 de [1]
Programacin II

Diapositiva 50

Excepciones: Un ejemplo de uso del finally

Para cerrar los recursos abiertos.

pStr hay que cerrarlo, se produzca o no una excepcin.


public void writeList() {
PrintStream pStr = null;
try {
pStr = new PrintStream(..);
//operamos
}
catch (IOException e) {
System.err.println("Caught IOException: " + e.getMessage());
}
finally { //cerramos el flujo
if (pStr != null) { pStr.close(); }
}
}

Programacin II

Diapositiva 51

Programacin II
3.5. Paquetes

Programacin II

Diapositiva 52

Paquetes: Definiciones I

Qu son los paquetes?


Los paquetes son grupos relacionados de clases e interfaces que
proporcionan un mecanismo para evitar los conflictos de nombres.
Los nombres de clases no tienen conflictos con los nombres de las
clases de otros paquetes. (tcnicamente un paquete crea un nuevo
espacio de nombres).
Las clases e interfaces que ofrece Java estn estructuradas en
paquetes.
Los nombres de paquetes pueden contener varios componentes
(separados por puntos).

Programacin II

Diapositiva 53

Paquetes: Definiciones II

De hecho, los nombres de los paquetes de Java tienen varios


componentes: java.util, java.lang, etc...
El usuario puede crear sus propios paquetes e incluir en ellos clases e
interfaces utilizando la sentencia package.
Si no se especifica la sentencia package en una clase o interfaz se
convierten en miembros del paquete annimo que siempre es
importado.
package ejemplo;

package otro.ejemplo;

public class Miclase{


.
}

public class Miclase{


.
}

//paquete anonimo
public class Miclase{
.
}

Programacin II

Diapositiva 54

Ejemplo: package prueba

Ejemplo HolaMundo.java dentro del paquete prueba


package prueba;
public class HolaMundo {
public static void main (String [ ] args) {
System.out.println ("Hola mundo");
}
}

Esto obliga a escribir el fichero HolaMundo.java dentro de una carpeta que


se llame prueba.

c:\prg2\prueba\HolaMundo.java

La compilacin

c:\> cd c:\prg2\prueba
c:\prg2\prueba> javac prueba\HolaMundo.java

La ejecucin

c:\prg2\prueba :\> java prueba.HolaMundo


Hola Mundo

Programacin II

Diapositiva 55

Paquetes anidados e import: Ejemplo

En el ejemplo siguiente tenemos dos clases que pertenece a paquetes


diferentes. La interfaz Dibujo pertenece al paquete graficos.comun
y la clase Circulo pertenece al paquete graficos.

/*fichero Dibujo.java*/
package graficos.comun;
public interface Dibujo{
...
}

Programacin II

/*fichero Circulo.java*/
package graficos;
import graficos.comun.Dibujo;
public class Circulo implements Dibujo{
...
}

Diapositiva 56

Paquetes: ubicacin del fuente *.java

Los ficheros Dibujo.java y Circulo.java que representan a las clases en las


que hemos definido los paquetes: package , deben estar situados en un
directorio llamado:

..\graficos\comun\Dibujo.java
..\graficos\Circulo.java
Los ficheros .class generados por el compilador deben situarse en un

directorio llamado
..\graficos\comun\Dibujo.class
..\graficos\Circulo.class

Programacin II

Diapositiva 57

Paquetes: utilizacin

Cuando en una clase o interfaz hacemos referencia a otra clase que no se


encuentra dentro del mismo paquete debemos importarla, si no, el
compilador nos dar un error.

se utiliza la sentencia import (el nombre de la clase paquete completo)


Para importar una clase especfica:

import graficos.utilidad.Dibujo;

Para importar todas las clases de un determinado paquete:

import graficos.utilidad.*;
Si una clase est repetida en dos paquetes diferentes para romper la

ambigedad, se la referencia con su nombre completo:

graficos.Circulo circulo;

Programacin II

Diapositiva 58

Paquetes: Control de acceso

Los paquetes tambin establecen un nivel de visibilidad para las clases y los

miembros (variables y mtodos) de las clases cuando no se dice


explcitamente el acceso.
Por ejemplo, la variable x y el mtodo mx de la siguiente clase:

package ejem;
class C {
String x= hola";
void mx (...) { ... }
}

Programacin II

Sern accesibles para todas las


clases del paquete ejem; pero
inaccesibles por clases de otros
paquetes.

Diapositiva 59

Paquetes: Control de acceso

Las clases e interfaces slo pueden ser public o package (package es la


opcin por defecto cuando no se pone ningn modificador).

Las variables miembro y los mtodos pueden ir precedidas en su declaracin


por uno de los modificadores de acceso: public, private, protected y
package (que es el valor por defecto y puede omitirse).

Programacin II

Diapositiva 60

Referencias

Bibliografa
[1] Paul Deitel - Deitel & Associates, Inc.; Harvey Deitel - Deitel &
Associates, Inc., Java: Cmo programar? Novena edicin.,
Prentice Hall, 2011.
[2] K. Sierra y B. Bates, Head First Java, 2nd Edition, O'Reilly
Media, Inc., 2005.

Programacin II

Diapositiva 61

Contenidos
Contenidos:
Herencia
Secciones 9.1 a 9.6 de [1].
Captulo 7 de [2].

Poliformismo , asociacin dinmica y clase Object


Polimorfismo y asociacin dinmica:
Secciones 10.2, 10.3, 10.5 de [1]
Captulo 7 de [2].
Clase Object

Seccin 9.7 de [1].


Clases abstractas e interfaces
Seccin 10.4 y 10.7 de [1]
Captulo 8 de [2].
Excepciones

Secciones 11.1 a 11.10 de [1].


Captulo 11 de [2].
Paquetes
Seccin 8.14 de [1].
Seccin Put your classes in packages! del captulo 17 de [2].
Bibliografa
Programacin II

Diapositiva 62

También podría gustarte