ling object pascal

Download Ling Object Pascal

Post on 07-Jul-2015

2.012 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

1

CARACTERSTICAS E RECURSOS DA LINGUAGEM OBJECT PASCAL. AGOSTO/2002 COMENTRIOS NOVAS CARACTERSTICAS DE PROCEDIMENTOS E FUNES VARIVEIS CONSTANTES OPERADORES TIPOS DO OBJECT PASCAL TIPOS DEFINIDOS PELO USURIO TYPECASTING E CONVERSO DE TIPOS RESOURCES TESTANDO CONDIES LOOPS PROCEDIMENTOS E FUNES ESCOPO UNITS PACKAGES PROGRAMAO ORIENTADA A OBJETOS USANDO OS OBJETOS DO DELPHI TRATAMENTO ESTRUTURADO DE EXCEES RUNTIME TYPE INFORMATION

-------------------------------------------------------------------------------Para comear, voc receber uma introduo aos fundamentos da linguagem Object Pascal tal como regras da linguagem e construes. Mais tarde, voc aprender sobre alguns dos mais avanados aspectos de Object Pascal tais como classes e tratamento de excees. Por no ser um tutorial para iniciantes, assumimos que voc j tem alguma experincia com outra linguagem de programao de alto nvel tal como, C, C++ ou Visual Basic, e comparamos a estrutura da linguagem Object Pascal com essas outras linguagens. Ao terminar de ler este tutorial, voc entender como conceitos de programao tais como variveis, tipos, operadores, loops, casos, excees e objetos funcionam no Pascal. Comentrios Como ponto de partida, voc ver como fazer comentrios no seu cdigo Pascal. Object Pascal suporta trs tipos de comentrios: comentrios com chaves, comentrios com parnteses/asterisco; e comentrios com barras duplas no estilo do C++. Abaixo, exemplos dos trs tipos de comentrios: { Comment using curly braces } (* Comment using paren and asterisk *) // C++-style comment Os dois tipos de comentrios do Pascal so praticamente idnticos no comportamento. O compilador considera o comentrio como sendo tudo entre os delimitadores de abertura e fechamento de comentrios. Para comentrios no estilo do C++, tudo que segue as barras duplas at o fim da linha considerado um comentrio.

2

Novas Caractersticas de Procedimentos e Funes Parnteses Uma das pequenas caractersticas do Object Pascal que parnteses so opcionais quando chamamos um procedimento ou funo que no pega parmetros. Assim, os seguintes exemplos de sintaxe so ambos vlidos: Form1.Show; Form1.Show(); Esta no uma das coisas com as quais voc deve esquentar a cabea, mas particularmente bom para aqueles que dividem seu tempo entre Delphi e linguagens como C++ ou Java, em que parnteses so requeridos. Se voc no gasta 100% do seu tempo com Delphi, esta caracterstica significa que voc no tem que lembrar de usar diferentes sintaxes de chamada de funes para linguagens diferentes. Sobrecarga Delphi 4 introduz o conceito de sobrecarga de funo, isto , a capacidade de ter mltiplos procedimentos ou funes de mesmo nome com lista de parmetros diferentes. Todos os mtodos sobrecarregados no devem ser declarados com a diretiva overload como mostrado a seguir: procedure Ola(I: Integer); overload; procedure Ola(I: string); overload; procedure Ola(D: Double); overload; Note que as regras para sobrecarga de mtodos de uma classe so levemente diferentes e so explicados na seo Sobrecarga de Mtodos. Parmetros de Valor Default Tambm novo para Delphi 4 so os parmetros de valor default, isto , a habilidade de fornecer um valor default para uma funo ou procedimento e no ter que passar aquele parmetro quando chamar a rotina. Para declarar um procedimento ou funo que contm parmetros de valor default, siga o tipo do parmetro com um sinal de igual e o valor default como mostrado no exemplo seguinte: procedure TemValDef(S: string; I: Integer = 0); O procedimento TemValDef() pode ser chamado de uma das formas. Primeiro, voc pode chamar especificando os dois parmetros: TemValDef('ola', 26); Segundo, voc pode especificar apenas o parmetro S e usar o valor default para I: TemValDef('ola'); // valor default usado para I Voc deve seguir vrias regras quando usar parmetros de valor default:

3

Parmetro que tem valor default devem aparecer no fim da lista de parmetros. Parmetros sem valores default no podem seguir parmetros com valores default em uma lista de parmetros de uma funo ou procedimento. Parmetros de valor default devem ser de um tipo ordinal, ponteiro ou set. Parmetros de valor default devem ser passados por valor ou como constante. Eles no devem ser parmetros de referncia, out ou sem tipo. Um dos maiores benefcios dos parmetros de valor default adicionar funcionalidade a funes e procedimentos existentes sem sacrificar compatibilidades anteriores. Por exemplo, suponha que voc venda uma unidade que contenha uma funo revolucionria chamada AddInts() que some dois nmeros: function AddInts(I1, I2: Integer): Integer; begin Result := I1 + I2; end; Para fugir da concorrncia, voc sente que deve atualizar esta funo de forma que ela tenha a capacidade de somar trs nmeros. Contudo, voc est detestanto fazer isso porque adicionar um parmetro far com que cdigos existentes que chamam esta funo no compilem. Graas aos parmetros default, voc pode aumentar a funcionalidade de AddInts() sem comprometer a compatibilidade: function AddInts(I1, I2: Integer; I3: Integer = 0); begin Result := I1 + I2 + I3; end; Variveis Voc pode ter o costume de declarar variveis instintivamente: "Eu preciso de um outro inteiro, ento s declarar um bem aqui no meio deste bloco de cdigo". Se esta tem sido a sua prtica, voc vai ter que se retreinar um pouco para usar variveis em Object Pascal. Object Pascal requer que voc declare todas as variveis no incio de sua prpria seo antes de comear um procedimento, funo ou programa. Talvez voc escreva cdigos como este: void foo(void) { int x = 1; x++; int y = 2; float f; //... etc ... } Em Object Pascal, tal cdigo deve ser ajeitado e estruturado um pouco mais para se paracer com este: Procedure Foo; var x, y: Integer; f: Double; begin

4

x := 1; inc(x); y := 2; //... etc ... end; Note como Object Pascal permite a voc agrupar mais do que uma varivel do mesmo tipo juntamente na mesma linha com a seguinte sintaxe: Var1, Var2 : AlgumTipo; Lembre que quando voc est declarando uma varivel em Object Pascal, o nome da varivel precede o tipo, e h uma vrgula entre as variveis e tipos. Note que a inicializao da varivel sempre separada da declarao da varivel. Uma caracterstica da linguagem introduzida no Delphi 2.0 permite que voc inicialize variveis globais dentro de um bloco var. Exemplos demonstrando a sintaxe para fazer isso so mostrados a seguir: var i: Integer = 10; S: string = 'Ol mundo'; D: Double = 3.141579; Nota: Pr-inicializao de variveis apenas permitida para variveis globais e no para variveis locais a um procedimento ou funo. Dica: O compilador Delphi entende que todos os dados globais so automaticamente inicializados com zero. Quando sua aplicao iniciada, todo tipo inteiro possui 0, tipos ponto-flutuante possuem 0.0, ponteiros sero nil, strings estaro vazias, e assim em diante. Ento, no necessrio inicializar com zero, dados globais em seu cdigo fonte. Constantes Constantes em Pascal so definidas na clusula const, que comportam-se similarmente a palavra reservada const do C. Aqui est um exemplo de trs declaraes de constantes em C: const float ANumeroDecimal = 3.14; const int i = 10; const char * ErrorString = 'Perigo, Perigo, Perigo'; A maior diferena entre constantes do C e do Object Pascal que Object Pascal, assim como Visual Basic, no requer que voc declare o tipo constante junto com o valor na declarao. O compilador do Delphi automaticamente aloca espao apropriado para a constante baseado nos seus valores, ou, no caso de constantes escalares tais como Inteiros, o compilador fiscaliza os valores que ele manipula, e espaos nunca so alocados: const ADecimalNumber = 3.14; i = 10; ErrorString = 'Danger, Danger, Danger!';

5

Nota: Espao alocado para constantes como segue: Valores Inteiros so ajustados dentro do menor tipo alocvel (10 dentro de um ShortInt, 32000 dentro de um SmallInt, e assim em diante). Valores alfanumricos so colocados em char ou no tipo string definido atualmente (por $H). Valores de ponto-flutuante so mapeados para o tipo de dado extendido, a menos que o valor contenha 4 ou menos casas decimais explicidamente, neste caso ele mapeado para um tipo Comp. Conjuntos de inteiros e char so claramente armazenados neles mesmos. Opcionalmente, voc pode tambm especificar um tipo de constante na declarao. Isto fornece a voc controle sobre como o compilador trata suas constantes: const ADecimalNumber: Double = 3.14; I: Integer = 10; ErrorString: string = 'Danger, Danger, Danger!'; Object Pascal permite o uso de funes em tempo de compilao em declaraes const e var. Essas rotinas incluem: Ord(), Chr(), Trunc(), Round(), High(), Low(), e SizeOf(). Por exemplo, todos os cdigos seguintes so vlidos: type A = array[1..2] of Integer; const w: Word = SizeOf(Byte); var i: Integer = 8; j: SmallInt = Ord(a); L: Longint = Trunc(3.14159); x: ShortInt = Round(2.71828); B1: Byte = High(A); B2: Byte = Low(A); C: char = Chr(46); Cuidado: O comportamento das constantes de tipo especificado do Delphi 32-bit diferente daquele no Delphi 1.0 16-bit. No Delphi 1.0, o identificador declarado no era tratado como uma constante mas como uma varivel pr-inicializada chamada de typed constant . Contudo, a partir do Delphi 2, constantes de tipo especificado tem a capacidade de serem verdadeiramente constante. Delphi fornece uma compatibilidade s verses anteriores ao acionar a pgina Compiler do dilogo Project | Options, ou ento voc pode usar a diretiva de compilao $J. Por default, esse dispositivo est habilitado para compatibilidade com cdigo do Delphi 1.0, mas melhor voc no confiar nessa capacidade. Se voc tentar alterar o valor de qualquer dessas constantes, o compilador Delphi emite um erro explicando que contra as regras alterar o valor de uma constante. Pelo fato das constantes serem somente-leitura, Object Pascal otimiza seu espao de dados armazenando aquelas constantes que merecem armazenagem nessas pginas de cdigo da aplicao. Se para voc no est claro as noes de