09 Polimorfismo y Clases Abstractas

download 09 Polimorfismo y Clases Abstractas

of 13

Transcript of 09 Polimorfismo y Clases Abstractas

  • 8/7/2019 09 Polimorfismo y Clases Abstractas

    1/13

    1

    Polimorfismo y Clases Abstractas

    Tecnologa de la Programacin IIng. Zoraida Vidal Melgarejo, Mg.

  • 8/7/2019 09 Polimorfismo y Clases Abstractas

    2/13

    2

    Polimorfismo

    Una misma llamada ejecuta distintas sentenciasdependiendo de la clase a la que pertenezca el objeto al quese aplica el mtodo.

    Supongamos que declaramos: Persona p; Podra suceder que durante la ejecucin del programa, p

    referencie a un profesor o a un alumno en distintosmomentos, y

    Entonces: Si p referencia a un alumno, con p.toString(), se ejecuta

    el toString de la clase Alumno. Si p referencia a un profesor, con p.toString(), se ejecuta

    el toString de la clase Profesor. Enlace dinmico: Se decide en tiempo de ejecucin qu

    mtodo se ejecuta.

  • 8/7/2019 09 Polimorfismo y Clases Abstractas

    3/13

    3

    Ejemplo de Polimorfismo

    public static void main(String[] args) {Persona v[]=new Persona[10];// Se introducen alumnos, profesores y personas en v

    for (int i=0 ; i

  • 8/7/2019 09 Polimorfismo y Clases Abstractas

    4/13

    4

    Mtodos abstractos

    Tenemos un mtodo f() aplicable a todos los objetos de laclase A. rea de un polgono.

    La implementacin del mtodo es completamente diferenteen cada subclase de A. rea de un tringulo. rea de un rectngulo......................................

    Para declarar un mtodo como abstracto, se pone delante la

    palabra reservada abstracty no define un cuerpo:abstract tipo nombreMtodo(....);

    Luego en cada subclase se define un mtodo con la mismacabecera y distinto cuerpo.

  • 8/7/2019 09 Polimorfismo y Clases Abstractas

    5/13

    5

    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 puedencrear objetos, pero puede ser utilizada como clase padre para

    otras clases. Declaracin:

    abstract class NombreClase {

    ..............

    }

  • 8/7/2019 09 Polimorfismo y Clases Abstractas

    6/13

    6

    Ejemplo de clase abstracta

    +toString() : String+cambiarEdad()

    persona

    -nombre-edad

    +cambiarCurso()+toString() : String+pagoMensual() : double+mostrarAsignaturas()

    alumno

    -curso-nivelAcademico

    +toString() : String

    profesor

    -asignatura

    -pedirAsignaturas()+pagoMensual() : double+mostrarAsignaturas()

    libre

    -listaAsignaturas-precioPorHora-noHorasDiarias

    +pagoMensual() : double+mostrarAsignaturas()

    presencial-matriculaCurso-noConvocatoria-plusPorConvocatoria

  • 8/7/2019 09 Polimorfismo y Clases Abstractas

    7/13

    7

    Ejemplo de clase abstracta

    abstract class Alumno extends Persona {protected int curso;private String nivelAcademico;public Alumno (String nombre, int edad, int curso,

    String nivel) {super(nombre, edad);setCurso(curso);setNivelAcademico(nivel);

    }abstract double pagoMensual();

    abstract String getAsignaturas();

    //

  • 8/7/2019 09 Polimorfismo y Clases Abstractas

    8/13

    8

    Ejemplo de clase abstracta

    //public void setCurso (int curso) {

    this.curso = curso>=1?curso:0;}

    public void setNivelAcademico (String nivel) {this.nivelAcademico = nivel != null?nivel:NN;}public String toString() {

    return super.toString() + curso + nivelAcademico;}

    }

  • 8/7/2019 09 Polimorfismo y Clases Abstractas

    9/13

    9

    Ejemplo de clase abstracta

    public class Libre extends Alumno {

    private String []listaDeAsignaturas;private static float precioPorHora=10;private int noHorasDiarias;

    public double pagoMensual() {return precioPorHora*noHorasDiarias*30; }

    public String getAsignaturas() {

    String asignaturas="";

    for (int i=0; i

  • 8/7/2019 09 Polimorfismo y Clases Abstractas

    10/13

    10

    Ejemplo de clase abstracta

    //

    private void pedirAsignaturas() {// se inicializa listaDeAsignaturas

    }

    public Libre(String n, int e, int c, String nivel, int horas) {super(n,e,c,nivel); noHorasDiarias = horas;pedirAsignaturas(); }

    }}

  • 8/7/2019 09 Polimorfismo y Clases Abstractas

    11/13

    11

    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;

    }

    //

  • 8/7/2019 09 Polimorfismo y Clases Abstractas

    12/13

    12

    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;

    }}

  • 8/7/2019 09 Polimorfismo y Clases Abstractas

    13/13

    13

    Ejemplo de clase abstracta

    // FUNCIONES GLOBALESvoid mostrarAsignaturas(Alumno v[]) {for (int i=0; i