Ricardo More Reaño




  Java


Polimorfismo
Polimorfismo

         Es la propiedad que indica, literalmente, la
 posibilidad de que una entidad tome muchas formas.
 En términos prácticos, el polimorfismo permite
 referirse a objetos de clases diferentes mediante el
 mismo elemento de programa y realizar la misma
 operación de diferentes formas, según sea el objeto
 que se referencia en ese momento.
Tipos
  
      Sobrecarga de funciones y métodos
  
      Sobrescritura en la herencia
  
      Implementación de interfaces

                   Técnicas de Programación II Ciclo
Ejemplo de polimorfismo




    Técnicas de Programación II Ciclo
Polimorfismo

Sobrecarga
  Es la posibilidad de tener dos o más funciones
 con el mismo nombre pero funcionalidad
 diferente. Es decir, dos o más funciones con el
 mismo nombre realizan acciones diferentes.




                Técnicas de Programación II Ciclo
Ejemplo sobrecarga


class Calculadora {
 int suma(int x, int y) {
  return (x + y);
 }

    float suma(float x, float y) {
     return (x + y);
    }
}



                         Técnicas de Programación II Ciclo
Polimorfismo



Ocultamiento
  
      Desde un objeto de la clase derivada, siempre se
      accede al método sobrescrito.
  
      El método original queda “oculto”.
  
      La decisión de “a quien llamar” se resuelve
      basándose en el tipo de la variable del objeto.




                  Técnicas de Programación II Ciclo
Polimorfismo



    Ocultamiento: Problema 1
    class Base {
      public: void Metodo( ) {cout << "Base::Metodon"; }};
    class Derivada : public Base {
      public: void Metodo( ) {cout << "Deri::Metodon"; }};
    void main() {
       Base ObjBase; Derivada ObjDerivada; Base* pBase;
       pBase = &ObjBase;
       pBase->Metodo( );
       pBase = &ObjDerivada;
       pBase->Metodo( );
    }


                   Técnicas de Programación II Ciclo
Polimorfismo



Sobrescritura virtual
   
       Desde cualquier método de la clase base o
       derivada o desde fuera de ellas, una llamada a un
       método se resuelve en base al tipo del objeto, no el
       de la variable.




                   Técnicas de Programación II Ciclo
Polimorfismo




    Implementación de
    interfaces
    
      Concepto de Interfaz
    
      Definición:
        
            Java:
            interfaz UnaInterfaz { void Met( ); }

                    Técnicas de Programación II Ciclo
Polimorfismo



    Implementación de interfaces
     
       Java:
         interfaz Dibujable { ... }
         class Texto implements Dibujable { ... }

    
        Pueden tener herencia múltiple,
        reemplazando la herencia múltiple de
        clases.


                  Técnicas de Programación II Ciclo
Polimorfismo


    Clases Abstractas: Problema 1
using System;
abstract class Base{
    public void imprimir() {Console.WriteLine("Imprimir: Clase Base");}
    abstract public void metodo();
}
class Derivada : Base{
    new public void imprimir(){Console.WriteLine("Imprimir: Clase Derivada");}
    override public void metodo(){Console.WriteLine("Metodo: Clase Derivada");}
}
class MainClass{
    public static void Main(string[] args){
         Base objbase ;//= new Base();
         Derivada derivada = new Derivada();
         objbase = derivada;
         objbase.imprimir(); objBase.metodo();
         derivada.imprimir();derivada.metodo();
    }
}




                          Técnicas de Programación II Ciclo
Polimorfismo


                    Interfaz                           Clase abstracta

Declarar métodos                                      
abstractos
Implementar         X                                  
Métodos
Añadir datos        X                                  
miembros
Crear objetos       X                                  X
Crear arreglos,                                       
referencias


                   Técnicas de Programación II Ciclo
Ejercicios




Diseñar una clase Garaje que:
• En el constructor se indique el número total de plazas de garaje
• En cada plaza se pueda guardar tanto un coche como una moto
• Tenga una función que devuelva la cuota mensual de una plaza:
  -Si en dicha plaza hay un coche, la cuota se calcula como la potencia multiplicada
por el número de plazas
  -Si en dicha plaza hay una moto, la cuota se calcula como la potencia multiplicada
por 2
  -Si no hay ningún vehículo en la plaza, la cuota es 0



                                  Técnicas de Programación II Ciclo
Ejercicios


Se quiere elaborar el catálogo de un museo para lo
cual se deben modelar las siguientes entidades:
a) Los artistas, de los que se quiere guardar
información acerca de su nombre y lugar de
nacimiento, así como la fecha de su natalicio y de su
fallecimiento.




                 Técnicas de Programación II Ciclo
b) Las obras artísticas, de cada una de las cuales se
desea conocer su título, su número de inventario, su
autor y el año en que la realizó. En el museo solo
hay dos tipos de obras: esculturas y pinturas. De las
primeras se quiere guardar información sobre el
material en que fueron hechas y la altura que
poseen. De las pinturas en cambio, se guardará
información de sus dimensiones y del soporte en que
han sido realizadas.
c) El catálogo es una secuencia de obras artísticas.


                Técnicas de Programación II Ciclo

Polimorfismo en Java

  • 1.
    Ricardo More Reaño Java Polimorfismo
  • 2.
    Polimorfismo Es la propiedad que indica, literalmente, la posibilidad de que una entidad tome muchas formas. En términos prácticos, el polimorfismo permite referirse a objetos de clases diferentes mediante el mismo elemento de programa y realizar la misma operación de diferentes formas, según sea el objeto que se referencia en ese momento. Tipos  Sobrecarga de funciones y métodos  Sobrescritura en la herencia  Implementación de interfaces Técnicas de Programación II Ciclo
  • 3.
    Ejemplo de polimorfismo Técnicas de Programación II Ciclo
  • 4.
    Polimorfismo Sobrecarga Esla posibilidad de tener dos o más funciones con el mismo nombre pero funcionalidad diferente. Es decir, dos o más funciones con el mismo nombre realizan acciones diferentes. Técnicas de Programación II Ciclo
  • 5.
    Ejemplo sobrecarga class Calculadora{ int suma(int x, int y) { return (x + y); } float suma(float x, float y) { return (x + y); } } Técnicas de Programación II Ciclo
  • 6.
    Polimorfismo Ocultamiento  Desde un objeto de la clase derivada, siempre se accede al método sobrescrito.  El método original queda “oculto”.  La decisión de “a quien llamar” se resuelve basándose en el tipo de la variable del objeto. Técnicas de Programación II Ciclo
  • 7.
    Polimorfismo  Ocultamiento: Problema 1 class Base { public: void Metodo( ) {cout << "Base::Metodon"; }}; class Derivada : public Base { public: void Metodo( ) {cout << "Deri::Metodon"; }}; void main() { Base ObjBase; Derivada ObjDerivada; Base* pBase; pBase = &ObjBase; pBase->Metodo( ); pBase = &ObjDerivada; pBase->Metodo( ); } Técnicas de Programación II Ciclo
  • 8.
    Polimorfismo Sobrescritura virtual  Desde cualquier método de la clase base o derivada o desde fuera de ellas, una llamada a un método se resuelve en base al tipo del objeto, no el de la variable. Técnicas de Programación II Ciclo
  • 9.
    Polimorfismo  Implementación de interfaces  Concepto de Interfaz  Definición:  Java: interfaz UnaInterfaz { void Met( ); } Técnicas de Programación II Ciclo
  • 10.
    Polimorfismo  Implementación de interfaces  Java: interfaz Dibujable { ... } class Texto implements Dibujable { ... }  Pueden tener herencia múltiple, reemplazando la herencia múltiple de clases. Técnicas de Programación II Ciclo
  • 11.
    Polimorfismo  Clases Abstractas: Problema 1 using System; abstract class Base{ public void imprimir() {Console.WriteLine("Imprimir: Clase Base");} abstract public void metodo(); } class Derivada : Base{ new public void imprimir(){Console.WriteLine("Imprimir: Clase Derivada");} override public void metodo(){Console.WriteLine("Metodo: Clase Derivada");} } class MainClass{ public static void Main(string[] args){ Base objbase ;//= new Base(); Derivada derivada = new Derivada(); objbase = derivada; objbase.imprimir(); objBase.metodo(); derivada.imprimir();derivada.metodo(); } } Técnicas de Programación II Ciclo
  • 12.
    Polimorfismo Interfaz Clase abstracta Declarar métodos   abstractos Implementar X  Métodos Añadir datos X  miembros Crear objetos X X Crear arreglos,   referencias Técnicas de Programación II Ciclo
  • 13.
    Ejercicios Diseñar una claseGaraje que: • En el constructor se indique el número total de plazas de garaje • En cada plaza se pueda guardar tanto un coche como una moto • Tenga una función que devuelva la cuota mensual de una plaza: -Si en dicha plaza hay un coche, la cuota se calcula como la potencia multiplicada por el número de plazas -Si en dicha plaza hay una moto, la cuota se calcula como la potencia multiplicada por 2 -Si no hay ningún vehículo en la plaza, la cuota es 0 Técnicas de Programación II Ciclo
  • 14.
    Ejercicios Se quiere elaborarel catálogo de un museo para lo cual se deben modelar las siguientes entidades: a) Los artistas, de los que se quiere guardar información acerca de su nombre y lugar de nacimiento, así como la fecha de su natalicio y de su fallecimiento. Técnicas de Programación II Ciclo
  • 15.
    b) Las obrasartísticas, de cada una de las cuales se desea conocer su título, su número de inventario, su autor y el año en que la realizó. En el museo solo hay dos tipos de obras: esculturas y pinturas. De las primeras se quiere guardar información sobre el material en que fueron hechas y la altura que poseen. De las pinturas en cambio, se guardará información de sus dimensiones y del soporte en que han sido realizadas. c) El catálogo es una secuencia de obras artísticas. Técnicas de Programación II Ciclo

Notas del editor

  • #5 El valor de retorno no puede diferenciar, por si solo, dos sobrecargas.
  • #7 La implementación del ocultamiento es eficiente puesto que se resuelve en tiempo de compilación. El compilador puede determinar a quien se debe llamar de forma “segura”, es decir, es claro siempre a quien se debe de llamar. C# exige que se declare un ocultamiento utilizando “new”
  • #8 El tipo de la variable no coincide con el tipo del objeto. El objeto referenciado puede ser de un tipo derivado, por lo que la llamada puede ser “incorrecta”. En el ejemplo mostrado, en la peníltima línea “pBase” no apunta a un objeto “Base” por lo que la llamada a “Metodo” se resuelve hacia la implementación en “Base”, cuando lo que probablemente se deseaba era que sea resuelta hacia “Derivada”, el tipo del objeto, no el de la variable.
  • #9 La decisión de “a quien se llama” no puede resolverse durante la compilación, dado que no se conoce en dicho momento que tipo de objeto
  • #10 Interfaz: Define el comportamiento de una clase, no su implementación.
  • #11 Explicar: Por que Java y C# no utilizan herencia múltiple, esto es, que la herencia múltiple: Hace dificil resolver comflictos de espacios de nombres Es posible duplicidad de datos Internamente es complicado de implementar y produce código más lento
  • #12 Explicar que: No se puede crear una instancia de la clase abstracta. Una clase abstracta puede implementar un método no abstracto. Un método abstracto debe estar dentro de una clase abstracta. Un método abstracto no debe ser implementado en la clase base, es implementado en las clases derivadas.
  • #13 Java: Las interfaces pueden tener datos miembros constantes (final, automático). Automáticamente todos los miembros de una interfaz son públicos. C#: Las interfaces no pueden tener datos miembros. C# está orientado al desarrollo de componentes. Los componentes deben interactuar mediante una interfaz con el exterior. Esta interfaz solo la deben componer métodos, debido a : El exponer datos directamente puede modificar incorrectamente el componente y los tipos de dato pueden no ser estándar. C#: reemplaza esto con el uso de propiedades.