23 ene. 2008

Historia de la computación y Conceptos Informáticos (V)

A continuación un universo para muchos desconocido ... la Programación


Decimos entonces que:
El tema de la Programación Orientada a Objetos (Object Oriented Programming O-O-P) sigue siendo para el que escribe un territorio inquietante, interesante y en gran medida desconocido, como parece ser también para la gran mayoría de los que estamos en el campo de la programación. Sin tratar de excluir a aquellos que han afrontado este desarrollo desde el punto de vista académico y formal (maestrías y doctorados) el tema se antoja difícil para los no iniciados. Con este breve artículo me dirigiré en particular a la gran base de programadores prácticos que andamos en búsqueda de mejores herramientas de desarrollo de programas, que faciliten el trabajo de nuestros usuarios y a la vez disminuyan la gran cantidad de considerandos que aparecen al empeñarnos en un proyecto de cómputo.
Como muchos de ustedes, me topé con el concepto de O-O-P como parte de esa búsqueda y al explorarlo apareció el gusanillo de la curiosidad. A lo largo de mi actividad como programador, y cuando se dio la necesidad, no tuve ningún problema en convertir mis habilidades de programación en FORTRAN de IBM 1130 al BASIC de la PDP, pues sólo era cuestión de aprender la sintaxis del lenguaje, ya que las estrategias de programación y los algoritmos eran iguales. Posteriormente, al manejar el PASCAL se requirió un importante esfuerzo en entender la filosofía de las estructuras, lo cual modificaba la manera de ver (conceptualizar) a los datos y a las partes constitutivas de un programa.
Posteriormente aparece el QuickBasic, que adopté inmediatamente por la familiaridad con el BASIC (ley del menor esfuerzo). Ofrecía estructuras de datos (tipos y registros complejos), además de estructuras de instrucciones en procedimientos y módulos; editor "inteligente" que revisa la sintaxis y ejecución de las instrucciones mientras se edita el programa, generación de ejecutable una vez terminado (.EXE), existencia de bibliotecas externas y enlace con módulos objeto generados en otro lenguaje. ¿Qué más podía yo pedir?
Pero la necesidad de estar en la ola de moda es más fuerte que el sentido común. Las aplicaciones en Windows siempre han despertado la envidia de los programadores, al hacer ver sus programas pálidos e insulsos por comparación. Solución: programar en Windows.
Originalmente programar en Windows representaba un largo y tedioso camino para dominar las complejas herramientas de desarrollo. Sólo recientemente han aparecido desarrolladores de aplicaciones para Windows que le permiten al programador pintar sus ventanas y realizar los enlaces entre los objetos con programación tradicional, evitando en gran medida involucrarse con los conceptos complicados de los objetos. Sin embargo no dejaron de inquietarme algunos conceptos marcados por O-O-P, según los cuales serán los pilares del futuro de la programación de componentes y de objetos distribuidos en redes, en donde la actual programación cliente/servidor pareciera por comparación el FORTRAN o el COBOL de ahora.
Pidiendo perdón de antemano a los puristas de las definiciones y conceptos de O-O-P, expondré el resultado de mis propias indagaciones sobre este campo, esperando que al paciente lector y posible programador le resulte menos complicado que a mí asimilar los elementos básicos de O-O-P.
Los principales conceptos que se manejan en la Programación Orientada a Objetos son: 1. encapsulado, 2. herencia y 3. Polimorfismo.
Según esto, la encapsulación es la creación de módulos autosuficientes que contienen los datos y las funciones que manipulan dichos datos. Se aplica la idea de la caja negra y un letrero de "prohibido mirar adentro". Los objetos se comunican entre sí intercambiando mensajes. De esta manera, para armar aplicaciones se utilizan los objetos cuyo funcionamiento está perfectamente definido a través de los mensajes que es capaz de recibir o mandar. Todo lo que un objeto puede hacer está representado por su interfase de mensajes. Para crear objetos, el programador puede recurrir a diversos lenguajes como el C++, el Smalltalk, el Visual Objects y otros. Si se desea solamente utilizar los objetos y enlazarlos en una aplicación por medio de la programación tradicional se puede recurrir al Visual Basic, al CA-Realizer, al Power Builder, etc.
El concepto de herencia me pareció sencillo de entender una vez que capté otro concepto de O-O-P: las clases. En O-O-P se acostumbra agrupar a los objetos en clases. Esto es muy común en la vida diaria. Todos nosotros tendemos a clasificar los objetos comunes por clases. Manejamos la clase mueble, la clase mascota, la clase alimento, etc. Obviamente en el campo de la programación esta clasificación es más estricta. ¿Cuál es el sentido de las clases? Fundamentalmente evitar definir los objetos desde cero y facilitar su rehuso. Si trabajamos con clases, al querer definir un nuevo objeto, partimos de alguna clase definida anteriormente, con lo que el objeto en cuestión hereda las características de los objetos de su clase. Imaginemos que creamos una clase "aves" y describimos las características de las aves (plumas, pico, nacen de huevo, etc.). Más adelante necesitamos una clase "pingüino". Como pertenece a "aves" no requerimos volver a declarar lo descrito sino marcamos que "pingüino" es una subclase de "aves" con lo que "pingüino" hereda todas sus características. A continuación sólo declaramos los detalles que determinan lo que distingue a "pingüino" de "aves". Asimismo podemos declarar "emperador" como una subclase de "pingüino", con lo que "emperador" heredará todas las características de las superclases "pingüino" y "aves" más las características que nosotros declaremos en particular para "emperador". En un programa (imaginario por supuesto) yo puedo utilizar estas clases (aves, pingüino y emperador). El hecho de colocar a un individuo en particular en estas clases es lo que se llama objeto y se dice que es una instancia de una clase. Así, si yo coloco a Fredy (un pingüino emperador) en mi programa, se dice que el objeto Fredy es una instancia de la clase emperador. Fredy aparecerá en mi programa con todas las características (herencia) de aves, de pingüino y de emperador.
Por otra parte, entender el concepto de Polimorfismo implicó un buen número de horas de indagación y búsqueda de ejemplos. Espero que éste resulte claro: supóngase que declaramos un objeto llamado Suma. Este objeto requiere dos parámetros (o datos) como mensaje para operar. En la programación tradicional tendríamos que definir el tipo de datos que le enviamos, como por ejemplo dos números enteros, dos números reales, etc. En O-O-P el tipo de dato se conoce hasta que se ejecuta el programa.

No hay comentarios: