Anda di halaman 1dari 34

UNIVERSIDADE TIRADENTES

DEPARTAMENTO DE CINCIA DA COMPUTAO

Prof. Jos Maria Rodrigues Santos Jnior

Linguagem Tcnica de Programao


DELPHI

Aracaju 4 de fevereiro de 1997

Universidade Tiradentes - Departamento de Cincia da Computao

Conceitos de Programao Orientada a Objetos


Introduo
Fatos

Crescimento no tamanho das aplicaes.


Aumento na complexidade das aplicaes.
Necessidade de manuteno de sistemas antigos.
Aumento da demanda por sistemas novos.
Baixa produtividade.

Problemas
Necessidade de rescrever algoritmos e estruturas de dados para novas aplicaes.
Mudanas em sistemas necessitam alteraes em muitos mdulos.
Crise Evoluo

Soluo
Estruturas de dados associadas s operaes.
Evoluo

Conceitos

Delphi - 2

Universidade Tiradentes - Departamento de Cincia da Computao

Componentes Bsicos da Orientao a Objetos


Abstrao que agrupa caractersticas e comportamentos.
Tipo de Objeto. Define quais caractersticas um objeto pode ter e seu comportamento.
o Objeto propriamente dito. Possui caractersticas prprias
Representa uma ao do objeto ou uma mudana de estado. Define a comunicao entre
objetos.
Mtodo
Define a implementao de uma mensagem, ou seja, o comportamento dos objetos de uma
classe.
Propriedade Define uma caracterstica de um objeto.
Objeto
Classe
Instncia
Mensagem

Conceitos Adicionais
Protocolo
Encapsular
Construtor
Destrutor

Conjunto de mensagens que define o comportamento de um objeto. Interface.


Garantir que os atributos s podem ser alterados por algum mtodo.
Mtodo encarregado de criar e estabelecer valores iniciais para um objeto.
Mtodo encarregado de destruir o objeto e fazer a coleta de lixo.

Herana

Conceitos
Permite que uma nova classe seja descrita a partir de outra classe j existente.
A subclasse herda as caractersticas e o comportamento da superclasse.
A subclasse pode adicionar novas caractersticas e comportamentos aos herdados da superclasse.
A subclasse pode ter um comportamento diferente da superclasse, redefinindo o mtodo herdado.
A subclasse uma especializao da superclasse.
Toda instncia da subclasse tambm uma instncia da superclasse.
O resultado de uma seqncia de heranas uma hierarquia de classes.

Delphi - 3

Universidade Tiradentes - Departamento de Cincia da Computao

Classes Abstratas
No pode ser instanciada.
Possui mtodos que no esto implementados.
Definida para ser a base de uma hierarquia.

Polimorfismo
Sobrecarga do Nome do Mtodo
Objetos de classes diferentes podem ter mtodos com mesmo nome e cada objeto responder
adequadamente de acordo com seu mtodo.
Mtodos da mesma classe podem ter o mesmo nome, desde que possuam quantidade ou tipo de
parmetros diferentes.
Mtodos da classe derivada podem ter nomes iguais aos da classe base, inclusive com parmetros iguais.

Sobrecarga de Operadores
Todos os operadores da linguagem, se possvel, devem ser passveis de sobrecarga.
Permite uma melhor legibilidade do cdigo implementado.
Permite que novos tipos de dados fiquem totalmente integrados com a linguagem.
Mtodos Virtuais

As mensagens so vinculadas ao objeto no momento da execuo - Vnculo Tardio.


Permite maior flexibilidade de envio de mensagem.
A mesma implementao de mtodo pode se comportar de maneira diferente, em funo do objeto que
enviou a mensagem.
Diminui a eficincia.
A maior parte das linguagens deixa a cargo do programador definir quais mtodos sero virtuais.

Delphi - 4

Universidade Tiradentes - Departamento de Cincia da Computao

Um exemplo de Orientao a Objetos


unit Datas;
interface
type
TData = Class(TObject)
private
Dia, Mes, Ano : Integer;
public
constructor Init (d,m,a : integer);
procedure DefVal (d,m,a : integer);
function AnoBis : boolean;
procedure Incrementa;
procedure Decrementa;
procedure Adiciona (NumDeDias : integer);
procedure Subtrai (NumDeDias : integer);
function GetText : string;
private
function DiasNoMes : Integer;
end;
implementation
constructor TData.Init (d,m,a : integer);
begin
dia := d; Mes := m; ano := a;
end;
procedure TData.DefVal (d,m,a : integer);
begin
dia := d; Mes := m; ano := a;
end;
function TData.AnoBis : boolean;
begin
if (ano mod 4 <> 0)
then AnoBis := false
else
if (ano mod 100 <> 0)
then AnoBis := true
else
if (ano mod 400 <> 0)
then AnoBis := False
else AnoBis := True;
end;
function TData.DiasNoMes : integer;
begin
case Mes of
1,3,5,7,8,10,12 : DiasNoMes := 31;
4,6,9,11
: DiasNoMes := 30;
2 : if (AnoBis)
then DiasNoMes := 29
else DiasNoMes := 28;
end;
end;

Delphi - 5

Universidade Tiradentes - Departamento de Cincia da Computao

procedure TData.Incrementa;
begin
if (dia < DiasNoMes) {se no for o ltimo dia do Mes}
then inc(dia)
else
if (Mes < 12) {se no for dezembro}
then
begin
inc(Mes);
dia := 1;
end
else {se for o dia de ano novo}
begin
inc(ano);
Mes := 1;
dia := 1;
end;
end;
procedure TData.Decrementa;
begin
if (dia > 1)
then Dec(dia) {se no for o primeiro dia do ms}
else
if (Mes > 1) {se no for o primeiro dia do ano}
then
begin
Dec(Mes);
dia := DiasNoMes;
end
else
begin
Dec(ano);
Mes := 12;
dia := DiasNoMes;
end;
end;
function TData.GetText : string;
var d, m, a : string;
begin
d := IntToStr(dia);
case Mes of
1 : m := 'Janeiro';
2 : m := 'Fevereiro';
3 : m := 'Maro';
4 : m := 'Abril';
5 : m := 'Maio';
6 : m := 'Junho';
7 : m := 'Julho';
8 : m := 'Agosto';
9 : m := 'Setembro';
10: m := 'Outubro';
11: m := 'Novembro';
12: m := 'Dezembro';
end;
a := IntToStr(ano);
GetText := d + ', ' + m + ' de ' + a;
end;

Delphi - 6

Universidade Tiradentes - Departamento de Cincia da Computao

procedure TData.Adiciona (NumDeDias : integer);


var n : integer;
begin
for n := 1 to NumDeDias do
Incrementa;
end;
procedure TData.Subtrai (NumDeDias : integer);
var n : integer;
begin
for n := 1 to NumDeDias do
Decrementa;
end;
end.

Delphi - 7

Universidade Tiradentes - Departamento de Cincia da Computao

Object Pascal
Introduo
Estrutura de um Programa
Program <identificador>;
[uses <lista de units>;]
<sees de declarao>
begin.
<instrues>
end.
Identificadores

So nomes assinalados a qualquer elemento em um programa escrito em Object Pascal.


formado por uma seqncia de letras, dgitos e sublinhados, onde somente os 63 primeiros caracteres so significativos.
No pode iniciar com um dgito.
No so permitidos espaos em branco na formao do nome.

Caractersticas
Tamanho Mximo da Linha: 126 caracteres
Toda instruo finaliza em um ponto-e-vrgula.

Sees de Declarao
<Seo
<Seo
<Seo
<Seo

de
de
de
de

declarao
declarao
declarao
declarao

de
de
de
de

constantes>
tipos>
variveis>
procedimentos e funes>

Delphi - 8

Universidade Tiradentes - Departamento de Cincia da Computao

Estrutura de uma Unit


Unit <identificador>;
Interface
[uses <lista de units>;]
<sees de declarao>
Implementation
[uses <lista de units>;]
<definies>
[Initialization
<instrues>]
end.
Comentrios
Qualquer seqncia de caracteres delimitada por { } ou por (* *).

Delphi - 9

Universidade Tiradentes - Departamento de Cincia da Computao

Procedimentos Bsicos de Entrada e Sada


Entrada
Readln ( <lista de variveis> )
Preenche uma varivel com dados vindos do teclado.
Exemplos:

Read ( Dia, Mes, Ano );


Read ( Nome );
Sada
Write ( <lista de valores> )
ou

Writeln ( <lista de valores> )


Imprime os valores na janela principal da aplicao. O procedimento writeln move o cursor de impresso para a linha
seguinte, aps a impresso dos valores
Exemplos:

Writeln ( Dia, '/', Mes, '/', Ano );


Write ( Nome );
Tipos
Tipos Inteiros
Tipo
Shortint
Integer
Longint
Byte
Word

Faixa
-128 .. 127
-32768 .. 32767
-2147483648 .. 2147483647
0 .. 255
0 .. 65535

Formato
8 bits Sinalizado
16 bits Sinalizado
32 bits Sinalizado
8 bits no Sinalizado
16 bits no Sinalizado

Tipos Booleanos
Tipo
Boolean
ByteBool
WordBool
LongBool

Memria
1 byte
1 byte
2 bytes (uma word)
4 bytes (duas words)

False
0
0
0
0

True
1
diferente de 0
diferente de 0
diferente de 0

Tipo Sub-Faixa
<valor inicial> .. <valor final>
definido por um subconjunto de um tipo ordinal.
Possui as mesmas propriedades do tipo original.
No permitido faixa com valores do tipo longint.

Delphi - 10

Universidade Tiradentes - Departamento de Cincia da Computao

Tipo Enumerado
( <lista de identificadores> )
Define uma seqncia de identificadores como valores vlidos para um tipo.
Cada elemento da lista de identificadores associado seqencialmente a nmeros inteiros, iniciando pelo nmero 0.

Tipos Ordinais

Tipos Inteiros e Booleanos


Char (armazena um caracter)
Tipo Sub-Faixa
Tipo Enumerado

Os tipos ordinais permitem a utilizao das seguintes funes:


Funo
Ord
Pred
Succ
Low
High

Descrio
Retorna o nmero de ordem do elemento no conjunto.
Retorna o elemento anterior.
Retorna o elemento seguinte.
Retorna o primeiro elemento do conjunto.
Retorna o ltimo elemento do conjunto.

Tipos Reais
Tipo
Real
Single
Double
Extended
Comp

Faixa
2.9 * 10-39 .. 1.7 * 1038
1.5 * 10-45 .. 3.4 * 1038
5.0 * 10-324 .. 1.7 * 10308
3.4 * 10-4932 .. 1.1 * 104932
-263+1 .. 263-1

Dgitos
Significativos
11-12
7-8
15-16
19-20
19-20

Tamanho
em Bytes
6
4
8
10
8

O tipo Comp armazena somente nmeros inteiros na faixa aproximada de -9.2 * 10 18 a 9.2 * 1018.
Todos os tipos reais so armazenados no formato de ponto flutuante.
As operaes em ponto flutuante podem ser executadas tanto por Hardware como emuladas por Software.

Tipo String
string

ou

string [ <valor inteiro positivo> ]


Armazena uma string com o tamanho mximo de at 255 caracteres.
Pode ser especificado um tamanho mximo menor que 255.
Permite a concatenao utilizando-se o operador +.

Delphi - 11

Universidade Tiradentes - Departamento de Cincia da Computao

Seo de Declarao de Tipos Definidos pelo Usurio


type
<declarao de tipos>
Um tipo pode ser declarado no corpo principal de um programa, em um procedimento ou funo ou em uma unit, tanto na
interface como na implementation.

Declarao de Tipos
<identificador> = <tipo>;
Variveis
Seo de Declarao de Variveis
var
<declarao de variveis>
Declarao de Variveis
<identificador> : <tipo>;
Exemplo:

var
Dia: Shortint;
Nota: Real;
Nome: string;

Delphi - 12

Universidade Tiradentes - Departamento de Cincia da Computao

Operadores
Aritmticos
+ (unrio)
- (unrio)
+ (binrio)
- (binrio)
*
/
div
mod

Positivo
Negativo
Adio
Subtrao
Multiplicao
Diviso real
Diviso Inteira
Resto da Diviso Inteira

Lgicos
not
and
or
xor

No
E
OU Inclusivo
OU Exclusivo

Bit-a-bit
not
and
or
xor
shl
shr

No
E
OU Inclusivo
OU Exclusivo
Deslocamento a esquerda
Deslocamento a direita

Relacionais
=
>
<
<>
>=
<=

Igual
Maior
Menor
Diferente
Maior ou Igual
Menor ou Igual

Precedncia
+ (unrio), - (unrio), not
*, /, div, mod, and, shl, shr
+ (binrio), - (binrio), or, xor
=, <>, <, >, <=, >=

Constantes
Categoria
Numrica Inteira
Numrica Real
Hexadecimal

Definio
Qualquer seqncia de dgitos decimais (0 a 9), sinalizados ou no, entre
2.147.483.648 e 2.147.483.647.
Qualquer seqncia de dgitos decimais (0 a 9), sinalizados ou no, com um
separador decimal ou em notao cientfica.
Qual seqncia de dgitos hexadecimais (0 a F), precedidos por um sifro ($),
entre $00000000 e $FFFFFFFF.
Delphi - 13

Universidade Tiradentes - Departamento de Cincia da Computao

Caracter
String

Um nico caracter entre apstrofos ou o caracter # seguido de um nmero


inteiro entre 0 e 255 (cdigo ASCII).
Qualquer seqncia de caracteres escrito em uma linha de programa e
delimitado por apstrofos. Dois apstrofos m seqncia dentro de uma string
representam um nico.

Seo de Declarao de Constantes


const
<declaraes de constantes>
Declarao de Constantes Simples
<identificador> = <valor>;
Declarao de Constantes Tipadas
<identificador> : <tipo> = <valor>;
Utilizadas como variveis inicializadas no momento da definio.

Delphi - 14

Universidade Tiradentes - Departamento de Cincia da Computao

Funes Constantes
Funes de tipos ordinais: Ord, Pred, Succ, Low, High.
Funes da lista abaixo:
Funo
Chr
Abs
Round
Trunc
Odd
Length
SizeOf
Ptr
Hi
Lo
Swap

Descrio
Retorna o caracter correspondente ao cdigo ASCII.
Retorna o valor absoluto.
Retorna o valor arredondado.
Retorna a parte inteira de um nmero.
Retorna se um nmero mpar.
Retorna o comprimento de uma string.
Retorna o nmero de bytes ocupados por uma varivel.
Converte um segmento e um offset em um ponteiro.
Retorna o byte de maior ordem em uma word.
Retorna o byte de menor ordem em uma word.
Inverte os bytes de uma word.

Exemplos:

const
Pi = 3.14;
MaiorValor = 1024 * 64 - 16;
NumCaracteres = Ord('Z') - Ord('A') + 1;
Mensagem = 'Hello world...';
Minimo: Integer = 0;
Maximo: Integer = 9999;
Salario: Real = 44322.34;
Blocos
Um Bloco ou Instruo Composta definido como sendo uma seqncia de instrues entre as palavras chaves BEGIN e
END.
Corresponde a estrutura de programao seqencial.

begin
<instruo 1>;
<instruo 2>;
<instruo 3>;
.
.
.
<instruo n>
end

Delphi - 15

Universidade Tiradentes - Departamento de Cincia da Computao

Atribuio
<varivel> := <expresso>
Armazena um valor em uma varivel.
Exemplos:

Dia := 20;
Nome := 'Jos';
Seleo
Seleo Simples
Permite que o fluxo de execuo seja desviado em funo de uma condio

if <condio> then
<instruo>
else
<instruo>
Exemplos:

if Nota < 5 then


Writeln('Reprovado')
else
Writeln('Aprovado');
Seleo Mltipla
Permite que o fluxo de execuo seja desviado em funo de uma condio

case <expresso ordinal> of


<lista de opes> : <instruo>;
.
.
.
[else
<instruo>;]
end
Exemplos:

case EstadoCivil of
'C': Writeln('Casado');
'S': Writeln('Solteiro');
'D': Writeln('Divorciado');
'V': Writeln('Vivo');
else
Writeln('Estado Civil Desconhecido');
end;
A lista de opes pode ser um valor ordinal, uma seqncia de valores ordinais separados por vrgula ou uma faixa de valores.
A clusula else opcional e ser executada caso nenhuma das opes corresponda ao resultado da expresso.
Os valores devem ser colocados em ordem crescente e no devem ser repetidos em mais de uma opo.

Delphi - 16

Universidade Tiradentes - Departamento de Cincia da Computao

Repetio
Repetio Contada
for <varivel> := <incio> to <fim> do
<instruo>
ou

for <varivel> := <incio> downto <fim> do


<instruo>
A clusula to da estrutura for incrementa um ao valor da varivel a cada iterao.
A clusula downto da estrutura for decrementa um do valor da varivel a cada iterao.
O valor da varivel indefinido ao finalizar o precesso de repetio.
Exemplos:

for Contador := 1 to 10 do
Writeln(Contador);
Repetio Condicional
while <condio> do
<instruo>
ou

repeat
<instruo 1>;
<instruo 2>;
<instruo 3>;
.
.
.
<instruo n>
until <condio>
A estrutura while executada enquanto a condio for verdadeira
A estrutura repeat executada at que a condio seja verdadeira, ou seja, enquanto for falsa.
Exemplos:

Soma := 0;
Read(Valor);
while Valor <> 0 do
begin
Soma := Soma + Valor;
Read(Valor)
end;
Writeln(Soma);

Soma := 0;
repeat
Read(Valor);
Soma := Soma + Valor;
until Valor = 0;
Writeln(Soma);

Delphi - 17

Universidade Tiradentes - Departamento de Cincia da Computao

Instrues de Salto
Break
Finaliza a iterao (for, while ou repeat) mais prxima, transferindo o controle para a instruo seguinte.

continue
Transfere o controle para o teste da condio da iterao (for, while ou repeat) mais prxima.

Resumo
Estrutura
for
while...do
repeat...until

Quando Usar
Quando se conhece a quantidade de vezes que se deve repetir.
Quando se deseja testar a condio antes de executar a primeira vez.
Quando se deseja executar a primeira vez e s ento testar a condio.

Conjunto
Define um conjunto de elementos com o mesmo tipo ordinal.
O Conjunto no pode ter mais que 256 elementos.

Definio do Conjunto
set of <tipo>
Conjunto Constante
[ <lista de valores> ]
Operadores
Operador
+
*
in

Descrio
Unio
Diferena
Interseo
Pertinncia

Exemplos:

const
DigitoHexa: set of Char = ['0'..'9', 'A'..'Z',
'a'..'z'];
var
Feriado: set of 1..31;
begin
Feriado := [];
.
.
.

Delphi - 18

Universidade Tiradentes - Departamento de Cincia da Computao

Vetores e Matrizes
Define uma estrutura de dados com elementos do mesmo tipo.

Vetores
array [ <tipo do ndice> ] of <tipo do elemento>
O tipo do ndice deve ser um tipo ordinal e normalmente uma sub-faixa.
O tipo Longint no permitido como ndice do vetor.

Matriz
array [ <lista de tipos> ] of <tipo do elemento>
ou

array [ <tipo do ndice> ] of


array [ <tipo do ndice> ] of <tipo do elemento>
O compilador d tratamento igual aos dois formatos acima.

Acesso aos Elementos


<varivel do tipo vetor> [ <ndice> ]
Vetor Constante
( <lista de valores> )
Utilizado na definio de constantes tipadas.

Delphi - 19

Universidade Tiradentes - Departamento de Cincia da Computao

Exemplos:

const
Fatorial: array[1..7] of Integer = (1, 2, 6, 24,
120, 720, 5040);
type
TipoNotas = array[1..3] of real;
var
Notas: TipoNotas;
begin
Write('Digite a segunda Nota: ');
Read(Nota[2]);
Notas[1] := 10;
Notas[3] := 8.5;
Writeln('O fatorial de 5 ', Fatorial[5]);
.
.
.
Registros
Define um conjunto de elementos que podem ter tipos diferentes.

Definio do Registro
record
<lista de campos 1>
<lista de campos 2>
<lista de campos 3>
.
.
.
<lista de campos n>
end;

: <tipo 1>;
: <tipo 2>;
: <tipo 3>;

: <tipo n>;

Acesso aos Elementos


<varivel do tipo registro> . <campo>
Clusula with
with <lista de variveis do tipo registro> do
<instruo>
Retira a obrigatoriedade do uso do nome da varivel no acesso aos campos do registro.
Normalmente utilizado com bloco de instrues.

Delphi - 20

Universidade Tiradentes - Departamento de Cincia da Computao

Registro Constante
( <campo 1> : <valor 1> ,
<campo 2> : <valor 2> ,
<campo 3> : <valor 3> ,
.
.
.
<campo n> : <valor n> )
Utilizado na definio de constantes tipadas.
Exemplos:

type
Ponto = record
X, Y: real
end;
const
Origem: Ponto = (X: 0.0; Y: 0.0);
var
Pontos: array[0..9] of Ponto;
begin
Pontos[0] := Origem;
Ponto[4].X := 2.5;
Ponto[4].Y := 53.2;
.
.
.
Procedimentos e Funes
Escopo
Define o local onde um identificador pode ser usado.
Pode ser: local, de procedimento ou funo, de unit ou de classe.

Visibilidade
Define a regio do programa onde legal o acesso ao elemento associado ao identificador.

Tempo de Vida
Define o perodo de tempo durante o qual o identificador possui um elemento na memria real. Pode ser:
Categoria
Esttico
Local
Dinmico

Descrio
Existe durante toda a execuo do programa.
Criado e destrudo automaticamente na chamada de um procedimento ou funo
Alocado dinmicamente na memria livre.

Delphi - 21

Universidade Tiradentes - Departamento de Cincia da Computao

Procedimentos
procedure <identificador> ( <parmetros formais> );
<sees de declarao>
begin
<instruo 1>
<instruo 2>
<instruo 3>
.
.
.
<instruo n>
end;
Exemplos:

type
TipoData = record
Dia, Mes, Ano: Shortint;
end;
procedure Dividir(var Data: TData);
begin
with Data do
Read(Dia, Mes, Ano)
end;
Funes
function <ident.> ( <parmetros formais> ) : <tipo>;
<sees de declarao>
begin
<instruo 1>
<instruo 2>
<instruo 3>
.
.
.
<instruo n>
end;
Exemplos:

function Fatorial(const n: Longint): Longint;


begin
if n = 0 then
Result := 1
else
Result := n * Fatorial(n - 1);
end;

Delphi - 22

Universidade Tiradentes - Departamento de Cincia da Computao

Parmetros Formais
Permite receber dados de entrada e enviar dados de resposta em um procedimento ou funo.
As passagens de dados podem ser efetuadas por valor, por referncia, constante e aberta.
Cada declarao de parmetro deve ser separada por ponto-e-vrgula.

Parmetro com Passagem por Valor


<lista de identificadores> : <tipo>
Cria uma varivel local com uma cpia do valor passado para o procedimento ou funo.
O valor do parmetro pode ser alterado e no refletido na varivel original.

Parmetro com Passagem por Referncia


var <lista de identificadores> : <tipo>
O identificador aponta para o mesmo endereo de memria que a varivel original.
Ao se alterar o valor do parmetro, altera-se o valor da varivel original.
Arquivos s podem ser passados por referncia.

Parmetro Constante
const <lista de identificadores> : <tipo>
Garante que o valor do parmetro no vai poder ser alterado.
Deve ser utilizado sempre que possvel, pois o compilador gera um cdigo mais otimizado para esse tipo de passagem de
parmetro.

Parmetro Aberto
<lista de identificadores> : string
ou

<lista de identificadores> : array of <tipo>

Permite que sejam criadas funes para manipular strings ou vetores independente do tamanho dessas strings e vetores.
Assume o tamanho do vetor ou string passados como parmetro.
Pode ser passado por valor, por referncia ou constante.
Normalmente utilizado em conjunto com as funes:

Funo
Low
High
SizeOf

Valor de Retorno
Zero
O ndice do ltimo elemento do vetor original
O tamanho do vetor original

Valor de Retorno
Result := <valor>
Toda funo possue uma varivel de Result do mesmo tipo do retorno da funo.
O valor atribuido varivel Result considerado o valor de retorno da funo.

Delphi - 23

Universidade Tiradentes - Departamento de Cincia da Computao

Chamada a um Procedimento ou Funo


<identificador> ( <parmetros reais> )
Um procedimento no pode ser utilizado em uma expresso, por no possuir valor de retorno.
As funes, mesmo retornando valor, podem ser chamadas como instruo isolada.
Os parmetros reais devem ser colocados na mesma ordem e devem ter tipos compatveis com os tipos definidos nos
parmetros formais do procedimento ou funo chamado.

Ponteiros
Um ponteiro uma varivel que armazena um endereo de memria.
No possue elemento associado at ser atribudo a um endereo ou ter uma rea da memria livre alocada para ele.
Caso o ponteiro no esteja apontando para nenhum elemento, a ele deve ser atribudo o valor nil.

Definio do Tipo
^ <tipo original>
Alocao de Memria
New ( <varivel ponteiro> )
ou

<varivel ponteiro> := New ( <tipo> ) ;


Alocao de Memria
Dispose ( <varivel ponteiro> )
Acesso a uma varivel apontada
<varivel ponteiro> ^

Delphi - 24

Universidade Tiradentes - Departamento de Cincia da Computao

Arquivos
Tipo
TextFile
File of <tipo>
File

Descrio
Arquivo Texto
Arquivo Tipado, associado a um registro
Arquivo No Tipado

Procedimentos e funes pr-definidos so responsveis pela manipulao dos arquivos. Os principais so:

Associao com Nome Externo


AssignFile ( <varivel arquivo> , <nome externo> )
Abrir Arquivo para Leitura
Reset ( <varivel arquivo> )
Criar e Abrir um Arquivo Novo
Rewrite ( <varivel arquivo> )
Abrir um Arquivo Texto para Expanso
Append ( <varivel arquivo> )
Fechar um Arquivo
CloseFile ( <varivel arquivo> )
Fim de Arquivo
Eof ( <varivel arquivo> )
Leitura de Dados
Read ( < varivel arquivo> , <varivel> )
Gravao de Dados
Write ( < varivel arquivo> , <varivel> )

Delphi - 25

Universidade Tiradentes - Departamento de Cincia da Computao

Exemplos:

type
Funcionario = record
Nome: string[30];
Salario: real;
end;
var
Arq: File of Funcionario;
Func: Funcionario;
begin
AssignFile(Arq , 'teste.txt');
Reset(Arq);
while not eof(Arq)
begin
Read(Arq, Func); {L um registro do arquivo}
Writeln(Func.Nome, Func.Salario); {Exibe na tela}
end
CloseFile(Arq);
end.
Classes
Definio de uma Classe Base
<identificador> = class
<atributos e mtodos>
end;
Deve ser feita na seo de declarao de tipos principal de um programa ou de uma unit.

Atributos e Mtodos
<visibilidade 1>
<lista de variveis>
<lista de procedimentos
<visibilidade 2>
<lista de variveis>
<lista de procedimentos
<visibilidade 3>
<lista de variveis>
<lista de procedimentos
.
.
.
<visibilidade n>
<lista de variveis>
<lista de procedimentos

ou funes>
ou funes>
ou funes>

ou funes>

Delphi - 26

Universidade Tiradentes - Departamento de Cincia da Computao

Exemplos:

type
TData = class
private
Ano: Word;
Mes: Word;
Dia: Word;
public
constructor Ler;
constructor Copy(d: TData);
constructor Create(dd, mm, aa: Word);
function AsString: string;
end;
Visibilidade
Define quem tem permisso de acessar e alterar os atributos e mtodos da classe.
Em uma mesma classe podem existir atributos e mtodos com visibilidades diferentes.
Visibilidade
Private
Protected
Public

Descrio
Os atributos e mtodos s podem ser manipulados pela prpria classe.
Os atributos e mtodos podem ser manipulados pela prpria classe ou por qualquer
subclasse desta.
Os atributos e mtodos podem ser manipulados por qualquer classe.

Definio de uma Herana


<identificador> = class( <identif. da classe base> )
<caractersticas e comportamentos>
end;
Mtodos Virtuais
Para tornar um mtodo virtual, basta acrescentar no final de sua declarao na classe, a palavra virtual ou a palavra dynamic
seguida de um ponto-e-vrgula.
A palavra virtual define mtodos virtuais otimizados pela velocidade na execuo, enquanto a palavra dynamic define
otimizando pelo tamanho do cdigo gerado.
A sobrecarga do mtodo subclasse feita, acrescentando-se a palavra override, no final de sua declarao, seguida de um
ponto-e-vrgula.

Mtodos Abstratos
Para tornar um mtodo virtual, basta acrescentar no final de sua declarao na classe, a palavra abstract seguida de um
ponto-e-vrgula.
Para um mtodo ser abstrato, necessrio que ele seja tambm virtual.

Mtodo Construtor
constructor <identificador> ( <parmetros formais> );
Aloca memria e inicializa o objeto, baseado nos parmetros passados.
Normalmente a primeira ao invocar o construtor da base classe, atravs da instruo:

inherited <construtor> ( <parmetros reais > );

Delphi - 27

Universidade Tiradentes - Departamento de Cincia da Computao

Mtodo Destrutor
destructor <identificador> ( <parmetros formais> );
Destroi o objeto, baseado nos parmetros passados, e libera a memria alocada para ele.
Normalmente a ltima ao invocar o destrutor da base classe, atravs da instruo:

inherited <destrutor> ( <parmetros reais > );


Exemplos:

type
TCoordenada = class
private
X: Word;
Y: Word;
public
constructor Create(x1, y1: Word);
constructor Nulo;
function GetX: Word;
function GetY: Word;
procedure SetX(x1: Word);
procedure SetY(y1: Word);
end;
TFigura = class(TCoordenada)
private
Cor: TColor;
protected
Visivel: Boolean;
public
constructor Create(x1, y1: Word; cor1: TColor);
constructor Nulo;
function SetCor(cor1: TColor): TColor;
function GetCor: TColor;
procedure Desenhar; virtual; abstract;
procedure Apagar;
procedure Mover(x1, y1: Word);
function EstaVisivel: Boolean;
end;
TPonto = class(TFigura)
public
procedure Desenhar; override;
end;

Delphi - 28

Universidade Tiradentes - Departamento de Cincia da Computao

Referncia para um Objeto

declarado da mesma maneira que uma varivel.


Se comporta como um ponteiro, mas manipulado como uma varivel normal.
Necessita ser construdo e destrudo explicitamente.
Pode ser atribudo ao valor nil.

Converso de Tipo
<objeto> as <subclasse>
Converte, se possvel, uma referncia para objeto de uma classe base em uma referncia para objeto da subclasse.

Verificao de Tipo
<objeto> is <classe>
Verifica se a referncia para objeto uma instncia da classe ou de alguma subclasse desta.
Retorna true ou false.

Tratamento de Exceo
Aplicaes Robustas
O tratamento de exceo um mecanismo capaz de dar robustez a uma aplicao, permitindo que os erros sejam manipulados de
uma maneira consistente e fazendo com que a aplicao possa se recuperar de erros se possvel ou finalizar a execuo quando
necessrio, sem perda de dados ou recursos.
Para que uma aplicao seja segura, seu cdigo necessita reconhecer uma exceo quando esta ocorrer e respond-la. Se no
houver tratamento para uma exceo, ser exibida uma mensagem descrevendo o erro. Uma exceo deve ser respondida sempre
que houver perigo de perda de dados ou de recursos do sistema.
Os Recursos do Sistema que necessitam proteo e podem causar danos na execuo caso sejam perdidos so: Arquivos,
Memria, Recursos do Windows e Objetos.

Criao de um Bloco Protegido


try
<instruo
.
.
.
<instruo
finally
<instruo
.
.
.
<instruo
end;

1>;

n>
n + 1>;

m>

Tanto as instrues da clusula try quanto as instrues da clusula finally so executadas sequencialmente.
Se houver uma exceo em qualquer das instrues da clusula try o controle de execuo ser desviado para a primeira
instruo da clusula finally.
As instrues da clusula finally so sempre executadas, mesmo que no haja exceo.

Delphi - 29

Universidade Tiradentes - Departamento de Cincia da Computao

try ... finally no trata exceo em particular, apenas permite a garantia de que no haja perda de recursos.

Delphi - 30

Universidade Tiradentes - Departamento de Cincia da Computao

Exemplos:

var
PValor: ^Real;
Resultado, Dividendo: Integer;
begin
Dividendo := 0;
New(PValor);
try
Resultado := 10 div Dividendo;
finally
Dispose(PValor);
end;
end;
Tratamento de Excees
try
<instruo 1>;
<instruo 2>;
<instruo 3>;
.
.
.
<instruo n>
except
<lista de tratamentos>
[else
<instruo 1>;
<instruo 2>;
<instruo 3>;
.
.
.
<instruo n>]
end;
Tratamento de um Exceo
on <tipo de exceo> do
<instruo>;
Quando uma exceo tratada, o fluxo de execuo continua na instruo seguinte ao tratamento.
Para permitir que o tratamento da exceo prossiga no tratamento default, utiliza-se a palavra-chave raise no fim do bloco de
instrues do tratamento para que a exceo seja lanada novamente.

Principais Classes de Exceo


Classe
EDivByZero
EZeroDivide
ERangeError
EGPFault
EOutOfMemory
EInOutError

Descrio
Diviso de inteiro por zero
Diviso de real por zero
Valor excede a faixa definida
Acesso a memria no permitido
Memria Livre insuficiente para alocar objeto
Erro de Entrada ou Sada
Delphi - 31

Universidade Tiradentes - Departamento de Cincia da Computao

EInvalidOp
EOverflow
EUnderflow

Operao invlida com nmero real


Nmero real excedeu a faixa vlida
Nmero real menor que a faixa vlida

Delphi - 32

Universidade Tiradentes - Departamento de Cincia da Computao

Exemplos:

function Media(Soma, NumeroDeItens: Integer): Integer;


begin
try
Result := Soma div NumeroDeItens;
except
on EDivByZero do
Result := 0;
end;
end;
Criao de Classes de Exceo
<identificador> = class(Exception);
Qualquer anormalidade na execuo de um programa pode ser transformada em uma exceo pela criao de uma classe para
fazer esse tratamento.
As classes de exceo devem ser subclasses da classe Exception.
No momento em que houver uma anormalidade, um objeto do classe de exceo criada deve ser lanado, seguindo o modelo:

if <condio anormal> then


raise <classe de exceo >.Create( <descrio> );
Exemplos:

type
EFatorialNegativo = class(Exception)
public
constructor Create;
end;
.
.
.
constructor EFatorialNegativo.Create;
begin
inherited Create('Fatorial Negativo');
end;
function Fatorial(const n: Longint): Longint;
begin
if n < 0 then
raise EFatorialNegativo.Create;
if n = 0 then
Result := 1
else
Result := n * Fatorial(n - 1);
end;

Delphi - 33

Universidade Tiradentes - Departamento de Cincia da Computao

var
N: Longint;
begin
Write('Digite um valor (-1 para sair): ');
Read(N);
while N <> -1 do
begin
try
Writeln(n, '! = ', Fatorial(N));
except
on E:EFatorialNegativo do
Writeln(E.Message);
end;
Write('Digite um valor (-1 para sair): ');
Read(N);
end;
end.

Delphi - 34

Anda mungkin juga menyukai