You are on page 1of 11

29/10/2011

Clases Abstractas e Interfaces

Curso: Tecnologa de la Programacin I. Docente: Mg. Zoraida Yanet Vidal Melgarejo.


CLASE 08

Mtodos abstractos

Tenemos un mtodo f() aplicable a todos los objetos de la clase A. rea de un polgono. La implementacin del mtodo es completamente diferente en cada subclase de A. rea de un tringulo. rea de un rectngulo.

29/10/2011

Mtodos abstractos

Para declarar un mtodo como abstracto, se pone delante la palabra reservada abstract y no define un cuerpo: abstract tipo nombreMtodo(....); Luego en cada subclase se define un mtodo con la misma cabecera y distinto cuerpo.

Clases Abstractas

Si una clase contiene al menos un mtodo abstracto, entonces es una clase abstracta. Una clase abstracta es una clase de la que no se pueden crear objetos, pero puede ser utilizada como clase padre para otras clases. Declaracin: public abstract class NombreClase { .............. }

29/10/2011

Ejemplo de clase abstracta


persona Persona -nombre -edad +toString() : String +cambiarEdad()

Alumno alumno
-curso -nivelAcademico +cambiarCurso() +toString() : String +pagoMensual() : double +mostrarAsignaturas() profesor Profesor -asignatura +toString() : String

libre Libre -listaAsignaturas -precioPorHora -noHorasDiarias -pedirAsignaturas() +pagoMensual() : double +mostrarAsignaturas()

presencial Presencial -matriculaCurso -noConvocatoria -plusPorConvocatoria +pagoMensual() : double +mostrarAsignaturas()

Ejemplo de clase abstracta


public abstract class Alumno extends Persona { protected int curso; private String nivelAcademico; public Alumno (String n, int e, int c, String nivel) { super(n, e); curso = c; nivelAcademico = nivel; } public String toString() { return super.toString() + curso + nivelAcademico; } public abstract double pagoMensual(); public abstract String getAsignaturas(); }

29/10/2011

Ejemplo de clase abstracta


public class Libre extends Alumno { private String []listaDeAsignaturas; private static float precioPorHora=10; private int noHorasDiarias; private void pedirAsignaturas() { // se inicializa listaDeAsignaturas } public double pagoMensual() { return precioPorHora*noHorasDiarias*30; }

Ejemplo de clase abstracta


public String getAsignaturas() { String asignaturas=""; for (int i=0; i<listaDeAsignaturas.length; i++) asignaturas += listaDeAsignaturas[i] + ' '; return asignaturas; } public Libre(String n, int e, int c, String nivel, int horas) { super(n,e,c,nivel); noHorasDiarias = horas; pedirAsignaturas(); } }

29/10/2011

Ejemplo de clase abstracta


public class Presencial extends Alumno { private double matriculaCurso; private double plusPorConvocatoria; private int noConvocatoria; public double pagoMensual() { return (matriculaCurso+plusPorConvocatoria*noConvocatoria)/12; } public String getAsignaturas(){ return todas las del curso + curso; }

Ejemplo de clase abstracta


public Presencial(String n, int e, int c, String nivel, double mc, double pc, int nc) { super(n,e,c,nivel); matriculaCurso=mc; plusPorConvocatoria=pc; noConvocatoria=nc; } }

10

29/10/2011

Ejemplo de clase abstracta


// Mtodos que generan enlace dinmico void mostrarAsignaturas(Alumno v[]) { for (int i=0; i<v.length; i++) System.out.println(v[i].getAsignaturas()); // enlace dinmico } double totalPagos(Alumno v[]) { double t=0; for (int i=0; i<v.length; i++) t += v[i].pagoMensual(); // enlace dinmico return t; }

11

Interfaces

Podra suceder que los objetos de varias clases compartan la capacidad de ejecutar un cierto conjunto de operaciones. Y dependiendo de la clase de objeto, cada operacin se realice de diferente manera. Ejemplo: Clases: Circulo, Elipse, Triangulo, .... Todas esas clases incluyen los mtodos: rea, perimetro, cambiarEscala, etc. Podramos definir una interfaz comn que agrupe todos los mtodos comunes (como mtodos abstractos). Y luego definir varias clases de modo que implementen una misma interfaz.
12

29/10/2011

Ejemplo de Interface
public interface Figura { public double area(); public double perimetro(); }

13

Ejemplo de Interface
public class Cuadrado implements Figura { private double lado; public Cuadrado(double lado) { this.lado = lado; } public double area() { return lado*lado; } public double perimetro() { return 4*lado; } }
14

29/10/2011

Ejemplo de Interface
public class Circulo implements Figura { private double radio; private final double PI=3.1416; public Circulo(double radio) { this.radio = radio; } public double area() { return PI*radio*radio; } public double perimetro() { return 2*PI*radio; } }
15

Interfaces
Se pueden declarar referencias a objetos que implementen una cierta interfaz. double totalArea(Figura v[]) { double t=0; for (int i=0; i<v.length; i++) t += v[i].area(); // enlace dinmico return t; }

16

29/10/2011

Interfaces
Una interfaz puede incluir tambin definiciones de constantes aparte de mtodos abstractos. Una misma clase puede implementar ms de una interfaz Herencia mltiple de interfaces

17

Herencia entre Interfaces


Se pueden crear jerarquas de interfaces (con extends!!).

18

29/10/2011

Herencia entre Interfaces


public interface AdicionalPorEstudios { public float POR_GRADO = 0.10f; public float pagoAdicionalPorEstudios(); }

19

Herencia entre Interfaces


public interface AdicionalPorHijos { public float POR_HIJO = 0.20f; public float pagoAdicionalPorHijos(); }

20

10

29/10/2011

Herencia entre Interfaces

public interface Adicionales extends AdicionalPorEstudios, AdicionalPorHijos { public float pagoTotalAdicionales(); }


21

11

You might also like