¿Puede existir polimorfismo sin herencia ni interfaces?

Quisiera hacerles una consulta. ¿Puede existir polimorfismo sin herencia ni interface?... Por lo que entiendo no, pero quisiera vuestra ayuda ya que no encuentro documentación oficial Java que lo compruebe.

1 Respuesta

Respuesta
1

I. Hola Compañero, por mi parte no conozco este ámbito, aunque me atrae la programación.

Quizás esta información sea útil hasta que responda un experto.

http://ofeliaprogra.blogspot.com.es/2010/10/herencia-y-polimorfismo-modularidad-y.html 

https://translate.google.es/translate?hl=es&sl=en&u=https://dzone.com/articles/polymorphism-and-inheritance&prev=search 

http://todoenjava.blogspot.com/2012/01/polimorfismo.html 

https://translate.googleusercontent.com/translate_c?depth=1&hl=es&prev=search&rurl=translate.google.es&sl=en&sp=nmt4&u=https://stackoverflow.com/questions/11732422/is-polymorphism-possible-without-inheritance&usg=ALkJrhi6swLkjZPseBn6Pd5P_mWsvVJclA 

http://es.kioskea.net/contents/413-oop-polimorfismo 

http://www.forosdelweb.com/f45/polimorfismo-puede-existir-sin-herencia-pregunto-1099049/ 

http://materias.fi.uba.ar/7507/content/20102/teoricas/7507_04_polimorfismo.pdf 

**En el principio, solo existian las estructuras. Luego vino el encapsulamiento (C-with-classes), metiendo funciones dentro de las estructuras (ocultando un parámetro con el puntero a los datos, conocido como 'this'), luego vino la herencia, y luego vinieron los polimorfismos (primero los de cohersion, luego el de inclusión, y por ultimo el paramétrico).
A la luz del Genesis, aclaro:
* La herencia NO SABE de la existencia de polimorfismo (vino primero). Como todos saben, la relación "X hereda de Y" hace que un conjunto de atributos de Y se alojen en X. Estos atributos pueden incluir: la interfaz, comportamiento (reuso), datos.
* La relación "X es polimorfico respecto de Y", significa que allí donde hay un Y puede ser reemplazado con un X y sigue compilando. En otras palabras, X provee la misma interfaz que Y, o a un X lo puedo bombardear con mensajes para un Y y se lo banca, y yo no me entero de si es un X o un Y. Como ven, tampoco en este punto el polimorfismo sabe de la herencia.
* PERO, en C++, el polimorfismo por inclusion SE IMPLEMENTA con herencia. ¿Por qué? Porque entre todas las porquerías que se heredan, se hereda también la interfaz.
* Existen casos de herencia sin polimorfismo, y polimorfismo sin herencia, tanto en C++ como en otros lenguajes:
- herencia privada deshabilita el polimorfismo (class Pepe : private Persona).
- Polimorfismo parametrico (un template parameter) no usa herencia. (Ver mas abajo)
- En algunos lenguajes (""VB"" x ej, si se puede considerar como tal), había un 'implements' que hacia que algo se comporte como otra cosa, pero no heredaba nada.
* Los tipos de polimorfismos que hay: (taxonomía según Cardelli)
- Por cohersion: overloading de operadores. float + int, char - long int, etc., presentan el mismo caso de uso, y el usuario no se entera. (No voy a aclarar más sobre este caso en este thread).
- Por inclusión: el que se hace por herencia, ya que INCLUYE los atributos, entre ellos la interfaz. class Pepe : public Persona.
- Parametrico: por templates (generic programming). Cada vez que hago template <class T>, efectúo sobre T operaciones sin saber el tipo de T. Por eso puedo pasarle diferentes tipos, siempre que se respeten los type requirements (por ejemplo: default-constructible, copy-constructible, assignable, addable, etc.).
* Type punning es agarrar un dato de determinado tipo y tratarlo como si fuera otro. En el caso de C++, la manera mas comun es utilizando el operador reinterpret_cast, sobre un area de memoria; en C, se hace con uniones. Por ejemplo:
float pepe;
int& pedro = *reinterpret_cast<int*>(&pepe);
O bien
Union U
{ float pepe;
int pedro;
};
Entonces todo lo que haga sobre pepe tendrá un efecto sobre pedro, y viceversa. Type punning NO REPRESENTA un caso de polimorfismo (no se puede decir que "pepe es polimorfico respecto de pedro", por un lado porque la relacion opera entre tipos de datos [y no sobre instancias], y por otro porque no proveen la misma interfaz).**

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas