O que você chama de camada superior??? O código SQL que coloquei está na *terceira* camada, ou seja, na camada de acesso à dados. Existe outro local mais correto que esse?
Sds, Romario Francisco Trindade escreveu: > Nao sei, nao gosto de colocar codigo SQL na camada superior, acho que pode > complicar demais as coisas. > Uma opcao para a relacao 1 para 1 que eu pensei agora seriam classes > "amigas" colocadas no mesmo arquivo. Isso acabaria com o problema da relacao > circular (mas tem o problema de colocar duas classes no mesmo arquivo). > E quanto a 1 para N, eu vejo uma grande vantagem na bidirecionalidade, pode > poupar buscas imensas, em certos casos. > Sds. > Francisco > > On 11/21/05, rbr_vix_es <[EMAIL PROTECTED]> wrote: > >>Você não está sendo chato e Orientação a Objetos é algo que gosto >>muito de discutir. Gostaria que outros participassem, mas... >> >>Vamos lá!!! >> >>Ainda não tive como testar, mas continuo achando que o typecast não >>é necessário porque você já criou um objeto do mesmo tipo para >>receber o objeto recuperado na lista. >> >>Vejamos o problema da incubadora. Ao meu entender seria algo assim: >> >>Type >>TEspecie = (tpPeixe, tpAnfibio, tpReptil, tpAve); >> >> >>Type >>TAnimal = Class(TObject) >>Private >>FCodigo : Integer; >>FNome : String; >>FEspecie: TEspecie; >>Protected >>Public >>Property Codigo : Integer Read FCodigo; >>Property Nome : String Read FNome Write FNome >>Property Especie: TEspecie Read FEspecie Write FEspecie; >> >>Function Listar(oEspecie: TEspecie): TList; >>End; >> >> >>Type >>TOvo = Class(TObject) >>Private >>FCodigo: Integer; >>FAnimal: TAnimal; >>... >>Protected >>Public >>Property Codigo : Integer Read FCodigo; >>Property Animal : TAnimal Read FAnimal Write FAnimal; >>End; >> >> >>Type >>TIncubadora = Class(TObject) >>Private >>FCodigo : Integer; >>FCapacidade : Integer; >>FPrateleiras : Smallint; >>FTemperatura : Float; >>Protected >>Public >>Property Codigo : Integer Read FCodigo; >>Property Capacidade : Integer Read FCapacidade Write >>FCapacidade; >>Property Prateleiras: Smallint Read FPrateleiras Write >>FPrateleiras; >>Property Temperatura: Float Read FTemperatura Write >>FTemperatura; >> >>Class Function ListaOvos: TList; >>End; >> >>Se para você é importante saber em que local o Ovo está sem ter que >>perguntar e percorrer a emcubadora, monte um novo objeto para te >>auxiliar nessa tarefa, mas não acho que você deve criar uma >>referência da emcubadora no ovo. >> >>Ex.: >> >>Type >>TEstocagem = Class(TObject) >>Private >>FOvo : TOvo; >>FEmcubadora : TEmcubadora; >>FPrateleira : Smallint; >>FPosicao : Smallint; >>Protected >>Public >>Property Ovo : TOvo Read FOvo Write FOvo; >>Property Emcubadora: TEmcubadora Read FEmcubadora Write >>FEmcubadora; >>Property Prateleira: Smallint Read FPrateleira Write >>FPrateleira; >>Property Posicao : Smallint Read FPosicao Write FPosicao; >> >>Function Buscar(oOvo: TOvo): Boolean; Overload; >>End; >> >> >>O exemplo que você informou de um relacionamento 1 para 1 na verdade >>é um relacionamento 1 para N, porque um ovo só pode vir de uma >>avestruz, mas um avestruz pode pôr vários ovos. Estou certo? >> >>Vamos colocar um relacionamento de 1 para 1 como sendo o de Pessoa e >>CNH (Carteira Nacional de Habilitação). Digamos que a Classe Pessoa >>terá um objeto do tipo TCNH junto aos seus atributos. Vejamos o >>exemplo: >> >>Type >>TPessoa = Class(TObject) >>Private >>FCodigo: Integer; >>FNome : String; >>FCNH : TCNH; >>Protected >>Public >>Property Codigo : Integer Read FCodigo; >>Property Nome : String Read FNome Write FNome; >>Property CNH : TCNH Read FCNH Write FCNH; >>End; >> >> >>Type >>TCNH = Class(TObject) >>Private >>FCodigo : Integer; >>FNumero : String; >>FRegistro : String >>FCategoria : String; >>FDataExame : TDateTime; >>FExpedicao : TDateTime; >>FValidade : TDateTime; >>FObservacao: String; >>Protected >>Public >>Property Codigo : Integer Read FCodigo; >>Property Numero : String Read FNumero Write FNumero; >>Property Registro : String Read FRegistro Write FRegistro; >>Property Categoria : String Read FCategoria Write FCategoria; >>Property DataExame : TDateTime Read FDataExame Write FDataExame; >>Property Expedicao : TDateTime Read FExpedicao Write FExpedicao; >>Property Validade : TDateTime Read FValidade Write FValidade; >>Property Observacao: String Read FObservacao Write >>FObservacao; >> >>Function Buscar(iCodigo: Integer): Boolean; Overload; >>Function Buscar(sNumero: String): Boolean; Overload; >>Function Buscar(dtValidade: TDateTime): Boolean; Overload; >>End; >> >>No exemplo acima sabemos que o objeto Pessoa conhece sua CNH através >>da instância do objeto que ele possui, mas se precisarmos conhecer >>uma Pessoa através de uma CNH o problema fica mais difícil. A >>solução que vejo no momento seria: >> >>No seu DataModule: >> >>Function TdmPessoa.Buscar(iCodigo: Integer, oPessoa: TPessoa): >>Boolean; >>Begin >> >>With cdsPessoa Do >>Begin >>Try >>Close; >>CommandText := 'Select * From Pessoa P ' + >>'Join CNH C On (P.Codigo = C.CodPessoa) ' + >>'Where P.Codigo = ' + IntTostr(iCodigo); >>Open; >> >>If RecordCount > 0 Then >>Begin >>Result := True; >>Pessoa.Nome := FieldByName('Nome').AsString; >>... >>Pessoa.oCNH.Buscar(iCodigo); >>End; >>Except >>on E: Exception do >>ShowMessage(E.Message); >>End; >>End; >>End; >> >> >>Ufa!!! Acho que exemplifiquei bastante dessa vez. Vai dar até para >>escrever um livro. :-D >> >>Obs.: Como estou codificando direto no corpo do e-mail, pode ser que >>aja alguns erros. :-( >> >>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 >>>>> <*> 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