Professional Documents
Culture Documents
2
Classificações e Aplicações da Linguagem
À estrutura de tipos: Uma das grandes características do Object Pascal é que ele é
fortemente tipado, ou typesafe. Isto significa que variáveis atuais passadas para
procedimentos ou funções devem ser do mesmo tipo que o parâmetro formal identificado
na definição do procedimento ou função.
1. Identificadores
3
● Identificadores devem começar sempre com letras, ou com o caractere de
sublinhado (_). Um identificador não pode começar com um número. Os outros
caracteres de um identificador (do segundo em diante) podem ser letras, números
ou sublinhados. Nenhum outro caractere é permitido.
● Um identificador não pode ser uma palavra reservada da linguagem Object Pascal.
2. Palavras Reservadas
Palavra-chave Papel
absolute diretiva (variáveis)
abstract diretiva (métodos)
and operador (booleano)
array tipo
as operador (RTTI)
asm instrução
assembler compatibilidade retroativa (asm)
at instrução (exceções)
automated especificador de acesso (classe)
begin marcador de bloco
case instrução
cdecl convenção de chamada de função
class tipo
const declaração ou diretiva (parâmetros)
constructor método especial
contains operador (conjunto)
default diretiva (propriedade)
destructor método especial
dispid especificador de interface
dispinterface tipo
div operador
do instrução
downto instrução (parte do for)
dynamic diretiva (método)
else instrução (parte do if ou case)
end marcador de bloco
except instrução (exceções)
export compatibilidade retroativa (classe)
exports declaração
external diretiva (funções)
far compatibilidade retroativa (classe)
file tipo
4
finalization estrutura de unidade
finally instrução (exceções)
for instrução
forward diretiva de função
function declaração
goto instrução
if instrução
implementation estrutura de unidade
implements diretiva (propriedade)
in operador (conjunto) - estrutura de projeto
index diretiva (interface)
inherited instrução
initialization estrutura de unidade
inline compatibilidade retroativa (ver asm)
interface tipo
is operador (RTTI)
label declaração
library estrutura de programa
message diretiva (método)
mod operador (matemático)
name diretiva (função)
near compatibilidade retroativa (classe)
nil valor
nodefault diretiva (propriedade)
not operador (booleano)
object compatibilidade retroativa (classe)
of instrução (parte do case)
on instrução (exceções)
or operador (booleano)
out diretiva (parâmetros)
overload diretiva de função
override diretiva de função
package estrutura de programa (pacote)
packed diretiva (registro)
pascal convenção de chamada de função
private especificador de acesso (classe)
procedure declaração
program estrutura de programa
property declaração
protected especificador de acesso (classe)
public especificador de acesso (classe)
published especificador de acesso (classe)
raise instrução (exceções)
5
read especificador de propriedade
readonly especificador de interface
record tipo
register convenção de chamada de função
reintroduce diretiva de função
repeat instrução
requires estrutura de programa (pacote)
resident diretiva (funções)
resourcestring tipo
safecall convenção de chamada de função
set tipo
shl operador (matemático)
shr operador (matemático)
stdcall convenção de chamada de função
stored diretiva (propriedade)
string tipo
then instrução (parte do if)
threadvar declaração
to instrução (parte do for)
try instrução (exceções)
type declaração
unit estrutura de unidade
until instrução
uses estrutura de unidade
var declaração
virtual diretiva (método)
while instrução
with instrução
write especificador de propriedade
writeonly especificador de interface
xor operador (booleano)
3. Variáveis
No Object Pascal, toda variável tem que ser declarada antes de ser utilizada. A
declaração de uma variável define o nome e o tipo da variável. Declarações de variáveis
devem ser precedidas pela palavra-chave var. As declarações, junto com a palavra-chave
var constituem o chamado bloco var. Declarações devem ser agrupadas no início do
programa, ou no início de uma procedure ou function (antes da palavra-chave begin).
Variáveis de instância: uma variável de instância é uma variável cujo valor é específico
ao objeto e não à classe; em geral possui uma valor diferente em cada objeto membro da
classe.
Variáveis de classe: é uma variável cujo valor é comum a todos os objetos membros
da classe; mudar o valor de uma variável de classe em um objeto membro
6
automaticamente muda o valor para todos os objetos membros.
Constantes: constantes são usadas para armazenar valores que não podem (ou não
devem) ser alterados em um programa. Declarações de constantes devem ser precedidas
pela palavra-chave const. As declarações das constantes, junto com a palavra-chave const
constituem o chamado bloco const. Ao contrário das variáveis, as constantes devem ter
seus valores definidos logo na declaração. Além disso, os tipos das constantes não são
definidos explicitamente. Eles são deduzidos pelo Delphi, de acordo com o valor definido
para cada constante.
O tipo declarado para uma variável define o conjunto de valores permitidos para
aquela variável. Há uma grande quantidade de tipos disponíveis em Object Pascal. Os
tipos permitem a detecção antecipada de erros em tempo de compilação, ajudam a
documentar os programas e são úteis na otimização do código gerado.
7
Reais: são caracterizados como tipos reais, os dados numéricos positivos, negativos e
números fracionários.
Char: representa um único caracter, escrito entre apóstrofos ('). A maioria dos
computadores utilizam a tabela de códigos ASCII para representar todos os caracteres
disponíveis.
Boolean: são caracterizados como tipos boleanos os dados com valores TRUE
(verdadeiro) e FALSE (falso), sendo que este tipo de dado poderá representar apenas um
dos dois valores.
8
Tipo Tamanho Máximo Memória Requerida Usado para
em caracter
Compatibilidade com
ShortString 255 2 até 256 bytes
versões anteriores
Caracteres 8-bit
AnsiString = String =
~2^31 4 bytes até 2GB (ANSI), DBCS ANSI,
String Longa
MBCS ANSI,etc
Caracteres Unicode,
servidores
WideString ~2^30 4 bytes até 2GB multiusários
e aplicações
multi-linguagens
Registro: tipo de variável que armazena informações de tipos de dados diferentes numa
única estrutura. Um registro é composto por elementos de dados ou por outras estruturas
que não sejam necessariamente do mesmo tipo. Cada elemento de um registro é
conhecido como campo.
Tipos de Intervalo (Subrange): são seqüências de valores dos tipos Boolean, Char,
Integer, ou de tipos enumerados. Tipos de intervalo são úteis quando é necessário limitar
uma variável a um intervalo contínuo de valores, como de 1 a 100, ou de "A" a "Z".
9
Ponteiros: armazenam endereços de memória, mas raramente o programador vai
precisar usá-los como tal. Para definir uma variável como sendo um ponteiro, basta
declará-la com o tipo pointer. Para definir um ponteiro específico para uma estrutura de
dados, use o símbolo ^ antes do tipo da variável.
Função Descrição
Copy(S:string; Indice,Comp: Integer): string A função Copy retorna um string contendo
Comp caracteres, começando com S[Indice].
Delete(var S: string; Indice, Comp: Integer) A procedure Delete remove o substring com
Comp caracteres do string S, começando
com S[Index]. O string resultante é
retornado na variável S.
Length(S: string): Integer A função Length retorna o número de
caracteres no string S.
Trim(S: string): string A função Trim remove espaços à esquerda e
à direita do string S.
5. Expressões e Operadores
10
Operador Operação Operandos Resultado
+ Adição Inteiro, Real Inteiro, Real
- Subtração Inteiro, Real Inteiro, Real
* Multiplicação Inteiro, Real Inteiro, Real
/ Divisão Real Inteiro, Real Real
DIV Divisão Inteira Inteiro Inteiro
MOD Resto da Divisão Inteiro Inteiro
Operador Operação
= igual
> maior
< menor
<> diferente
Operador Operação
not não (negação)
and e (conjunção)
or ou (disjunção)
xor ou exclusivo
shl deslocamento à esquerda
shr deslocamento à direita
Operador de atribuição: para atribuir um valor a uma variável, use o operador :=.
Operador Operação
:= atribui um valor a uma variável
Operadores de incremento e decremento: são operadores que atuam sobre uma única
variável numérica, aumentando ou diminuindo o seu valor de uma unidade.
11
6. Estruturas de controle
Comandos de Condição
if ... then/ if ... then ... else -» Este comando condicional é utilizado quando precisamos
avaliar uma determinada condição. Se esta for verdadeira, executaremos determinado
comando. Pode-se executar vários comandos sujeitos a uma condição, colocando-os num
bloco. Pode-se executar certos comandos caso uma condição seja satisfeita, e outros
comandos caso contrário.
if <expressão> then
begin
<bloco de comandos1>;
end
else
begin
<bloco de comandos2>;
end;
case <expressão> of
<sequencias de constantes 1>: <comando 1>;
<sequencias de constantes 2>: <comando 2>;
else
<comando 3>;
end;
Comandos de Repetição
12
while ... do -» Para repetir um conjunto de instruções enquanto determinada condição for
satisfeita:
while <expressão> do
begin
<comando 1>;
<comando 2>;
<comando n>;
end;
while <expressão> do
begin
<comando 1>;
<comando 2>;
break;
end;
repeat ... until -» Para se executar um grupo de comandos repetidas vezes, até
determinada condição ser satisfeita. A diferença é que a <condição> é testada após a
execução do bloco de instruções. Portanto, este bloco é executado no mínimo uma vez:
repeat
begin
<comando 1>;
<comando 2>;
<comando n>;
end;
until <condição>;
repeat
begin
<comando1>;
break;
end;
until <condição>;
13
while <expressão> do
begin
...
continue;
...
<o comando continue desvia pra cá>
end;
repeat
begin
...
continue;
...
<o comando continue desvia pra cá>
end;
until <condição>;
Desvios Incondicionais
goto -» Este comando desvia o código para um determinado rótulo, onde rótulo é um
rótulo numérico definido na cláusula label da procedure:
goto <rótulo>
...
procedure MinhaProcedure;
label
210;
exit -» Através deste comando você pode sair de um bloco de comandos limitado por
begin...end, evitando que as demais linhas após o comando exit sejam avaliadas:
if <expressão> then
exit;
...
if <expressão> then
halt; {Se a condicão for satisfeita, o programa terminará aqui.}
...
7. Abstração Funcional
program <nome_do_programa>;
uses
<units_usadas_pelo_programa>;
begin
...
end.
14
Após o cabeçalho do programa, segue a seção uses. Nesta seção são declaradas os
nomes das units usadas pelo programa. Uma unit é um conjunto de procedimentos e
funções que realizam determinada operação, e será vista com mais detalhes a seguir.
Definição de Classes
Em Object Pascal, classes são definidas através do conceito de Unit. Units são os
módulos individuais do código fonte que constituem um programa Object Pascal. Uma unit
é um local para agrupar funções e procedimentos que podem ser chamados do programa
principal. Para ser uma unit, um módulo fonte deve consistir ao menos de três partes:
uma instrução unit, a parte chamada interface e uma parte chamada implementation.
Opcionalmente, pode-se ter uma parte chamada initialization e uma chamada finalization.
Quando representamos uma classe utilizando uma unit, na seção Interface deve ser
declarada a classe, ou seja, o nome da classe juntamente com os atributos que terão suas
instâncias e quais métodos poderão ser executados. Na seção Implementation devem ser
especificadas, para cada um dos métodos, quais as instruções a serem executadas pelo
computador, quando um objeto da classe for solicitado a executar o serviço implementado
pelo respectivo método. Abaixo, a estrutura de uma Unit:
Unit <identificador>;
Interface
{Especifica o que será exportado pela UNIT a fim de ser utilizados por
outros módulos}
<seções de declaração>
Implementation
{Declaração de Variáveis, Constante e tipos locais a UNIT e Implementação
dos métodos.
<definições>
[Initialization
{Código executado automaticamente quando um aplicativo que utiliza a UNIT
é executado}
<instruções>]
[Finalization
{Código executado automaticamente quando um aplicativo que utiliza a UNIT
é finalizado}
<instruções>]
end.
Instrução Unit -» Toda unit deve ter como sua primeira linha uma instrução dizendo que
é uma unit e identificando o nome da unit. O nome da unit sempre deve ser o mesmo
nome do arquivo.
15
Interface -» Depois da instrução unit, uma próxima linha funcional da unit do código
deve ser a instrução Interface. Tudo que seguir esta instrução, até a instrução
Implementation, é informação que pode ser compartilhada com seu programa e com
outras units. A parte de interface de uma unit é onde você declara tipos, constantes,
variáveis, procedimentos e funções que você quer tornar disponível para seu programa
principal e para outras units. Apenas declarações — nunca corpos de procedimentos —
podem aparecer na interface.
Inicialization -» Esta porção da unit, que é localizada próxima do fim do arquivo, contém
qualquer código de inicialização para a unit. Este código será executado antes que o
programa principal comece a executar, e executará apenas uma vez.
Finalization -» Esta porção da unit, que é localizada entre a Initialization e end. da unit,
contém qualquer código de limpeza que será executado quando o programa termina.
Cláusula uses -» A cláusula uses é onde são listadas as units que você quer incluir em
um programa ou unit particular. Units podem ter duas cláusulas uses: uma na seção
interface e outra na seção implementation.
Definição de Métodos
16
que isto funcione corretamente, o método na classe genérica deverá ser dinâmico.
Métodos dinâmicos são definidos com a palavra reservada dynamic, logo após a
declaração completa do método.
Métodos Abstratos -» São métodos cuja implementação será feita apenas através dos
herdeiros da classe. Utiliza-se em conjunto com métodos virtuais ou dinâmicos. Pode ser
necessário criar um método tão genérico em uma classe, que ele sequer possui
implementação, sequer possui um código. Para não criar um método que simplesmente
possui um begin seguido de um end, declara-se o método como abstrato e dispensa-se a
necessidade de implementação. Métodos abstratos são definidos com a palavra reservada
abstract, logo após a declaração dynamic ou virtual.
Definição de Atributos
Interface
Podemos passar parâmetros para uma função ou um procedimento por valor e por
referência. Quando se passa um parâmetro por valor, estamos realmente passando um
valor ou a cópia de um valor armazendo numa variável. Quando a passagem se faz por
referência, estamos passando o endereço da variável na memória e não o seu valor.
Quando se altera, dentro da função, o valor de uma variável passada por por referência,
esta alteração surte efeito em todo o programa (fora da função). Para passarmos um
17
parâmetro por referência devemos precedê-lo da palavra reservada var.
Especificadores de Visibilidade
8. Concorrência
9. Exceções
O Object Pascal contém exceções predefinidas para condições de erro comuns, tais
como falta de memória, divisão por zero, overflow e underflow numérico e erros de E/S de
arquivos. Também permite que você defina suas próprias classes de exceções da forma
que achar conveniente em suas aplicações. As exceções podem ser tratadas através das
instruções try...except e try... finally. A instrução raise é usada para gerar uma exceção.
O bloco try ... except é utilizado para definir um código de programa a ser
executado no momento que ocorrer uma exceção.
try
{Bloco de comandos}
except
{Bloco de comandos a ser executado quando ocorrer uma exceção}
end;
on
{Tipo de exceção}
do
{Bloco de comandos da exceção}
18
O bloco try...finally permite que um bloco de comandos seja executado, mesmo
quando houver uma exceção.
try
{Bloco de comandos}
finally
{Bloco de comandos a ser executado mesmo quando ocorrer uma exceção}
end;
...
raise Exception.Create(<mensagem>);
...
1. Correção e confiabilidade
Tipagem forte: Object Pascal possui tipagem forte e estática. Todas a variáveis devem
ter um tipo definido e devem ser declaradas antes de serem utilizadas. Tem tipagem
estática porque o tipo é fixo e escolhido pelo programador.
A verificação dos tipos de expressões durante a compilação torna a linguagem mais
confiável, pois não ocorrerá este tipo de erro durante a execução do programa. Object
Pascal faz a verificação dos tipos das variáveis envolvidas nas atribuições de valores em
tempo de compilação, o que torna o programa executável muito mais confiável.
19
1.2. Características negativas de uma linguagem
goto: embora o Object Pascal permita o uso desta instrução, é altamente recomendável
que ela não seja usada no código-fonte, pois programas que usam esta instrução são
difíceis de ler e de se manter. O Object Pascal fornece maneiras mais estruturadas de
controlar o fluxo da execução do código de um programa, não havendo necessidade
alguma de usar esta instrução.
2. Eficiência
Compilação e Execução
3. Portabilidade
Programas escritos em Object Pascal não eram portáveis para plataformas não
Windows até 1999/2000. Nesta época, surgiu o projeto Kylix e, com ele, uma nova
biblioteca chamada CLX, disponível para Linux, Windows, diversos tipo de Unixes, Mac e
também uma versão disponível para Palm. Com este enfoque, a linguagem ganhou muito
no aspecto portabilidade.
4. Extensibilidade
Polimorfismo: habilidade pela qual uma única operação pode ser definida em mais de
uma classe e assumir implementações diferentes em cada uma dessas classes. Assim,
com o polimorfismo, é possível projetar e implementar sistemas que são mais facilmente
extensíveis.
20
uma das classes para substituir um método de mesmo nome em um ancestral da classe.
Neste caso, om objetivo não é cancelar o método da classe pai, mas sim obscurecer e
suplantar completamente o método da classe pai. Ao simplesmente adicionar o método e
compilar, o compilador produzirá um alerta explicando que o novo método oculta um
método de mesmo nome em uma classe base. Para anular este erro, basta usar a diretiva
reintroduce sobre o método na classe pai.
5. Boa definição
Legibilidade
Simplicidade Global: a simplicidade global trata do uso dos termos da linguagem em si.
Por exemplo, o grande número de componentes básicos em uma linguagem pode
atrapalhar na legibilidade se, quem esiver lendo, não conhecer os componentes que estão
sendo utilizados em determinadas partes do programa. Como a linguagem é orientada a
objeto, fatores como polimorfismo e encapsulamento contribuem neste sentido.
Por outro lado, Object Pascal possui vários componentes básicos, o que pode
dificultar a leitura do programa fonte, aumentando o tempo de entendimento do código.
Também é permitida a sobrecarga de métodos, assim, os métodos ficam mais difíceis de
serem lidos e interpretados.
Ortogonalidade: Object Pascal é flexível o suficiente para que seja escrita de forma
bastante simples qualquer instrução. É uma linguagem altamente ortogonal. Existem
poucas exceções quanto a sua escrita. Uma delas é a instrução repeat, onde o par
begin/end para formar grupos de instruções pode ser omitido.
21
há alguns comandos similares à estrutura goto, que podem causar má interpretação do
código (o uso de break, por exemplo).
Tipos de Dados e Estruturas: Object Pascal possui tipos de dados que podem ajudar
bastante no entendimento do programa, por conseguirem representar uma idéia melhor, e
mais perto do mundo real, do que está sendo abstraído. Object Pascal trabalha com
objetos, evitando o uso de estrutura de dados diretamente, substituindo sua finalidade,
encapsulando também os tipos primitivos de dados.
Sintaxe: a sintaxe de Object Pascal em sua totalidade é bastante complexa, porque tenta
abranger o maior número de possibilidades de implementação e compatibilidade entre
hardware e software. Para implementação usando os recursos mais conhecidos, não há
muita dificuldade no aprendizado. A linguagem permite utilizar um tamanho grande de
caracteres nos nomes das suas declarações, podendo o programador dar nomes coerentes
às suas variáveis, tornando o projeto mais fácil de ser lido. O fato da linguagem usar um
único tipo de comando para definir o início e o final de blocos (begin/end) faz com que o
código tenha uma menor legibilidade. Linguagens que utilizam limitadores diferentes, tais
como: If/Endif, Do/Enddo, etc., são mais legíveis.
6. Capacidade de Escrita
Corresponde a quão facilmente uma linguagem pode ser usada para criar
programas para um domínio de problemas escolhido. A maioria das características que
afetam a legibilidade também afetam a capacidade de escrita.
7. Custo
22
● Custo para compilar os programas: Object Pascal não exige um custo muito alto
das máquinas atuais para compilar os programas.
● Custo para executar os programas: a execução é muito rápida.
● Custo de manutenção dos programas: fortemente vinculado à legibilidade, pois
geralmente não é feita por quem escreveu os programas.
8. Ambiente de programação
Conclusão
23
Bibliografia
CANTÚ, Marco. Pascal Essencial. Traduzido por Odilon Nelson. Disponível em:
<http://www.geocities.com/odin_wan_kenobi/pascal_essencial/ch01hist.htm>. Acesso
em: 21/04/2008.
24