rs... agora estamos nos entendendo..
 tudo bem, entao na criacao do objeto pessoa (ou em outro momento, se fo
utilizado um *lazy loading*), a funcao sobre a qual estavamos discutindo
busca os enderecos da pessoa e povoa a lista, que esta no objeto Pessoa.
 rs...entao acho q estavamos falando a mesma coisa, apenas nao nos
entendendo direito.
 Tudo bem, agora que concordamos nesse ponto, posso voltar a minha duvida
original (espero que possamos concordar nisso tbm!)
 O objeto pessoa teria uma lista, dessa forma:
  Type
TPessoa = Class(TObject)
Private
FCodigo : Integer;
FNome : String;
LstEndereco : TList;
Protected
...
Public
Constructor Create;
Property Codigo : Integer Read FCodigo;
Property Nome : String Read FNome Write FNome;
*Property Enderecos : TList Read LstEndereco Write LstEndereco;

* *Function ListaPessoas: TList; Virtual; Abstract;*
End;
O problema que eu vejo nisso é que ListaPessoas é uma TList, ou seja, uma
lista genérica.
Quando eu acessar Pessos.Enderecos, teria que fazer um typecast dos objetos
que estao nela, para obter o objeto do tipo Endereco.
 E fazendo esse typecast, corro o risco de criar erros no sistema, já que
pode ser que em algum momento, por um engano, eu poderia colocar uma classe
de outro tipo na lista de enderecos, e o compilador nao acusaria nada.
 O que poderia ser feito é uma lista especializada, que descenda de TList, e
trabalhe apenas com objetos do tipo Endereco.
 Mas dai, nesse caso, eu nao poderia, na classe endereco, ter uma referencia
para a pessoa a qual pertence o endereco, na forma:

Type
TEndereco = Class(TObject)
Private
*FPessoa : TPessoa;*
Protected
   pq dai aconteceria uma referencia circular, entre TPessoa e TEndereco.
 Imagino que tu uses a TList generica, conforme o teu exemplo. Mas tu nao
acha que isso pode acarretar em erros no codigo?
  Sds.
 Francisco

 On 11/17/05, Romario (Listas) <[EMAIL PROTECTED]> wrote:
>
> A classe endereço *NÃO* tem uma lista de todos os endereços existentes,
> ela tem um método que recebe um objeto Pessoa ou apenas o código dessa
> pessoa e efetua uma busca no banco para trazer o(s) endereço(s) que
> estiver(em) relacionado(s) à essa pessoa.
>
> Quem tem uma lista (apenas uma lista) com um ou vários objetos Endereco
> é o objeto Pessoa. Ele solicitou à classe Endereco que fosse ao banco de
> dados e trouxesse todos os endereços que estivessem relacionados com
> ela. A classe Endereco por sua vez, faz a solicitação à camada de
> persistência que busca os dados, lê cada um dos registros recuperados,
> cria um objeto para cada endereço encontrado e popula a lista.
>
> Nenhum objeto deve ter acesso aos dados de outro objeto que não seja por
> solicitação direta. A exceção só existe para atributos públicos. Ou
> seja, se você precisa saber o endereço da Pessoa, pergunte à ela que ela
> pergunta ao Endereco e ele repassa a informação.
>
> Ex.:
>
> {Isso será feito no Formulário (Depois de populado o objeto)}
>
> Endereco := Pessoa.lstEnderecos.Items[i];
>
> edtLogradouro.Text := Endereco.Logradouro;
> edtNumero.Text := Endereco.Numero;
> edtComplemento.Text := Endereco.Complemento;
> edtBairro.Text := Endereco.Bairro;
> ...
>
> Fiquei na dúvida do "... seu eu conhecer..." e vou deduzir o que seja
> para tentar explicar.
>
> Para saber o endereço da Pessoa você terá *OBRIGATORIAMENTE* que
> conhecê-la. Qual a finalidade de se ter um endereço cadastrado sem poder
> ter uma Pessoa associada à ele? Não existe, não é???
>
> Nesse caso, quem fará uso do "Class Function ListaEnderecos(oPessoa:
> TPessoa): TList;" é o objeto Pessoa quando for criado e populado.
>
> Me fiz entender dessa vez?
>
> Caramba!!! Onde estão os autores de livros, mestrandos, doutorandos e
> experts em orientação a objetos que não opinam nessa thread? :-D
>
> Sds,
>
> Romario
>
>
>
>
>
> Francisco Trindade escreveu:
> > rs...sim, estamos nos entendendo.
> > Mas o que eu acho é que pessoa tem uma lista de instancias de endereco a
> > que ela esta associada, e nao que ela tenha que buscar isso em algum
> lugar.
> > A diferenca que eu vejo em nossas visoes, é que a sua (pelo menos ate
> onde
> > eu entendi) assume a existencia de um banco de dados, ou outra forma de
> > persistencia, ou no minimo, que a classe endereco tenha uma lista com
> todos
> > os enderecos existentes (mas dai eu nao entendo como um objeto endereco
> tera
> > a lista de todos objetos endereco)
> > Outra questao que vejo é a seguinte:
> > No caso de endereco ser uma propriedade privada de Pessoa, entao nenhuma
> > outra classe, mesmo que conheca Pessoa, podera ter acesso ao endereco.
> > Do seu modo, seu eu conhecer Pessoa e Endereco, poderei chamar a funcao
> > Class Function ListaEnderecos(oPessoa: TPessoa): TList
> > que terei o endereco da pessoa.
> > Concorda?
> > Sds,
> > Francisco
> >
> >
> >
> > On 11/17/05, Romario (Listas) <[EMAIL PROTECTED]> wrote:
> >
> >>Ops! Agora estamos começando a nos entender. (rsrs)
> >>
> >>Se essa é a sua visão atual, você conseguiu entender o que eu tentava
> >>explicar.
> >>
> >>Pessoa "conhece" a(s) instância(s) de Endereco porque ela fez uma
> >>solicitação à classe e recebeu como resposta essa(s) instância(s).
> >>
> >>Uma instância do objeto Endereco *NÃO* conhece as outras instâncias da
> >>mesma classe porque não existe ligação entre elas. Isso é uma afirmação.
> >>
> >>É dessa forma mesmo que está entendendo?
> >>
> >>Sds,
> >>
> >>Romario
> >>
> >>
> >>
> >>
> >>Francisco Trindade escreveu:
> >>
> >>>rs.. nao sei, mas eu continuo com a minha opiniao.
> >>>Uma instancia do objeto endereco deve saber tudo sobre ele, como
> >>>rua,numero,complemento,etc..
> >>>mas quem conhece as instancias, sao os objetos que fazem uso delas, no
> >>
> >>caso
> >>
> >>>, a pessoa.
> >>>Mas uma instancia do objeto endereco nao deve conhecer as outras
> >>>instancias do mesmo, a nao ser nos casos necessarios.
> >>>Sds,
> >>>Francisco
> >>>On 11/14/05, Romario (Listas) <[EMAIL PROTECTED]> wrote:
> >>>
> >>>
> >>>>Francisco,
> >>>>
> >>>>A sua visão me parece estar um pouquinho distorcida. Ou será que é a
> >>>>minha??? (rsrs)
> >>>>
> >>>>Note que Endereco é um objeto e *TUDO* o que diz respeito à ele está
> >>>>dentro dele.
> >>>>
> >>>>Como sabemos que na OO as instâncias se comunicam através de
> mensagens,
> >>>>para que um objeto saiba alguma coisa a respeito de outro, ele
> precisará
> >>>>perguntar a esse outro.
> >>>>
> >>>>Trocando em miúdos, para que Pessoa saiba o endereço, ele precisará
> >>>>pedir ao objeto Endereco essa informação.
> >>>>
> >>>>Sds,
> >>>>
> >>>>Romario
>
>
>
>
>
> _______________________________________________________
> Yahoo! Acesso Grátis: Internet rápida e grátis.
> Instale o discador agora!
> http://br.acesso.yahoo.com/
>
>
>
> --
> <<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>
>
>
>
>
>
>   *Yahoo! Grupos, um serviço oferecido por:*   PUBLICIDADE
>
> <http://br.rd.yahoo.com/SIG=12fn19l1c/M=380335.7481167.8369105.2369893/D=brclubs/S=2137111264:HM/Y=BR/EXP=1132261986/A=3126093/R=2/id=noscript/SIG=12c39trgo/*http://ad.br.doubleclick.net/clk;22846485;12120066;a?http://www.hoteis.com>
> ------------------------------
> *Links do Yahoo! Grupos*
>
>    - Para visitar o site do seu grupo na web, acesse:
>    http://br.groups.yahoo.com/group/delphi-br/
>    - Para sair deste grupo, envie um e-mail para:
>    [EMAIL PROTECTED]<[EMAIL PROTECTED]>
>    - O uso que você faz do Yahoo! Grupos está sujeito aos Termos do
>    Serviço do Yahoo! <http://br.yahoo.com/info/utos.html>.
>
>


--
--
Francisco Trindade


[As partes desta mensagem que não continham texto foram removidas]



-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

<*> Para ver as mensagens antigas, acesse:
    http://br.groups.yahoo.com/group/delphi-br/messages

<*> Para falar com o moderador, envie um e-mail para:
    [EMAIL PROTECTED]
 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 



Responder a