Escolar Documentos
Profissional Documentos
Cultura Documentos
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
Conceitos Adicionais
Protocolo
Encapsular
Construtor
Destrutor
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
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
Delphi - 4
Delphi - 5
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
Delphi - 7
Object Pascal
Introduo
Estrutura de um Programa
Program <identificador>;
[uses <lista de units>;]
<sees de declarao>
begin.
<instrues>
end.
Identificadores
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
Delphi - 9
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
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
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
Delphi - 11
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
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
Caracter
String
Delphi - 14
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
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:
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
Repetio
Repetio Contada
for <varivel> := <incio> to <fim> do
<instruo>
ou
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
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
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
Delphi - 19
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>;
Delphi - 20
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
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:
Delphi - 22
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 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
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
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
Delphi - 24
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:
Delphi - 25
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
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.
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:
Delphi - 27
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:
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
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.
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
try ... finally no trata exceo em particular, apenas permite a garantia de que no haja perda de recursos.
Delphi - 30
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.
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
EInvalidOp
EOverflow
EUnderflow
Delphi - 32
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
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