Modulação de um programa
Não é propriamente elegante ter um código com imensas linhas de código dividido por pseudo-secções indicadas com comentários, como, por exemplo, assim:
// ------------------------------------------
// ------------------------------------------
// ----- Rotinas para processar batatas -----
// ------------------------------------------
// ------------------------------------------
procedure Descascar(batata : TBatata);
// ...
O código torna-se exponencialmente mais difícil de ler, especialmente quando pretendemos procurar determinadas funções ou procedimentos.
O Pascal oferece desde os seus primórdios um pequeno conjunto de métodos para modular o código e dividi-lo em várias secções bem distintas.
Inclusão de código
Uma técnica utilizada é a inclusão de código que esteja localizado noutros ficheiros. O compilador irá copiar os conteúdos desses ficheiros as is no código final. Para tal usa-se a compiler directive {$i ficheiro}
ou {$include ficheiro}
.
Por exemplo:
program inclusao;
{$i funcoes.inc}
var n : integer = 3;
begin
writeln(foo(n));
// ...
end.
Isto indica ao compilador que deve incluir o conteúdo do ficheiro funcoes.inc
naquele local. Portanto, se o ficheiro funcoes.inc
contiver este conteúdo...
function foo(x : integer) : integer;
begin
foo := sqr(x) - 2;
end;
... então o código inicial equivalerá a...
program inclusao;
function foo(x : integer) : integer;
begin
foo := sqr(x) - 2;
end;
var n : integer = 3;
begin
writeln(foo(n));
// ...
end.
Por conseguinte, o ficheiro a ser incluído não pode ser um código-fonte completo, ou seja, com as cláusulas program
ou unit
por exemplo. Se o ficheiro funcoes.inc
contivesse este conteúdo...
program funcoes;
function foo(x : integer) : integer;
begin
foo := sqr(x) - 2;
end.
begin
// ...
end.
... então teríamos no código inicial...
program inclusao;
program funcoes;
function foo(x : integer) : integer;
begin
foo := sqr(x) - 2;
end.
begin
// ...
end.
var n : integer = 3;
begin
writeln(foo(n));
// ...
end.
Isto iria gerar um erro de compilação uma vez que há duas cláusulas program
, o que não faz sentido.
Os ficheiros de inclusão são, então, nada mais do que ficheiros com código "isolado" que, por si só, não são compiláveis e servem apenas como "depósitos" de código que podem ser incluídos.
Unit
Ao contrário dos ficheiros de inclusão, uma unit é uma biblioteca de código que é previamente compilada e pode ser utilizada por outro programa com recurso à cláusula uses
.
Ver artigo "Pascal - Módulos" da 34ª Edição da Revista PROGRAMAR.
Library
Uma library é um outro tipo de biblioteca de código compilado com a diferença de não ser inserido no programa final. Em vez disso, o programa liga-se à biblioteca em runtime e assim acede às suas funções e procedimentos.
No Windows, a extensão habitual destas bibliotecas é *.dll. Ou seja, estamos perante dynamic-link libraries.
Ideia: Esta secção necessita que alguém com os devidos conhecimentos escreva acerca do assunto. ^_^