Programación en Pascal/Unidades
Escribir un programa en un solo fichero de texto está bien si el programa no es muy grande. Pero si el programa es grande, el fichero de texto puede volverse ingobernable. En estos casos, se hace necesario dividir el programa en módulos o, en terminología de Pascal, units.
Además, las unidades son reusables. Puedes escribir una librería de código ahora, y usarla en cuantos programas necesites. Y lo que es más interesante, puedes distribuir esas librerías, y otros programadores pueden tener acceso a ellas. Por ejemplo, el Lazarus se basa en la librería LCL, y esa es la librería que usas cuando construyes entornos gráficos. Imaginarse tener que programar todas esas librerías cada vez que empiezas un proyecto... realmente solo de pensarlo se hace imposible.
La idea básica es: no programes aquello que esté ya programado. Es sorprendente lo que se puede llegar a hacer combinando unas cuantas librerías, y haciendo tu programa como si fuera el pegamento que las une y da sentido a una nueva aplicación.
Aquí aprenderemos tanto a crear tus propias librerías, como a usar las ya existentes.
Uso de las librerías que vienen con Free Pascal
editarhttp://docs.mis-algoritmos.com/pascal.ref.math.html en esta pagina están las librerías de pascal, y ejemplos de cada una.
Carga de las librerías
editarLas librerías (o Units en Pascal) pueden contener muchas cosas, pero lo más común es que contengan procedimientos y funciones. El objetivo es poner esas funciones a disposición de ser usadas por los programas que "añadan" esas units. Así cualquier programa que las añada (o también se dice "que las utilice") puede hacer uso de las funciones contenidas en ellas.
Pues bien, cuando planeemos usar librerías, nos hemos de remitir a la sección USES de nuestro programa.
He aquí un pequeño ejemplo de código:
program MiPrograma;
uses CRT;
var
nombre: string[10];
begin
clrscr;
nombre:= 'Manuel';
writeln(nombre);
readkey;
end.
Este pequeño programa tiene una variable llamada nombre donde almacena la cadena de texto 'Manuel' y después la imprime. Sin embargo, se ha de notar que primero llama al procedimiento clrscr que se encarga de borrar la pantalla de la terminal donde aparece la salida de nuestro programa en modo texto. Al final, tras imprimir el contenido de la variable nombre, el programa llama a la función readkey, que obliga al programa a detenerse y a no continuar hasta que el usuario presione una tecla. El caracter correspondiente a esa tecla es devuelto como resultado de la función.
Ambas funciones (clrscr y readkey) se encuentran definidas en la librería CRT. Por eso, en la sección USES de nuestro pequeño programa hemos añadido el identificador CRT, que es el nombre de la librería.
Así si queremos añadir otras librerías para poder usar las funciones que contienen en nuestro programa, simplemente las añadimos a la sección USES de nuestro programa. Al añadir una librería personalizada es recomendable que se encuentre en el mismo directorio que el código del programa que la utiliza.
Otro ejemplo. Podríamos querer usar el operador **. Este operador toma el número a su izquierda y lo eleva a la potencia indicada por el número a su derecha. Está definido en la librería MATH proporcionada por el lenguaje, así que para usarlo añadimos la librería MATH en la sección USES.
program MiPrograma;
uses CRT,MATH;
var
nombre: string[10];
begin
clrscr;
nombre:= 'Manuel';
writeln(nombre);
writeln(2**4) {Esto imprimirá 16}
readkey;
end.
Se pueden añadir librerías o units que ya vienen en Pascal y también librerías o units creadas por uno mismo. Sólo falta saber su nombre. Y recuerda, que Pascal no distingue entre mayúsculas y minúsculas en los identificadores (como C o Java).
La librería system
editarLa librería SYSTEM (o system) es una librería especial que Pascal incluye automáticamente en cualquier programa nuevo. En ella están definidas las más básicas funciones de lenguaje como por ejemplo write y read.
Un ejemplo:
program MiPrograma2;
var
nombre: string[10];
begin
write('Ingresa tu nombre: ');
read(nombre);
write('Tu nombre es', nombre);
end.
Este pequeño programa, a pesar de no contar con ninguna librería añadida (no hay sección USES) aún así funciona, pues la librería SYSTEM, donde están write y read siempre se añade a cualquier programa, por pequeño que sea, aunque no se ponga su nombre explícitamente.
En este vínculo puedes encontrar información de referencia sobre la unidad SYSTEM, incluida en las distribuciones Free Pascal.
Crea tu propia librería
editarTradicionalmente, este tipo de módulos se han utilizado para lograr la Compilación separada de un programa, la que permite recompilar únicamente las secciones del programa que han sufrido cambios. Esta técnica hace posible crear bibliotecas de programas en las que el código fuente de dichos programas no tiene porqué ser accesible por el programador que hace uso de esa biblioteca. En Pascal existe una manera de generar módulos, independientes de cualquier programa, mediante el uso de Unidades o UNITS. Por ejemplo CTR es una UNIT, la cual usamos en nuestro programas pero no tenemos acceso a su implementación. Una unidad está constituida por las siguientes secciones: – Cabecera de la unidad – Sección Interface / Interface (o sección pública) – Sección Implementación / Implementation (o sección privada) – Sección de inicialización.
La estructura de una Unit es básicamente:
•UNIT <identificador>;
•INTERFACE
- (Esta parte es la que permite conectar esta unidad con otras unidades y programas) - (También es conocida como la sección pública, ya que todo lo que está en esta sección puede ser vista desde el exterior de la unidad) - (Se pueden declarar constantes, tipos de datos, variables, funciones y procedimientos) - (Solo se declara la cabecera de las funciones y procedimientos. Sum implementación se encuentra en la secciones "Implementación")
•USES <lista de unidades>; (opcional)
•IMPLEMENTATION
- (Esta sección es estrictamente privada y por tanto su contenido no puede ser visto desde el exterior de la unidad) - (Esta sección contiene los cuerpos de los procedimientos y funciones declarados en la sección "Interface") - (Las variables declaradas dentro de esta sección serán de uso exclusivo para los procedimientos y funciones de dicha unidad)
•BEGIN
{código de inicialización} {opcional}
•END.
- EJEMPLO UNIDAD Bibcar:
•UNIT Bibcar;
•INTERFACE
-FUNCTION AMinuscula (c: Char): Char; -FUNCTION EsMayuscula (c: Char): Boolean; -FUNCTION EsVocal(c: Char): Boolean;
•IMPLEMENTATION
FUNCTION AMinuscula (c: Char): Char; BEGIN AMinuscula := Chr(Ord(c)+(Ord('a')-Ord('A'))) END; FUNCTION EsMayuscula (c: Char): Boolean; BEGIN EsMayuscula := ((c >= 'A') AND (c <= 'Z')) END; FUNCTION EsVocal(c: Char): Boolean; VAR minus: Char; BEGIN IF (EsMayuscula(c)) THEN BEGIN minus := AMinuscula(c); END ELSE BEGIN minus := c; END; EsVocal := ((minus = 'a') OR (minus = 'e') OR (minus = 'i') OR (minus = 'o') OR (minus = 'u')) END;
END.
La sección interface
editar•INTERFACE
- (Esta parte es la que permite conectar esta unidad con otras unidades y programas) - (También es conocida como la sección publica, ya que todo lo que esta en esta sección puede ser vista desde el exterior de la unidad) - (Se pueden declarar constantes, tipos de datos, variables, funciones y procedimientos) - (Solo se declara la cabecera de las funciones y procedimientos. Su implementación se encuentra en la secciones "Implementación")
La sección implementation
editar•IMPLEMENTATION
- (Esta sección es estrictamente privada y por tanto su contenido no puede ser visto desde el exterior de la unidad) - (Esta sección contiene los cuerpos de los procedimientos y funciones declarados en la sección "Interface") - (Las variables declaradas dentro de esta sección serán de uso exclusivo para los procedimientos y funciones de dicha unidad)