2007/01/12

Abstracción funcional en Pascal

La abstracción funcional es una característica fundamental dentro de la programación estructurada, que nos permite trabajar de forma mucho más efectiva y eficiente con nuestro código, permitiendo su reciclaje con unas nociones básicas o incluso nulas del mismo. Para ello procuramos encerrar información de forma que no se tenga en cuenta el código escrito que estamos utilizando sino simplemente el resultado obtenido tras su ejecución. Pascal realiza la abstracción funcional mediante los módulos, que pueden ser procedimientos o funciones.

Un procedimiento es simplemente un trozo de código al que se le asigna un nombre, que se emplea en el programa para hacer una llamada que se encarga de ejecutarlo. Una función también encierra un trozo de código, pero al final del mismo se ejecuta una sentencia que devuelve un valor, que será el valor de la función (cuyo tipo viene especificado en la cabecera de la misma). De esta forma se tratan a las funciones como datos y solo se efectúan las llamadas cuando proceda un dato del tipo de la función.

Para trabajar con el resto del programa, los módulos tienen una serie de parámetros de entrada. Estos son variables definidas fuera del propio módulo y sobre los que este efectúa una serie de operaciones. Pueden pasarse estos datos de entrada de dos maneras: por valor y por referencia. La primera forma no modifica la variable en el programa fuera del propio módulo, solo toma su valor. La segunda toma la dirección de memoria en la que se almacena la variable que se le pasa y trabaja con ella ahí, de tal forma que si el procedimiento o función la modifica, esa variable quedará también modificada en el programa principal. Las propias funciones pueden ser a su vez parámetros de otros módulos (siempre y cuando se hayan definido previamente, o se emplee el forward en su declaración).

El uso de procedimientos y funciones, permite a Pascal el uso de la recursividad. Al tratar con las variables de forma interna y ajena al resto del programa, una función puede ejecutarse a si misma un número determinado de veces y a continuación volver atrás sobre si misma para obtener un resultado final.