Você está na página 1de 35

Object Pascal e Delphi

Programas e Units

Sumrio
Estrutura de um programa e sintaxe Estrutura e sintaxe de uma unit Referncia a units e a clusula uses

Estrutura de um programa e sintaxe


Introduo O cabealho do programa A clusula uses do programa O bloco

Introduo
Um programa em Object Pascal constitudo de mdulos de cdigo fonte chamados units. Cada unit armazenada em seu prprio arquivo e compilada separadamente. As unidades compiladas (arquivos .dcu) so ligadas para criar uma aplicao. Units permitem

Dividir grandes programas em mdulos que podem ser editados separadamente Criar bibliotecas que possam ser compartilhadas por diversos programas Distribuir bibliotecas para outros programadores sem tornar disponvel o cdigo fonte

Introduo (cont.)
No Pascal tradicional todo o cdigo fonte, incluindo o programa principal armazenado em arquivos .pas. Delphi usa um arquivo Project (.dpr) para armazenar o programa principal enquanto a maioria do cdigo reside em arquivos unit (.pas). Cada aplicao (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.
5

Programas e Units
Um programa contm Um cabealho de programa Uma clausula uses (opcional) Um bloco de declaraes e comandos O cabealho do programa especifica o nome do programa. A clusula uses contm a lista das units usadas pelo programa. O bloco contm declaraes e comandos que so 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.
6

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 begin 11 Application.Title := 'Text Editor'; 12

Linha 1 3a6 8

Contedo Cabealho do Programa Clusula uses Diretiva de compilao ligando o arquivo de recursos do projeto ao programa 10 a Bloco de comandos a serem executados quando o programa rodar 14

Application.CreateForm(TMainForm , MainForm); 13 Application.Run; 14 end.


7

Programas e Units (cont.)


Este arquivo project bem tpico da linguagem pois eles so usualmente bem pequenos j que a lgica fica nos arquivos das units. Os arquivos project so gerados e mantidos pelo Delphi sendo raro que se necessite edita-los manualmente.

O cabealho do programa
O cabealho de um programa consiste de Palavra reservada program Identificador igual ao nome do project Separador ponto e vrgula
No Pascal tradicional existiam parmetros entre o identificador e o ponto e vrgula, que, se existirem, sero ignorados pelo Delphi.
9

A clusula uses do programa


A clusula uses contm a lista das units usadas pelo programa. As units referenciadas, por sua vez, podem ter clusulas uses tambm.

10

O bloco
O bloco contm declaraes e comandos que so 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 so chamadas a mtodos do objeto Application do project. O bloco pode conter declaraes de constantes, tipos, variveis, procedimentos e funes. Estas declaraes devem preceder os comandos do bloco.

11

Estrutura e sintaxe de uma unit


Introduo O cabealho da unit A seo interface A seo implementation A seo initialization A seo finalization

12

Introduo
Uma unit consiste de tipos (incluindo classes), constantes, variveis e rotinas (funes e procedimentos). Cada unit definida em seu arquivo .pas. Um arquivo de unit tem a seguinte composio Cabealho de unit Seo de interface Seo de implementatiion Seo de initialization (opcional) Seo de finalization (opcional) A unit termina com a palavra reservada end seguida por um ponto
13

Exemplo de unit
unit Unit1; interface uses { Aqui fica a lista de units } { Aqui fica a seo interface } implementation uses { Aqui fica a lista de units } { Aqui fica a seo Implementation } initialization { Aqui fica a seo Initialization } finalization { Aqui fica a seo Finalization } end.
14

O cabealho da unit
O cabealho de uma unit consiste de Palavra reservada unit Identificador igual ao nome do arquivo aonde est armazenada a unit Separador ponto e vrgula 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 diretrios distintos os nomes no podem se repetir.
15

A seo interface
A seo interface inicia aps a palavra reservada interface e vai at o incio da seo implementation. A seo interface declara constantes, tipos, variveis, procedimentos e funes que esto disponveis para os clientes, isto , outras units que usam a unit na qual foram feitas as declaraes. Estas entidades so chamadas de pblicas.
16

A seo interface (cont.)


A declarao de um procedimento ou funo inclui apenas o cabealho da rotina. O bloco do procedimento ou funo aparecer na seo implementation. Tudo se passa como se ocorresse uma declarao forward. A declarao de uma classe na seo interface deve incluir declaraes de todos os membros da classe. A seo interface pode ter sua prpria clusula uses, imediatamente aps a palavra reservada interface. 17

A seo implementation
A seo implementation inicia com a palavra reservada implementation e vai at o incio da seo initialization, se esta existir. Caso contrrio vai at o final da unit. Esta seo define os procedimentos e funes declarados na seo interface. Estas funes e procedimentos podem ser definidos em qualquer ordem. A lista de parmetros dos cabealhos de funes e procedimentos pblicos pode ser omitida.
18

A seo implementation (cont.)


A seo implementation, alm da definio de rotinas, pode declarar constantes, tipos (incluindo classes), variveis, procedimentos e funes provadas da unit, sendo inacessveis aos clientes. A seo initialization pode ter sua prpria clusula uses, imediatamente aps a palavra reservada initialization.
19

A seo initialization
A seo initialization (opcional) inicia com a palavra reservada initialization e vai at o incio da seo finalization, se esta existir. Caso contrrio vai at o final da unit. Esta seo contm comandos que so executados no incio do programa. A ordem de execuo das sees initialization das diversas units do programa dada pela ordem em que as units aparecem na clusula uses do cliente.
20

A seo finalization
A seo finalization opcional e s pode surgir nas units que possuam clusula initialization. Ela inicia aps a palavra reservada finalization e vai at o final da unit, contendo comandos que so executados quando o programa principal termina. Normalmente executada para liberar recursos alocados na seo initialization. Quando houver mais de uma seo finalization elas so executadas em ordem inversa ordem de execuo da seo initialization. Se a aplicao inicializa as units A, B e C, nessa ordem, ela vai finaliza-las na ordem C, B e A.
21

Referncia a units e a clusula uses


Introduo A sintaxe da clusula uses Referncias mltiplas e indiretas Referncia circular entre units

22

Introduo
A clusula uses contm a lista das units usadas pelo programa, biblioteca ou unit na qual a clusula aparece. Uma clusula uses pode ocorrer em

O arquivo project para um programa ou biblioteca Seo interface de uma unit Seo implementation de uma unit

A unit System usada automaticamente por todas as aplicaes Delphi e no pode ser listada explicitamente em uma clusula uses. Na maioria das vezes Delphi coloca todas as units necessrias na clusula uses quando gera e mantm o arquivo fonte.

23

A sintaxe da clusula uses


A clusula uses consiste na palavra reservada uses seguida de um ou mais nomes de units, separados por vrgulas e terminada por um ponto e virgula.
Exemplos uses Forms, Main; uses Windows, Messages, SysUtils, Strings, Classes, Unit2, MyUnit;
24

A sintaxe da clusula uses (cont.)


Na clusula 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 diretrio, envolvido em aspas simples. Os diretrios 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';
25

A sintaxe da clusula uses (cont.)

A IDE Delphi espera encontrar nomes de units coincidindo com nomes de arquivos fonte no diretrio no qual residam. Usa-se in quando no houver clareza, como

O arquivo fonte est em um diretrio diferente do arquivo project e o esse diretrio (do fonte) no est no caminho de busca do compilador ou no caminho de busca da Biblioteca Delphi Diferentes diretrios no caminho de busca possuem units com o mesmo nome Uma aplicao tipo console est sendo compilada pela linha de comando e foi nomeada uma unit com um identificador que no coincide com o nome de seu arquivo fonte 26

A sintaxe da clusula uses (cont.)


No caso da clusula uses ser usada em uma unit no 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 diretrio corrente.
27

Referncias mltiplas e indiretas


A ordem em que as units aparecem na clusula uses determina a ordem de sua inicializao e afeta o modo pelo qual os identificadores so localizados pelo compilador. Se duas units declaram uma varivel, constante, tipo, procedimento ou funo com o mesmo nome, o compilador usa aquele da unit listada em ltimo lugar na clusula uses (para acessar o identificador da outra unit deve-se adicionar um qualificador: NomeDaUnit.Identificador. Uma clusula uses deve incluir apenas units usadas diretamente pelo programa ou unit na qual a clusula aparece. Assim se a unit A referencia varivel, constante, tipo, procedimento ou funo declaradas na unit B, ento A deve explicitamente ter a clusula uses para B. Se, por sua vez, a unit B referenciar identificadores a unit C, ento a unit A indiretamente dependente da unit C mas no necessita incluir a unit C na clusula uses pois o compilador faz isto automaticamente.

28

Referncias mltiplas e indiretas (cont.)


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

Neste exemplo Prog depende diretamente de Unit2 que depende diretamente de Unit1. Como Unit1 no aparece na clusula uses de Prog, os identificadores declarados em Unit1 no so acessveis a Prog.
29

Referncias mltiplas e indiretas (cont.)


Para compilar um mdulo cliente o compilador necessita localizar todas as units de que o cliente dependa, direta ou indiretamente. A menos que o cdigo fonte dessas units tenha sido modificado o compilador se contenta apenas com os arquivos .dcu, no necessitando dos arquivos .pas. Quando so feitas modificaes na seo interface de uma unit, outras units que dependam dela precisam ser recompiladas. Todavia quando as modificaes so feitas na seo de implementao ou outras sees da unit, as units dependentes no precisam ser recompiladas.
30

Referncia circular entre units


Quando units referenciam uma a outra direta ou indiretamente, diz-se que as units so mutuamente dependentes. So permitidas dependncias mutuas desde que no haja caminhos circulares conectando a clusula uses de uma seo interface clausula uses de outra. Partindo da seo interface de uma unit no deve ser possvel retornar a essa unit seguindo as referencias atravs das sees interface de outras units.
31

Referncia circular entre units (cont.)


Para que um padro de dependncias mtuas seja vlido cada caminho de referencia circular deve passar atravs da clusula uses de, pelo menos, uma seo implementation. No caso mais simples de duas units mutuamente dependentes isto significa que as units no podem listar-se mutuamente na clusula uses de suas sees interface. O exemplo a seguir leva a uma condio de erro.
32

Referncia circular entre units (cont.)


unit Unit1; interface uses Unit2; ... unit Unit2; interface uses Unit1; Contudo, as duas units podem referenciar uma a outra se uma das referencias for movida para a seo implementation.

33

Referncia circular entre units (cont.)


unit Unit1; interface uses Unit2; ... unit Unit2; interface uses Unit1;
unit Unit1; interface uses Unit2; ...
unit Unit2; interface ... implementation uses Unit1; ...
34

Referncia circular entre units (cont.)


Para reduzir a probabilidade de referncias circulares boa idia listar as units na clusula uses da seo implementation sempre que possvel. Apenas quando os identificadores de outra unit forem usados na seo interface ser necessrio listar aquela unit na clusula uses da seo interface.
35