El documento habla sobre el polimorfismo en Java. Explica que el polimorfismo permite referirse a objetos de diferentes clases mediante el mismo elemento de programa y realizar la misma operación de diferentes formas dependiendo del objeto. Menciona que existen tres técnicas de polimorfismo: sobrecarga de funciones y métodos, sobrescritura en la herencia e implementación de interfaces. Proporciona ejemplos de cada una.
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
4. 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
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 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
14. 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
15. 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
Notas del editor
El valor de retorno no puede diferenciar, por si solo, dos sobrecargas.
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”
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.
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
Interfaz: Define el comportamiento de una clase, no su implementación.
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
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.
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.