Esta semana estuve leyendo algunos artículos de la Wikipedia e intentando colaborar a corregir algunos errores.

En particular el artículo sobre programación orientada a objetos, aunque ya fue corregido en diversas oportunidades y es bastante fiable, aún tiene algunos problemas. Como paso previo a su modificación dejé planteada esta discusión que quiero compartir con uds.

== Este artículo contiene algunos conceptos erróneos ==

Por ejemplo, se confunde el paradigma con la implementación que hace la mayoría de los lenguajes: herencia y eventos no son características del paradigma. La mayoría de los lenguajes OO están basados en clases, pero otros no: Self y javascript, entre ellos.

Quien es, tal vez, el máximo referente en este campo, Alan Kay, dijo:

"OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things".

Es importante observar que no se hace mención a clases ni a herencia. Como dije antes la misma existencia de los lenguajes basados en prototipos descarta de plano que los conceptos de clase y herencia sean parte del paradigma.

La frase meciona: ''"(...), local retention and protection and hiding of state-process, (...)"''

Es importante observar las comas antes y después del texto entrecomillado, porque ellas indican que Alan Kay menciona estos conceptos como un todo. Después nos perdemos discutiendo si encapsulamiento es o no lo mismo que ocultamiento de información. Mientras que es posible hacer disquisiciones conceptuales sobre los conceptos anteriores, lo importante es observar que en el paradigma de programación OO es una sola cosa:

* Local retention: el objeto retiene su comportamiento junto con la información necesaria.
* Protection and hiding of state-process: desde afuera no debe haber visibilidad respecto de cómo el objeto lleva a cabo su comportamiento.

Lo anterior sintetiza, con un lenguaje muy técnico por cierto, lo que es un objeto desde la perspectiva de un lenguaje orientado a objetos. Los objetos fueron la forma de conceptualizar esto, pero si un lenguaje lo conceptualizara de otro modo (sin usar el concepto de objeto) igual sería un lenguaje OO. En consecuencia, ni siquiera el concepto de objeto es esencial al paradigma.

Sin embargo, estos conceptos afectan al modo en que es posible razonar con un lenguaje. Los conceptos de objeto y herencia tienen implicaciones que van más allá de la mera implementación y que tienen que ver con cómo razonamos acerca del espacio del problema y de la solución.

Otra cosa importante a observar es que Alan Kay habla de late binding que es la técnica que posibilita el polimorfismo. Otra cuestión a considerar es que Kay también dijo que a él le gustaría que se empleara el término "genericidad" en lugar de "polimorfismo".

También sería importante mencionar las implicaciones que tiene que en el paradigma de objetos "todo es un objeto".

Ya que se trata de un artículo que versa sobre el paradigma de objetos, creo que estas cuestiones deberían ser abordadas.