Como trabalhar POO usando uma lista de telefones.

Delphi

26/07/2008

Olá pessoal, tenho um form com um CheckListBox nele tenho que:

*Adicionar
*Editar
*Remover


Estou fazendo o modulo avançado(Developer)
Abaixo estão as minhas Class

interface 

uses Contnrs; 

type 

  TTipoEndereco = (teComercial, teResidencial); 
  TTipoTelefone = (telComercial, telResidencial, telRecado); 

  TEndereco = class 
  private 
    FBairro: string; 
    FUF: string; 
    FCEP: string; 
    FNumero: string; 
    FCidade: string; 
    FRua: string; 
    FTipo: TTipoEndereco; 
    procedure SetBairro(const Value: string); 
    procedure SetCEP(const Value: string); 
    procedure SetCidade(const Value: string); 
    procedure SetNumero(const Value: string); 
    procedure SetRua(const Value: string); 
    procedure SetUF(const Value: string); 
    procedure SetTipo(const Value: TTipoEndereco); 
  public 
    property Rua: string read FRua write SetRua; 
    property Numero: string read FNumero write SetNumero; 
    property Bairro: string read FBairro write SetBairro; 
    property Cidade: string read FCidade write SetCidade; 
    property UF: string read FUF write SetUF; 
    property CEP: string read FCEP write SetCEP; 
    property Tipo: TTipoEndereco read FTipo write SetTipo; 
  end; 

  TTelefone = class 
  private 
    FNumero: string; 
    FTipo: TTipoTelefone; 
    procedure SetNumero(const Value: string); 
    procedure SetTipo(const Value: TTipoTelefone); 
  published 
    property Numero: string read FNumero write SetNumero; 
    property Tipo: TTipoTelefone read FTipo write SetTipo; 
  end; 

  TPessoa = class 
  private 
    FNome: string; 
    procedure SetNome(const Value: string); 
  public 
    property Nome: string read FNome write SetNome; 
  end; 

  TCliente = class(TPessoa) 
  private 
    FDataNascimento: TDateTime; 
    FCPF: string; 
    FEnderecoComercial: TEndereco; 
    FEnderecoResidencial: TEndereco; 
    FTelefones: TObjectList; 
    procedure SetCPF(const Value: string); 
    procedure SetDataNascimento(const Value: TDateTime); 
    procedure SetEnderecoComercial(const Value: TEndereco); 
    procedure SetEnderecoResidencial(const Value: TEndereco); 
    procedure SetTelefones(const Value: TObjectList); 
    procedure Inicializar; 
  public 
    constructor Create; overload; 
    constructor Create(CPF: string; DataNascimento: TDateTime); overload; 
    constructor Create(DataNascimento: TDateTime; Nome: string); overload; 
    constructor Create(Nome: string); overload; 

    constructor Criar; 

    property CPF: string read FCPF write SetCPF; 
    property DataNascimento: TDateTime read FDataNascimento write SetDataNascimento; 
    property EnderecoComercial: TEndereco read FEnderecoComercial write SetEnderecoComercial; 
    property EnderecoResidencial: TEndereco read FEnderecoResidencial write SetEnderecoResidencial; 
    property Telefones: TObjectList read FTelefones write SetTelefones; 
  end; 


implementation 

{ TPessoa } 

procedure TPessoa.SetNome(const Value: string); 
begin 
  FNome := Value; 
end; 

{ TCliente } 

constructor TCliente.Create; 
begin 
  inherited; 
  Inicializar; 
end; 

constructor TCliente.Create(DataNascimento: TDateTime; Nome: string); 
begin 
  inherited Create; 
  Inicializar; 
  Self.DataNascimento := DataNascimento; 
  Self.Nome := Nome; 
//  FDataNascimento := DataNascimento; 
//  FNome := Nome; 
end; 

constructor TCliente.Create(CPF: string; DataNascimento: TDateTime); 
begin 
  inherited Create; 
  Inicializar; 
  Self.CPF := CPF; 
  Self.DataNascimento := DataNascimento; 
end; 

constructor TCliente.Create(Nome: string); 
begin 
  inherited Create; 
  Inicializar; 
  Self.Nome := Nome; 
end; 

constructor TCliente.Criar; 
begin 

end; 

procedure TCliente.SetCPF(const Value: string); 
begin 
  FCPF := Value; 
end; 

procedure TCliente.SetDataNascimento(const Value: TDateTime); 
begin 
  FDataNascimento := Value; 
end; 

procedure TCliente.SetEnderecoComercial(const Value: TEndereco); 
begin 
  FEnderecoComercial := Value; 
end; 

procedure TCliente.SetEnderecoResidencial(const Value: TEndereco); 
begin 
  FEnderecoResidencial := Value; 
end; 

procedure TCliente.SetTelefones(const Value: TObjectList); 
begin 
  FTelefones := Value; 
end; 

{ TEndereco } 

procedure TEndereco.SetBairro(const Value: string); 
begin 
  FBairro := Value; 
end; 

procedure TEndereco.SetCEP(const Value: string); 
begin 
  FCEP := Value; 
end; 

procedure TEndereco.SetCidade(const Value: string); 
begin 
  FCidade := Value; 
end; 

procedure TEndereco.SetNumero(const Value: string); 
begin 
  FNumero := Value; 
end; 

procedure TEndereco.SetRua(const Value: string); 
begin 
  FRua := Value; 
end; 

procedure TEndereco.SetTipo(const Value: TTipoEndereco); 
begin 
  FTipo := Value; 
end; 

procedure TCliente.Inicializar; 
begin 
  FEnderecoComercial := TEndereco.Create; 
  FEnderecoResidencial := TEndereco.Create; 
  FTelefones := TObjectList.Create; 
end; 

procedure TEndereco.SetUF(const Value: string); 
begin 
 FUF := Value; 
end; 

{ TTelefone } 

procedure TTelefone.SetNumero(const Value: string); 
begin 
  FNumero := Value; 
end; 

procedure TTelefone.SetTipo(const Value: TTipoTelefone); 
begin 
  FTipo := Value; 
end; 

end.



Gustavo Passos

Gustavo Passos

Curtidas 0

Respostas

Thomaz_prg

Thomaz_prg

26/07/2008

Você quer saber sobre a persistência???
Se for, seria necessário a criação de uma Classe DAO, ou então, pode verificar alguns componentes já existentes como por exemplo o InstantObjects.


GOSTEI 0
Marco Salles

Marco Salles

26/07/2008

Rapaz to vendo uma melhor forma de me expressar com voce , mas ta dificil ... É sempre bom ver , estudar aprender POO

Bem vou tentar....Mas preste atenção

O que voce esta se esbarrando é que a Propriedade
FTelefones: TObjectList; é uma lista de Objetos e não mais uma classe
como foi para FEnderecoComercial: TEndereco e
FEnderecoResidencial: TEndereco;

Assim para acessar , voce fazia simplesmente
cliente.EnderecoComercial.rua.
Porém o memso voce não consegue para umcliente.Telefones

O que voce tem que enetender , que o que tem nesta propriedade saõ obejtos telefones ... Para Acessa-los voce tem que fazer uma conversão
de Tipo


var
Cliente:TCliente;


Para Gravar por exemplo
var
Objetotelefone:TTlefone;
begin
ObjetoTelefone:=TTelefone.create
ObjetoTelefone.Numero:=´1111111111111´;
ObjetoTelefone.Tipo:=telResidencial;
//veja que o objeto Telefone foi criado instanciado .. e podemos se 
//desejarmos Atribui-lo a propriedade FTelefones
umcliente.Telefones.Add(ObjetoTelefone);


para ler por exemplo:
var
descricao:String;
i:integer;
for i:=0 to Cliente.Telefones.Count - 1 do
  begin
     //formatando saida
     descricao:=descricao+#13;
     Descricao:=Descricao+´Numero do Telefone : é ´+TTelefone(Cliente.Telefones[i]).Numero+13;
     case TTelefone(Cliente.Telefones[i]).Tipo of
       telComercial: Descricao:=Descricao+´     O Telefone Numero ´+inttostr(i)+´ é do Tipo Comercial´+13;
       telResidencial: Descricao:=Descricao+´   O Telefone Numero ´+inttostr(i)+´ é do Tipo Residencial´+13;
       telRecado: Descricao:=Descricao+´      O Telefone Numero ´+inttostr(i)+´ é do Tipo Recado´+13;
      end;
  end;
showmessage(descricao);
end;


finalmente para destruir: Auqle Objetos Telefone Criados .. Lembra ???
for i:=0 To Cliente.Telefones.Count-1 do
  TTelefone(Cliente.Telefones[i]).Free;

umCliente.Free;


ent]ao é desta forma que vpce acessa , lê , exclui , edita ...Lembre-se que voce esta usando TObjectList para armazenar os Objetos numa Lista

Na sua Abstração que voce fez par Modelar as Classes , voce Agregou na Classe ´Tod´ TClinte a Classe ´Parte´ TTelefones .. Lembrando que um Cliente Pode ter Vários Telefones . ..


GOSTEI 0
Gustavo Passos

Gustavo Passos

26/07/2008

Obrigado por sua ajuda e desculpe por não responder logo. Realmente vc explicou da forma correta.

O que acontece é que toda a pessoa que inicia, tem duvidas, não sabe se expressar e pensa até em desistir. O que não é o meu caso... :lol:


GOSTEI 0
Marco Salles

Marco Salles

26/07/2008

Obrigado por sua ajuda e desculpe por não responder logo. Realmente vc explicou da forma correta. O que acontece é que toda a pessoa que inicia, tem duvidas, não sabe se expressar e pensa até em desistir. O que não é o meu caso...


Rapaz , é vero... Demorou um pouquinho né.. Eu Bem que pensei :

´Nun entendeu nada´ . ´Deve ter Desistido´ .

Mas ja vi que este não é o seu caso :P :P :P


GOSTEI 0
Paullsoftware

Paullsoftware

26/07/2008

[quote:8e69c8f60e=´Marco Salles´]
Obrigado por sua ajuda e desculpe por não responder logo. Realmente vc explicou da forma correta. O que acontece é que toda a pessoa que inicia, tem duvidas, não sabe se expressar e pensa até em desistir. O que não é o meu caso...


Rapaz , é vero... Demorou um pouquinho né.. Eu Bem que pensei :

´Nun entendeu nada´ . ´Deve ter Desistido´ .

Mas ja vi que este não é o seu caso :P :P :P[/quote:8e69c8f60e]Marcos, um material bom sobre POO??? conhece algum^??


GOSTEI 0
Marco Salles

Marco Salles

26/07/2008

Paulo , tem os Artigos da Revista , Tem boms exmplos no Site DevMedia

Mas o que mais me agradou foi o Livro :

´Programação Orientada a Objetos´ usando delphi de
Isaias Camilo Borati
Editora Visual

O Livro é simplismente Magnifico .

Quero Destacar que o conceito é Básico , não Comenta por exemplo das
Classes DÃO , persistência enfims.... Mas lendo-o (é de extrema facilidade a sua leitura) os outros conceitos mais avançados serão mais facilmente Digeridos...


GOSTEI 0
POSTAR