Abstracción sintactica

le coq

Le Coq - Joan Miro

Recordemos algunas nociones básicas.

La misión del desarrollador de software consiste en escribir programas que sean faciles de entender. Un programa es facil de entender cuando esta escrito como un conjunto sencillo de relaciones entre conceptos. Como estos conceptos pueden ser a su vez complejos, el programador retiene de ellos unicamente la información necesaria para entender sus relaciones con los demás conceptos. Cada concepto del programa principal es representado por otro pedazo del programa, escrito de manera similar. Este mecanismo de reducción del nivel de detalle de una parte del programa se conoce como abstracción.

Si en un programa existen pedazos de código muy similares, el programador debe preguntarse si no existe un concepto implicito que merezca ser representado por una abstracción.

Los dos tipos de abstracción mas conocidos son tal vez el procedimiento, que captura una serie de acciones, y los tipos de datos, que representan la entidades sobre las cuales un programa actua. Los diferentes tipos de abstracción permiten reducir la complejidad de los programas de diferentes maneras. Cada lenguaje de programación ofrece sus propios mecanismos de abstracción según el estilo de programación que promueven, por ejemplo funcional u orientado a objetos.

Railway Crossing

Railway Crossing - Leger

La abstracción sintactica permite regrupar formas sintacticas similares. Para explicar a que me refiero con “formas sintacticas similares” daré un ejemplo. En el lenguaje java, en las versiones anteriores a 1.5, la manera mas familiar de iterar sobre un arreglo era escribir algo asi:


int[] arreglo = {1,2,3};

for (int i = 0; i < arreglo.length ; i++){
int var = arreglo[i];
doSomethingWith(var);
}

Al escribir código como este muchas veces, es obvio que hay algo que puede generalizarse. Java 1.5 ofrece la siguiente forma de escribir esto mismo:

int[] arreglo = {1,2,3};

for (int var : arreglo){
doSomethingWith(var);
}

La ganancia en legibilidad es enorme cuando se tiene en cuenta el enorme número de iteraciones sobre un arreglo que pueden aparecer en un programa. Como java no ofrece soporte a la abstracción funcional, los programadores de java tuvimos que esperar hasta que los encargados de el lenguaje ofrecieran esta nueva forma de iterar sobre un arreglo, sin poder hacer nada al respecto. En un lenguaje como lisp que permite la abstracción sintactica el programador podría haber creado su propia versión de “for”, de considerarlo necesario. En lisp esto se hace gracias a un poderoso sistema de macros.

Veamos otro ejemplo, basado en common lisp pero explicado en pseudo código. Si imaginamos una librería que permita escribir lineas de texto a un archivo, su uso en un lenguaje tradicional se parecerá a esto:


variable stream = open("archivo");
try {
print(stream, "hello");
print(stream, "world");
}
finally {
close(stream);
}

Luego de escribir código parecido al anterior muchas veces, podemos imaginar lo conveniente que sería reducir lo anterior a una forma mas pura, algo parecido a esto:


with-open-file (stream "archivo") {
stream.print("hello world");
}

que “esconda” los detalles de captura de excepciones y de cerrar el stream al final de su uso.

En lisp existe un macro que hace exactamente eso. Pero el punto aquí no es que lisp soporte esta sintaxis sino que, de no existir, el programador podria introducirla sin ningun problema.

4 Comments

  1. Nelson
    March 19, 2010 #

    El primer ejemplo con Java me recuerda una frase que vi por ahí en el contexto del lenguaje Perl. Es exagerada pero me gusta el mensaje : los programadores de verdad no usan índices.

  2. Juan David Vélez
    March 21, 2010 #

    Pues yo creo que la entrada valio la pena, para mi por lo menos. #yoconfieso que no conocía eso de java que usted puso. También bacano ver un chibchombiano elogiando las posibilidades de lisp. Supongo que en los chibchombianos capitulo Bogotá el elogio a lisp es normal, acá en la seccional Medellín eso no pasa, o eso creo yo.

  3. Mauricio Vásquez
    March 24, 2010 #

    ya te pusiste latero!!!

    Estoy esperando el segundo capitulo de Uribe se entera de….!!!

    Y bueno, debo confesar que un lenguaje que no me permite liberar memoria cuando YO quiero no es para mí un buen lenguaje.

    En lo que si coincido es la abstracción, y trato de emplearla al máximo posible con una gran salvedad.

    Me ha tocado entregar códigos a personas con un nivel de manejo del lenguaje bastante menor, en donde emplear a concho facilidades entregadas por un lenguaje hacen más dificil la transferencia de conocimientos.

    Por lo que el objetivo final de una buena programación se pierde, el objetivo es crear codigos facilies de entender.

    Ante esto hay que tener en cuenta siempre en quien le va a tocar sufrir con nuestra programación, por lo que trato de tener un buen equilibrio en la forma como me toca confecciónar un procedimiento.

    ….

    Bueno este es uno de los temas por que prefiero más el diseño y arquitectura de información a la programación jejejej

    PD: So vago, el pueblo exije segunda parte YA!!!!

Trackbacks/Pingbacks

  1. Joan Miró i Ferrà (Abril 20, 1893 – Diciembre 25, 1983) | Blog de Daniel - December 10, 2010

    […] http://blog.crazyrobot.net/?p=160 […]

Leave a Reply

Powered by WordPress. Designed by Woo Themes