Sunteți pe pagina 1din 61

Programacin .

NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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

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

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

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

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.

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

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

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

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.

Mamferos

Gato

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.

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

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.

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.

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

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:
Padre

Hija1

Herencia simple

Nota: El smbolo:

Padre1

Hija2

Padre2

Hija

Herencia mltiple

Significa que una clase base o padre hereda

atributos a una clase hija. La punta de flecha


padre.

indica quin es la clase


.

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;

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

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.

Clase1

Clase2

Niveles
de
herencia

Clase3

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:

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

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.

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

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).

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

10

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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.

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

11

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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).

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

12

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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.

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

13

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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:

Mamferos

Gato

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.

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

14

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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:

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

15

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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.

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

16

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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:

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

17

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

18

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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:

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

19

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

20

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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:
Vertebrados
<<Abstracta>>

Mamferos
<<Abstracta>>

Perro

Tigre

Aves
<<Abstracta>>

Tucn

Canario

Peces
<<Abstracta>>

Trucha

Sardina

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

21

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

Al observar esta jerarqua, pueden obtenerse varias conclusiones sobre las distintas
clases:
1)
2)
3)
4)
5)
6)

Vertebrados, Mamferos o Aves no pueden instanciarse.


Perro, Tigre, Tucn pueden instanciarse.
Un Perro es-un Mamfero y un Perro es-un Vertebrado.
Perro y Tigre comparten informacin. Son mamferos y son vertebrados.
Canario y Trucha comparten informacin como que son vertebrados.
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,

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

22

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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
<<Abstracta>>

Docente

Jefe
<<Sellada>

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

23

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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.

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

24

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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.

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

25

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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.

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

26

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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:

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

27

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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
Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

28

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

individuo que se encuentra en dicha institucin. La codificacin de esta clase se muestra a


continuacin:

El programa principal tendr la siguiente codificacin:

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

29

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

30

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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:
Persona
<<Abstracta>>

Docente

Convenio
<<Interfaz>>

Alumno

Movilidad

Jefe
<<Sellada>

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.

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

31

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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.

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

32

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

En el caso de Movilidad, el mtodo informacion() debe agregar el siguiente cdigo:

El programa principal quedar as:

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

33

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

34

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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.

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

35

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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.

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

36

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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.

Clase
Cuenta
<<Abstract>>
Mtodos
<<Abstract>>Deposito()
<<Abstract>>Retiro()

Clase
DeAhorros

Clase
Inversiones

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

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

37

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

de herencia, donde se toma como clase base DeAhorros y de ella deriva Maestra. Esto
se observa a continuacin:

Clase
Cuenta
<<Abstract>>
Mtodos
<<Abstract>>Deposito()
<<Abstract>>Retiro()

Clase
DeAhorros

Clase
Inversiones

Clase
Maestra

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

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

38

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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.

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

39

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

Se requiere desarrollar una clase llamada permetro, sta tendr varios mtodos que
permitirn calcular el derredor de las siguientes figuras irregulares.

Se conoce:

Se conoce:

Se conoce:

Se conoce:

L1, L2 y L3

L1, L2, L3 y L4

L1, L2, L3, L4 y L5

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.

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

40

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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.

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

41

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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=ax+b

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

42

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

43

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

EcuacionCuadratica se muestra a continuacin:

EvaluaEcuaciones tendr la siguiente definicin:

Se obtiene una clase que permitir evaluar las siguientes expresiones:

y=3x+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:

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

44

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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.
<<Abstract>>
Figura

Clase
Circulo

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

45

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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:


Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

46

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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.
Clase
Persona

Clase
Docente

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.
Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

47

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

48

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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 <T1, T2>, 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:

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

49

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

Si se ejecuta el programa, la salida ser la siguiente:


(1, MANUEL)
En el momento de la instanciacin se utiliza la definicin <int, string>, 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 <string, string>. 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.

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

50

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

51

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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 <tipoDevuelto> <nombreMtodo>(<parmetros>)
{
<cdigo>
}
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.

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

52

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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 <cdigo> 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 <tipoDevuelto> <nombreMtodo>(<parmetros>)
{
<nuevoCdigo>
}
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.

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

53

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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:

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

54

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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:

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

55

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

56

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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.

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

57

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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:

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

58

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

MSDN. Microsoft Developer Network. (2013). Herencia (Gua de programacin de


C#).Recuperado de http://msdn.microsoft.com/eses/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/enus/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

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

59

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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/eses/library/ms228387%28v=VS.80%29.aspx

__________________________________d. Interface (Referencia de C#).


Recuperado de http://msdn.microsoft.com/eses/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/eses/library/twcad0zb(v=vs.80).aspx

__________________________________g. Virtual (Referencia de C#).


Recuperado de http://msdn.microsoft.com/esMX/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.

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

60

Programacin .NET II
Unidad 2. Herencia y polilmorfismo en el lenguaje de programacin
CSharp

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

Divisin de Ciencias Exactas, Ingeniera y Tecnologa | Ingeniera en Desarrollo de Software

61

S-ar putea să vă placă și