BotonMenu
BotonIndice

Visita : http://www.conoce3000.com
Paypal : https://www.paypal.me/conoce3000/1

PASCAL CON FREE PASCAL

PASCAL CON FREE PASCAL

PASCAL CON FREE PASCAL


6. FUNCIONES, PROCEDIMIENTOS Y UNIDADES.
6.7. UNIDADES. (LIBRERIAS)
6. FUNCIONES, PROCEDIMIENTOS Y UNIDADES.
6.7. UNIDADES. (LIBRERIAS)
6. FUNCIONES, PROCEDIMIENTOS Y UNIDADES.
6.7. UNIDADES. (LIBRERIAS)

SIGUIENTE

SIGUIENTE

SIGUIENTE


‒ Unidades.

Las unidades son archivos que se usan para almacenar nuestras rutinas (procedimientos y funciones), variables, tipos de datos y de ese modo pueden ser usados en otros programas o unidades. Para poder usar las unidades en otros programas se hace uso de la palabra reservada use al inicio de cada programa, un ejemplo es el uso de la unidad math, que hemos visto en capítulos anteriores.

Las unidades se pueden compilar independientemente, es decir una unidad es independiente del programa que lo use. Una vez que una unidad ha sido compilada no necesita compilarse más veces.

Las unidades también se conocen como librerías, ya que estas reúnen las constantes, variables, procedimientos y funciones de propósito común para usarlo en distintos programas. Una unidad está constituida de cuatro partes, interfaz (interface), implementación (implementation), inicialización (initialization) y finalización (finalization). A continuación ejemplo:


Descargar
{$codepage UTF8}

UNIT MiUnidad;

INTERFACE

  Uses math;
  Const PI=3.141592654;
        Nep=2.718281828;
  Procedure PolarRect(angulo,radio:double;var x,y:double);
  
IMPLEMENTATION

  Procedure PolarRect(angulo,radio:double;var x,y:double);
    Begin
      //Las funciones sin y cos
      //se encuentra en la unidad math
      x:=radio * cos(angulo); 
      y:=radio * sin(angulo)
    End;
     
END.
Código fuente 19: Unidad de ejemplo MiUnidad.
Descargar

El código fuente de la unidad comienza con la palabra reservada unit, seguido por el identificador o nombre de la unidad, que debe ser igual al nombre del archivo en donde se guarda el código fuente, para este ejemplo el nombre del archivo de la unidad sería MiUnidad.pp. La parte de la interface declara todos los tipos de datos, variables, constantes y las cabeceras de procedimientos y funciones, que pueden ser usados por un programa u otra unidad. La parte de la implementación (implementation) sirve para desarrollar los procedimientos y funciones declarados en la parte de la interfaz (interface). En la parte de la implementación (implementation) también se pueden declarar constantes, tipos de datos, variables, procedimientos y funciones que sólo se usarán en la unidad. Es decir todo lo que se declare en la parte de la implementación de una unidad, no se podrá usar por el programa o unidad que use dicha unidad.

Una unidad se compila igual como un programa, con la diferencia que el compilador crea dos archivos uno con extensión ppu y el otro con extensión o, en el ejemplo después de compilar la unidad se crea el archivo MiUnidad.o y MiUnidad.ppu.

Es importante organizar bien los archivos de las unidades que se usaran en el programa, por ejemplo si queremos usar la unidad que hemos creado MiUnidad, en uno de nuestros programas, el archivo del código fuente (*.pp) de la unidad se debe colocar en la misma carpeta del programa que va a usar dicha unidad.

El siguiente programa hace uso de la unidad MiUnidad, se asume que el código fuente de la unidad, se encuentra en la misma carpeta del programa:


Descargar
{$codepage UTF8}

USES MiUnidad;

VAR  x,y:double;
     a,r:double;
	 
BEGIN
  Writeln('Coordenadas Polares a rectangulares ');
  Write('angulo = ');readln(a);
  Write('radio = ');readln(r);
  PolarRect(a,r,x,y);
  Writeln('x=',x:2:3);
  Writeln('y=',y:2:3)
END.
Código fuente 20: Programa que usa la unidad MiUnidad de ejemplo.
Descargar

En casos en que la unidad se encuentre en una carpeta aparte, como por ejemplo ../librerias, se puede indicar a través de una directiva del compilador, en que carpeta se encuentra la unidad, la directiva que se usa sería $UNITPATH, las directivas no generan código ejecutable, sólo dan información al compilador para proceder según sea el caso. En este caso la directiva $UNITPATH se usa para indicarle al compilador en donde se encuentran las unidades que usará el programa. Una directiva se usa del siguiente modo:

{$UNITPATH ../librerias;../lp/librerias}

Una directiva siempre estará encerrada entre corchetes {}, el nombre de la directiva debe empezar con el símbolo $, y seguido de un espacio en blanco las opciones de la directiva o indicaciones de la directiva para el compilador.

En este caso las indicaciones son las rutas en donde se encuentran las unidades a usar por el programa, cuando las librerías se encuentran en diferentes carpetas, las rutas o direcciones se indican separándolo con un punto y coma.

A continuación el programa anterior teniendo en cuenta que la unidad se encuentra en la carpeta ../librerias :


Descargar
{$codepage UTF8}
{$UNITPATH ../librerias}
                                           
USES MiUnidad;

VAR x,y:double;
    a,r:double;

BEGIN
  Writeln('Coordenadas Polares a rectangulares ');
  Write('angulo = ');readln(a);
  Write('radio = ');readln(r);
  PolarRect(a,r,x,y);
  Writeln('x=',x:2:3);
  Writeln('y=',y:2:3)
END.
Código fuente 21: Programa que usa la unidad MiUnidad de ejemplo, en la carpeta ../Libreria.
Descargar

La parte de inicialización puede contener instrucciones. Estas instrucciones sirven, por ejemplo, para iniciar variables. La ejecución de estas instrucciones se efectúa antes de la ejecución del programa que usa la unidad. Para la parte de inicialización se usa la palabra reservada initialization. La parte de finalización se ejecutara después que el programa que use la unidad haya terminado su ejecución. Para la parte de finalización se usa la palabra reservada finalization.

A continuación la unidad MiUnidad con las partes de inicialización y finalización, que sólo muestran mensajes de inicio y fin de la unidad.


Descargar
{$codepage UTF8}

UNIT MiUnidad;

INTERFACE

  Uses math;
  Const PI=3.141592654;
        Nep=2.718281828;
  Procedure PolarRect(angulo,radio:double;var x,y:double);
  
IMPLEMENTATION

  Procedure PolarRect(angulo,radio:double;var x,y:double);
    Begin
      //Las funciones sin y cos
      //se encuentra en la unidad math
      x:=radio * cos(angulo); 
      y:=radio * sin(angulo)
    End;
    
INITIALIZATION
  
    Writeln('Inicio de la Unidad')
    
FINALIZATION
  
    Writeln('Fin de la Unidad')  
        
END.
Código fuente 22: Unidad Mi Unidad con las partes de inicializacion y finalizacion.
Descargar

Dentro de las unidades también se pueden sobrecargar procedimientos y funciones, tan sólo hay que escribirlas diferenciándose en la cantidad de parámetros o en el uso de tipos de datos diferentes en los parámetros, tal como se explico en: 6.5. Sobrecarga (overload) de funciones y procedimientos.

Cuando se intenta sobrecargar un procedimiento o función, que residen en unidades distintas entonces se debe usar la palabra reservada overload, en cada procedimiento o función que se dese sobrecargar. Es decir si una función o procedimiento, que reside en una unidad es sobrecargado por otra función o procedimiento que reside en otra unidad, entonces ambas rutinas deben usar la palabra reservada overload. El siguiente ejemplo consiste en un programa que usa dos unidades, Enteros.pp y Cadenas.pp, en donde se han definido los procedimientos ordenar, que son sobrecargados con el uso de la palabra reservada overload. Esta palabra se coloca al final de la declaración del procedimiento en la parte de interfaz, en la implementación no es necesario su uso. A continuación los códigos fuente del ejemplo:


Descargar
{$codepage utf8}
UNIT Enteros;


INTERFACE


PROCEDURE Ordenar(Var lista:array of integer);overload;


IMPLEMENTATION


PROCEDURE Ordenar(Var lista:array of integer);
 Var i,j:longint;
     aux:integer;
 Begin
   For i:=1 to High(lista) do
    Begin
      aux:=lista[i];
      j:=i-1;
      While ( (j>=0) and (lista[j]>aux) ) do
        Begin
          lista[j+1]:= lista[j];
          j := j - 1;
        End;
        lista[j+1]:=aux;
    End;
 End;

 END.
Código fuente 23: Unidad Enteros.pp
Descargar



Descargar
{$codepage utf8}


UNIT Cadenas;


INTERFACE


PROCEDURE Ordenar(Var lista:array of integer);overload;


IMPLEMENTATION


PROCEDURE Ordenar(Var lista:array of integer);
 Var i,j:longint;
     aux:integer;
 Begin
   For i:=1 to High(lista) do
    Begin
      aux:=lista[i];
      j:=i-1;
      While ( (j>=0) and (lista[j]>aux) ) do
        Begin
          lista[j+1]:= lista[j];
          j := j - 1;
        End;
        lista[j+1]:=aux;
    End;
 End;

 END.
Código fuente 24: Unidad Cadenas.pp
Descargar



Descargar
{$codepage utf8}


USES Enteros,Cadenas;


VAR lista01:array [1..10] of integer = (10,15,12,14,11,8,1,5,10,20);
    lista02:array [1..5] of string = ('Jose','Ana','Marie','Carlos','Luis');
    i : integer;


BEGIN
  Ordenar(lista01);
  Ordenar(lista02);
  for i:=1 to 10 do Writeln(lista01[i]);
  for i:=1 to 5 do Writeln(lista02[i]);
END.
Código fuente 25: Programa ordenar.pp
Descargar




SIGUIENTE
SIGUIENTE
SIGUIENTE



 
‒ Comentarios y sugerencias.

Agradezco de antemano, todo comentario, sugerencia, y donativo (a través de Paypal me), que ayude a mejorar los contenidos educativos de Conoce 3000. Además, cualquier pregunta o duda que tengas lo puedes hacer por este medio. Pero, todo contenido que pueda resultar ofensivo, malicioso, racista, sexista, discriminatorio, obsceno, vulgar será eliminado.


Comments System WIDGET PACK






PORTADA |  INTERESANTE |  APUNTES |  LIBROS |  GALERIA


Creative Commons License


Todos los textos, imágenes y videos de Conoce3000 estan colocados bajo una licencia : Creative Commons Reconocimiento-NoComercial 3.0 Unported License.