Ir para o conteúdo

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. ^_^