domingo, abril 29, 2007

"Orientado a objetos" 1

Recuerdo una frase de Stroustrup que decía:
Certainly not every good program is object-oriented, and not every object-oriented program is good.


Pues bueno, tengo planeado divagar sobre el paradigma objetual y para esto planeo hacer 2 o 3 post al respecto. Inicialmente trataré de definir que es lo que quiere decir orientado a objetos, hablaré un poco de la historia de los lenguajes de programación (creo que mas que la historia, sobre el desarrollo de los diferentes paradigmas en una forma muy libre).

Al principio, todo era caos y oscuridad. Inicialmente la programación se realizaba siempre en lenguaje maquina. Dada la escasez de maquinas, y las capacidades limitadas se requería que cada programa fuese óptimo. De hecho, una anécdota interesante es que cuando se diseñaba FORTRAN se decía que este debía generar código comparado al generado "manualmente" en ensamblador ya que sino nadie lo utilizaría.

Pues bueno, en esta época de programas dependientes de las máquinas, había total libertad, por ejemplo se podía generar control flujo mediante la modificación del mismo programa. (Una forma de hacer esto es reescribir una instrucción de salto con una que no haga nada dada una condición.) y bien... posteriormente llego la programación procedimental a la que siguió la estructurada.

El cambio entre la programación procedimental a estructurada fue básicamente dado por un articulo de Edsger Dijkstra "Go To Statement Considered Harmful"... La idea detrás de la satanización del goto era básicamente dada porque un programa elaborado con sentencias de selección (switch, if) y sentencias loop (repeat for while) era mas fácil de entender. Y esto es consecuencia simplemente porque cada bloque podría entenderse por separado. (cabe mencionar que existe una demostración de equivalencia entre programación estructurada y funciones computables... turing completitud?)

En fin. De la misma manera, surge posteriormente el paradigma objetual. Lo que hacia la programación estructurada modularizando los procedimientos, lo hacia el objetual con fragmentos de código-datos en algo llamado TDA (tipos de datos abstractos). Y bien, es en este punto donde la gente discute sobre la revolución de los objetos. Es acaso el polimorfismo? la noción de mensaje que introdujo smalltalk? encapsulamiento? no se. Realmente, pese a que todas las características anteriores son propias de objetos hay una falta de formalismo que responda a.

Que es un objeto?

Eso lo dejo para el próximo post.

(Correcciones a mi introducción historica seran bienvenidas... porque la hice de memoria y probablemente abunden :P)

No hay comentarios.: