Ejemplo Polimorfismo

En los ejemplos anteriores pudimos analizar las Clases Alumno e Instructor.  En este ejemplo veremos que se desarrollo un formulario para enviar notificaciones.  En este caso tanto alumno como instructor se comportaran como persona.  Esto es lo que se conoce como Polimorfismo.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using System.Net.Mail;

using MVAEscuela.Core.BE;
using MVAEscuela.Core.BLL;

public partial class Notificacion : System.Web.UI.Page
{
    Alumno_BLL m_Alumno_BLL = new Alumno_BLL();
    Instructor_BLL m_Instructor_BLL = new Instructor_BLL();

    protected void Page_Load(object sender, EventArgs e)
    {
    }

    protected void Done_Click(object sender, ImageClickEventArgs e)
    {
        if (chkAlumnos.Checked)
        {
            Noixno.Common.CommonList<Instructor> Instructores = m_Instructor_BLL.GetAll(null);

            foreach (Instructor instructor in Instructores)
            {
                Notificar(instructor);
            }
        }

        if (chkInstructor.Checked)
        {
            Noixno.Common.CommonList<Alumno> Alumnos = m_Alumno_BLL.GetAll(null);
            foreach (Alumno alumno in Alumnos)
            {
                Notificar(alumno);
            }
        }
    }

    //Polimorfismo ya quede recibir un instructor o un alummo ya que ambos heredan de persona
    protected void Notificar(Persona persona)
    {
        string Cuerpo = @"<HTML><body><table border =’1′><tr><td>Estimado: " + persona.Nombre + "</td></tr> <tr><td>Estimado: " + Notificacion.Text + "</td></tr> </table></body></HTML>";
        MailMessage mail = new MailMessage();
        SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");

        mail.From = new MailAddress("server@noixnogroup.com");
        mail.To.Add(persona.CorreoElectronico);

        mail.Subject = " Notificacion :: MVA Escuela";

        mail.IsBodyHtml = true;
        mail.Priority = MailPriority.High;
        mail.Body = Cuerpo;

        SmtpServer.Port = 587;
        SmtpServer.Credentials = new System.Net.NetworkCredential("Server@noixnogroup.com", "AmericaA00*");
        SmtpServer.EnableSsl = true;

        try
        {
            SmtpServer.Send(mail);
        }
        catch (SmtpException ex)
        {
            info.Text = ex.Message;
        }
        catch (Exception ex)
        {
            info.Text = ex.Message;
        }  
    }
}

Autor: arevalomaria

Ingeniero de Sistemas, Magister en Gerencia y Tecnologia de la Informacion, Certificaciones: ITIL V3, CCNA, Microsoft Certified Professional.

98 comentarios en “Ejemplo Polimorfismo”

  1. Excelente Ejemplo, me gusta mucho la manera como se explican los temas, en lo personal no he tenido el gusto de usar C#, sin embargo es similar la sintaxis a Java.

    1. Encuentro que el ejemplo es poco didactico, se agradece la intención pero este enlace corresponde a un curso básico de iniciacición a la POO, lo cual no es explicativo con este ejemplo.

    1. El tema esta en que la MVA hace un enlace a este post en un curso demasiado temprano para llegar a entender el contenido avanzado de este ejemplo, se deberia usar un ejemplo mas sencillo para empezar.

      1. Totalmente de acuerdo, es mas difícil entender si agregan muchas cosas nuevas de la nada. Afortunadamente para algunos que conocemos java la sintaxis es muy parecida.

      2. Opino lo mis, al menos debeian haber mas comentarios en el cuerpo del programa para explicar mas al detalle, se supone que es el nivel basico !. (De igual forma se agradece el ejemplo ).

      3. Totalmente de acuerdo! Vengo siguiendo el curso “Desarrollo .Net ” y la verdad que no entiendo el lenguaje en absoluto. No me doy cuenta cuándo es Clase, cuándo se hizo la Herencia, o cuando se usó el Polimorfismo… Yo sé algo de C++ y algo logro entender (la lógica) pero no me doy cuenta cuándo pasan las cosas y menos que menos el porqué se usan algunas instrucciones que veo que son necesarias para poder operar con las siguientes instrucciones… En fin… no es de gran ayuda si se sigue el curso de MVA. Pero noto una sencillez a la hora de realizar la explicación de lo tratado. Espero más adelante pueda entenderlo. Gracias de todos modos!!

  2. Entendi el ejemplo, sin embargo el codigo no puede llegar a ser tan legible, porque esta importando unas DLL’s (using MVAEscuela.Core.BE; using MVAEscuela.Core.BLL;) que pueden llegar a ser confusas.

  3. El ejemplo es muy bueno, pero en mi opinión deberían publicar otro ejemplo mas sencillo sin librerias, aclarando que hay programadores que están iniciando que puede ser un poco confuso este tema de la OOP y claro esta también dejando el mismo ejemplo publicado.

  4. María, creo que estás teniendo una confusión, polimorfismo no es que usen métodos o propiedades definidos en una superclase, es mandar llamar un método probablemente abstracto definido en una superclase (en este caso persona) y que se resuelva dinámicamente el significado. Por ejemplo, la super clase Persona puede tener el método Saludar, y pueden existir subclases como PersonaTimida, o PersonaAlegre que definan el comportamiento de Saludar de una manera particular

    1. Hola robert yo sigo confundido, entonces el polimorfismo se plica en los metodos o en la clase? Soy beginer y me gustaria ir asentando bien las bases, creo que maria e. en este post le falto algo… los demas todos muy bien. Gracias Robert y Gracias M. E.

      1. Miqe°° aquí tienes otro ejemplo de polimorfismo y algunas aclaraciones.

        Si quieres ir a las bases busca el concepto de polimorfismo en biología o bio-química.Te dirán algo así: Es la capacidad que tienen _X_ elemento de presentarse como otro. Búscalo en serio. 🙂

        Regresando… Si tienes una instancia de la clase _Ahija_ y en algún contexto la puedas hacer pasar por su tipo base _Amadre_ tienes polimorfismo.

        Ya después queda meterle al falso purismo y decir que si no re-defines en la clase hija algún método de la clase base no tienes polimorfismo.

        Y bueno por fin el código.

        class Program
        {
        static void Main(string[] args)
        {
        Persona _Persona = new Instructor();
        _Persona.Nombre = “Maria”;
        Console.WriteLine(_Persona.Nombre);

        Console.ReadKey();
        }
        }

        public class Persona
        {
        private string m_nombre;

        public virtual string Nombre
        {
        get { return m_nombre; }
        set { m_nombre = value; }
        }
        }

        public class Instructor : Persona
        {
        public override string Nombre
        {
        get
        {
        return “Prof. ” + base.Nombre;
        }
        set
        {
        base.Nombre = value;
        }
        }
        }

  5. Saludos,

    Robert, tienes una confusión debido a que no se muestra el código anterior donde se definen las clases.

    Aclarando:
    -Instructor y Alumno Heredan de Persona.
    -El método Notificar pide como parámetro una Persona. No Instructor o Alumno.

    Se da el polimorfismo porque podemos decirle al método _Notificación_ ey! amigo necesito notificar pero tengo es un _Alumno_ y este dice: “no tengo problema porque alumno hereda de _Persona_ aquí en mi código solo le pediré atributos de _Persona_”.

    Mas en detalle a Notificación solo le importa que tenga la firma de Persona sin importa como lo implemente internamente sea método o propiedad.

    También puedes ver el polimorfismo desde otro punto guardando un tipo en su clase base.

    Ejemplo:

    Persona oPersonaA = new Instructor();
    Persona oPersonaB = new Alumno();

    Seria una forma mas básica usar Polimorfismo, el ejemplo mostrado va un paso mas allá indicando que al tener un tipo este puede comportarse como su base en cualquier contexto.

    Robert ve que el concepto de polimorfismo se cumple al 100% en el código del articulo.

    Coincido en que el ejemplo esta complejo para los que están iniciando. Si alguien necesita este mismo ejemplo con menos complejidad solo solicítelo.

    1. Hola Norberto, realmente estoy iniciando en la OOP, pero me gustaría un ejemplo mas simple ya que el concepto de polimorfismo, siempre me ha dejado con lagunas. Gracias

      Desiret

  6. El problema aqui es saber si es necesario usar los #region entre otras cosas que a veces adornan la ejecución pero no el código. Pienso que está bien el código pero para los que estamos migrando para la plataforma .net hay muchas cosas que no se entienden. Podrías hacer un ejemplo menos complejo?

    Me cuesta mucho trabajo entender porque ahora estamos usando otras clases y por qué se estan usando aqui. El término que aquí se intenta es SABER LAS BASES no? Pues si alguien que ya programa en c# ha llegado a utilizar las clases y demas mencionadas en el código anterior, entonces para qué tendría que aprender las bases.

    Sólo es cuestión de bajar la curva de aprendizaje para que el conocimiento que a cada persona le quede, le quede bien asentada.

    Todos queremos aprender y todos empezamos desde cero.
    Habra cosas que tu mismo no entiendas de otra área y si te hablan con tecnicismos jamas aprenderas el sentido practico de las cosas. tuviste que aprender con manzanas y palitos o si me equivoco pues es que eres único entre los hombres.

    De cualquier manera se agradece tu apoyo al tema, espero no te moleste mi comentario y se tome en cuenta como otros que te piden lo mismo.

  7. Con todo respeto creo que no es clara la definición de los conceptos de POO, ya que los alumnos que estan empezando a definir conceptos se soportan de esta web abaladas y referenciadas por MVA Mricosoft para la enseñansa de forma pedagogica de estos conceptos. Deben mejorar la explicación.

  8. Si ciertamente el ejemplo esta un poco complejo, incluso se ven listas y el concepto no queda muy claro, lo que creo entender es que la función notificar acepta de parámetro tanto instructores como alumnos que heredan de personas.
    Y yo tenia otro concepto de polimorfismo que aprendí en Java,que es una función con un mismo nombre que varia en el numero de parámetros o tipo de retorno, esto me ha confundido un poco.

    1. Al concepto que permite definidir más de una función con el mismo pero con diferentes argumentos se llama sobrecarga (overloading) y al mismo tiempo se considera un tipo de polimorfismo, así que lo que aprendiste en Java es correcto, sólo que sólo era el polimorfismo aplicado a funciones o métodos.

  9. Norberto: gracias, tus códigos son más fáciles de leer y están más claros 😀

    MegaByte: estudíe ingeniería electrónica y ahí programábamos en VB6, C Builder y Matlab. Luego aprendí C# por mi cuenta picando código, pero me quedé sin saber las bases de POO. He picado mucho mucho código (acceso a BD, procesamiento de imágenes, GDI.Net, Lambdas, Curry, etc) con clases y herencia, pero ignoro muchos términos y metodologías.

    1. Hola! Yelinna. Gracias a ti por tu comentario!!! aunque en realidad el codigo anterior tambien era mio 😉 pero por los comentarios y sugerencias trate de simplificar.

      Aun se puede tipear mas simple. Solo que estoy evitando colocar código de libro. Hablo de codigo donde esta explicado algun pilar de la POO pero desligado del mundo real.

      Nos leemos 🙂

  10. Gracias por la atención prestada:
    En esta ocasión me salen los siguientes errores:
    1. Unexpected character ‘\’
    A namespace cannot directly contain members such as fields or methods

  11. Buen dia, he acabo de leer sus comentarios y ciertamente tienen razon hasta cierto punto seria bueno que los ejemplos fuesen mas sencillos usando basicamente lo necesario para poder entenderlo.
    acontinuacion hago una traduccion simple del codigo de ejemplo. que a mi consideracion es bueno pero en vista de las opiniones es encesario bajar un poko el nivel de codigo. y solo una aclaracion para [arkhamsistemas] , la POO es lo un modelo y se puede aplicar en diferentes lenguajes java, c#, c++, clipper v5, etc. no es propio de .net,
    Tenemos 3 clases, Persona , Instructor, alumno.
    Las personas tenemos un Nombre, apellido, sexo que serian los atributos que van a determinar el estado de la persona.
    la clase Instructor y alumno son diferentes comportamientos que puede o no tener una persona. para el ejemplo diremos q la persona es Juan Perez, Juan puede ser instructor y alumno, pero tambien pudiera ser, empleado, esposo, hijo, padre. entonces tendriamos muchos comportamientos para esa persona. a eso se refiere el “polimorfismo”

    //Inicia Clase Persona
    public class Persona {

    private int IdPersona;
    private string m_Nombre;
    private string m_ApellidoPaterno;
    private string m_ApellidoMaterno;
    private string m_Sexo;

    public Persona(){
    }

    ~Persona(){
    }

    public virtual void Dispose(){
    }

    public int IdPersona{
    get{
    return IdPersona;
    }
    set{
    IdPersona = value;
    }
    }

    public string Nombre{
    get{
    return m_Nombre;
    }
    set{
    m_Nombre = value;
    }
    }

    public string ApellidoPaterno{
    get{
    return m_ApellidoPaterno;
    }
    set{
    m_ApellidoPaterno = value;
    }
    }

    public string ApellidoMaterno{
    get{
    return m_ApellidoMaterno;
    }
    set{
    m_ApellidoMaterno = value;
    }
    }

    public string Sexo{
    get{
    return m_Sexo;
    }
    set{
    m_Sexo = value;
    }
    }

    }//Fin Clase Persona

    // Inicia Clase alumno
    public class Alumno : Persona {
    private int m_IdAlumno;
    private int m_Matricula;
    private string m_MatriculaAlumno;

    public Alumno(){

    }

    ~Alumno(){

    }

    public override void Dispose(){

    }

    public string MatriculaAlumno{
    get{
    return m_MatriculaAlumno;
    }
    set{
    m_MatriculaAlumno = value;
    }
    }

    public int IdAlumno{
    get{
    return m_IdAlumno;
    }
    set{
    m_IdAlumno = value;
    }
    }

    /// Metodo que obtiene todos los alumnos
    /// Solo es representativo
    ///
    public List ObtenerAlumnos(){

    return null;
    }

    }//end Alumno

    public class Instructor : Persona {

    private int m_IdInstructor;
    private string m_MatriculaInstructor;
    private int m_TipoInstructor;

    public Instructor(){

    }

    ~Instructor(){

    }

    public override void Dispose(){

    }

    public int IdInstructor{
    get{
    return m_IdInstructor;
    }
    set{
    m_IdInstructor = value;
    }
    }

    public string MatriculaInstructor{
    get{
    return m_MatriculaInstructor;
    }
    set{
    m_MatriculaInstructor = value;
    }
    }

    public int TipoInstructor{
    get{
    return m_TipoInstructor;
    }
    set{
    m_TipoInstructor = value;
    }
    }

    ///
    /// Metodo que obtiene los instructores
    // solo es representativo.
    ///
    public List ObtenerInstructores(){
    return null;
    }
    }//end Instructor

    /* ==== aqui el ejemplo de implementacion ===== */
    ==========================================

    publi class Escuela
    {
    ///// declaramos y le decimos que vamos a implementar un instancia a esas clases.

    Alumno _Alumno = new Alumno();
    Instructor _Instructo = new Instructor();

    public void NotificarTodos()
    {

    /* declaramos una lista de objetos alumnos.*/
    List alumnos = new list();

    alumnos = _Alumno.ObtenerAlumnos();

    /*==== recorremos la lista , la asignamos a la variable itemAlumno enviamos a notificar, o cualquiero otra accion. ====*/

    foreach( Alumno itemAlumno in alumnos)
    {
    /* aqui como ya tenesmo el objeto persona podemos
    accesar a todas sus atributos, metodos y si tubieramos
    clases hijas tambien a ellas.
    */
    Notificar(itemAlumno);
    // o enviar un mensaje en pantalla.
    msgbox(itemAlumno.MatriculaAlumno + ” ; ” itemAlumno.Persona.Nombre + ” ; ” itemAlumno.Persona.ApellidoPaterno);
    }

    /*=====================*/
    // lo mismo podriamos hacer con instructores.

    }

    void Notificar(Persona _Persona)
    {
    /* …. cuerpo de la funcion */
    }

    }

    espero este codigo sea de ayuda y entendible, les recomendaria que leyeran un poco de modelado de clases con UML, es una alternativa para comprender un poco mas del tema de POO y su Paradigma.
    Gsantillanmass.

    1. Hola Gabriel! gracias por tu aporte!

      Lo comento porque no es común ver eso por allí… yo asumo que esto lo sabes pero lo escribo para los demas que puedan ver tu código.

      Todos sabemos como se escribe el -método constructor- de las clases (ese que se ejecuta al crear una instancia de ellas)
      -Si no vamos a hacer nada en ese método se recomienda no escribirlo. Aunque ciertamente da lo mismo ya que el compilador lo creara al momento de crear el CIL o como se llamo antes MSIL (http://es.wikipedia.org/wiki/Common_Intermediate_Language)

      public Instructor(){} //Metodo constructor -No requerida si esta vació

      Así como el constructor tenemos el destructor y se crea usando el ~ antes de su nombre. Lo usamos cuando se queremos liberar forzadamente algún recurso como por ejemplo una conexión a base de datos, algún archivo, etc.
      -Pero no es buena practica. Dicho de otra forma es mala practica usar destructores el recolector de basura del CLR se encara de ese trabajo silenciosamente.

      ~Instructor(){} //No requerida – Please evitarla 🙂

      Este comentario no aporta al tema de polimorfismo pero bhaaa digan que es cultura general y no me critiquen jajajaja

  12. Que tal! Norberto Gracias por el aporte. En un modelado de clases siempre debe especificarse los constructores y destructores de nuestras clases para la portabilidad de nuestros modelos ( modelado en para distintos lenguajes , c#, java y los demas jejejej 🙂 ), sin embargo tienes toda la razon en cuanto a que no es necesario y algunos casos recomendado hacer uso de ella cuanto trabajamos con el framework de .net.
    Atte. Gabriel
    Saludos.

  13. El ejemplo esta claro, lo que no me gusto mucho es la concatenacion de Strings Html y el envio del mail, me parece que le agrega complejidad de mas… creo que con un metodo que trate a Instructor y Alumno como Personas haciendo que escriba por consola lo que se necesite estaria mejor… es como que tienen polimorfismo y le pusieron en el medio envio de mail, excepciones y concatenacion de strings, yo lo habria planteado asi:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace ConsoleApplication2
    {
    public abstract class Persona
    {
    public string nombre { get; set; }
    public int id { get; set; }
    public abstract string notificado();
    }
    public class Alumno : Persona
    {
    public override string notificado()
    {
    return “Yo ALUMNO con id:” + this.id + ” y nombre : ” + this.nombre + ” he sido notificado”;
    }
    }
    public class Profesor : Persona
    {
    public override string notificado()
    {
    return “Yo PROFESOR con id:” + this.id + ” y nombre : ” + this.nombre + ” he sido notificado”;
    }
    }
    public class Notificar
    {
    public string notifica(Persona alguien)
    {
    return alguien.notificado();
    }
    }
    class Program
    {
    static void Main(string[] args)
    {
    Persona juan = new Alumno();
    Persona pepe = new Profesor();
    Notificar notificador = new Notificar();
    juan.nombre = “Juancho”;
    juan.id = 1;
    pepe.nombre = “Pepe Casas”;
    pepe.id = 2;
    Console.WriteLine(notificador.notifica(juan));
    Console.WriteLine(notificador.notifica(pepe));
    Console.WriteLine(“\n Presione una tecla \n”);
    Console.ReadKey();
    }
    }
    }

    Saludos!

    Juan

    1. Ahora si esta claro, porque como comentan los demás, agregaron detalles que hacen mas complejo para entender el uso del polimorfismo y como se hace.

      No he tirado una linea de código y ya se que mensaje me traerá este código con solo leerlo.

      Muy bien Juan.

  14. Gracias a los expertos por sus aportaciones, creo q asi es mas facil entenderle, sobre todo para los q estamos empezando. Saludos a todos desde Veracruz

  15. Comentar el código es parte de programar…!
    Agradezco comentar código en los ejemplos, como lo hecho por
    16. Gabriel SM – febrero 3, 2012

    Gabriel: gracias por tu ejemplo

  16. Maria Eugenia Excelente Ejemplo particularmente Programo en Vb.net pero C# se ve muy tentador y fácil de usar. el Polimorfismo pienso es lo que mas cuesta de entender a los programadores nuevos.
    Nuevamente Gracias por tu dedicación y excelente ejemplo..

  17. Perdón pero Polimorfismo NO es que de una clase madre hayan varias clases derivadas. Polimorfismo es cuando una clase puede derivar de más de una clase madre.

    Por ejemplo en Java se puede hacer polimorfismo pero en C# no.

  18. Mmm… definitivamente no había visto un material educativo, tan poco educativo como este. Se supone que es el nivel básico, por Dios! Y ya tiene clases LINQ, que son un tema como para un curso largo él solito! — Terrible!

    1. Hola Ivanov,
      El “using System.Linq”, sale por defecto al crear un nuevo proyecto en VS, se le debió olvidar borrarlo ..

  19. WTF!!!! no entendí ni miercoles soy principiante, estoy tomando el curso de Desarrollo .Net el cual en su descripción dice:

    En el presente curso aprenderás los fundamentos básicos de programación con el uso de C#, Aplicaciones Orientadas a Windows y de la misma manera Aplicaciones Web con ASP .Net, así como el manejo de servicios tales como Windows Presentation Foundation, Windows WorkFlow Foundation y Windows Comunication Foundation.

    Definitivamente me tiene un poco decepcionado….

  20. El curso está muy interesante, y el ejemplo es ciertamente comprensible. Lo único que no me gusta, a mi modo personal es la notación:

    Alumno_BLL m_Alumno_BLL = new Alumno_BLL();
    Instructor_BLL m_Instructor_BLL = new Instructor_BLL();

    Estos símbolos de _ dificultan la lectura y nos aleja de lenguaje del domínio. La clase Alumno, debería llamarse: Alumno, esto da claridad en la lectura y mantenibilidad del código y permite una comunicación más transparente con los actores del domínio y los stakeholders involucrados en el proyecto, incluído el equipo de desarollo.

    Buen material, muy ilustrativo.

  21. A modo de comentario, no incluir en ejemplos cosas que no se han visto, este es el link que da mva, es el curso basico, apenas se esta viendo ejemplos de clases, usar ejemplos mas sencillos resultarian mas ilustrativos a este nivel

  22. Lei este contenido porque me enlazo desde MVA, y la verdad no entendi muchas cosas, considero que cada linea de codigo deberia estar tener comentarios persiguiendo explicar la sintaxis u objetivo.

  23. Que no se supone que es un curso básico introductorio de NET ???
    Pensé que por venir el enlace de Microsoft sería algo serio, pero este ejemplo está totalmente fuera de lugar, con “usings” que no se usan y salidos de no sé dónde, delegados, eventos, y bloques try-catch que se supone se verán mucho más adelante… La verdad es esto es descepcionante.

  24. Honestamente, estas clases de introducción a la programación, no están a la altura que uno espera de un contenido recomendado por Micrososft. Son muy básicas, asumen conocimientos que supuestamente deberían ser explicados en ellas y la redacción en idioma español es de muy baja calidad.

  25. me parecen buenos los ejemplos que se muestran pero la verdad es que estaria mejor que estuvieran documentados en cada linea para entender un poco mas que es lo que pasa en cada linea… bueno para uno que es novato en esto de la programacion

  26. Opino lo mismo que muchos. El ejemplo solamente sirve para una persona que ya tiene experiencia en la programación orientada a Objetos. Yo soy docente y jamás hubiera empezado mostrando esto con código que ni siquiera está visible. Es muy complejo el tema de las bibliotecas, enlazarlas, etc, no debería estar en este punto, sino más adelante.

  27. el código es fácil de entender.. se entiende que es el polimorfismo…. donde el método–>”notificar”requiere una persona y no importa si es Alumno o instructor y para los que inician tendrían que ignorar (por el momento) el hecho del uso de listas , de las librerías (usadas (lineas using ), así como las instrucciones del envió del correo (SmtpClient etc… ) es mas yo no he usado muchas de esas instrucciones y pude entenderlo , aunque no lo niego pudo haber sido un ejemplo más sencillo , como el del comentario # 18. Juancho, fácil de entender y sin código adicional (que deba ser ignorado por los que inician )

    por cierto, para el comentario # 13. arkhamsistemas eso es llamado “sobrecarga” –>
    http://msdn.microsoft.com/es-es/library/s3tbathb.aspx

    y para alguien que dijo que en c# no existe el polimorfismo:
    http://msdn.microsoft.com/es-es/library/ms173152(v=vs.80).aspx

    que yo sepa polimorfismo permite que dos clases derivadas de una clase base, obtengan los mismos métodos que esta, pero se comporten de forma distinta (si estoy al no duden en corregirme…)

    me disculpo si parecí grosero o altanero…

  28. El ejemplo 18. de Juancho explica claramente Polimorfismo.
    Para contribuir comento lo siguiente:
    El método Notificado() existe en la clase Persona y lo que hace es definir que es un string.
    En la clase Alumno, Notificado() es redefinido y el string es “Yo ALUMNO con…
    En la clase Profesor, Notificado() es redefinido y el string es “Yo PROFESOR con…
    O sea que tenemos una clase “madre” (Persona) que tiene un método llamado Notificado() que define un string y dos subclases (Alumno y Profesor) que lo re-definen, uno lo particulariza como ALUMNO y el otro como PROFESOR.
    El polimorfismo está claro en la sentencia
    Console.WriteLine(notificador.notifica(juan)); y
    Console.WriteLine(notificador.notifica(pepe));
    En el primer caso imprimirá “Yo ALUMNO con… porque juan es alumno y en el segundo caso imprimirá “Yo PROFESOR con… porque pepe es profesor.
    Para la aclaración y uso del polimorfismo voy a cambiar juan por X.
    quedaría Console.WriteLine(notificador.notifica(X)); si X es un alumno imprimirá “Yo ALUMNO con… ; si X es profesor imprimirá “Yo PROFESOR con… Es decir que el tipo de objeto (Alumno o Profesor) es identificado y al invocar el método en la clase más abstracta (Persona) esta lo ejecuta de acuerdo a la re-definición de la subclase que corresponde.

    Fíjense que si no hubiera polimorfismo, tendría que hacer una chanchada como lo siguiente (en pseudocódigo).
    IF X es “tipo-alumno” THEN “imprimir según el método de la clase alumno” ELSE “imprimir según el método de la clase profesor”.

    En vez de eso lo imprimo con el método de persona y si es un objeto persona lo hará con el método de persona, pero si es de una subclase de persona (Alumno o profesor en éste caso) lo hará con el método de esa subclase (aclaro: si están re-definidos, sino lo hará con la clase “madre” porque heredarán el método tal cual).

    Un uso práctico del polimorfismo sería el siguiente: Yo tengo la clase documento de la que heredan FACTURA y REMITO. La clase documento tiene el método IMPRIMIR() que indica como imprimir un documento. Pero en FACTURA yo la re-defino para imprimir la factura tres veces seguidas. Luego en el código solo pongo IMPRIMIR(documento), si documento es una factura lo imprimirá tres veces porque así está definido en su propio método, si “documento” es un remito lo imprimirá como está en la clase documento porque REMITO no tiene una re-definición del método.
    Espero no haber contribuido a la confusión general.

  29. Muy adecuadamente estructurado el programa (“ejemplo”). Para aquellos que les resulte complicado desmenuzar x completo el código, les sugiero que revisén los post previos en los cuales se describen las clases ocupadas. Además, les recuerdo que el fin del post es dar un ejemplo del polimorfismo y este ejemplo lo hace muy bien si han seguido la secuencia del tema. Saludos y felicitaciones al publicante.

  30. me parece un ejemplo demasiado confuso, el hecho de que usen librerias y demas sin tenerlas en cuenta y sin conocer que hay en ellas o para que sirven deja muchas dudas al respecto

  31. Definición de Polimorfismo

    La palabra polimorfismo significa “la facultad de asumir muchas formas”. Brinda la posibilidad de que 2 objetos diferentes tengan métodos con el mismo nombre, que realizan conceptualmente la misma acción pero de manera diferente. Por ejemplo: el método frenar en la clase camión y en la clase bicicleta.

    El polimorfismo es la propiedad por la cual una entidad puede tomar diferentes formas. Generalmente esta entidad es una clase, y la forma en que se consigue que tome diferentes formas es por medio de nombrar a los métodos de dicha clase con un mismo nombre, pero con diferentes implementaciones.

    Fuente: http://www.glosarioit.com/#!Polimorfismo

  32. Curioso, me manda Microsoft Virtual Academy, de un curso de desarrollo en .Net a un blog montado en WordPress (no MSN Profiles, Skydrive, etc.) mostrando un código fuente que envía correos a través de Gmail… ¿Dónde está “eat your own dog food”…?

  33. Pingback: Anónimo
  34. Cada uno tiene su opinion pero este ejemplo esta bien claro.

    Si alguien no lo entendio lea esta definicion.

    Polimorfismo es la capacidad que tiene un objeto de comportante de multiples maneras.

    Ejemplo la clase persona en el ejemplo anterior se comporta como Insctructor y como alumno a la vez porque ambos son personas y poseen atributos y propiedades que pertenecen a una persona.

  35. Perdón pero las validaciones de los if con los checkbox estan alrevez, o quizás no entendí el tema porque no se van a ejecutar correctamente o en tiempo,

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s