Módulos
João Paulo Schwarz Schüler
Um módulo é um conjunto de dados e instruções com algum grau de independência. Para efeitos de Pascal, é considerado módulo todo procedimento, função, unidade ou objeto.
Acoplamento
O acoplamento entre dois módulos é o grau de dependência entre os mesmos. Quanto maior for o grau de dependência entre dois módulos, menos reaproveitáveis e modificáveis eles serão. Supondo dois módulos A e B que façam uso da mesma variável X global; sempre que quisermos modificar ou reaproveitar o módulo A, será necessário verificar qual será o impacto sobre o módulo B.
Ainda assim, existem casos em que não é possível abrir mão da variável X. Assim sendo, devemos procurar uma abordagem em que a variável X seja global exclusivamente aos módulos A e B. Existem duas possibilidades para o caso proposto: criar uma unidade ou um objeto ( ou classe ) de nome C que incorpore a variável X e os procedimentos A e B. Observadamente, quando o objetivo é o reaproveitamento, a criação de uma classe (tipo de objeto) é a solução necessária.
Solução em unidade:
unit UniC;
interface
procedure A;
procedure B;
function Get:extended;
procedure Seta(P:extended);
implementation
var X:extended; { variavel X e' local a unidade }
procedure A;
begin
X:=X+1; {apenas um exemplo}
end;
procedure B;
begin
X:=X-1; {apenas um exemplo}
end;
function Get:extended;
begin
Get:=X;
end;
procedure Seta(P:extended);
begin
X:=P;
end;
end. { of unit }
Solução em classe:
type TipoC = object {definicao da classe TipoC}
private
X:extended;
public
procedure A;
procedure B;
function Get:extended;
procedure Seta(P:extended);
end;
procedure TipoC.A;
begin
X:=X+1; {apenas um exemplo}
end;
procedure TipoC.B;
begin
X:=X-1; {apenas um exemplo}
end;
function TipoC.Get:extended;
begin
Get:=X;
end;
procedure TipoC.Seta(P:extended);
begin
X:=P;
end;
var C:TipoC; { decalracao do objeto C do tipo (classe) TipoC }
Vale observar que foram criados dois métodos ( toda função ou procedimento pertencente a um objeto é chamado de método) chamados Get e Seta. Considerando que a variável X é agora local, se desejarmos saber ou alterar seu estado serão necessários métodos.
Existe ainda uma terceira solução: aninhamento de procedimentos.
Solução em aninhamento de procedimentos:
procedure C;
var X:extended;
procedure A;
begin
X:=X+1; { apenas um exemplo }
end;
procedure B;
begin
X:=X-1; { apenas um exemplo }
end;
{ outras variaveis locais }
begin { of procedure C }
{ comandos do procedimento C }
end; { of procedure C }
Para concluir, é importante ter em mente que o objetivo das três técnicas apresentadas é evitar variáveis globais. Quanto menos variáveis globais você implementar, menor será seu acoplamento e melhor será seu software.