Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Polimorfismo | OOP Principles
C# Beyond Basics

PolimorfismoPolimorfismo

El término polimorfismo significa "que se presenta en varias formas diferentes". En el contexto de la programación orientada a objetos, polimorfismo se refiere a la capacidad de una clase para proporcionar una interfaz común para sus clases derivadas al tiempo que permite a cada clase derivada para implementar comportamientos específicos para los métodos heredados.

Normalmente cuando estamos creando un objeto de una clase, creamos una variable para mantener la referencia de ese objeto. Y el tipo de la variable suele ser la clase de ese objeto. Por ejemplo:

Sin embargo, también podemos crear una variable de una clase base y almacenar en ella un objeto de una clase derivada. Por ejemplo:

cs

index.cs

El atributo breed del objeto Dog no es accesible porque cuando almacenamos el objeto Dog en una variable Mammal, implícitamente se convierte en Mammal. Esto significa que sólo podemos acceder a los atributos y métodos que están presentes en la clase Mammal. Esto no significa que el valor almacenado en la clase breed se pierda, sólo es inaccesible y podemos decir que está esencialmente oculto.

Simplemente podemos convertir ejemplo en Perro mediante typecasting explícito y el atributo raza volverá a estar disponible:

cs

index.cs

Sin embargo, para los métodos hay una característica adicional llamada method overriding, que es algo similar a method overloading sin embargo básicamente redefinimos un método de una clase base en la clase derivada.

Por ejemplo, querríamos que Mammal tuviera un método speak() tal que diera como resultado Woof! si es llamado desde un objeto Dog, y Meow! si es llamado desde un objeto Cat:

cs

index.cs

Sin embargo, fíjate en que al final m1, m2 y m3 ejecutan el método definido en la clase Mammal, es porque están convertidos en objetos Mammal.

Si queremos que el método speak se comporte como lo hace en su objeto original, podemos convertirlo en un método virtual. Un método virtual es simplemente un método que nos permite anularse a sí mismo desde clases derivadas de tal forma que la implementación específica ejecutada se determina en tiempo de ejecución basándose en el tipo del objeto original.

Para hacer virtual un método, simplemente añadimos la palabra clave virtual antes de su tipo de retorno:

Para hacer una implementación overridden de este método, usamos la palabra clave override antes del tipo de retorno en la implementación de la clase derivada de esa nueva implementación:

Ahora juntemos los dos fragmentos y veamos cómo afecta a la salida:

cs

index.cs

Ves que en la salida, m2 y m3 usan la implementación del método de Cat y Dog porque esos objetos eran originalmente Cat y Dog. Todo este proceso de sobreescribir métodos para que se comporten en base a su tipo original se llama polimorfismo.

Una situación en la que esto puede ser muy útil es ser capaz de almacenar objetos de múltiples tipos de datos diferentes en un único array o lista. Por ejemplo:

cs

index.cs

To make an overridden implementation of this method, we use the keyword override before the return type in the derived class' implementation of that new implementation:

cs

index.cs

Let's now put together the two snippets and see how it affects the output:

cs

index.cs

You see that in the output, m2 and m3 use the Cat and Dog's implementation of the method because those objects were originally Cat and Dog. This whole process of overriding methods such that they behave based on their original type is called polymorphism.

One situation where this can be very useful is being able to store objects of multiple different data types into a single array or list.

For-example:

cs

index.cs

1. What two keywords are used in method overriding?
2. What is the correct way of making a method overridable?

What two keywords are used in method overriding?

Selecciona la respuesta correcta

What is the correct way of making a method overridable?

Selecciona la respuesta correcta

¿Todo estuvo claro?

Sección 5. Capítulo 4
course content

Contenido del Curso

C# Beyond Basics

PolimorfismoPolimorfismo

El término polimorfismo significa "que se presenta en varias formas diferentes". En el contexto de la programación orientada a objetos, polimorfismo se refiere a la capacidad de una clase para proporcionar una interfaz común para sus clases derivadas al tiempo que permite a cada clase derivada para implementar comportamientos específicos para los métodos heredados.

Normalmente cuando estamos creando un objeto de una clase, creamos una variable para mantener la referencia de ese objeto. Y el tipo de la variable suele ser la clase de ese objeto. Por ejemplo:

Sin embargo, también podemos crear una variable de una clase base y almacenar en ella un objeto de una clase derivada. Por ejemplo:

cs

index.cs

El atributo breed del objeto Dog no es accesible porque cuando almacenamos el objeto Dog en una variable Mammal, implícitamente se convierte en Mammal. Esto significa que sólo podemos acceder a los atributos y métodos que están presentes en la clase Mammal. Esto no significa que el valor almacenado en la clase breed se pierda, sólo es inaccesible y podemos decir que está esencialmente oculto.

Simplemente podemos convertir ejemplo en Perro mediante typecasting explícito y el atributo raza volverá a estar disponible:

cs

index.cs

Sin embargo, para los métodos hay una característica adicional llamada method overriding, que es algo similar a method overloading sin embargo básicamente redefinimos un método de una clase base en la clase derivada.

Por ejemplo, querríamos que Mammal tuviera un método speak() tal que diera como resultado Woof! si es llamado desde un objeto Dog, y Meow! si es llamado desde un objeto Cat:

cs

index.cs

Sin embargo, fíjate en que al final m1, m2 y m3 ejecutan el método definido en la clase Mammal, es porque están convertidos en objetos Mammal.

Si queremos que el método speak se comporte como lo hace en su objeto original, podemos convertirlo en un método virtual. Un método virtual es simplemente un método que nos permite anularse a sí mismo desde clases derivadas de tal forma que la implementación específica ejecutada se determina en tiempo de ejecución basándose en el tipo del objeto original.

Para hacer virtual un método, simplemente añadimos la palabra clave virtual antes de su tipo de retorno:

Para hacer una implementación overridden de este método, usamos la palabra clave override antes del tipo de retorno en la implementación de la clase derivada de esa nueva implementación:

Ahora juntemos los dos fragmentos y veamos cómo afecta a la salida:

cs

index.cs

Ves que en la salida, m2 y m3 usan la implementación del método de Cat y Dog porque esos objetos eran originalmente Cat y Dog. Todo este proceso de sobreescribir métodos para que se comporten en base a su tipo original se llama polimorfismo.

Una situación en la que esto puede ser muy útil es ser capaz de almacenar objetos de múltiples tipos de datos diferentes en un único array o lista. Por ejemplo:

cs

index.cs

To make an overridden implementation of this method, we use the keyword override before the return type in the derived class' implementation of that new implementation:

cs

index.cs

Let's now put together the two snippets and see how it affects the output:

cs

index.cs

You see that in the output, m2 and m3 use the Cat and Dog's implementation of the method because those objects were originally Cat and Dog. This whole process of overriding methods such that they behave based on their original type is called polymorphism.

One situation where this can be very useful is being able to store objects of multiple different data types into a single array or list.

For-example:

cs

index.cs

1. What two keywords are used in method overriding?
2. What is the correct way of making a method overridable?

What two keywords are used in method overriding?

Selecciona la respuesta correcta

What is the correct way of making a method overridable?

Selecciona la respuesta correcta

¿Todo estuvo claro?

Sección 5. Capítulo 4
some-alt