Fwd: off-topic duda sobre polimorfismo...
Horst von Brand
vonbrand en inf.utfsm.cl
Vie Jul 1 17:36:01 CLT 2005
blackbeer <dblackbeer en gmail.com> wrote:
[...]
> Polimorfismo es un concepto de OO. [...]
Polimorfismo /nada/ tiene que ver con OOP. Se refiere a que una operacion
se pueda invocar igual para datos de distinto tipo. O sea, por ejemplo
write() de Pascal es polimorfico: Puedes pasarle integer, real, o incluso
strings (== arreglos de caracteres), incluso un numero variable de cosas.
Igual funciones raras como sqr (si le das integer, retorna integer; si le
das real retorna real). Y cosillas como ord(). Igual printf(3) de C: Puedes
llamarlo con uno, o muchos argumentos. Los argumentos pueden ser de
diferentes tipos. O free(3), toma un puntero a "cualquier cosa". Caso
extremo es tal vez lenguajes como Perl, en los que puedes aplicar la
operacion sort a un arreglo de numeros o de strings, y "hace lo correcto"
(ordena numericamente o como string) solo. Y no olvidar el humilde '+' en C
o similares: Sirve para sumar int, char, unsigned, float, double, ... Las
macros de C dan polimorfismo, puedes definir una macro:
#define sqr(x) ((x) * (x))
a la que le importa un pepino cual es el tipo de x. Incluso GCC tiene la
extension typeof() que permite descubrir de que tipo es algo, y crear
variables de ese mismo tipo:
#define swap(a, b) do{ typeof(a) _a = a; a = b; b = _a; }while(0)
con lo que luego:
int x, y;
struct xyz {...} xx, yy;
...
swap(x, y);
...
swap(xx, yy);
Puedes tener OOP sin polimorfismo, que es el caso cuando usas p.ej. C++ sin
usar sobrecarga de funciones. (Y al reves, si compilas "C + funciones
sobrecargadas" en C++, no estas haciendo OOP, pero si polimorfismo.) Puede
decirse que tener funciones virtuales es una forma de polimorfismo, pero es
limitada en que solo sigue la idea de que si A deriva de B, entonces A /es/
un B, y toda operacion de B debe poder aplicarse a A (con posibles ajustes).
Si, OOP sin polimorfismo pierde buena parte del chiste. Pero no quiere
decir que polimorfismo solo sea parte de OOP.
--
Dr. Horst H. von Brand User #22616 counter.li.org
Departamento de Informatica Fono: +56 32 654431
Universidad Tecnica Federico Santa Maria +56 32 654239
Casilla 110-V, Valparaiso, Chile Fax: +56 32 797513
Más información sobre la lista de distribución Linux