Programacin II Diapositiva 1
Programacin II
Unidad 3: Elementos avanzados del lenguaje de
programacin Java.
Autor: Programacin II
DTE/ETSIST/UPM
Programacin II Diapositiva 2
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.
ndice
Programacin II Diapositiva 3
Programacin II
3.1. Herencia
Programacin II Diapositiva 4
La herencia es una de las principales capacidades de la POOy 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).
Herencia
Programacin II Diapositiva 5
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.
Sintaxis de herencia
Programacin II Diapositiva 6
Jerarqua de clases
Las relacionesde herencia dan lugar a una jerarqua de clases:
Programacin II Diapositiva 7
Dada la clase Punto (con coordenadas (x, y) y mtodos), cmo crear la clase
Pixel (un punto con coordenadas (x, y) y un color)?
Ejemplo
public classPunto {
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 8
UML Java
Ejemplo de Pixel que hereda de Punto
public classPixel extends Punto {
private int color;
public Pixel (int x, int y, int color){ }
public int getColor() { return color; }
}
public classPunto {
private int x, y;
public Punto (int x, int y) { this.x= 0, this.y=0);
public double getX() { return x ; }
public double getY() { return y ; }
public void mover(int x, int y) { this.x=x; this.y=y; }
}
Punto-x : double
-y : double
+getX() : double
+getY() : double
+mover(int,int)
Pixel-color : int
+getColor() : int
Programacin II Diapositiva 9
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.
Control de acceso en la herencia
Programacin II Diapositiva 10
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 sobreescritospor la superclase.
Sobrescritura del mtodo mover en la subclase Pixel
Sobreescritura
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 11
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.
super
public classPixel 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 12
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 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.
La herencia en la instanciacin
Object
PixelPunto
Programacin II Diapositiva 13
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;
}
}
Constructores
Programacin II Diapositiva 14
Programacin II
3.2. Polimorfismo
Programacin II Diapositiva 15
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
Polimorfismo
Punto punto ;
Pixel pixel = new Pixel();
punto = pixel; // Un pixel es - un punto
punto.getX (); // OK
punto.getColor (); // NOK
Punto
Pixel
Programacin II Diapositiva 16
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.
Polimorfismo
Punto punto = new Punto();
Pixel pixel ;
pixel = punto; // Error de compilacin
pixel = (Pixel) punto;
// Error en ejecucin (si no es verdad)
OK?
Punto
Pixel
Programacin II Diapositiva 17
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 ();
}
Operador instanceof
Programacin II Diapositiva 18
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.
Asociacin dinmica
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
}
Programacin II Diapositiva 19
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 Stringcadena legible caractersticas del estado del
objeto.
Clase java.lang.Object
Programacin II Diapositiva 20
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
String dos = new String
if ( uno.equals (dos) )
System.out.println Cadenas son iguales
else
System.out.println
if (uno==dos) // Se comparan referencias y devuelve false
....
Clase java.lang.Object
Programacin II Diapositiva 21
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 i.toString () );
Resultado: 88
Si se pasa una referencia el mtodo println llama al toString() del
objeto referenciado:
System.out.println
Clase java.lang.Object
Programacin II Diapositiva 22
Programacin II
3.3. Clasesabstractas e interfaces
Programacin II Diapositiva 23
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).
Clases y mtodos abstractos
Programacin II Diapositiva 24
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
}
}
Clases y mtodos abstractos
Programacin II Diapositiva 25
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.
Interfaces
Programacin II Diapositiva 26
// Definicin de la interfaz
public interface Movil {
String medidaVelocidad
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 }
}
Interfaces: ejemplo de uso
Programacin II Diapositiva 27
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
Polimorfismo y asociacin dinmica con interfaces
Programacin II Diapositiva 28
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.
Interfaces
Programacin II Diapositiva 29
// 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 {
}
Interfaces: extensin de la interfaz
Programacin II Diapositiva 30
Programacin II
3.4. Excepciones
Programacin II Diapositiva 31
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.
Excepciones: Introduccin
Programacin II Diapositiva 32
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
Excepciones: Conceptos
Programacin II Diapositiva 33
Sintaxis del bloque de sentencias try/catch/finally
t ry {
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.
}
Excepciones: Capturar
Programacin II Diapositiva 34
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 );
}
}
Captura
Programacin II Diapositiva 35
Pleaseenter an integer numerator: 100Pleaseenter 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)
Captura
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 36
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 ();
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 );
error = false ; // input successful; end looping
} // end try
Excepciones: Ejemplo de captura
Lee de teclado
dos nmeros
enteros y saca
por pantalla la
divisin entera.
Programacin II Diapositiva 37
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 ( \ n" );
error = true ;
} // end catch
} while ( error ); // end do...while
} // end main
} // end class Ejemplo
Excepciones: Ejemplo de captura
Programacin II Diapositiva 38
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:
Excepciones: Lanzar
public static int quotient ( int numerator , int denominator ){
if ( denominator == 0 )
throw new ArithmeticException ();
return numerator / denominator;
}
Programacin II Diapositiva 39
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 : " );
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 );
error = false ; // input successful; end looping
} // end try
Excepciones: Ejemplo de lanzar
Lee de teclado
dos nmeros
enteros y saca
por pantalla la
divisin entera.
Programacin II Diapositiva 40
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
Excepciones: Ejemplo de lanzar
Programacin II Diapositiva 41
Excepciones: Jerarqua excepciones predefinidas
Las excepciones y su jerarqua de clases es la que se muestra en
la figura siguiente:
Programacin II Diapositiva 42
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.
Excepciones: Jerarqua excepciones predefinidas
Programacin II Diapositiva 43
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);
}
}
Excepciones: Jerarqua excepciones predefinidas
Programacin II Diapositiva 44
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 e.getMessage () );
e. printStackTrace ():
}
Excepciones: Jerarqua excepciones predefinidas
Programacin II Diapositiva 45
Ejemplo excepciones comprobables:
Ejemplo excepciones no comprobables
EXCEPCIONES COMPROBABLES
public class ExcepComprobables {
private static int quotient ( int numerator ,
int denominator ) throws MiException
{
if ( denominator == 0 )
throw new MiException ( by 0 " );
return numerator / denominator ;
}
public static void main(String[] args ) throws MiException
{
System. out .printf ( "Result: %d \ n" , quotient(3, 0));
}
}
Java obliga a poner bloque try-catch throws
Programacin II Diapositiva 46
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.
Excepciones: Lanzar
Programacin II Diapositiva 47
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();
}
}
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 )
Excepciones: Propagacin de excepciones
Ningn mtodo captura la excepcin.
Programacin II Diapositiva 48
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 ());
}
}
}
Salida por pantalla
Error: Excepcin en metodo2
Excepciones: Propagacin de excepciones
main captura la excepcin.
Programacin II Diapositiva 49
Ejemplo 1:
public class Ejem3 {
private static void metodo1(){
try {
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
Excepciones: Propagacin de excepciones
metodo1 captura la excepcin.
Programacin II Diapositiva 50
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 finallyy luego se procesa la excepcin (propagarla o terminar la aplicacin).
Excepciones: Uso de finally
Ver figura 11.4 de [1]
Programacin II Diapositiva 51
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
}
catch ( IOException e) {
System.err.println (" Caught IOException : " + e.getMessage ());
}
finally { //cerramos el flujo
if ( pStr != null ) { pStr.close (); }
}
}
Excepciones: Un ejemplo de uso del finally
Programacin II Diapositiva 52
Programacin II
3.5. Paquetes
Programacin II Diapositiva 53
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).
Paquetes: Definiciones I
Programacin II Diapositiva 54
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.
Paquetes: Definiciones II
package ejemplo;
public class Miclase{
}
package otro.ejemplo;
public class Miclase{
} //paquete anonimo
public class Miclase{
}
Programacin II Diapositiva 55
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.HolaMundoHola Mundo
Ejemplo: package prueba
Programacin II Diapositiva 56
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.
Paquetes anidados e import: Ejemplo
/*fichero Dibujo.java*/
package graficos.comun;
public interface Dibujo{
. . .
}
/*fichero Circulo.java*/
package graficos;
import graficos.comun.Dibujo;
public class Circulo implements Dibujo{
. . .
}
Programacin II Diapositiva 57
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
Paquetes: ubicacin del fuente *.java
Programacin II Diapositiva 58
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;
Paquetes: utilizacin
Programacin II Diapositiva 59
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 (...) { ... }
}
Paquetes: Control de acceso
Sern accesibles para todas las
clases del paquete ejem; pero
inaccesibles por clases de otros
paquetes.
Programacin II Diapositiva 60
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).
Paquetes: Control de acceso
Programacin II Diapositiva 61
Bibliografa
Referencias
[1] Paul Deitel- Deitel& Associates, Inc.; Harvey Deitel- Deitel&
Associates programar? Novena edicin.,
Prentice Hall, 2011.
[2] K. Sierra y B. Bates, Head FirstJava, 2nd Edition, O'Reilly
Media, Inc., 2005.
Programacin II Diapositiva 62
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].
Clasesabstractas 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 classesin packages! del captulo 17 de [2].
Bibliografa