1 object pascal e delphi programas e units. 2 sumário estrutura de um programa e sintaxe estrutura...

35
1 Object Pascal e Delphi Programas e Units

Upload: internet

Post on 17-Apr-2015

114 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: 1 Object Pascal e Delphi Programas e Units. 2 Sumário Estrutura de um programa e sintaxe Estrutura e sintaxe de uma unit Referência a units e a cláusula

1

Object Pascal e Delphi

Programas e Units

Page 2: 1 Object Pascal e Delphi Programas e Units. 2 Sumário Estrutura de um programa e sintaxe Estrutura e sintaxe de uma unit Referência a units e a cláusula

2

Sumário

Estrutura de um programa e sintaxe

Estrutura e sintaxe de uma unit

Referência a units e a cláusula uses

Page 3: 1 Object Pascal e Delphi Programas e Units. 2 Sumário Estrutura de um programa e sintaxe Estrutura e sintaxe de uma unit Referência a units e a cláusula

3

Estrutura de um programa e sintaxe

IntroduçãoO cabeçalho do programaA cláusula uses do programaO bloco

Page 4: 1 Object Pascal e Delphi Programas e Units. 2 Sumário Estrutura de um programa e sintaxe Estrutura e sintaxe de uma unit Referência a units e a cláusula

4

Introdução

Um programa em Object Pascal é constituído de módulos de código fonte chamados units. Cada unit é armazenada em seu próprio arquivo e compilada separadamente. As unidades compiladas (arquivos .dcu) são ligadas para criar uma aplicação. Units permitem Dividir grandes programas em módulos que podem ser

editados separadamente Criar bibliotecas que possam ser compartilhadas por

diversos programas Distribuir bibliotecas para outros programadores sem

tornar disponível o código fonte

Page 5: 1 Object Pascal e Delphi Programas e Units. 2 Sumário Estrutura de um programa e sintaxe Estrutura e sintaxe de uma unit Referência a units e a cláusula

5

Introdução (cont.)

No Pascal tradicional todo o código fonte, incluindo o programa principal é armazenado em arquivos .pas.Delphi usa um arquivo Project (.dpr) para armazenar o programa principal enquanto a maioria do código reside em arquivos unit (.pas).Cada aplicação (ou Projeto) consiste de um único arquivo Project e um ou mais arquivos unit.Pelo menos a unit System é criada automaticamente pelo programa.Para construir um project o compilador necessita de um arquivo fonte ou um arquivo já compilado (.dcu) para cada unit.

Page 6: 1 Object Pascal e Delphi Programas e Units. 2 Sumário Estrutura de um programa e sintaxe Estrutura e sintaxe de uma unit Referência a units e a cláusula

6

Programas e Units

Um programa contémUm cabeçalho de programaUma clausula uses (opcional)Um bloco de declarações e comandos

O cabeçalho do programa especifica o nome do programa. A cláusula uses contém a lista das units usadas pelo programa. O bloco contém declarações e comandos que são executados quando o programa for executado.Um exemplo de programa denominado Editor é mostrado a seguir, lembrando que todos os arquivos fonte terminam por um ponto.

Page 7: 1 Object Pascal e Delphi Programas e Units. 2 Sumário Estrutura de um programa e sintaxe Estrutura e sintaxe de uma unit Referência a units e a cláusula

7

Programas e Units (cont.)1 program Editor; 2 3 uses 4 Forms, 5 REAbout in 'REABOUT.PAS'

{AboutBox}, 6 REMain in 'REMain.pas'

{MainForm}; 7 8 {$R *.RES} 9 10 begin11 Application.Title := 'Text Editor';12

Application.CreateForm(TMainForm, MainForm);

13 Application.Run;14 end.

Linha Conteúdo 1 Cabeçalho do Programa 3 a 6 Cláusula uses 8 Diretiva de compilação ligando o arquivo

de recursos do projeto ao programa 10 a 14

Bloco de comandos a serem executados quando o programa “rodar”

Page 8: 1 Object Pascal e Delphi Programas e Units. 2 Sumário Estrutura de um programa e sintaxe Estrutura e sintaxe de uma unit Referência a units e a cláusula

8

Programas e Units (cont.)

Este arquivo project é bem típico da linguagem pois eles são usualmente bem pequenos já que a lógica fica nos arquivos das units.Os arquivos project são gerados e mantidos pelo Delphi sendo raro que se necessite edita-los manualmente.

Page 9: 1 Object Pascal e Delphi Programas e Units. 2 Sumário Estrutura de um programa e sintaxe Estrutura e sintaxe de uma unit Referência a units e a cláusula

9

O cabeçalho do programa

O cabeçalho de um programa consiste de Palavra reservada programIdentificador igual ao nome do projectSeparador ponto e vírgula

 No Pascal tradicional existiam parâmetros entre o identificador e o ponto e vírgula, que, se existirem, serão ignorados pelo Delphi.

Page 10: 1 Object Pascal e Delphi Programas e Units. 2 Sumário Estrutura de um programa e sintaxe Estrutura e sintaxe de uma unit Referência a units e a cláusula

10

A cláusula uses do programa

A cláusula uses contém a lista das units usadas pelo programa.As units referenciadas, por sua vez, podem ter cláusulas uses também.

Page 11: 1 Object Pascal e Delphi Programas e Units. 2 Sumário Estrutura de um programa e sintaxe Estrutura e sintaxe de uma unit Referência a units e a cláusula

11

O bloco O bloco contém declarações e comandos que são executados quando o programa for executado.Muitas vezes o bloco consiste de um comando composto, delimitado pelas palavras reservadas begin e end, cujos comandos componentes são chamadas a métodos do objeto Application do project.O bloco pode conter declarações de constantes, tipos, variáveis, procedimentos e funções.Estas declarações devem preceder os comandos do bloco.

Page 12: 1 Object Pascal e Delphi Programas e Units. 2 Sumário Estrutura de um programa e sintaxe Estrutura e sintaxe de uma unit Referência a units e a cláusula

12

Estrutura e sintaxe de uma unit

IntroduçãoO cabeçalho da unitA seção interfaceA seção implementationA seção initializationA seção finalization

Page 13: 1 Object Pascal e Delphi Programas e Units. 2 Sumário Estrutura de um programa e sintaxe Estrutura e sintaxe de uma unit Referência a units e a cláusula

13

Introdução

Uma unit consiste de tipos (incluindo classes), constantes, variáveis e rotinas (funções e procedimentos). Cada unit é definida em seu arquivo .pas. Um arquivo de unit tem a seguinte composiçãoCabeçalho de unitSeção de interfaceSeção de implementatiionSeção de initialization (opcional)Seção de finalization (opcional)

A unit termina com a palavra reservada end seguida por um ponto

Page 14: 1 Object Pascal e Delphi Programas e Units. 2 Sumário Estrutura de um programa e sintaxe Estrutura e sintaxe de uma unit Referência a units e a cláusula

14

Exemplo de unit

unit Unit1; interface uses { Aqui fica a lista de units } { Aqui fica a seção interface } implementation uses { Aqui fica a lista de units } { Aqui fica a seção Implementation } initialization { Aqui fica a seção Initialization } finalization { Aqui fica a seção Finalization } end.

Page 15: 1 Object Pascal e Delphi Programas e Units. 2 Sumário Estrutura de um programa e sintaxe Estrutura e sintaxe de uma unit Referência a units e a cláusula

15

O cabeçalho da unit O cabeçalho de uma unit consiste de

Palavra reservada unitIdentificador igual ao nome do arquivo aonde está armazenada a unitSeparador ponto e vírgula 

A unit alfa estará armazenada no arquivo alfa.pas e, depois de compilada, o resultado será armazenado no arquivo alfa.dcu.Os nomes de units devem ser únicos em um mesmo project.Mesmo que armazenadas em diretórios distintos os nomes não podem se repetir.

Page 16: 1 Object Pascal e Delphi Programas e Units. 2 Sumário Estrutura de um programa e sintaxe Estrutura e sintaxe de uma unit Referência a units e a cláusula

16

A seção interface

A seção interface inicia após a palavra reservada interface e vai até o início da seção implementation.A seção interface declara constantes, tipos, variáveis, procedimentos e funções que estão disponíveis para os clientes, isto é, outras units que usam a unit na qual foram feitas as declarações.Estas entidades são chamadas de públicas.

Page 17: 1 Object Pascal e Delphi Programas e Units. 2 Sumário Estrutura de um programa e sintaxe Estrutura e sintaxe de uma unit Referência a units e a cláusula

17

A seção interface (cont.)A declaração de um procedimento ou função inclui apenas o cabeçalho da rotina.O bloco do procedimento ou função aparecerá na seção implementation.Tudo se passa como se ocorresse uma declaração forward.A declaração de uma classe na seção interface deve incluir declarações de todos os membros da classe.A seção interface pode ter sua própria cláusula uses, imediatamente após a palavra reservada interface.

Page 18: 1 Object Pascal e Delphi Programas e Units. 2 Sumário Estrutura de um programa e sintaxe Estrutura e sintaxe de uma unit Referência a units e a cláusula

18

A seção implementation A seção implementation inicia com a palavra reservada implementation e vai até o início da seção initialization, se esta existir.Caso contrário vai até o final da unit.Esta seção define os procedimentos e funções declarados na seção interface.Estas funções e procedimentos podem ser definidos em qualquer ordem.A lista de parâmetros dos cabeçalhos de funções e procedimentos públicos pode ser omitida.

Page 19: 1 Object Pascal e Delphi Programas e Units. 2 Sumário Estrutura de um programa e sintaxe Estrutura e sintaxe de uma unit Referência a units e a cláusula

19

A seção implementation (cont.)

A seção implementation, além da definição de rotinas, pode declarar constantes, tipos (incluindo classes), variáveis, procedimentos e funções provadas da unit, sendo inacessíveis aos clientes.A seção initialization pode ter sua própria cláusula uses, imediatamente após a palavra reservada initialization.

Page 20: 1 Object Pascal e Delphi Programas e Units. 2 Sumário Estrutura de um programa e sintaxe Estrutura e sintaxe de uma unit Referência a units e a cláusula

20

A seção initialization

A seção initialization (opcional) inicia com a palavra reservada initialization e vai até o início da seção finalization, se esta existir.Caso contrário vai até o final da unit.Esta seção contém comandos que são executados no início do programa.A ordem de execução das seções initialization das diversas units do programa é dada pela ordem em que as units aparecem na cláusula uses do cliente.

Page 21: 1 Object Pascal e Delphi Programas e Units. 2 Sumário Estrutura de um programa e sintaxe Estrutura e sintaxe de uma unit Referência a units e a cláusula

21

A seção finalization

A seção finalization é opcional e só pode surgir nas units que possuam cláusula initialization.Ela inicia após a palavra reservada finalization e vai até o final da unit, contendo comandos que são executados quando o programa principal termina. Normalmente é executada para liberar recursos alocados na seção initialization.Quando houver mais de uma seção finalization elas são executadas em ordem inversa à ordem de execução da seção initialization.Se a aplicação inicializa as units A, B e C, nessa ordem, ela vai finaliza-las na ordem C, B e A.

Page 22: 1 Object Pascal e Delphi Programas e Units. 2 Sumário Estrutura de um programa e sintaxe Estrutura e sintaxe de uma unit Referência a units e a cláusula

22

Referência a units e a cláusula uses

Introdução

A sintaxe da cláusula usesReferências múltiplas e indiretas

Referência circular entre units

Page 23: 1 Object Pascal e Delphi Programas e Units. 2 Sumário Estrutura de um programa e sintaxe Estrutura e sintaxe de uma unit Referência a units e a cláusula

23

Introdução

A cláusula uses contém a lista das units usadas pelo programa, biblioteca ou unit na qual a cláusula aparece. Uma cláusula uses pode ocorrer em O arquivo project para um programa ou biblioteca Seção interface de uma unit Seção implementation de uma unit

 A unit System é usada automaticamente por todas as aplicações Delphi e não pode ser listada explicitamente em uma cláusula uses. Na maioria das vezes Delphi coloca todas as units necessárias na cláusula uses quando gera e mantém o arquivo fonte.

Page 24: 1 Object Pascal e Delphi Programas e Units. 2 Sumário Estrutura de um programa e sintaxe Estrutura e sintaxe de uma unit Referência a units e a cláusula

24

A sintaxe da cláusula uses

A cláusula uses consiste na palavra reservada uses seguida de um ou mais nomes de units, separados por vírgulas e terminada por um ponto e virgula.

 Exemplosuses Forms, Main; uses Windows, Messages, SysUtils,

Strings, Classes, Unit2, MyUnit;

Page 25: 1 Object Pascal e Delphi Programas e Units. 2 Sumário Estrutura de um programa e sintaxe Estrutura e sintaxe de uma unit Referência a units e a cláusula

25

A sintaxe da cláusula uses (cont.)Na cláusula uses de um programa ou biblioteca qualquer nome de unit pode ser seguido da palavra reservada in e o nome de um arquivo fonte com ou sem o caminho do diretório, envolvido em aspas simples. Os diretórios podem ser absolutos ou relativos. Exemplos:

uses Windows, Messages, SysUtils, Strings in 'C:\Classes\Strings.pas', Classes;

  uses Forms, Main, Extra in '..\EXTRA\EXTRA.PAS';

Page 26: 1 Object Pascal e Delphi Programas e Units. 2 Sumário Estrutura de um programa e sintaxe Estrutura e sintaxe de uma unit Referência a units e a cláusula

26

A sintaxe da cláusula uses (cont.)A IDE Delphi espera encontrar nomes de units coincidindo com nomes de arquivos fonte no diretório no qual residam. Usa-se in quando não houver clareza, como O arquivo fonte está em um diretório diferente do

arquivo project e o esse diretório (do fonte) não está no caminho de busca do compilador ou no caminho de busca da Biblioteca Delphi

Diferentes diretórios no caminho de busca possuem units com o mesmo nome

Uma aplicação tipo console está sendo compilada pela linha de comando e foi nomeada uma unit com um identificador que não coincide com o nome de seu arquivo fonte

Page 27: 1 Object Pascal e Delphi Programas e Units. 2 Sumário Estrutura de um programa e sintaxe Estrutura e sintaxe de uma unit Referência a units e a cláusula

27

A sintaxe da cláusula uses (cont.)

No caso da cláusula uses ser usada em uma unit não se pode indicar aonde procurar o arquivo fonte.Todas as units referenciadas devem estar no caminho de busca do compilador, ou no caminho de busca das bibliotecas Delphi, ou no mesmo diretório corrente.

Page 28: 1 Object Pascal e Delphi Programas e Units. 2 Sumário Estrutura de um programa e sintaxe Estrutura e sintaxe de uma unit Referência a units e a cláusula

28

Referências múltiplas e indiretas

A ordem em que as units aparecem na cláusula uses determina a ordem de sua inicialização e afeta o modo pelo qual os identificadores são localizados pelo compilador.Se duas units declaram uma variável, constante, tipo, procedimento ou função com o mesmo nome, o compilador usa aquele da unit listada em último lugar na cláusula uses (para acessar o identificador da outra unit deve-se adicionar um qualificador: NomeDaUnit.Identificador.Uma cláusula uses deve incluir apenas units usadas diretamente pelo programa ou unit na qual a cláusula aparece.Assim se a unit A referencia variável, constante, tipo, procedimento ou função declaradas na unit B, então A deve explicitamente ter a cláusula uses para B.Se, por sua vez, a unit B referenciar identificadores a unit C, então a unit A é indiretamente dependente da unit C mas não necessita incluir a unit C na cláusula uses pois o compilador faz isto automaticamente.

Page 29: 1 Object Pascal e Delphi Programas e Units. 2 Sumário Estrutura de um programa e sintaxe Estrutura e sintaxe de uma unit Referência a units e a cláusula

29

Referências múltiplas e indiretas (cont.)

program Prog;uses Unit2;const a = b;... unit Unit2;interfaceuses Unit1;const b = c;... unit Unit1;interfaceconst c = 1;...

Neste exemplo Prog depende diretamente de Unit2 que depende diretamente de Unit1. Como Unit1 não aparece na cláusula uses de Prog, os identificadores declarados em Unit1 não são acessíveis a Prog.

Page 30: 1 Object Pascal e Delphi Programas e Units. 2 Sumário Estrutura de um programa e sintaxe Estrutura e sintaxe de uma unit Referência a units e a cláusula

30

Referências múltiplas e indiretas (cont.)Para compilar um módulo cliente o compilador necessita localizar todas as units de que o cliente dependa, direta ou indiretamente.A menos que o código fonte dessas units tenha sido modificado o compilador se contenta apenas com os arquivos .dcu, não necessitando dos arquivos .pas.Quando são feitas modificações na seção interface de uma unit, outras units que dependam dela precisam ser recompiladas.Todavia quando as modificações são feitas na seção de implementação ou outras seções da unit, as units dependentes não precisam ser recompiladas.

Page 31: 1 Object Pascal e Delphi Programas e Units. 2 Sumário Estrutura de um programa e sintaxe Estrutura e sintaxe de uma unit Referência a units e a cláusula

31

Referência circular entre units

Quando units referenciam uma a outra direta ou indiretamente, diz-se que as units são mutuamente dependentes.São permitidas dependências mutuas desde que não haja caminhos circulares conectando a cláusula uses de uma seção interface à clausula uses de outra.Partindo da seção interface de uma unit não deve ser possível retornar a essa unit seguindo as referencias através das seções interface de outras units.

Page 32: 1 Object Pascal e Delphi Programas e Units. 2 Sumário Estrutura de um programa e sintaxe Estrutura e sintaxe de uma unit Referência a units e a cláusula

32

Referência circular entre units (cont.)Para que um padrão de dependências mútuas seja válido cada caminho de referencia circular deve passar através da cláusula uses de, pelo menos, uma seção implementation.No caso mais simples de duas units mutuamente dependentes isto significa que as units não podem listar-se mutuamente na cláusula uses de suas seções interface.O exemplo a seguir leva a uma condição de erro.

Page 33: 1 Object Pascal e Delphi Programas e Units. 2 Sumário Estrutura de um programa e sintaxe Estrutura e sintaxe de uma unit Referência a units e a cláusula

33

Referência circular entre units (cont.)

unit Unit1;interfaceuses Unit2;...  unit Unit2;interfaceuses Unit1;

Contudo, as duas units podem referenciar uma a outra se uma das referencias for movida para a seção implementation.

Page 34: 1 Object Pascal e Delphi Programas e Units. 2 Sumário Estrutura de um programa e sintaxe Estrutura e sintaxe de uma unit Referência a units e a cláusula

34

Referência circular entre units (cont.)

unit Unit1;interfaceuses Unit2;...  unit Unit2;interfaceuses Unit1;

unit Unit1;interfaceuses Unit2;... unit Unit2;interface...implementationuses Unit1;...

Page 35: 1 Object Pascal e Delphi Programas e Units. 2 Sumário Estrutura de um programa e sintaxe Estrutura e sintaxe de uma unit Referência a units e a cláusula

35

Referência circular entre units (cont.)

Para reduzir a probabilidade de referências circulares é boa idéia listar as units na cláusula uses da seção implementation sempre que possível.Apenas quando os identificadores de outra unit forem usados na seção interface será necessário listar aquela unit na cláusula uses da seção interface.