Ferramentas de Usuário

Ferramentas de Site


dev_geral:pascal:modulacao

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 o 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…

3-6
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.

Esta secção necessita que alguém com os devidos conhecimentos escreva acerca do assunto. ^_^
dev_geral/pascal/modulacao.txt · Última modificação em: 2018/05/14 21:37 (edição externa)