Sei sulla pagina 1di 41

Programao

orientada a
objetos em
Delphi
Abrindo sua mente para um mundo novo...
mas nem tanto!

Mudar!? Para qu???


Se voc chegou at aqui, significa que voc
procura por otimizar seu processo de
trabalho!

FreeDigitalPhotos.net

Ento deixe o comodismo e o preconceito de lado!

Mas preciso estudar um monte de


teorias novas?
Orientao a Objeto um conceito antigo.
Mas a melhor maneira de aprender usando!
Polimorfismo, herana
e encapsulamento so
conceitos importantes!
Mas a prtica leva
perfeio!
FreeDigitalPhotos.net

O que devo saber sobre a teoria?


Orientao a objetos: Estrutura de
agrupamento de dados e funes que tem
por objetivo alta padronizao e
usabilidade de informaes.

O que devo saber sobre a teoria?


Polimorfismo, herana e encapsulamento:
So metodologias utilizadas para se
conseguir, tecnicamente, a padronizao e
a usabilidade que so necessrios para o
ganho de performance no desenvolvimento
de software.

O que devo saber sobre a teoria?


Classes, mtodos e atributos: So nomes
novos para coisas velhas que voc j
conhece! Muda o contexto, mas o conceito
o mesmo.

Entendendo como se faz

Caelum

Entendendo como se faz


Classe: a especificao, o projeto.
Objeto: a instancia, em memria, da
classe. Este o objeto de trabalho!

Entendendo como se faz


Unit UConta;
Interface
Uses SysUtils;
Type
TConta = Class
public
numero: integer;
dono: String;
saldo: real;
limite: real;
End;
Implementation
//...

Entendendo como se faz


Procedure Teste;
var
vConta: TConta;
vSaldo_Total: real;
begin
vConta:= Tconta.Create;
vConta.saldo := 0;
vConta.dono := 'Jos';
vSaldo_Total:= vConta.Saldo + vConta.Limite;
vConta.free;
// FreeAndNil(vConta);
end;

Entendendo como se faz


Atributos: So caractersticas da classe.
So variveis que armazenam dados
referente ao objeto.

Entendendo como se faz


Unit UConta;
//...
Type
TConta = Class
public
numero: integer;
dono: String;
saldo: real;
limite: real;
public
Procedure saca(valor: real);
Procedure deposita(valor: real);
End;
Implementation
//...

Entendendo como se faz


//...
Implementation
Procedure TConta.saca(valor: real);
var vNovoSaldo: real;
begin
vNovoSaldo := saldo - valor;
saldo := vNovoSaldo;
end;
Procedure TConta.deposita(valor: real);
begin
saldo := saldo + valor;
end;
//...

Entendendo como se faz


Procedure Teste;
var
vConta: TConta;
vSaldo_Total: real;
begin
vConta:= Tconta.Create;
vConta.saldo := 0;
vConta.dono := 'Jos';
vConta.deposita(200);
vConta.saca(50);
vSaldo_Total:= vConta.Saldo + vConta.Limite;
vConta.free;
end;

Entendendo como se faz


Mtodos: So aes da classe. So
funes ou procedimentos necessrios
para a execuo dos objetivos da classe.

Entendendo como se faz


Objetos: Lembre-se que, ao instanciar uma
classe, voc est fazendo referncia a
endereos de memria.
Cuidado ao referencias objetos e limpa-los
da memria.

Entendendo como se faz


Procedure Teste;
var
vC1, vC2, vC3: TConta;
begin
vC1:= Tconta.Create;
vC1.dono := 'Jos';
vC2:= Tconta.Create;
vC2.dono := 'Maria';
vC3:=vC1;
vC3.deposita(100);
vC3:=vC2;
vC3.deposita(10);
vC3:=nil;
freeandnil(vC1);
freeandnil(vC2);
end;

Entendendo como se faz


Procedure Teste;
var
vC1, vC2: TConta;
begin
vC1:= Tconta.Create;
vC1.dono := 'Emilia';
vC2:= Tconta.Create;
vC2.dono := 'Emilia';
if vC1 = vC2 then begin
// so iguais!
end;
freeandnil(vC1);
freeandnil(vC2);
end;

Entendendo como se faz


Aproveite-se das referncias de memria
para otimizar seus mtodos.

Entendendo como se faz


Unit UConta;
//...
Type
TConta = Class;
TConta = Class
public
numero: integer;
dono: String;
saldo: real;
limite: real;
public
Procedure saca(valor: real);
Procedure deposita(valor: real);
Procedure transfere(conta: TConta; valor: real);
End;
Implementation
//...

Entendendo como se faz


//...
Implementation
Procedure TConta.transfere(conta: TConta; valor: real);
begin
saldo := saldo - valor;
conta.saldo := saldo + valor;
end;
//ou
Procedure TConta.transfere(conta: TConta; valor: real);
begin
saldo.saca(valor);
conta.deposita(valor);
end;
//...

Entendendo como se faz


Pode-se deixar sua classe mais inteligente
e robusta com a utilizao de construtores
e destruidores.

Entendendo como se faz


Unit UConta;
Type
TConta = Class;
TConta = Class
public
numero: integer;
dono: String;
saldo: real;
limite: real;
public
Constructor Create;
Destructor Free;
Procedure saca(valor: real);
Procedure deposita(valor: real);
Procedure transfere(conta: TConta; valor: real);
End;
Implementation
//...

Entendendo como se faz


//...
Implementation
Procedure TConta.Create;
begin
numero := 0;
dono:= '';
saldo:= 0;
limite: 1000;
end;
Procedure TConta.Free;
begin
// Tratamento de limpeza
end;
//...

Entendendo como se faz


Aproveite a estrutura e pense sempre de
maneira modular.
Cada classe deve ser especialista no que
faz!

Entendendo como se faz


Conta
Titular

+
+
+
+

numero: integer;
dono: TTitular;
saldo: real;
limite: real;

+ Constructor Create;
+ Destructor Free;
+ saca(valor: real);
+ deposita(valor: real);
+ transfere(conta: TConta;
valor: real);

+ nome: String;
+ endereco: String;
+ cpf: String;
+ Constructor Create;
+ Destructor Free;

Entendendo como se faz


Unit UTitular;
Type
TTitular = Class
public
nome: string;
endereco: string;
cpf: string;
public
Constructor Create;
Destructor Free;
End;
Implementation
//...

Entendendo como se faz


Unit UConta;
Interface

Uses Utitular;
Type
TConta = Class;
TConta = Class
public
numero: integer;

dono: TTitular;
saldo: real;
limite: real;
public
Constructor Create;
Destructor Free;
Procedure saca(valor: real);
Procedure deposita(valor: real);
Procedure transfere(conta: TConta; valor: real);
End;
Implementation
//...

Entendendo como se faz


//...
Implementation
Procedure TConta.Create;
begin
numero := 0;
saldo:= 0;
limite: 1000;
dono:= TTitular.Create;
end;
Procedure TConta.Free;
begin
dono.free;
end;
//...

Entendendo como se faz


Procedure Teste;
var
vC1: TConta;
begin
vC1:= Tconta.Create;
vC1.dono.nome := 'Joao';
vC1.dono.CPF := '11122233300';
VC1.saldo:=0;
VC1.deposita(100);
freeandnil(vC1);
end;

Padro de programao
Pode-se adotar padres de programao
orientada a objetos para facilitar o
trabalho em equipe.

Padro de programao
Estrutura de classe em Delphi
//------------------------------------------------------//<Nome do sistema ou conjunto de classes> - <data>
//<nome da classe>
//<Descrio da classe>
//-------------------------------------------------------

Unit UTTeste;
interface
Uses Sysutils, ZDataset, ZConnection, Classes;
Type
TTeste = Class
private
VARIAVEIS DE ATRIBUTOS
MTODOS PRIVADOS: GETS E SETS
MTODOS PRIVADOS DIVERSOS
public
CONSTRUTOR
DESTRUTOR
MTODOS PBLICOS

Estrutura de classe em Delphi

public
DEFINIO DE PROPRIEDADES,
GETS E SETS
End;
implementation
IMPLEMENTAO DOS CONSTRUTORES
IMPLEMENTAO DOS DESTRUTORES
IMPLEMENTAO DE MTODOS
PRIVADOS
IMPLEMENTAO DE MTODOS
PUBLICOS
End;

Padro de programao
Unit UConta;
Interface
Uses Utitular;
Type
TConta = Class;
TConta = Class
private
a_numero: integer;
a_dono: TTitular;
a_saldo: real;
a_limite: real;
private
Procedure set_numero(Const Value: integer);
Procedure set_dono(Const Value: TTitular);
Procedure set_saldo(Const Value: real);
Procedure set_limite(Const Value: real);
//...

Padro de programao
//...
Function
Function
Function
Function

get_numero: integer;
get_dono: TTitular;
get_saldo: real;
get_limite: real;

public
Constructor Create;
Destructor Free;
Procedure saca(valor: real);
Procedure deposita(valor: real);
Procedure transfere(conta: TConta; valor: real);
//...

Padro de programao
//...
public
Property
set_numero;
Property
Property
Property
Implementation
//...

Numero: integer read get_numero write


Dono: TTitular read get_dono write set_dono;
Saldo: real read get_saldo write set_saldo;
Limite: real read get_limite write set_limite;

Padro de programao
//...
Procedure TConta.Create;
begin
a_numero := 0;
a_saldo:= 0;
a_limite: 1000;
a_dono:= TTitular.Create;
end;
Procedure TConta.Free;
begin
a_dono.free;
end;
//...

Padro de programao
//...
Procedure TConta.saca(valor: real);
var vNovoSaldo: real;
begin
vNovoSaldo := a_saldo - valor;
a_saldo := vNovoSaldo;
end;
Procedure TConta.deposita(valor: real);
begin
a_saldo := a_saldo + valor;
end;
//...

Padro de programao
//...
Procedure TConta.set_numero(Const Value: integer);
begin
a_numero := value;
end;
Procedure TConta.set_dono(Const Value: TTitular);
begin
a_dono := value;
end;
Procedure TConta.set_saldo(Const Value: real);
begin
a_saldo := value;
end;
Procedure TConta.set_limite(Const Value: real);
begin
a_limite := value;
end;
//...

Padro de programao
//...
Function TConta.get_numero: integer;
begin
result := a_numero;
end;
Function TConta.get_dono: TTitular;
begin
result := a_dono;
end;
Function TConta.get_saldo: real;
begin
result := a_saldo;
end;
Function TConta.get_limite: real;
begin
result := a_limite;
end;
End.

Concluindo
Toda a mudana requer um perodo de
adaptao.
Os ganhos da POO so muitos, mas
necessrio prtica, disciplina e pacincia
para quem ainda se inicia na metodologia.

Bibliografia

Caelum. Apostila Java e Orientao a objetos. http://www.caelum.com.br/apostila-javaorientacao-objetos/orientacao-a-objetos-basica/

MELO, Ana Cristina, Desenvolvendo Aplicaes com UML 2.0: do conceitual implementao /
Ana Cristina Melo. 2. ed. Rio de Janeiro: Brasport, 2004.

BORLAND, Treinamento Oficial, Delphi 2005 Application Development with Delphi for Win32
2005.

DEITEL, H. M. Deitel, C# - Como Programar So Paulo: Pearson Education do Brasil LTDA,


2003.

Potrebbero piacerti anche