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