17
Clases Abstractas e Interfaces Programación I Alexandra Pérez Lab. E6 20/12/2012

Clases abstractas e interfaces (AlexandraPerez)

Embed Size (px)

Citation preview

Page 1: Clases abstractas e interfaces (AlexandraPerez)

Clases Abstractas e Interfaces

Programación IAlexandra PérezLab. E620/12/2012

Page 2: Clases abstractas e interfaces (AlexandraPerez)

Un método abstracto es un método declarado

en una clase para el cual esa clase no proporciona la implementación (el código).

Una clase abstracta es una clase que tiene al menos un método abstracto.

Una clase que extiende a una clase abstracta debe implementar los métodos abstractos (escribir el código) o bien volverlos a declarar como abstractos, con lo que ella misma se convierte también en clase abstracta. 

Clases Abstractas

Page 3: Clases abstractas e interfaces (AlexandraPerez)

Presentan un nivel de "abstracción" tan elevado que

no sirven para instanciar objetos de ellas.

Representan los escalones más elevados de algunas jerarquías de clases y solo sirven para derivar otras clases, en las que se van implementando detalles y concreciones, hasta que finalmente presentan un nivel de definición suficiente que permita instanciar objetos concretos.

Se suelen utilizar en aquellos casos en que se quiere que una serie de clases mantengan una cierta característica o interfaz común. Por esta razón a veces se dice de ellas que son pura interfaz.

Page 4: Clases abstractas e interfaces (AlexandraPerez)
Page 5: Clases abstractas e interfaces (AlexandraPerez)

abstract class FiguraGeometrica {    . . .    abstract void dibujar();    . . .}

class Circulo extends FiguraGeometrica {    . . .    void dibujar() {        // codigo para dibujar Circulo        . . .    }} 

Declaración e implementación de métodos abstractos

Page 6: Clases abstractas e interfaces (AlexandraPerez)

Las clases abstractas se declaran empleando la palabra reservada abstract como se muestra a continuación: public abstract class IdClase . . .

Ejemplo:/** * Declaracion de la clase abstracta FiguraGeometrica * A. Garcia-Beltran - noviembre, 2005*/public abstract class FiguraGeometrica { // Declaracion de atributos private String nombre; // Declaracion de metodos abstract public double area(); public figuraGeometrica (String nombreFigura ) { nombre = nombreFigura; } final public boolean mayorQue (FiguraGeometrica otra) { return area()>otra.area(); } final public String toString() { return nombre + " con area " + area(); }}

Declaración de clases abstractas

Page 7: Clases abstractas e interfaces (AlexandraPerez)

Una clase abstracta solo puede ser usada como

clase base para otras clases, pero no puede ser instanciada para crear un objeto.

Una clase abstracta no puede ser utilizada como argumento o como retorno de una función.

Si puede declararse punteros a clase abstracta . Se permiten referencias a clase abstracta,

suponiendo que el objeto temporal no es necesario en la inicialización.

Reglas de uso:

Page 8: Clases abstractas e interfaces (AlexandraPerez)

Se pueden crear referencias a clases abstractas como cualquier otra:

FiguraGeometrica figura;

Sin embargo una clase abstracta no se puede instanciar, es decir, no se pueden crear objetos de una clase abstracta. El compilador producirá un error si se intenta:

FiguraGeometrica figura = new FiguraGeometrica();

Esto es coherente dado que una clase abstracta no tiene completa su implementación y encaja bien con la idea de que algo abstracto no puede materializarse. Sin embargo:

FiguraGeometrica figura = new Circulo(. . .);figura.dibujar();

La invocación al método dibujarse resolverá en tiempo de ejecución y la JVM llamará al método de la clase adecuada.

Referencias y objetos abstractos

Page 9: Clases abstractas e interfaces (AlexandraPerez)

public abstract class Figura {int x, y;public void mostrarOrigen() {System.out.println("x= "+x+" y= "+y);}public abstract double area(); // No tiene implementaciónpublic abstract double mostrarNombre();}public class Triangulo extends Figura {protected int base, altura;public Triangulo (int ba, int al) { base=ba; altura=al; }public double area() { return base*altura/2; }public void mostrarNombre() { System.out.println(“triangulo”); }}public class Cuadrado extends Figura {protected int lado;public Cuadrado (int lado) { this.lado=lado; }public double area() { return lado*lado; }public void mostrarNombre() { System.out.println(“cuadrado”);}}

Ejemplo clase abstracta

Page 10: Clases abstractas e interfaces (AlexandraPerez)

Prueba clase abstractapublic class PruebaClaseAbstracta {public static void main(String args[]) {Figura fig;Triangulo tri;Cuadrado cua;fig = new Figura(); // error no se puede //instanciar una clase abstractatri = new Triangulo(4,3);tri.mostrarOrigen();tri.mostrarNombre();fig = tri;fig.mostrarNombre();System.out.println("Area triangulo: "+fig.area());cua = new Cuadrado(5);fig = cua;System.out.println("Area cuadrado: "+fig.area());}}

Page 11: Clases abstractas e interfaces (AlexandraPerez)

Una interfaz en java es un conjunto de

métodos abstractos y propiedades. En ellas se especifica qué se debe hacer pero no su implementación. Serán las clases que implementen estas interfaces las que describan la lógica del comportamiento de los métodos.

Interfaces

Page 12: Clases abstractas e interfaces (AlexandraPerez)

Se organiza la programación. Obligar a que ciertas clases utilicen los

mismos métodos (nombres y parámetros). Establecer relaciones entre clases que no

estén relacionadas.

Ventajas al utilizar interfaces

Page 13: Clases abstractas e interfaces (AlexandraPerez)

interface NombreInterfaz {tipo static final NOMBRECONSTANTE1 = valor;…….….….public tipoDevuelto nombreMetodo1(listaParámetros);…….….….}

class NombreClase implements NombreInterfaz1 [, NombreInterfaz2 ..] {// declaración atributos y métodos de la clase…….….….}

Declaración de interfaces

Page 14: Clases abstractas e interfaces (AlexandraPerez)
Page 15: Clases abstractas e interfaces (AlexandraPerez)

Se puede definir un interface que especialice a otro

interface mediante extends similar a herencia. Un interface puede extender a varios interfaces a la

vez.

interface ElementoOrdenado extends Comparable, Cloneable, java.io.Serializable {// miembros y métodos propios del interfaz //ElementoOrdenado..... }

Extensión de interfaces

Page 16: Clases abstractas e interfaces (AlexandraPerez)

public interface Nombrable {static final boolean CIERTO = true;public void mostrarNombre();}public class Elemento implements Nombrable {String nombre;public Elemento(String nom) {nombre = nom; }// obligatorio implementar método mostrarNombrepublic void mostrarNombre(){System.out.println("Nombre: "+nombre);if (CIERTO)System.out.println("Constante CIERTO ");}}

Ejemplo:

Page 17: Clases abstractas e interfaces (AlexandraPerez)

http://gl-epn-programacion-ii.blogspot.com/2010/04/

interfaces-en-java.html http://www.fdi.ucm.es/profesor/lgarmend/arcgisjava/

temas/Tema%209%20Clases%20abstractas http://ocw.upm.es/lenguajes-y-sistemas-informaticos/

programacion-en-java-i/Contenidos/LecturaObligatoria/16-herencia.pdf %20e%20interfaces.pdf

http://www.slideshare.net/networksens/09-clases-abstractas-e-interfaces

http://www.zator.com/Cpp/E4_11_8c.htm http://www.arrakis.es/~abelp/ApuntesJava/

ClasesAbstractas.htm

Net grafía: