You are on page 1of 11

Practicas AEDI 2003/2004

prcticas AEDI
ampliacin de estructuras de datos y de la informacin

CONCEPTOS
paquetes: agrupacin de clases Java ~ unit Pascal
herencia: modela las relaciones ES-UN/A
interfaz: especifica el comportamiento de una clase a travs de la definicin de sus
mtodos (no implementacin)
excepciones: captura de errores excepcionales

INTRODUCCIN
Una clase en Java es un tipo definido por el usuario que describe los atributos y los
mtodos de los objetos que se crearn a partir de la misma.
atributos: definen el estado de un determinado objeto
mtodos: son las operaciones que definen comportamiento del objeto
atributos y mtodos se denominan miembros de clase
Para controlar el acceso a los miembros de una clase, Java proporciona las palabras clave
private, protected y public denominados modificadores de acceso, aunque tambin se puede
omitir: predeterminado
Los modificadores de acceso indican el tipo de acceso permitido a cada miembro:
predeterminado: accesibles slo por las clases del paquete
miembros pblicos: accesibles para todas las clases
miembros privados: slo accesibles desde la propia clase
miembros protegidos: accesibles desde las clases derivadas de
una clase base (da igual el paquete en el que est).

Constructores y destructores son mtodos especiales que permiten iniciar y destruir un objeto.
Toda aplicacin java contiene al menos una clase que define un mtodo main
public class Mensaje {
public static void main (String args[])
{
System.out.println(mensaje);
}

El mtodo tiene como misin inicializar y finalizar la ejecucin de la aplicacin.

1/11

Practicas AEDI 2003/2004

En un fichero se pueden incluir tantas definiciones de clases como se desee, pero slo
una de ellas puede ser declarada como public. sta ser la que defina el nombre del
fichero .java

PAQUETES
Los paquetes permiten a Java agrupar clases, interfaces, excepciones y
constantes en agrupaciones lgicas: son contenedores de clases.
Permiten la organizacin de las clases.
La funcionalidad de los paquetes es la reutilizacin, restriccin, facilidad de
uso y visibilidad de las clases. Similar a las units de Pascal.
Un paquete puede contener a otros paquetes.
Ej: package NombrePaquete

Si se omite la definicin de paquete las clases se asocian a un paquete por defecto sin
nombre. De esta forma se asegura que todas las clases pertenecen a un paquete
Java utiliza los directorios del sistema de archivos para almacenar los paquetes,
pudiendo crearse una jerarqua de paquetes separando los niveles por puntos.
Ej: package Paquete.Subpaquete1.Subpaquete3;
** Esta jerarqua debe estar reflejada en el sistema de archivos, es decir debe existir un directorio
Paquete, que contenga al subdirectorio SubpaqueteN y as sucesivamente. No existe lmite en
la profundidad de la jerarqua de paquetes, slo la que imponga el propio sistema de archivos
Ej: package Paquete.Subpaquete1.Subpaquete3 = Paquete\Subpaquete1\..

import
Para acceder a los paquetes desarrollados se utiliza la sentencia import seguida del
nombre de paquete o paquetes a importar. El import va situado a continuacin de la
sentencia package, si existe, y antes de las definiciones de clase.
Se pueden importar todas las clases del paquete o slo algunas:
El comodn para importar todas las clases de paquete es el *
Ej:

import Paquete.* ;
import Paquete.Subpaquete.Clase;

Una vez importado un paquete podemos hacer referencia a sus mtodos directamente:

2/11

Practicas AEDI 2003/2004

Ej: sin import


java.lang.System.out.println(no se importa el paquete);

con import
import java.lang.System

System.out.println(se ha importado el paquete);


** Todas las clases del paquete java.lang son importadas automticamente por todos los
programas Java, esto implica que el cdigo anterior siguiera funcionando sin la sentencia
import. El resto de los paquetes deben ser importados explcitamente.

Cada vez que hacemos referencia a un mtodo de una clase que no se encuentra en la
clase definida, el compilador la buscar dentro de la clase o clases importadas
** Problema: cuando se importan dos paquetes que contienen clases con el mismo nombre es
necesario emplear la sentencia completa para acceder a la clase que se desee

HERENCIA
clase padre

clase hijoA

clase base

clase hijoB

clase derivada

-Modela las relaciones ES-UN/A: ** no confundir la relacin ES-UN/A con CONTIENE


clase base: clase de la que deriva el resto de las clases
clase derivada:
- Variacin de la clase base de la que hereda mtodos y atributos
- Hereda todas las propiedades de la clase base.
- Los mtodos pblicos de la clase base se convierten en mtodos pblicos de la clase
derivada
- Permite aadir atributos y mtodos adicionales e incluso modificar el significado de
los mtodos heredados
clase final: no puede ser extendida (no se puede heredar de ella), todos sus mtodos son
tambin finales y no se pueden redefinir
clase abstracta: la clase base nicamente define los mtodos y atributos de la clase
- No se puede instanciar
- Tiene que existir una subclase que la implemente

3/11

Practicas AEDI 2003/2004

Se pueden definir mtodos abstractos y no abstractos (diferencia con interfaz donde


todos los mtodos son abstractos: no contienen implementacin)
Ej.: Clase Abstracta: Figura
Subclases: Circulo, Rectngulo
Subclase de rectngulo: Cuadrado
En la clase abstracta definimos un mtodo para calcular el rea.
En las subclases implementamos el mtodo, puesto que no tiene sentido su
implementacin en la clase base.
rea circulo: PI * RADIO2
rea cuadrado, rectngulo: LADO * LADO

Cada clase derivada se convierte en una clase nueva, y no afecta para


nada a la clase base
Una clase base siempre es de tipo compatible con una clase derivada,
sin embargo esto no sucede en caso contrario.
Las clases que estn a un mismo nivel no son de tipos compatibles.

Herencia:
-

Mecanismo bsico de reutilizacin de cdigo


Permite extender la funcionalidad de un objeto
Permite definir nuevos tipos restringiendo o aumentando propiedades
Genera una jerarqua de clases, que es usada para implementar mtodos y
clases genricos:
Estructura en forma de rbol de profundidad n.
Recursividad de la herencia: cada clase hereda de su predecesor y as
sucesivamente

Ejemplo de herencia en Java. Visibilidad de los mtodos:


public class ClaseDerivada extends claseBase
{
// codigo
}

Ejemplo clase abstracta e implementacin:


public abstract class Figura
{
// atributos
private String nombre;
// constructor
public Figura( String nom )
{
nombre = nom;
}

// mtodo abstracto
abstract public double area();

4/11

Practicas AEDI 2003/2004

public class Circulo extends Figura


{
// atributos
private double radio;
//constructor
public Circulo (double r)
{
super (circulo);
radio = r;
}

// implementacin del mtodo area()


public double area()
{
return PI * radio * radio
}

public class Rectangulo extends Figura


{
//atributos
private double base;
private double alt;

//constructor
public Rectangulo (double largo, doble ancho)
{
super (rectangulo);
base = largo;
alt = ancho;
}
// implementacin del mtodo area()
public double area()
{
return base * alt
}

// creamos la clase Cuadrado que extiende de Rectngulo


aprovechar el calculo del rea del la clase Rectngulo
public class Cuadrado extends Rectangulo
{
// constructor
public Cuadrado (double lado)
}
super(lado, lado);
}
}

5/11

para

Practicas AEDI 2003/2004

INTERFAZ
Es un conjunto de declaraciones de mtodos (sin implementacin) y atributos
que son implcitamente public, static y final. Una clase implementa una interfaz si
define todos los mtodos abstractos de la interfaz.
Mientras que una clase puede extender slo a otra clase base, s que puede
implementar una o varias interfaces.
Una interfaz puede heredar de otra utilizando extends. Cuando una clase
implementa una interfaz que hereda de otra, tiene que implementar todos los mtodos
definidos en la cadena de herencia de la interfaz

Diferencia entre interface y clase abstracta?


Ambas tienen en comn que pueden contener declaraciones de mtodos sin
implementar y no se pueden instanciar, difieren, entre otras cosas, en:
-

Una clase no puede heredar de dos clases abstract, pero si puede heredar de
una clase abstract e implementar una o ms interfaces
Una clase no puede heredar mtodos definidos de una interface

Ejemplo declaracin e implementacin de interfaz:


//Declaracin de interfaz
public interface MiInterfaz {
int CONSTANTE = 100;

//declaro la interfaz del mtodo que posteriormente se implementar


int metodoAbstracto( int parametro );

//Implementacin de interfaz
public class ImplementaInterfaz implements MiInterfaz{
int multiplicando=CONSTANTE;

// implemento el mtodo
int metodoAbstracto( int parametro )
{
return ( parametro * multiplicando );
}

//Implementacin de varias interfaces en una misma clase


public class coche extends Vehculo implements Amotor, Terrestre {}

6/11

Practicas AEDI 2003/2004

EXCEPCIONES
Una excepcin es un error o condicin anormal surgida durante la ejecucin de una
secuencia de cdigo. Se pueden producir errores fatales (irrecuperables) que provocan
la finalizacin del programa y otros que el programador debe tener en cuanta y que
son fcilmente recuperables. Java obliga a que el programador prevea este tipo de
situaciones capturando el error producido.
Las excepciones pueden ser generadas por el intrprete o por el propio cdigo. Cuando
se produce una excepcin se detiene la ejecucin del programa, se crea un objeto que la
representa y se enva al mtodo que lo ha provocado. El mtodo puede gestionar la
excepcin (capturarla), o dejar que el gestor del interprete Java lo trate, el cual mostrar
un mensaje describiendo la excepcin.

Ejemplo sin tratamiento de excepcion:


class Excepcion {
static void calculo()
{
int d = 0;
int a = 10 / d; // se produce una excepcion: divisin por 0
System.out.println(no se visualiza por la excepcion anterior);
}
public static void main (String args[]){
calculo();
}
}

Este cdigo devuelve una salida con la excepcin que ha saltado, indicando en que lnea,
documento y porque se produce el error.
Las excepciones tienen especial importancia puesto que:
- Permiten determinar la condicin de error y reaccionar ante ella.
- Evita que el programa termine automticamente y de manera anmala
La gestin de excepciones se lleva a cabo con un bloque de cdigo con cinco palabras
clave: try, catch, throw, throws y finally.
El esquema general del bloque es el siguiente:
try {
// cdigo que puede provocar la excepcion
}
catch (tipoExcepcion1 objExcepcion) {
//
cdigo
que
se
ejecuata
cuando
se
produce
tipoExcepcion1
}
catch (tipoExcepcion2 objExcepcion) {
//
cdigo
que
se
ejecuata
cuando
se
produce
tipoExcepcion2
}
finally {
// se ejecuta siempre se produzca o no la excepcin
}

7/11

la

excepcion:

la

excepcion:

Practicas AEDI 2003/2004

Tipos de excepcion
Todos los tipos de excepcion son subtipos de la clase Throwable, que est en la parte
superior de la jerarqua de clases de excepcion.

Throwable

Error

Exception
...

RunTimeException

IOException

AWTException

NullPointerException

EOFException

IndexOutOfBoundsEx

FileNotFoundEx

NegativeArraySizeEx.

MalformedURLEx

Las excepciones de tipo RunTimeException son definidas automticamente por los


programas( divisin por cero, ndice invlido de matriz,)
La subclase Error define excepciones relacionadas con errores de compilacin, del
sistema o de la JVM, que no se suelen capturar en los programas en condiciones
normales, ya que se crean como respuesta a fallos irrecuperables que no suelen ser
gestionados.
Las clases derivadas de Exception pueden pertenecer a distintos paquetes de Java:
java.lang: Throwable, Exception, RuntimeException,
java.io: EOFException, FileNotfoundException,
Al heredar de la clase Throwable todos ellos disponen en los mtodos
String getMessage(): Extrae el mensaje asociado a la excepcin
String toString(): Devuelve un String con la descripcin de la excepcin.
Void printStackTrace(): Indica el mtodo donde se lanz la excepcin.

8/11

Practicas AEDI 2003/2004

Ejemplo captura de excepcion


class CapturaExcepcion {
static void calculo()
{
try {
int d = 0;
int a = 10 / d; // se produce una excepcion: divisin por 0
System.out.println(no se visualiza por la excepcion
anterior);
}
catch(Exception e)
{ System.out.println(error indeterminado + e); }
catch(ArithmeticExcepcion e)
{ System.out.println(no se ejecuta + e); }
}

public static void main (String args[]){


calculo();
}

** La sentencia try-catch slo ejecuta el primer catch que se corresponde con la excepcin
producida, obviando el resto.
En este ejemplo, java impide su compilacin e informa de un error indicando que la excepcion
ya ha sido capturada,

throw y throws
El programador puede lanzar sus propias excepciones de manera explcita,
permitiendo que los mtodos respondan a circunstancias inesperadas.

Ejemplo lanzamiento de excepcin de modo explcito


class Division {
public static void main (String args[]){
try{
if (denominador==0) throw new IllegalArgumentException();
int a = 10 / denominador;
return a;

} catch (IllegalArgumentException e) {
System.out.printlh (Denominador Negativo);
}

Tambin podemos propagar las excepciones explcitamente hacia atrs a travs de la


secuencia de llamadas, para ello, en el mtodo que debe capturar la excepcin se aade
la clausula throws

9/11

Practicas AEDI 2003/2004

Ejemplo de propagacin de excepcion


public static void main (String args[]){
}
static void calculo()throws IllegalArgumentException
{
int d = 0;
if (d == 0) throw new IllegalArgumentException();
int a = 10 / d;
}

Cuando un mtodo no trata una excepcin, si sta no es de los tipos Error,


RuntimeException o de cualquiera de sus subclases, entonces es obligatorio usar la
clusula throws.

10/11

Practicas AEDI 2003/2004

Subclases de excepcin propias


Es posible crear tipos propios de excepcin. Para ello, solo es necesario definir
una subclase de Exception, que es a su vez, una subclase de Throwable.
Realmente las excepciones no necesitan implementar nada, simplemente su
existencia en el sistema permite utilizarlas como excepciones.
Ejemplo creacin de excepcion propia
class ExcepcionDenominadorCero extends Exception{

ExcepcionDenominadorCero(){
super();
}
ExcepcionDenominadorCero(String s){
super(s);
}

public static void main (String args[]){

static void
{
int d
if (d
int a
}

calculo()trows ExcepcionDenominadorCero
= 0;
== 0) throw new ExcepcionDenominadorCero ();
= 10 / d;

11/11

You might also like