Tema: Funciones Virtuales y Polimorfismo.

Anuncio
Programación II. Guía No. 9
1
Facultad:
Ingeniería
Escuela:
Computación
Asignatura: Programación II
Tema: Funciones Virtuales y Polimorfismo.
Objetivos

Describir el concepto de polimorfismo.

Utilizar las funciones virtuales para aplicar el polimorfismo en C#.

Definir funciones virtuales.
Materiales y Equipo
 Computadora con el software C # de Visual Studio 2013.
 Guía Número 9.
Introducción Teórica
Funciones Virtuales.
Una función virtual es una función miembro pública o protegida de una clase base que puede
ser redefinida en cada una de las clases derivadas de esta, y una vez redefinida puede ser
accedida mediante una referencia a la clase base.
Esta se declara colocando la palabra clave virtual antes de la declaración de la función
miembro perteneciente a la clase base, así:
virtual <tipo de dato> <nombre de la función> (lista de parámetros);
Polimorfismo.
La utilización de clases derivadas y funciones virtuales es frecuentemente denominada
programación orientada a objetos.
Además, la facultad de llamar a una variedad de funciones utilizando exactamente el mismo
medio de acceso, proporcionada por funciones virtuales, es a veces denominada polimorfismo.
Polimorfismo significa “la facultad de asumir muchas formas”, refiriéndose a la facultad de
llamar a muchas funciones diferentes con una sola sentencia.
2
Programación II. Guía No. 9
En un lenguaje orientado a objetos, el polimorfismo es la propiedad por la que un mensaje
puede significar cosas diferentes dependiendo del objeto que lo recibe. La razón por la que el
polimorfismo es útil se debe a que proporciona la capacidad de manipular instancias de clases
derivadas a través de un conjunto de operaciones definidas en su clase base. Cada clase
derivada puede implementar las operaciones definidas en la clase base.
El polimorfismo adquiere su máxima potencia cuando se utiliza en unión con la herencia.
Reglas para utilizar Polimorfismo.
1. Crear una jerarquía de clases con las operaciones importantes definidas por las
funciones miembros declaradas como virtuales en la clase base.
2. Las implementaciones específicas de las funciones virtuales se deben hacer en las
clases derivadas. Cada clase derivada puede tener su propia versión de las funciones.
3. Si se omite la implementación del método en la clase derivada asumirá la instrucción
dada por la clase base.
Clases Abstractas.
Una clase abstracta es una clase que se define con el propósito de establecer bases
conceptuales sobre las cuales se definirán otras clases, mismas que podrán ser clases
concretas. Es decir, una clase abstracta no se usará directamente en la solución de un
problema, sino que formará parte del diseño conceptual de la solución. Por lo tanto, en el
programa no se crearán instancias (objetos) de las clases abstractas. Sin embargo, cabe
destacar que las clases derivadas sí heredan sus miembros.
En una clase abstracta pueden incluirse métodos virtuales que requieren ser especificados en
las clases derivadas. Es decir, métodos a los que se les asignará el contenido en cada clase
derivada.
Procedimiento
Ejemplo 1 – Funciones Virtuales.
El siguiente ejemplo utiliza una clase llamada Figuras como Clase base y se implementan dos
clases derivadas Rectángulo y Triangulo, como se muestra en la siguiente jerarquía de
herencia:
Figuras
Triángulo
Rectángulo
Programación II. Guía No. 9
3
CLASE FIGURAS
CLASE RECTÁNGULO
Override: permite a
las clases derivadas
sobreescribir
las
instrucciones
del
método
que
fueron
definidas
en
la
clase
base.
Con
ello podrá realizar
su
propia
instrucción
pero
manteniendo el mismo
nombre.
4
Programación II. Guía No. 9
CLASE TRIÁNGULO
CLASE PROGRAM
Programación II. Guía No. 9
5
Ejemplo 2 – Polimorfismo.
El siguiente ejemplo utiliza un arreglo de objetos para poder definir el concepto de
polimorfismo. Utilizaremos el ejemplo No. 1. Modificar el main de la clase Program del
programa anterior por el siguiente código:
Análisis de Resultados
Ejercicio 1:
Agregar una nueva derivación de Figuras con la clase Rombo, las propiedades que tendrá el
rombo son diagonal mayor y diagonal menor, el área del rombo es:
Área Rombo = (Diagonal Mayor * Diagonal Menor) / 2
Realice las modificaciones necesarias al ejemplo No. 1, de tal manera que se construya una
solución para la jerarquía de clases mostrada en la siguiente figura:
Figuras
Triángulo
Rectángulo
Rombo
6
Programación II. Guía No. 9
Ejercicio 2:
Considere la siguiente jerarquía de herencias:
Vehículo
Moto
Carro
Bus
Definir las clases. Considerar todas las propiedades y funciones necesarias para una
implementación completa haciendo uso de funciones virtuales y polimorfismo. Decidir que
atributos y métodos incluir en cada clase de tal manera que su programa pueda a través de un
menú realizar como mínimo las siguientes acciones:
a) Crear objetos de cualquier tipo, a excepción de la clase base que NO debe tener
objetos (asegúrese de ello), solicitando los datos al usuario.
b) Visualizar un objeto en particular, con todos sus atributos.
c) Salir de la aplicación.
Ser creativos con la solución, es decir, agregar más opciones al menú.
El menú deberá estar siempre activo, en la misma posición en pantalla, hasta que el usuario
seleccione la opción salir. El programa debe estar debidamente comentado.
Investigación Complementaria
Considere la siguiente jerarquía de herencias:
Deportista
Delantero
Futbolista
Patinador
Portero
Artístico
Programación II. Guía No. 9
7
A continuación se muestra la declaración de la Clase “Deportista”
class Deportista
{
public Deportista ( ) { }
// Constructor por defecto
virtual float CalcularSueldo( ) { }
virtual float CalcularHorasEntrenoSemana( ) {
}
};
La clase “Deportista” se usará como clase base para declarar las clases derivadas:
Futbolista, Patinador y Artístico. La clase base es una clase abstracta.
Diseñar una implementación que simule la jerarquía mostrada.
Considerar los atributos y métodos necesarios en cada clase de tal manera que su programa
pueda a través de un menú realizar como mínimo las siguientes acciones:
a) Crear objetos de cualquier tipo, solicitando los datos al usuario.
b) Calcular el sueldo de cualquier objeto seleccionado por el usuario.
c) Calcular las horas de entreno de cualquier objeto seleccionado por el usuario.
d) Salir de la aplicación.
El menú deberá estar siempre activo, en la misma posición en pantalla, hasta que el usuario
seleccione la opción salir. El programa debe estar debidamente comentado.
Descargar