unidad 2. herencia y polimorfismo en lenguaje de programacion csharp.pdf

61
Programación .NET II Unidad 2. Herencia y polilmorfismo en el lenguaje de programación CSharp 1 División de Ciencias Exactas, Ingeniería y Tecnología | Ingeniería en Desarrollo de Software Ingeniería en Desarrollo de Software 8º cuatrimestre Programa de la asignatura: Programación .NET II Unidad 2. Herencia y polimorfismo en el lenguaje de programación C Sharp Clave: 150930934 Universidad Abierta y a Distancia de México UnADM

Upload: frans-alvarado

Post on 27-Sep-2015

53 views

Category:

Documents


4 download

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