Índice > TAD > Unit

Instituto de Ciências Matemáticas de São Carlos
Departamento de Computação e Estatística
SCE182 - Algoritmos e Estruturas de Dados 1
Profs. Resp.: Graça Pimentel e Maria Cristina

Units em Turbo Pascal

Uma Unit é uma coleção de constantes, tipos de dados, variáveis, procedimentos e funções. Cada Unit é como um programa Pascal separado. Ela é uma biblioteca de declarações que permite dividir seu programa e compilá-lo em partes separadas. Ela pode ter um corpo principal o qual é chamado antes do seu programa ser iniciado para preparar as "inicializações" necessárias.

Todas as declarações em uma Unit estão normalmente relacionadas. Por exemplo, a unit CRT contém todas as declarações de rotinas relativas à SCREEN do PC. O Turbo Pascal possui 8 Units pré-definidas: System, Overlay, Graph, Dos, Crt, Printer...

Estrutura de uma Unit

UNIT <identificador>;       {arquivo deve ter mesmo nome.PAS}

INTERFACE
  uses <lista de units>     {opcional}
  <declarações públicas>    {só cabeçalho}

IMPLEMENTATION
  uses <lista de units>     {opcional}
  <declarações privadas>

  <implementação de proc. e funções>
  {corpo das funções e proc.}

Begin

  <inicializações>

End.

  {ou}

End.

OBS: Um único arquivo (diferente do Módula-2)

Exemplo 1: Unit IntLib

Contém duas rotinas simples atuando sobre os inteiros

Unit IntLib;  	{ INTLIB.PAS }

Interface
  Procedure ISwap (var I,J: integer);
  Function IMax (I,J: integer): integer;

Implementation

  Procedure ISwap (var I,J: integer);
    Var Temp: integer;
    Begin
      Temp:=I;
      I:=J;
      J:=Temp;
    End;
      
  Function IMax (I,J: integer): integer;
    Begin
      If I>J Then 
        IMax:=I
      Else IMax:=J;
    End;
        
End.

O programa abaixo, localizado em outro arquivo, utiliza esta unit.

Program Test;
  Uses IntLib;
  Var A,B: integer;

  Begin
    Write('Dê dois inteiros:');
    Readln(A,B);
    ISwap(A,B);
    Writeln('A=',A, 'B=',B);
    Writeln('Máx=', Imax(A,B));
  End.

Exemplo 2: Unit circulares - Units podem "utilizar" outras Units estabelecendo referências "circulares".

Program Circular: usa Unit Display (definida pelo usuário) para imprimir 3 mensagens na tela em coordenadas dadas.

Program Circular;
  Uses
    Crt, Display;

  Begin
    Clrscr;
    WriteXY(1,1,'upper left corner of screen');
    WriteXY(100, 100, 'Way off the screen');
    WriteXY(81-Length('Back to reality'), 15-Length('Back to reality'), 'Message');
  End.

Unit Display:

  • chama Show Error se a coordenada dada é ilegal
  • Show Error é definida na Unit Error (definida pelo usuário)
  • define WriteXY que imprime mensagem em coordenada legal
    Unit Display;
    
    Interface
      Procedure WriteXY(X,Y: integer; Message: string);
    
    Implementation
      Uses Crt, Error;
    
      Procedure WriteXY(X,Y: integer; Message: string);
      Begin
        If (X in [1..80]) and (Y in [1..25]) Then
          Begin
            GotoXY(X,Y);
            Write(Message);
          End
        Else
          ShowError('Coordenadas X e Y são inválidas');
      End;
    
      End.
    

    Unit Error:

  • chama WriteXY para imprimir mensagem de erro, isto é, utiliza Unit Display
  • define Show Error
    Unit Error;
    
    Interface
      Procedure ShowError (ErrMsg: string);
    
    Implementation
      Uses Display;
    
      Procedure ShowError(ErrMsg:string);
      Begin
        WriteXY(1,25,'Error: '+ ErrMsg);
      End;
    
      End.
    

    Índice