Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ProgII Unidad3 Transparencias
ProgII Unidad3 Transparencias
Autor: Programacin II
DTE/ETSIST/UPM
Programacin II
Diapositiva 1
ndice
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
Programacin II
Diapositiva 4
Sintaxis de herencia
Declaracin de una subclase utilizando herencia:
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
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)?
Programacin II
Diapositiva 7
UML
Punto
Java
public class Punto {
private int x, y;
-x : double
-y : double
+getX() : double
+getY() : double
+mover(int,int)
Pixel
-color : int
Programacin II
}
Diapositiva 8
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
Programacin II
Diapositiva 10
super
Programacin II
Diapositiva 11
La herencia en la instanciacin
Pixel
Punto
Object
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
this.x = x; this.y = y;
}
}
public class Pixel extends Punto{
Diapositiva 13
Programacin II
3.2. Polimorfismo
Programacin II
Diapositiva 14
Polimorfismo
Punto
Punto punto;
Pixel
punto = pixel;
Pixel
Programacin II
punto.getX();
// OK
punto.getColor();
// NOK
Diapositiva 15
Polimorfismo
OK?
Punto
Pixel
pixel;
pixel = punto;
Pixel
// Error de compilacin
Programacin II
Diapositiva 16
Operador instanceof
// Ser correcto
int color=pixel.getColor();
proceso.
}
Programacin II
Diapositiva 17
Asociacin dinmica
figuras[i].dibujar();
/* Se sabr en ejecucin a qu tipo
de objeto estamos invocando
(Crculo, Cuadrado, ) */
}
Programacin II
Diapositiva 18
Clase java.lang.Object
Programacin II
Diapositiva 19
Clase java.lang.Object
....
Programacin II
Diapositiva 20
Clase java.lang.Object
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
}
}
Diapositiva 23
Programacin II
Diapositiva 24
Interfaces
Programacin II
Diapositiva 25
boolean arrancar();
void girar(int grados);
void setVelocidad(double velocidad);
}
implements
Movil {
Programacin II
Diapositiva 26
// Incorrecto !
// Polimorfismo
// Polimorfismo
mMoto.arrancar();
// Asociacion dinmica
mAuto.arrancar();
// Asociacion dinmica
Programacin II
Diapositiva 27
Interfaces
Reglas:
Programacin II
Diapositiva 28
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
Programacin II
Diapositiva 31
Excepciones: Conceptos
Programacin II
Diapositiva 32
Excepciones: Capturar
}
finally {
Siempre se ejecuta este bloque de sentencias, se haya
producido excepcin o no.
}
Programacin II
Diapositiva 33
Captura
Programacin II
Diapositiva 34
Captura
Programacin II
Diapositiva 35
Programacin II
Diapositiva 36
Programacin II
Diapositiva 37
Excepciones: Lanzar
Programacin II
Diapositiva 38
Diapositiva 39
Programacin II
Diapositiva 40
Programacin II
Diapositiva 41
NullPointerException.
ArrayIndexOutOfBoundsException.
Programacin II
Diapositiva 42
Ejemplo definicin:
public class MiException extends Exception {
Programacin II
Diapositiva 43
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 {
Diapositiva 44
Programacin II
Diapositiva 45
Excepciones: Lanzar
Programacin II
Diapositiva 46
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
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
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
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
Programacin II
Diapositiva 51
Programacin II
3.5. Paquetes
Programacin II
Diapositiva 52
Paquetes: Definiciones I
Programacin II
Diapositiva 53
Paquetes: Definiciones II
package otro.ejemplo;
//paquete anonimo
public class Miclase{
.
}
Programacin II
Diapositiva 54
c:\prg2\prueba\HolaMundo.java
La compilacin
c:\> cd c:\prg2\prueba
c:\prg2\prueba> javac prueba\HolaMundo.java
La ejecucin
Programacin II
Diapositiva 55
/*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
..\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
import graficos.utilidad.Dibujo;
import graficos.utilidad.*;
Si una clase est repetida en dos paquetes diferentes para romper la
graficos.Circulo circulo;
Programacin II
Diapositiva 58
Los paquetes tambin establecen un nivel de visibilidad para las clases y los
package ejem;
class C {
String x= hola";
void mx (...) { ... }
}
Programacin II
Diapositiva 59
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].
Diapositiva 62