unidad 2. herencia y polimorfismo en lenguaje de programacion csharp.pdf
TRANSCRIPT
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
1 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
Ingeniera en Desarrollo de Software
8 cuatrimestre
Programa de la asignatura:
Programacin .NET II
Unidad 2. Herencia y polimorfismo en el lenguaje de
programacin C Sharp
Clave:
150930934
Universidad Abierta y a Distancia de Mxico
UnADM
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
2 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
ndice
Presentacin de la unidad ................................................................................................. 3
Propsitos .......................................................................................................................... 3
Competencia especfica ..................................................................................................... 4
2.1. Herencia en C Sharp ................................................................................................. 4
2.1.1. Herencia simple .................................................................................................... 7
2.1.2. Clases abstractas ............................................................................................... 14
2.1.3. Clases selladas .................................................................................................. 22
Actividad 1. Herencia ....................................................................................................... 26
2.1.4. Interfaces ........................................................................................................... 27
Actividad 2. Herencia mediante C Sharp.......................................................................... 36
2.2. Polimorfismo en C Sharp ....................................................................................... 37
2.2.1. Mtodos polimrficos .......................................................................................... 39
2.2.2. Mtodos genricos ............................................................................................. 48
Actividad 3. Mtodos polimrficos .................................................................................... 50
2.3. Sobreescritura en C Sharp ..................................................................................... 51
2.3.1. Modificador virtual ............................................................................................. 52
2.3.2. Modificador override .......................................................................................... 53
Autoevaluacin ................................................................................................................ 56
Evidencia de aprendizaje. Herencia simple, polimorfismo y sobreescritura ...................... 57
Cierre de la unidad .......................................................................................................... 58
Para saber ms ............................................................................................................... 58
Fuentes de consulta ........................................................................................................ 59
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
3 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
Unidad 2. Herencia y polimorfismo en el lenguaje de programacin
C Sharp
Presentacin de la unidad
Bienvenido a la nueva unidad de programacin en .Net.II.
Herencia y polimorfismo en el lenguaje de programacin C Sharp es una unidad muy
importante. Aqu trabajars con esos dos conceptos fundamentales de la programacin
orientada a objetos basada en C Sharp.
La filosofa de programacin orientada a objetos maneja como pilar fundamental el
concepto de reutilizacin de cdigo; trata de evitar que los mismos procedimientos se
reinventen una y otra vez.
Hay dos formas de reutilizacin de cdigo: la herencia y el polimorfismo. En la primera, el
cdigo se reutiliza de una clase ya existente; en la segunda, un mtodo puede realizar
diferentes funciones.
Estos dos conceptos te sern de gran utilidad en el desarrollo de tu carrera, los cuales se
explican en los temas 2.1. Herencia en C Sharp y 2.2. Polimorfismo en C Sharp, que
forman parte de esta segunda unidad. En el 2.3. Sobre escritura en C Sharp, observars
que es posible que las clases que heredan cambien la funcionalidad de las ya existentes.
Propsitos
Al trmino de esta unidad logrars:
Entender el concepto de herencia y la forma de construirla dentro de C Sharp.
Manejar los mtodos polimrficos en el contexto de problemas planteados.
Identificar la utilidad de los mtodos polimrficos al construir programas con el
lenguaje C Sharp.
Identificar la utilidad del uso de interfaces en el contexto de un problema.
Comprender el concepto de sobreescritura y su importancia en los procesos de
herencia para la programacin orientada a objetos en C Sharp.
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
4 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
Competencia especfica
Implementar los conceptos de herencia, interfaces, polimorfismo, sobreescritura y
seguir los estndares propuestos por la tecnologa .NET; esto con el fin de
entender los conceptos de programacin orientada a objetos en dicha plataforma.
2.1. Herencia en C Sharp
Un programa simple en C# puede usar una o dos clases; sin embargo, es seguro que en
problemas reales sea necesario utilizar una gran cantidad. Muchas de estas clases
pueden necesitar campos o mtodos similares, y sera lgico compartir el cdigo comn
entre ellas; dicho en otras palabras: reutilizar el cdigo.
C# incluye el concepto orientado a objetos de herencia como una forma de reutilizacin
de software con la que los programadores crean clases que absorben los datos y
comportamientos de una clase existente y los mejoran con nuevas capacidades (Deitel y
Deitel, 2007, p. 665). Una clase, que puede ser llamada padre, sede atributos a otra
nombrada hija o derivada; de esta forma, en lugar de reescribir el cdigo se reutiliza.
El concepto de herencia en la programacin orientada a objetos fue pensado,
principalmente, para evitar la reescritura de datos y mtodos en clases que puedan
reutilizarse; reducir los errores al volver a escribir cdigos similares; ahorrar tiempo en la
programacin; reforzar la reutilizacin de software de alta calidad, y comprobar, depurar y
garantizar al mximo la implementacin de un sistema en forma efectiva (Deitel y Deitel,
2007).
La herencia tambin ayuda en los procedimientos de especializacin. Una clase, a
medida que se hereda, se especializa en las clases derivadas.
Otra de las grandes ventajas en el uso de la herencia consiste en que al corregirse el
error, slo una vez, del dato que se heredar de la clase base, todas las clases
subsecuentes se corregirn en consecuencia
Este concepto de herencia es tan importante en el desarrollo de aplicaciones que Andrew
Troelsen, en su obra Pro C# 2010 and the .NET 4 Platform, la llama Pilar de la
programacin orientada a objetos, porque permite crear jerarquas de clases
relacionadas por funcionalidades similares (al compartir datos y mtodos comunes). Aqu
aparece el trmino que permite entender la herencia y que es la parte medular de esta
tecnologa: es-un (Deitel y Deitel, 2007, p. 666). Este trmino seala una relacin entre
dos clases, y se basa en la idea [] de la herencia clsica [donde] las nuevas clases se
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
5 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
pueden crear utilizando las clases existentes como punto de partida (Troelsen, 2010, p.
219).
A continuacin se expone un ejemplo sencillo de la vida real para entender el trmino y el
concepto.
Se sabe con certeza que un gato es un animal mamfero. Si se requiere representar esta
relacin, en una clase C Sharp mediante herencia, una forma muy clara se muestra a
continuacin.
Aqu se puede observar lo siguiente:
1) Se cuenta con una clase padre (tambin llamada base), que es Mamferos. sta
tendr las caractersticas generales de todos los mamferos (se alimenta de leche
materna durante cierto periodo de tiempo, tiene pelo, etc.).
2) Se cuenta con una clase hija, Gato (tambin llamada derivada), que tiene las
caractersticas especficas del animal gato (es domstico, es terrestre, come
carne, etctera).
Si se requiere programar las caractersticas generales que sern heredadas por la clase
hija, slo se programarn en la clase padre y de forma automtica, al aplicar el concepto
de herencia, aparecern en la clase derivada (Gato, en este caso).
A continuacin se exponen algunos ejemplos de herencia.
Mamferos
Gato
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
6 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
Tabla 1. Ejemplos de herencia
Clase base* Clase derivada*1
Estudiante EstudianteGraduado
EstudianteNoGraduado
Forma Circulo
Triangulo
Rectangulo
Prestamo PrestamoAutomovil
PrestamoMejoraCasa
PrestamoHipotecario
Empleado Docente
Administrativo
Cuenta CuentaDeCheques
CuentaDeAhorros
Deitel y Deitel, 2007, p. 667.
En esta representacin es posible observar lo siguiente:
1) Se cuenta con una clase base o padre que es Estudiante. Esta tendr las
caractersticas generales de todos los estudiantes (acuden a una institucin
educativa, tienen una matrcula, etctera).
2) Se cuenta con dos clases hijas o derivadas que son EstudianteGraduado, que
tiene las caractersticas especficas de un estudiante; es decir, ya concluy los
estudios y adquiri el grado acadmico correspondiente y Estudiantenograduado
que puede ser de cualquier nivel del sistema educativo correspondiente.
Si se tiene que programar en esta clase las caractersticas generales que sern
heredadas por la clase hija, slo se asignarn en la clase padre, y, de forma automtica,
al aplicar el concepto de herencia aparecern en la derivada (EstudianteGraduado o
Estudiantenograduado segn sea el caso).
Se observa que esto es natural de cierta forma porque EstudianteGraduado o
Estudiantenograduado es un Estudiante.
Como puede observarse este trmino significa que, por el concepto de herencia, la clase
derivada es un ejemplar de la clase base.
1 Se omiten los acentos por cuestiones propias de la programacin en las siguientes palabras que
integran la tabla ejemplo de herencia: Crculo, Tringulo, Rectngulo, Prstamo y Automvil.
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
7 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
Puede concluirse que la herencia en la programacin orientada a objetos es el
procedimiento mediante el cual es posible construir nuevas clases extendiendo la
funcionalidad de clases existentes (Troelsen, 2010, p. 220).
2.1.1. Herencia simple
Como se revis en el apartado anterior, herencia es un concepto de programacin
orientada a objetos, el cual hace posible que una clase derivada reciba atributos (datos y
mtodos) de una clase base.
En el marco de la herencia en programacin orientada a objetos, pueden observarse dos
casos de herencia C Sharp (Sharp, 2010, p. 262):
1) Una clase padre otorga atributos a una o ms clases hija.
2) Varias clases padre otorgan atributos a una o varias clases hija.
El primer caso se conoce como herencia simple, el segundo, como herencia mltiple (el
nombre es dado por el nmero de clases padre, no por el de clases hija). Esto puede
representarse de la siguiente manera:
Herencia simple Herencia mltiple
.
Lo anterior es posible en la programacin orientada a objetos. Para la programacin en C
Sharp no est permitido el manejo de la herencia mltiple, sino slo la herencia simple;
Nota: El smbolo: Significa que una clase base o padre hereda
atributos a una clase hija. La punta de flecha indica quin es la clase padre.
Padre
Hija1 Hija2
Padre1
Hija
Padre2
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
8 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
segn lo sealado en la pgina web de Microsoft (MSDN, 2013 c), como Java, C# no
admite herencia mltiple, lo que significa que las clases no pueden heredar ms de una
clase.
Lo que s es posible es tener herencia lineal mltiple. Esto se muestra en la siguiente
figura.
Para fines prcticos, Clase1 es padre de Clase2, y sta a su vez es padre de Clase3. Es
posible generar cualquier jerarqua de clases (cualquier nivel) en este proceso de
herencia, pero siempre respetando el concepto herencia simple: Slo puede heredarse de
un padre a una vez. Como se muestra en la imagen anterior, Clase1 es padre de Clase2,
y ste a su vez es padre de Clase3.
El ejemplo anterior es un proceso acumulativo. Clase2 tendr atributos que recibir de
Clase1. Clase3 tendr atributos que recibir de la Clase2 y Clase1. Esto se repetir en
todas las clases situadas en los niveles de herencia.
Desde el punto de vista de programacin de C Sharp, el concepto de herencia se logra
con el smbolo :. A continuacin se ofrece un ejemplo.
Se tienen dos clases, Persona y Docente. La primera debe heredar de la segunda.
El enunciado en C Sharp puede representarse as:
Clase1
Clase2
Clase3
Niveles
de
herencia
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
9 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
Qu atributos se heredan? En este punto es necesario retomar el concepto de
encapsulamiento de la unidad anterior.
Recuerda que un dato o mtodo miembro puede tener cuatro niveles de alcance:
protegido, pblico, privado y de alcance al proyecto actual. El nivel de alcance es la
visibilidad que estos miembros tendrn fuera del objeto. En lo que corresponde al caso
expuesto sobre el tema de herencia, es necesario recordar los tres primeros niveles
porque slo stos son los que se utilizan para el control de la herencia (Ferguson,
Patterson y Beres, 2005, p. 259).
Si una clase padre tiene miembros (datos y mtodos) privados, ninguno de ellos ser
heredado a una clase hija; los miembros protegidos s se heredarn, pero seguirn siendo
protegidos para la clase derivada; los miembros pblicos se heredarn y continuarn
siendo pblicos.
Las funciones y los datos que se desean heredar deben seguir las reglas de
encapsulamiento.
En el ejemplo se incluirn estas especificaciones:
Persona tendr los siguientes datos que debern ser heredados: tipo string el nombre,
char el sexo e int la edad. Se integrar un constructor que recibir estos tres datos y los
guardar como privados. Se agregar un mtodo llamado informacin de tipo pblico, que
mostrar en la pantalla el contenido de los tres datos.
Para implementar la clase es importante recordar que los datos en un objeto siempre
deben ser privados; pero como se desea heredarlos, en este caso sern protegidos.
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
10 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
La clase escrita en C Sharp tendr la siguiente forma:
El proceso de herencia quedar como sigue:
El constructor que tiene la clase Docente llama al constructor padre con el comando base
y enva los parmetros que recibe, los cuales deben ser los mismos en posicin y tipo.
Esto indica que se cumple la siguiente regla en la programacin de herencia en lenguaje
C Sharp: Un constructor a pesar de ser un mtodo pblico es el nico que no se hereda y
necesita ser llamado explcitamente desde la clase hija por la palabra base, con los
argumentos entre parntesis que se le envan (Troelsen, 2010, p. 229).
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
11 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
En el programa, es posible utilizar ambos objetos (Persona y Docente) de la siguiente
manera:
Pueden observarse en el programa principal los siguientes puntos:
Ambos objetos pueden instanciarse de manera similar, a pesar de que la clase
Docente no tiene cdigo interno para la declaracin de los datos miembros; pero
al ser una clase heredada de Persona s los puede utilizar.
Ambos tienen el mtodo de informacin(), que muestra el contenido de los datos
miembro, a pesar de que no se implement en la clase Docente.
Si se ejecuta el programa, la salida ser la siguiente:
Nombre: Manuel
Sexo: M
Edad: 34
Nombre: Luisa
Sexo: F
Edad: 30
En la salida del programa se observa que ambos objetos tienen informacin interna, y
sta se muestra con el mtodo Informacion(), a pesar de que slo se ha programado
dicho mtodo para la clase base, pero la clase hija puede utilizarla por herencia.
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
12 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
Es posible agregar informacin al objeto; por ejemplo: si se toma en cuenta que un
docente, adems de contar con nombre, sexo y edad, tiene tambin un nmero de tarjeta,
puede agregarse un nuevo dato privado llamado tarjeta de tipo entero. Se modificar el
constructor para que llame al de la clase padre y guarde el nuevo dato. ste tambin
tendr un mtodo pblico con el nombre de informacionTotal(), que mostrar el nombre,
sexo, edad y la nueva informacin de la tarjeta. Tal como se aprecia en el siguiente
cdigo:
Como se puede ver, el constructor ahora recibe cuatro parmetros, de los cuales tres
enva al constructor padre, el ltimo lo asigna l mismo. Cuando un constructor hijo llama
al padre deben respetarse las siguientes reglas:
1) El nmero de parmetros enviados y su tipo debern ser los mismos que los
que recibe el padre (el nombre no importa, slo el tipo y el nmero).
2) Despus de invocar a su padre actualizar sus propios datos (tambin
puede realizar otro tipo de procesos, pero siempre despus de llamar al
constructor padre).
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
13 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
El programa principal puede modificarse de la siguiente manera:
Al ejecutar este programa, la salida ser la siguiente:
Nombre: Manuel
Sexo: M
Edad: 34
Nombre: Luisa
Sexo: F
Edad: 30
Tarjeta: 57
Se puede observar cmo la informacin se ha ido agregando.
Para finalizar el anlisis de esta parte, se recapitula lo revisado respecto al concepto base
de la herencia cuando utiliza el trmino es-un; en este caso la herencia es factible de ser
utilizada porque el objeto Docente es una Persona, finalmente.
A continuacin se revisarn las clases abstractas, subtema muy importante para la
herencia porque permite escribir clases que no se deben instanciar.
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
14 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
2.1.2. Clases abstractas
En el mundo real existen clases base que no deben ser instanciadas porque son slo un
concepto. En una institucin educativa no existen las personas como tales; existen
alumnos, directores, profesores, administrativos, etctera, pero una persona sin una
funcin no es un concepto aceptable.
Por ejemplo:
La clase Mamfero es una clase abstracta porque en el mundo real no existe un ente
especfico llamado mamfero. Es el nombre genrico con el que se clasifica a cierto tipo
de animales; sin embargo, cuando se observa un perro, un gato o un delfn, puede decirse
que son mamferos; pero por s mismo el concepto mamfero no indica un animal en
especfico; es decir, se refiere a una entidad inexistente en la realidad.
A esas entidades que no deben ser instanciadas porque no representan una realidad son
declaradas como clases abstractas para que el usuario no las instancie y como
consecuencia no las utilice (Ferguson, Patterson y Beres, 2005, p. 267).
Una definicin clara de lo que es una clase abstracta se cita en Microsoft (MSDN, 2013b),
en la Gua de programacin de C#, el apartado de Clases y miembros de clase
abstractos y sellados, donde se seala que el propsito de una clase abstracta es
proporcionar una definicin comn de una clase base que mltiples clases derivadas
pueden compartir. Por ejemplo, una biblioteca de clase puede definir una clase abstracta
que se utiliza como parmetro para muchas de sus funciones y solicitar a los
programadores que utilizan esa biblioteca que proporcionen su propia implementacin de
la clase mediante la creacin de una clase derivada.
La palabra clave abstract permite crear clases nicamente con propsitos de herencia,
pero estas no se pueden instanciar.
Mamferos
Gato
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
15 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
En el ejemplo, la clase Persona no debe instanciarse porque es abstracta. Para ello,
simplemente se agrega la palabra abstract antes de class, como puede observarse en el
siguiente cdigo.
En esta ocasin el programa principal mostrar el siguiente error:
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
16 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
No es correcto instanciar el objeto Persona. Si se suprime la lnea que tiene el error se
obtendr lo siguiente:
Al ejecutar el programa es posible observar el siguiente resultado:
Nombre: Luisa
Sexo: F
Edad: 30
Tarjeta: 57
Se debe quitar la instancia de Persona y su llamada p.Informacion().
Una clase abstracta puede tener (aunque no es necesario) mtodos miembro abstractos.
Un miembro abstracto puede ser heredado (si es pblico o protegido), y su finalidad es
indicar que debe existir una implementacin, aunque no se dice el cmo hacerla.
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
17 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
Si se requiere un mtodo abstracto para la clase Persona llamado Identificacion(), este
mtodo no se implementar (programar), slo indicar que toda clase que herede de l
debe integrar el cdigo para que realice su funcin.
Un mtodo abstracto tiene la siguiente sintaxis, segn el MSDN (2013 b):
public|protected abstract tipo nombre(parametros);
public | protected: significa que los mtodos abstractos deben ser pblicos o protegidos.
Esto es una consecuencia lgica porque deben de ser heredados, y la clase derivada se
va a encargar de su implementacin.
abstract: indica que este mtodo no tendr cdigo.
tipo: indica el valor de retorno del mtodo correspondiente.
nombre(parametros): indica el nombre de la funcin. Si no tiene parmetros slo debe
llevar los parntesis, en caso contrario se agrega la lista de parmetros.
En C Sharp se codificara como sigue:
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
18 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
19 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
La clase derivada Docente mostrara el siguiente error:
El subrayado en Docente indica que la clase no ha dado funcionalidad al mtodo
abstracto Identificacion(). Se le otorga funcionalidad de la siguiente manera:
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
20 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
21 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
Como se puede ver en el ejemplo, cuando una clase hereda un mtodo abstracto y debe
implementarlo, debe incluirse la palabra reservada override. De esta manera se indica
que el mtodo tendr cdigo para realizar lo solicitado en esta clase. El programa
principal en este ejemplo tendr la siguiente implementacin:
La ejecucin es la siguiente:
Nombre: Luisa
Sexo: F
Edad: 30
Tarjeta: 57
Identificacin con tarjeta nmero: 57
Una clase abstracta puede heredarse por otra abstracta. Significa que ninguna de ellas
puede instanciarse. Si se traslada al mundo real, este principio puede comprenderse en la
siguiente jerarqua de clases:
Perro Tigre Tucn Canario Trucha Sardina
Mamferos
Aves
Peces
Vertebrados
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
22 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
Al observar esta jerarqua, pueden obtenerse varias conclusiones sobre las distintas
clases:
1) Vertebrados, Mamferos o Aves no pueden instanciarse.
2) Perro, Tigre, Tucn pueden instanciarse.
3) Un Perro es-un Mamfero y un Perro es-un Vertebrado.
4) Perro y Tigre comparten informacin. Son mamferos y son vertebrados.
5) Canario y Trucha comparten informacin como que son vertebrados.
6) Cada constructor debe llamar, con el comando base, al constructor padre. El padre
llamar al constructor de su padre y as sucesivamente.
Las clases han generado una jerarqua que permiten relacionar objetos que comparten
caractersticas similares, y separar objetos que no lo hacen.
Surge aqu una pregunta: si la clase Vertebrados tiene un mtodo abstracto, qu
debe hacer Mamferos cuando herede este mtodo?
Tiene dos opciones:
1) Volverla a declarar como mtodo abstracto; esto se logra volviendo a escribirla tal
y como fue definida en la clase base, sin codificacin. El codificarla ser trabajo de
la siguiente clase en la jerarqua de la herencia.
2) Sobreescribirla para darle funcionalidad, como se indic en el ejemplo de
Persona-Docente.
Puede concluirse que en un sistema jerrquico de herencia lineal no existe ninguna
restriccin sobre el nmero de niveles que pueden agregarse.
2.1.3. Clases selladas
Cierto, en la herencia lineal no existe restriccin sobre el nmero de niveles que pueden
agregarse, pero puede ser conveniente detener esta derivacin por la naturaleza del
problema.
El modificador sealed se utiliza para impedir la derivacin de una clase. Si se especifica
que sealed es la clase base de otra clase, se produce un error en tiempo de
compilacin; sealed no puede ser tampoco abstracta. El modificador sealed se utiliza,
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
23 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
principalmente, para impedir la derivacin no intencionada, pero tambin permite algunas
optimizaciones en tiempo de ejecucin, segn se explica en Microsoft (MSDN, 2013a).
Dicho de otra manera, una clase sellada indica que sta no puede usarse como base en
una jerarqua de herencia, y que debe ser la ltima en la jerarqua lineal. Es tambin claro
que una abstracta no puede ser sellada, porque las clases abstractas deben ser derivadas
para implementarse; lo cual contradice los conceptos de clase sellada y clases abstractas.
En el ejemplo de herencia, Persona-Docente, es posible heredar de Docente una nueva
clase llamada Jefe. En algunas instituciones los jefes de departamento deben ser
docentes propuestos de la misma academia; es decir, que pertenezcan a la misma
academia. Un Jefe de departamento es un docente con estas caractersticas:
Tiene asignado un departamento.
Es responsable de las funciones de varias personas a su cargo.
Antes de implementar la clase sellada, es conveniente hacer la siguiente observacin: una
jerarqua de clases no tiene por qu seguir una jerarqua organizacional; son dos
conceptos muy diferentes, la primera indica cmo se desarrollan y comportan objetos
computacionales, la segunda se refiere al comportamiento lgico de una empresa en
cuanto a sus relaciones laborales. Con base en estas consideraciones, la representacin
de los objetos se conforma de la siguiente manera:
Persona
Docente
Jefe
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
24 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
La clase Jefe tendr un dato miembro privado con el nombre de departamento, de tipo
string; ste ser recibido en el constructor. El cdigo de esta clase se muestra a
continuacin:
Como puede observarse, existen dos indicaciones importantes:
La palabra sealed antes de class indica que esta clase no puede ser derivada; es
decir, est sellada a la jerarqua de herencia. Algunos autores, en otros
lenguajes, llaman a este concepto clase Final porque la instruccin obliga a que
se termine una jerarqua lineal de varios niveles.
La palabra new indica que el mtodo Informacion() oculta el mtodo
Informacion() de la clase base Docente. El uso de esta instruccin es muy bien
definido en el siguiente texto: Hay ocasiones en las que puede resultar
interesante usar la herencia nicamente como mecanismo de reutilizacin de
cdigo pero no necesariamente para reutilizar miembros. Es decir, puede que
interese heredar de una clase sin que ello implique que su clase hija herede sus
miembros tal cuales sino con ligeras modificaciones (Gonzlez, 2004, p. 83).
La ocultacin significa que, cuando se invoque a este mtodo, se ejecutar el de la clase
derivada y no el de la clase padre.
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
25 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
El programa principal tendr el siguiente cdigo:
La ejecucin de este programa arrojar el siguiente resultado:
Nombre: Luisa
Sexo: F
Edad: 30
Tarjeta: 57
Identificacin con tarjeta nmero: 57
Nombre: ngel
Sexo: M
Edad: 38
Departamento: Sistemas
Para concluir este punto, se recuerda que una clase sellada no puede derivarse o
heredar; por lo tanto, despus de Jefe no puede haber ms herencia.
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
26 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
Actividad 1. Herencia
El propsito de esta actividad es que distingas las caractersticas de los siguientes tipos
de trminos: clases estndares, clases abstractas, clases selladas.
Segn lo desarrollado en el Tema 2.1. Herencia en C Sharp, sta simplifica la
reutilizacin de cdigo cuando una clase hija recibe los mtodos y datos miembro de una
clase padre. En esta actividad identificars los diferentes usos de clases y los alcances
de cada una de ellas.
1. Elabora un cuadro comparativo de las caractersticas de las siguientes clases:
normales, interfaces, abstractas y selladas.
2. Explica en tu cuadro la definicin, uso, alcance y caractersticas de cada uno de los tipos clase, que permiten tener una jerarqua de acuerdo a la realidad de los objetos en el mundo. Agrega ejemplos de cada uno, as como tus propias conclusiones sobre semejanzas y diferencias entre ellos.
3. Identifica el uso en la vida real de herencia simple, mltiple y simple-mltiple.
4. Sube tu trabajo a la base de datos.
5. Comenta el cuadro comparativo y los ejemplos de tus compaeros(as), al menos
uno de ellos, sobre la definicin de los tipos de clases, as como la pertinencia de
los ejemplos. Recuerda que tus comentarios no deben ser agresivos, sino
constructivos.
6. Guarda la actividad con el nombre DPRN2_U2_A1_XXYZ. Sustituye las XX por
las dos primeras letras de tu primer nombre, la Y por tu primer apellido y la Z por
tu segundo apellido.
7. Enva el archivo a tu Facilitador(a) para recibir retroalimentacin.
*Consulta la Rbrica para elaborar el cuadro comparativo que encontrars en el
archivo Criterios de evaluacin de las actividades de la Unidad 2, para conocer los
parmetros de esta actividad.
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
27 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
2.1.4. Interfaces
En los subtemas anteriores se coment que la herencia mltiple no existe en C Sharp,
pero que sta puede ser simulada al utilizar Interfaces. Por qu se utiliza el trmino
simular?, porque una interfaz no hereda datos o mtodos miembro a la clase que la
implementa, slo comportamientos; es decir, indica qu, pero no cmo se debe hacer
Trey Nash en su libro Accelerated C# 2010 describe una interfaz como un contrato que
nos permite acordar una serie de funcionalidades en una clase, esto porque una interfaz
en C Sharp Contiene slo las firmas de los mtodos [], la implementacin de ellos se
hace en la clase que implementa la interfaz, segn se menciona en Microsoft (MSDN,
2013 d), en el apartado Interface (Referencia de C#).
En otras palabras, una interfaz es una clase especial que slo indica qu mtodos debe
tener, pero no dice el cmo debe programarse. Por eso una interfaz slo tiene la firma de
los mtodos (es importante recordar que, segn se revis en la Unidad 1, la firma de un
mtodo es su alcance, el tipo de datos que devuelve, su nombre y los parmetros que
recibe).
A continuacin se expone lo ya mencionado con el siguiente ejemplo:
Recordars que en el subtema anterior 2.1.3. Clases selladas, se desarroll una jerarqua
de clases Persona-Docente-Jefe. En este caso, se requiere crear la herencia de Alumno
que deriva de Persona. El primero tendr nombre, sexo y edad, pero se necesitan dos
mtodos adicionales de tipo string. Un nmero de control y una carrera de tipo protegido,
esta nueva relacin Persona-Alumno genera en la clase Alumno el siguiente cdigo:
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
28 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
Aqu se observa la siguiente informacin:
1) El constructor de la clase derivada Alumno llama a su padre con la instruccin
base.
2) Se est ocultando el mtodo Informacion() de la clase padre por un nuevo mtodo,
para ello se utiliza la palabra reservada new.
3) Se est obligado a darle funcionalidad al mtodo Informacion(), porque en la clase
padre est definida como abstracta (con la palabra reservada abstract), cuya
funcionalidad debe ser escrita en la clase hija.
Para crear la herencia de Alumno que deriva de la clase Persona, se supone la existencia
de otra tambin derivada de Persona, llamada Movilidad. Una instancia de Movilidad
representar a un alumno con nmero de control y carrera, pero debe tener tambin un
campo que represente la institucin de procedencia (en los institutos tecnolgicos la
movilidad significa que un alumno puede salir de una institucin, tomar una o varias
materias en otros tecnolgicos y regresar a su institucin de origen tantas veces y en
instituciones diferentes como l lo desee); por el contrario, un alumno representa a un
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
29 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
individuo que se encuentra en dicha institucin. La codificacin de esta clase se muestra a
continuacin:
El programa principal tendr la siguiente codificacin:
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
30 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
Al ejecutarse se mostrarn los siguientes resultados:
Nombre: Luisa
Sexo: F
Edad: 30
Tarjeta: 57
Identificacin con tarjeta nmero: 57
Nombre: ngel
Sexo: M
Edad: 38
Departamento: Sistemas
Nombre: Pedro
Sexo: M
Edad: 20
N. Control: 01010202
Carrera: Sistemas
Nombre: Juan
Sexo: M
Edad: 23
N. Control: 00040104
Carrera: Electrnica
Procedencia de: Veracruz
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
31 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
Cuando un alumno ingresa a esa institucin existe un convenio importante con l. Puede
cambiar en cualquier momento de carrera esto tambin es vlido con alumnos de
movilidad, pero el proceso es diferente al que se seguira en el caso de los primeros,
quienes al cambiar de carrera slo deben indicar el inters. En el caso de los segundos,
es necesario generar un nmero de oficio, que debe llevar a la institucin de procedencia,
con el siguiente formato: ORI-aaaammdd-numerodecontrol; donde el primer segmento
debe sustituirse por el ao, mes y da, respectivamente.
Esta es una situacin tpica que puede ser representada por una interfaz. Este Convenio
(como se nombrar a esta interfaz) codificado se muestra a continuacin:
A continuacin se presenta el problema que se puede representar en el siguiente
diagrama:
Se puede observar que Alumno y Movilidad necesitan de un tipo de herencia mltiple y
que son una Persona, de alguna forma, pero ellos dos no son un convenio. Convenio
slo indica la forma en que pueden cambiar su carrera, pero no ms datos.
Persona
Docente
Jefe
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
32 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
La primera parte de la explicacin, acerca de la herencia mltiple, no es posible de
resolver C Sharp no soporta la herencia mltiple como lo indica Trey Nash en su libro
Accelerated C# (2010, p. 92): En C #, una clase slo puede tener una clase base, para
los procesos de herencia.
Pero C Sharp s permite que una clase reciba informacin de una o varias interfaces
simultneamente. Antes de mostrar cmo se codificara esto, es necesario recordar que
no es una herencia de una interfaz porque este tipo de clases slo indican lo que se debe
hacer (convenios o protocolos), pero no dicen cmo se debe hacer.
La primera es una clase (Persona) y se considera herencia; la segunda es una interfaz
(Convenio) y no es herencia, sino funcionalidades que deben realizar ambas clases,
Alumno y Movilidad. Una clase puede recibir indicaciones de funcionalidad de una o
varias interfaces, para esto no existe un lmite como en el caso de la herencia simple
obligatoria.
En el ejemplo planteado se deben agregar dos mtodos que describan la funcionalidad de
cambio de carrera. En el caso de la clase Alumno el mtodo tiene la siguiente
codificacin:
El mtodo de cambiarCarrera(), de la clase Movilidad, adems de tener otra codificacin
necesita agregar un dato privado llamado oficio, de tipo string.
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
33 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
En el caso de Movilidad, el mtodo informacion() debe agregar el siguiente cdigo:
El programa principal quedar as:
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
34 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
La salida de este cdigo es la siguiente:
Nombre: Luisa
Sexo: F
Edad: 30
Tarjeta: 57
Identificacin con tarjeta nmero: 57
Nombre: ngel
Sexo: M
Edad: 38
Departamento: Sistemas
Nombre: Pedro
Sexo: M
Edad: 20
N. Control: 01010202
Carrera: Informtica
Nombre: Juan
Sexo: M
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
35 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
Edad: 23
N. Control: 00040104
Carrera: Mecatrnica
Procedencia de: Veracruz
Cambio de carrera con el oficio: ORI-2013511-00040104
Para concluir este tema, se recapitulan los siguientes puntos:
Las interfaces permiten definir caractersticas de comportamiento o capacidades,
que se aplican a las clases sin tener en cuenta su jerarqua. Desde un punto de
vista conceptual, las interfaces son contratos entre dos trozos de cdigo distintos
(Archer, 2010, p. 151). As, aunque dos clases implementen la misma interfaz,
esto no significa que tenga alguna jerarqua.
Cuando se tiene definida una interfaz y una clase la toma para dar funcionalidad al
trmino correcto en el que la clase implementa la interfaz, aunque algunos autores
utilizan como sinnimo la clase heredada de la interfaz, esto conceptualmente no
es cierto (Archer, 2010, p. 152).
Dado que las interfaces definen un contrato, cualquier clase que implemente una
interfaz tiene que definir todos y cada uno de los mtodos, de lo contrario el cdigo
no se compilar (Archer, 2010, p. 153). En otras palabras, si una interfaz propone
cinco mtodos, la clase que implemente debe implementar esos cinco mtodos o
el programa no se ejecutar.
Mediante la utilizacin de interfaces se pueden implementar caractersticas de
comportamiento mltiples en una nica clase. En C#, una clase puede derivar de
una clase nica, pero puede implementar tantas interfaces como necesite (Archer,
2010, pp. 155-156).
Ahora que has concluido el primer tema, realiza las actividades de aprendizaje.
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
36 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
Actividad 2. Herencia mediante C Sharp
El propsito de la actividad es que soluciones un problema en donde sea necesario
desarrollar una jerarqua de herencia, y que utilices las instrucciones de C Sharp.
Para el desarrollo de la actividad, tu Facilitador(a) te har llegar un problema respecto a
un diseo de herencia, en el cual realizars los siguientes pasos:
1. Construye una clase abstracta.
2. Integra un constructor y mtodos abstractos.
3. Construye clases con ciertas caractersticas de herencia.
4. Otorga funcionalidad.
5. Construye la interfaz requerida.
6. Integra un archivo de texto en el cual muestres las capturas de pantalla de cada
uno de los pasos de este proceso.
7. Una vez realizado tu programa, empaca todo tu proyecto en un archivo .zip; incluye el archivo de texto con las capturas de pantalla del procedimiento realizado.
8. Guarda la actividad con el nombre DPRN2_U2_A2_XXYZ. Sustituye las XX por las dos primeras letras de tu primer nombre, la Y por tu primer apellido y la Z por tu segundo apellido.
9. Enva el archivo a tu Facilitador(a) mediante la herramienta Tareas para recibir
retroalimentacin.
*No olvides consultar el documento Criterios de evaluacin de las actividades de la
Unidad 2, para conocer los parmetros.
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
37 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
2.2. Polimorfismo en C Sharp
Como ya se dijo, uno de los pilares fundamentales de la programacin orientada a objetos
es la herencia; muchos autores afirman que el segundo es el polimorfismo (Troelsen,
2010) que, como veremos en este apartado, es en gran parte una consecuencia de la
primera.
Como introduccin al concepto de polimorfismo, se propone analizar el caso de herencia
propuesto en el siguiente diagrama, donde se simula la serie de cuentas que existen en
un banco.
Esta estructura de herencia es muy fcil de entender. Ambas (DeAhorros e Inversiones),
al heredar de la clase abstracta Cuenta, tienen la obligacin de implementar mtodos
abstractos: Deposito() y Retiro().
No es lo mismos retirar de clase DeAhorros que de Inversiones. De la primera puede
retirarse en cualquier momento, pero de la segunda slo se puede hacer en ciertos
momentos especficos; aunque en ninguna se puede retirar una cantidad mayor al saldo
que contengan.
Supn que el banco promociona una nueva clase de cuenta llamada Maestra, similar a la
de ahorros, pero que por proporcionar un mayor inters cobra una pequea comisin
adicional por realizar retiros; los depsitos estn condicionados, deben tener un monto
mnimo para aceptarlos. De primera instancia es posible proponer la siguiente jerarqua
Clase Cuenta
Mtodos Deposito()
Retiro()
Clase DeAhorros
Clase Inversiones
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
38 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
de herencia, donde se toma como clase base DeAhorros y de ella deriva Maestra. Esto
se observa a continuacin:
De este problema surgen las siguientes consideraciones y una pregunta fundamental:
1) La clase DeAhorro, al heredar de Cuenta, debe implementar los mtodos
Deposito() y Retiro(), porque no es abstracta, sino una definida.
2) La clase Maestra, al heredar de DeAhorro, recibir los mtodos implementados
de Deposito() y Retiro(); pero no le sirven por tener condiciones diferentes, por
ello deber cambiarlos. Cmo puede hacerlo?
El cambio puede realizarse en funcin de tres soluciones diferentes:
Ocultar los mtodos del padre (esto se revis en el subtema 2.1.3. Clases
selladas). Al utilizar la palabra reservada new antes de la nueva definicin del
mtodo, se ocultar el de su padre y quedar en funcin el mtodo de clase
derivada.
Al cambiar el tipo de parmetros que reciba el mtodo, la clase derivada tendr
dos mtodos: el que hereda de su padre y el suyo propio, un caso de
Clase Cuenta
Mtodos Deposito()
Retiro()
Clase DeAhorros
Clase Inversiones
Clase Maestra
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
39 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
sobrecarga. En cualquier momento, la clase derivada podr hacer uso de ambos
mtodos slo con cambiar los parmetros con los que se invoque.
Al cambiar el tipo de parmetros que reciba el mtodo, la clase derivada tendr
dos mtodos: el que hereda de su padre y el suyo propio, lo que tambin deriva
en un caso de polimorfismo.
Segn Deitel y Deitel (2007), un mtodo polimrfico o polimorfo se define como una
funcin que tiene la capacidad de responder al mismo nombre con diferente operatividad
en funcin de los parmetros utilizados en su invocacin.
En la siguiente seccin se estudiar el uso del polimorfismo en C Sharp.
2.2.1. Mtodos polimrficos
La palabra polimrfico proviene del griego poly (): mucho, numeroso, frecuente; y de
morpho (): que tiene una forma determinada (Universidad de Salamanca, 2011).
Es decir, polimrfico significa que posee varias formas diferentes (Troelsen, 2010, p.
235).
Desde el punto de vista de programacin, un mtodo polimrfico significa una funcin que
tiene el mismo nombre, pero diferente tipo de parmetros y funcionalidad
Este es un concepto fundamental en la programacin orientada a objetos, y en general
existen tres tipos en C Sharp:
De sobrecarga o sobrecarga (Unidad I. Desarrollo de objetos en la plataforma.
NET).
Paramtrico.
De inclusin.
Polimorfismo paramtrico
Para entender el polimorfismo paramtrico se explica cmo hacer mtodos polimrficos
en una clase sin herencia.
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
40 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
Se requiere desarrollar una clase llamada permetro, sta tendr varios mtodos que
permitirn calcular el derredor de las siguientes figuras irregulares.
Se conoce:
L1, L2 y L3
Se conoce:
L1, L2, L3 y L4
Se conoce:
L1, L2, L3, L4 y L5
Se conoce:
L1, L2, L3, L4, L5 y L6
Esta clase tendr cuatro mtodos que recibirn:
La primera, tres parmetros de tipo double y devolver el permetro.
La segunda, cuatro parmetros de tipo double y devolver el permetro; as
sucesivamente.
Todos los resultados regresarn de tipo double.
Todos los mtodos se llamarn CalculaPerimetro().
La codificacin es la siguiente.
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
41 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
Puede decirse que el mtodo CalculaPerimetro() es polimrfico paramtrico, porque
cambia el nmero de parmetros, pero conserva la misma firma (nombre
calculaPerimetro, nivel de ocultamiento public y valor de retorno double) (Sharp, 2010).
El uso es muy sencillo. Si se desea calcular el permetro de un tringulo, se llama al
mtodo con tres parmetros; si lo que se desea calcular es el permetro de un pentgono,
se enva al mismo mtodo cinco parmetros.
Esto puede observarse en el programa principal.
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
42 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
La ejecucin del programa muestra el siguiente resultado:
Permetro de un tringulo: 11.3
Permetro de un cuadrngulo: 10.6
Permetro de un pentgono: 18.8
Permetro de un hexgono: 18.6
El mtodo CalculaPerimetro() es un mtodo polimrfico porque existen cuatro mtodos
parecidos y slo son diferentes en el nmero de parmetros. El anterior fue un ejemplo de
polimorfismo paramtrico
A continuacin se analiza un problema de herencia donde ser posible observar la utilidad
del polimorfismo paramtrico.
Se requiere crear una clase llamada: EcuacionLineal, que permitir calcular la expresin:
y = a x + b
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
43 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
Tendr un mtodo llamado evalua(), que recibir como parmetro a, b y x, y
regresar el valor de y. El cdigo se muestra a continuacin:
Se definir una nueva clase llamada, EcuacionCuadratica, con el mtodo evalua(), que
recibir como parmetros a, b, c y x, y devolver el valor de y, segn la siguiente
relacin:
y = a x2 + b x + c
Esta clase ser derivada de la anterior. Finalmente, se crear una clase llamada
EvaluaEcuaciones que heredar las anteriores y permitir evaluar ecuaciones
cuadrticas y lineales. Esto puede observarse en el siguiente diagrama de herencia:
Clase EcuacionLineal
Clase EcuacionCuadratica
Clase EvaluaEcuaciones
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
44 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
EcuacionCuadratica se muestra a continuacin:
EvaluaEcuaciones tendr la siguiente definicin:
Se obtiene una clase que permitir evaluar las siguientes expresiones:
y = 3 x + 5
Para x=3
y = 4 x2 4 x + 3
Para x=3.3
El programa principal tiene la siguiente definicin:
Al ejecutar el programa se mostrar la siguiente salida:
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
45 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
Ec. Lineal: y=14
Ec. Cuadrtica: y=33.36
Como pudo observarse, la clase EvaluaEcuaciones tiene dos mtodos polimrficos por
herencia; ste es uno de los usos del polimorfismo. Cuando una clase hereda de otra y
tienen los mismos mtodos, pero sus parmetros son diferentes en nmero, lo que hace
la clase derivada es acumular los mtodos.
Para concluir, es necesario recordarlos siguientes puntos:
1) Un mtodo est sobrecargado cuando tiene el mismo nmero de parmetros, pero
de diferente tipo.
2) Un mtodo es polimrfico cuando tiene diferente nmero de parmetros sin
importar si son del mismo o de diferente tipo.
En ambos casos los mtodos deben tener el mismo nombre, sin importar el tipo de
informacin que devuelven.
Polimorfismo de inclusin
Segn el MSDN (2013 i), A travs de la herencia, una clase puede utilizarse como su
propio tipo o como cualquier tipo de una clase padre. Cuando un objeto se utiliza como
un tipo que no es ella misma sino de una clase padre, se tiene un polimorfismo a nivel
clase. Este concepto ser ms fcil de entender con el ejemplo que se expone a
continuacin.
Una clase abstracta, llamada Figura, tendr dos mtodos miembro, Perimetro() y
Area(), ambos abstractos. Esta clase tendr un constructor que recibir un valor de tipo
doble y lo guardar en un dato miembro protegido. Se heredar a una clase hija llamada
Circulo, que recibir en su constructor el radio e implementar los mtodos: Perimetro()
y Area(), que calcularn el permetro y el rea del crculo. El diagrama de herencia se
observa a continuacin.
Figura
Clase Circulo
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
46 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
La implementacin de la clase abstracta puede observarse a continuacin:
La clase derivada crculo ser definida as.
Se observa un ejemplo de polimorfismo, a nivel objeto, en el programa principal:
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
47 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
Si se ejecuta el programa la salida ser la siguiente:
28.2744
63.6174
Lo anterior es un ejemplo de polimorfismo a nivel objeto (tambin llamado de inclusin,
redefinicin o subtipado) (Troelsen, 2010).
Es posible hacer polimorfismo a nivel objeto desde cualquier nivel de herencia. Por
ejemplo, si se cuenta con la siguiente jerarqua.
Es vlido hacer lo siguiente:
Persona p = new Docente();
Persona presenta polimorfismo a nivel objeto como la clase Docente. Y si se solicitan, los
mtodos que se pueden utilizar en la instancia p, sern los mtodos de Docente.
Lo contrario no es vlido.
Clase Persona
Clase Docente
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
48 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
Docente d = new Persona();
Este tipo de polimorfismo no puede realizarse, no est permitido en C Sharp ni en otros
lenguajes como Java.
Cul es su uso? Son dos, principalmente:
1) Es posible instanciar clases abstractas (las cuales se caracterizan por no ser
instanciada), de esta manera se logra un mayor grado de generalizacin. En el
ltimo ejemplo se utiliza una Figura que se comporta como un crculo.
2) Es posible utilizar mtodos que apliquen objetos polimrficos para que las
funciones sean lo ms genricas posibles. Esto se explicar en el siguiente
subtema.
2.2.2. Mtodos genricos
El mayor grado de polimorfismo se logra con los mtodos genricos (la mxima
representacin del polimorfismo para un lenguaje orientado a objetos), porque
representan el nombre de una funcin y un grupo de parmetros de los que no se conoce
el tipo.
Un mtodo genrico se declara con parmetros de tipo en lugar de los primitivos (int, float,
char, etctera) u objetos (MSDN, 2013 f).
Pero qu es un parmetro de tipo? Esto se explica con el siguiente ejemplo.
Este es un mtodo definido de manera tradicional:
Se observa que sus parmetros son dos variables de tipo primitivo int, los cuales se
utilizan como parte de los procesos dentro del mtodo.
Un parmetro tipo es un smbolo que se puede definir y utilizar como una variable, y
adquiere su valor definitivo en el momento en que se utiliza el mtodo, tal como se
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
49 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
muestra en el siguiente ejemplo. Una clase, llamada ClaseGenerica, recibe dos
parmetros mediante un mtodo, los guarda en la clase y muestra el par de parmetros
recibidos. Tal como se ilustra a continuacin:
Al inicio de la clase se observa la definicin , en la que se muestra que se
utilizarn dos parmetros tipo; son genricos porque pueden ser cualquier tipo que se
necesiten en el momento de la implementacin. A lo largo de todo el cdigo se utilizaron
estos parmetros.
En el siguiente ejemplo se requiere guardar un par de datos formado por un nmero
entero y un nombre de persona; lo cual se logra de la siguiente manera:
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
50 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
Si se ejecuta el programa, la salida ser la siguiente:
(1, MANUEL)
En el momento de la instanciacin se utiliza la definicin , donde se indica el
tipo de valor que se necesita. Ahora se integrar un nuevo uso pero formado por dos
datos string, para guardar el nombre y apellido. Esto se definir de la siguiente manera:
Si se ejecuta esta nueva versin la salida ser la siguiente:
(JUAN,LOPEZ).
Como puede observarse, slo se cambia la definicin del tipo al momento de instanciarse
la clase, en este caso . Se logr una clase sobrecargada de forma infinita,
porque se integraron mtodos que siempre reciben dos parmetros del tipo que se
necesita.
El polimorfismo, a travs de mtodos genricos, permite tener una gran cantidad de
mtodos diferentes (polimrficos y sobrecargados), que hacen posible resolver problemas
de funcionalidad similar utilizando una misma firma.
Los mtodos genricos son una interesante herramienta que resulta muy til en la
construccin de libreras reutilizables.
Actividad 3. Mtodos polimrficos
Esta actividad tiene como propsito que identifiques los usos de polimorfismo de
mtodos mediante ejemplos de uso. La actividad es colaborativa, por lo que tu
Facilitador(a) te asignar un nmero de equipo para trabajar.
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
51 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
Realiza las siguientes actividades junto con tu equipo de trabajo:
1. Menciona un mnimo de tres ejemplos donde sean de utilidad los mtodos
polimrficos. Recurre a problemas que se hayan presentado en alguna de tus
asignaturas anteriores, problemas que observes en aplicaciones reales o
algunos que t propongas, en los cuales pueda plantearse un polimorfismo
como solucin.
Para el desarrollo de este paso es necesario que se establezca comunicacin a
travs del Foro general de la asignatura, donde tu Facilitador(a) te har llegar las
indicaciones necesarias sobre el trabajo, conformars el equipo y llegars a
acuerdos con tus compaeros(as).
2. Consulta la Rbrica de participacin en foros, que se encuentra disponible en la
seccin Material de apoyo.
Al ingresar al foro:
3. Comenta de manera individual un ejemplo que hayan investigado al interior del
equipo.
4. El representante del equipo deber ingresar al foro pata compartir la
justificacin y el ejemplo que, consideren, aporta mayores elementos sobre el
tema de polimorfismo y la solucin de problemas.
5. Una vez que compartan su aportacin, revisa y comenta la participacin de al
menos dos compaeros(as), la pertinencia de los ejemplos expuestos, tus
propias experiencias, conocimiento y la aportacin que te dejan las
participaciones en el foro.
6. Con base en las aportaciones de tus compaeros(as), elabora conclusiones
individuales y deja tu evidencia en el foro.
*No olvides, consultar el documento Criterios de evaluacin de las actividades de la
Unidad 2, para conocer los parmetros.
2.3. Sobreescritura en C Sharp
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
52 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
En este tema se revisar el concepto de sobreescritura. Se dice que una clase hija
sobreescribe un mtodo de la clase padre cuando lo define con las mismas caractersticas
(nombre, nmero y tipo de argumentos) que el de la superclase. En ese caso, el mtodo
al que se tiene acceso es al ltimo, el que redefini al primero.
Para decirlo de una forma simple, una sobreescritura es la capacidad que tienen las
clases derivadas para cambiar la funcionalidad que han heredado de sus clases padre,
mediante la modificacin del cdigo que tiene en su definicin (Griffiths, 2010, p. 112) (.
Existen dos formas de realizar una sobreescritura en C Sharp: mediante los indicadores
virtual y override. En ambos casos, la idea es cambiar la funcionalidad de un mtodo
previamente escrito dentro de una clase padre.
La sobreescritura, junto con la caracterstica de polimorfismo, son dos herramientas que
permiten ajustar los objetos para que representen de una manera ms fiel el mundo real.
2.3.1. Modificador virtual
Como se recordar, la herencia permite definir mtodos que sern enviados a las clases
derivadas. Lo que ahora se explicar es que mediante el modificador virtual, adems de
definir los mtodos que se enviarn a las clases derivadas, es posible cambiar dicha
definicin en la clase hija; para ello, la definicin de dicho mtodo en la clase padre
necesita estar precedida con la palabra reservada virtual. Este tipo de mtodos se llama
virtual, y Microsoft lo define como: La palabra clave virtual se utiliza para modificar un
mtodo y permite reemplazar a cualquiera de estos en una clase derivada (MSDN, 2013
g).
Segn el MSDN (2013 g), la sintaxis que se usa para definirlos es la siguiente:
virtual ()
{
}
Cuando se define un mtodo como virtual, tambin se asumen varios conceptos
importantes:
1) El mtodo debe ser modificado por cualquier clase que lo herede. No puede ser
tomado tal y como se declara.
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
53 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
2) Se controla la reutilizacin, se limita lo que se desea y lo que no debe ser
modificado.
2.3.2. Modificador override
El modificador virtual, visto en el tema anterior, trabaja a la par con el modificador
override. De esta manera, es posible decir qu mtodos pueden ser sobreescritos y cul
es el cdigo con el que se sobreescriben.
Si en alguna clase hija se requiere dar una nueva definicin del del mtodo,
simplemente se volvera a definir, pero sustituyendo la palabra reservada virtual por
override. Es decir, se utilizara la siguiente sintaxis (MSDN, 2013 h):
override ()
{
}
Es importante reafirmar que slo puede cambiarse el cdigo de un mtodo en su clase
hija si en la clase padre el mtodo fue definido como virtual. En caso contrario, el
compilador mostrar un error al intentar redefinirlo.
En el siguiente ejemplo se observar el uso del modificador override.
En una clase llamada Dimensiones se definir una constante PI, que contendr el valor
de 3.1416 y dos variables protegidas de tipo doubl, x y y. Esta clase tendr un
mtodo virtual que devuelva un valor double llamado Area(), que calcular el rea de un
cuadrado.
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
54 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
Se crea una clase llamada Crculo que hereda de dimensiones y sobreescribe el mtodo
rea de la clase dimensiones. Este cdigo se muestra a continuacin:
Se crea una clase llamada Esfera que hereda dimensiones y sobreescribe el mtodo
rea de la clase dimensiones. Este cdigo se puede analizar a continuacin:
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
55 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
Se crea una clase llamada Cilindro que herede de dimensiones y sobreescriba el mtodo
virtual rea de la clase dimensiones. El cdigo es el siguiente:
El programa principal muestra el uso de las clases virtuales:
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
56 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
Cuando el programa se ejecuta muestra los siguientes resultados:
rea de un rectngulo: 12.88
rea de un crculo: 36.316896
rea de una esfera: 98.520576
rea de un cilindro: 277.968768
Como puede observarse, la clase virtual se ha redefinido por cada una de las derivadas.
En conclusin puede decirse que la sobreescritura, en la programacin orientada a
objetos, es una de las mejores formas de reutilizacin de cdigo. Desde el inicio de esta
unidad se ha comentado que esta metodologa de desarrollo de programas se enfoca en
la reutilizacin de lo ya realizado en materia de programacin. Antes de esta propuesta, la
nica solucin era que cada programador reescribiera lo que otros haban realizado. Con
esta tcnica es posible utilizar de manera completa o parcial (incluso reescribir desde
cero) lo ya realizado por otras clases; todo depende de lo solicitado en el desarrollo de
software y la experiencia del programador.
Autoevaluacin
Antes de desarrollar la evidencia de aprendizaje, realiza la autoevaluacin con el fin de
realizar un repaso general de la unidad; as como detectar aquellos temas que no has
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
57 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
comprendido en su totalidad y que requieras revisar nuevamente, o bien consultar con
tus compaeros(as) y Facilitador(a).
Para realizar la Autoevaluacin, ingresa al listado de actividades en el aula.
Evidencia de aprendizaje. Herencia simple, polimorfismo y
sobreescritura
El propsito de la actividad es que soluciones un problema donde sea necesario
desarrollar clases con mtodos virtuales, sobreescritura y las instrucciones de C
Sharp.
Para el desarrollo de la actividad tu Facilitador(a) te har llegar un problema respecto a
un diseo de herencia en el cual realizars los siguientes pasos:
1. Construye una clase abstracta.
2. Integra un constructor.
3. Integra mtodos virtuales.
4. Construye clases con ciertas caractersticas de herencia.
5. Agrega una clase que herede de la clase abstracta.
6. Integra mtodos polimrficos
7. Otorga funcionalidad segn las especificaciones que te indique tu Facilitador(a).
8. Integra un archivo de texto en el cual muestres las capturas de pantalla de cada
uno de los pasos de este proceso.
9. Una vez realizado el programa, empaca todo el proyecto en un archivo .zip;
incluye el archivo de texto con las capturas de pantalla del procedimiento
realizado.
10. Guarda la actividad con el nombre DPRN2_U2_EA_XXYZ. Sustituye las XX por
las dos primeras letras de tu primer nombre, la Y por tu primer apellido y la Z por
tu segundo apellido.
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
58 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
11. Enva el archivo a tu Facilitador(a) para recibir retroalimentacin.
*No olvides, consultar el documento Criterios de evaluacin de las actividades de la
Unidad 2 para conocer los parmetros de esta actividad.
Cierre de la unidad
En esta unidad se muestra la aplicacin de conceptos tales como herencia, polimorfismo y
sobreescritura en lenguaje C Sharp.
La herencia es uno de los pilares de la programacin orientada a objetos, porque permite
la reutilizacin del cdigo y la generacin de clases derivadas ms especializadas.
En una relacin de herencia el primer elemento se llama clase padre o base; el segundo,
clase hija o derivada; este ltimo puede usar los mtodos, propiedades y variables de la
primera. Tambin es capaz de modificar los mtodos y crear as un nuevo
comportamiento.
El polimorfismo significa que conviven varios mtodos con el mismo nombre, pero con
comportamientos diferentes, lo que permite crear distintas funcionalidades.
La sobreescritura es consecuencia de la herencia. Una clase hija puede reescribir,
recodificar, los mtodos heredados, darles una funcionalidad diferente para lo que fueron
definidos.
En esta unidad se han revisado conceptos que permiten otorgar mayor funcionalidad a los
programas que realizars en otras materias y, en un futuro prximo, en la industria. Otros
temas ms complejos de la programacin orientada a objetos se revisarn en la Unidad 3.
Manipulacin de errores y conjuntos de objetos.
Para saber ms
En esta seccin encontrars algunos recursos que es recomendable consultes, pues
ofrecen ms informacin acerca de los principales conceptos revisados, tales como
herencia, polimorfismo, interfaces, sobreescritura:
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
59 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
MSDN. Microsoft Developer Network. (2013). Herencia (Gua de programacin de
C#).Recuperado de http://msdn.microsoft.com/es-
es/library/ms173149(v=vs.80).aspx
MSDN. Microsoft Developer Network. (2013). Clases y miembros de clase
abstractos y sellados (Gua de programacin de C#). Recuperado de
http://msdn.microsoft.com/es-es/library/ms173150(v=vs.80).aspx
En el portal oficial de C Sharp en espaol de Microsoft encontrars la explicacin
de los conceptos de herencia, polimorfismo e interfaces con varios ejemplos. La
pgina est en ingls, pero puedes apoyarte en alguna de las diversas
herramientas de traduccin para acceder a la informacin y observar los videos.
Fue desarrollada para la versin de C Sharp 2005, pero es vlida para cualquier
versin desde 2008 hasta 2010. El enlace es http://msdn.microsoft.com/en-
us/vstudio//bb798022.aspx
El libro de Jos Antonio Gonzlez Seco, El lenguaje de programacin C#, es un
desarrollo libre. Aunque es una versin muy anterior, los conceptos fundamentales
no han cambiado. Se encuentra disponible en la seccin Material de apoyo y
tambin lo puedes obtener de http://dis.um.es/~bmoros/privado/bibliografia/LibroC
Sharp.pdf
Fuentes de consulta
Archer, T. (2010). A fondo C#, 2010. Madrid: McGraw-Hill.
Deitel, H. y Deitel, P. (2007). Cmo programar en C Sharp, 2a. ed. Madrid:
Pearson.
Ferguson J., Patterson B. y Beres J. (2005). La biblia de C Sharp. Madrid: Anaya.
Griffiths, Ian; Adams, Matthew & Liberty, Jesse (2010). Programming C# 4.0.
Editorial OReilly, Estados Unidos
Gonzlez J. (2004). Lenguaje de programacin en C#. Recuperado de
http://dis.um.es/~bmoros/privado/bibliografia/LibroC Sharp.pdf
-
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
60 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
Michaells, M. (2010). Essential C# 4.0. Estados Unidos: Addison Wesley.
Microsoft Corporation. (1999-2007), C# Language Specification Version 3.0,
Recuperado de download.microsoft.com/.../C
Sharp%20Language%20Specification.doc
MSDN. Microsoft Developer Network (2013 a). Clases selladas. Recuperado de
http://msdn.microsoft.com/es-MX/library/aa645616%28v=vs.71%29.aspx
MSDN. Microsoft Developer Network (2013 b). Clases y miembros de clase
abstractos y sellados (Gua de programacin de C#). Recuperado de
http://msdn.microsoft.com/es-es/library/ms173150%28v=VS.80%29.aspx
MSDN. Microsoft Developer Network (2013c). Herencia y clases derivadas (C# y
Java). Recuperado de http://msdn.microsoft.com/es-
es/library/ms228387%28v=VS.80%29.aspx
__________________________________d. Interface (Referencia de C#).
Recuperado de http://msdn.microsoft.com/es-
es/library/87d83y5b%28v=VS.80%29.aspx
__________________________________e. Mtodos abstractos. Recuperado de
http://msdn.microsoft.com/es-es/library/aa664435%28v=VS.71%29.aspx
__________________________________f. Mtodos genricos (Gua de
programacin de C#). Recuperado de http://msdn.microsoft.com/es-
es/library/twcad0zb(v=vs.80).aspx
__________________________________g. Virtual (Referencia de C#).
Recuperado de http://msdn.microsoft.com/es-
MX/library/9fkccyh4%28v=vs.80%29.aspx
__________________________________h. Override (Referencia de C#)
Recuperado de http://msdn.microsoft.com/es-es/library/ebca9ah3(v=vs.80).aspx
__________________________________i. Polimorfismo en C#
http://msdn.microsoft.com/es-es/library/ebca9ah3(v=vs.80).aspx
Nash, T. (2010). Accelerated C# 2010. Estados Unidos de Amrica: Apress.
Sharp, John. (2010). Microsoft Visual C# 2010. Estados Unidos: Microsoft Press.
http://msdn.microsoft.com/es-MX/library/aa645616%28v=vs.71%29.aspxhttp://msdn.microsoft.com/es-es/library/ms228387%28v=VS.80%29.aspxhttp://msdn.microsoft.com/es-es/library/ms228387%28v=VS.80%29.aspxhttp://msdn.microsoft.com/es-es/library/aa664435%28v=VS.71%29.aspxhttp://msdn.microsoft.com/es-MX/library/9fkccyh4%28v=vs.80%29.aspxhttp://msdn.microsoft.com/es-MX/library/9fkccyh4%28v=vs.80%29.aspxhttp://msdn.microsoft.com/es-es/library/ebca9ah3(v=vs.80).aspxhttp://msdn.microsoft.com/es-es/library/ebca9ah3(v=vs.80).aspx -
Programacin .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin CSharp
61 Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software
Troelsen, A. (2010). Pro C# 2010 and the .NET 4 Platform. Estados Unidos:
Apress.
Universidad de Salamanca (2011). Diccionario mdico-biolgico, histrico y
etimolgico. Recuperado de: http://dicciomed.eusal.es/palabra/polimorfismo
http://dicciomed.eusal.es/palabra/polimorfismo