ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Problema com Poliformismo [RESOLVIDO]

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
informacaoweed
Aprendiz
Aprendiz


Registrado: Terça-Feira, 1 de Outubro de 2013
Mensagens: 268
Localização: Porto Alegre / RS

MensagemEnviada: Sex Jul 18, 2014 4:16 pm    Assunto: Problema com Poliformismo [RESOLVIDO] Responder com Citação

É o seguinte,

Considere a classe TPai, uma classe que serve como modelo para ser herdado tenho 2 assinaturas para a função carregar:
Código:
function Carregar(_ID : Integer): Boolean; overload; virtual;
function Carregar: Boolean; overload; virtual; abstract;


Note que a versão sem nenhum parâmetro da function Carregar tem a diretiva abstract; Isso significa que ela não tem implementação neste objeto, apenas a assinatura. Apenas seus filhos terão código escrito nesta função. Já a versão com a assinatura tem sim, uma implementação aqui. Segue:
Código:
function TPadraoM.Carregar(_ID: Integer): Boolean;
begin
  Result := False;
  Limpa;
  if _ID > 0
  then ID := _ID;
  Result := Carregar; //*Obs
end;


*Obs: A função Carregar que está sendo chamada acima, deve ir (e vai) para a função Carregar que está escrita dentro de seu herdeiros.

Agora considere TFilho, herdeiro de TPai. Ele tem apenas a assinatura da versão sem parâmetros do método Carregar:
Código:
function Carregar: Boolean; override;


A seguir, o código onde faço a chamada para o método carregar:
Código:
with CtrlModelo.ClientesM do
  begin
    Carregar(Id);
    //comandos...
  end;


O código acima pertence a um TFrame. quando o sistema chega na linha Carregar(Id), no código acima, a variável Id está setada com o código do cliente, por exemplo = 1. Ok.
Mas aí entra na função Carregar, escrita dentro de TPai, o primeiro código que postei lá em cima, mas o parâmetro _ID está = 0.

Alguém já passou por problema semelhante ou não, mas tem alguma idéia do que esstá ocorrendo?


Editado pela última vez por informacaoweed em Ter Jul 22, 2014 12:22 pm, num total de 4 vezes
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
informacaoweed
Aprendiz
Aprendiz


Registrado: Terça-Feira, 1 de Outubro de 2013
Mensagens: 268
Localização: Porto Alegre / RS

MensagemEnviada: Ter Jul 22, 2014 11:33 am    Assunto: UP Responder com Citação

UP UP UP

Help aí galera
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
GustavoToyota
Profissional
Profissional


Registrado: Domingo, 9 de Outubro de 2011
Mensagens: 605
Localização: Sorocaba - SP

MensagemEnviada: Ter Jul 22, 2014 11:47 am    Assunto: Responder com Citação

Não entendi. Explique melhor.

Editado pela última vez por GustavoToyota em Ter Jul 22, 2014 11:51 am, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
claudio.ferreira
Profissional
Profissional


Registrado: Quarta-Feira, 18 de Setembro de 2013
Mensagens: 667

MensagemEnviada: Ter Jul 22, 2014 11:50 am    Assunto: Responder com Citação

O problema não está no modelo construido de polimorfismo, mas na própria aplicação que está passando o argumento zerado. Já tentou debugar e ver o conteudo de ID antes de entrar no método carregar ?
_________________
Sistema SNGPC para farmácias
http://www.cmasistemas.com.br
Rastreabilidade de Medicamentos
https://www.sncm.com.br
Soluções em Delphi
https://delphisolutions.wordpress.com/
.
"E não sabendo que era impossível, foi lá e fez"
Mark Twain
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
informacaoweed
Aprendiz
Aprendiz


Registrado: Terça-Feira, 1 de Outubro de 2013
Mensagens: 268
Localização: Porto Alegre / RS

MensagemEnviada: Ter Jul 22, 2014 12:14 pm    Assunto: Responder com Citação

aí gurizada, obrigado por se manifestarem.

Rodei a rotina novamente para trazer mais informação a vocês e pra minha surpresa funcionou! Explico:

O parâmetro na verdade não estava escrito _ID, mas Id. O delphi não é case sensitive, por tanto quando estava dentro de um With no qual é setado o objeto que tem ID como uma propriedade, era esta que estava sendo lida ao invés de Id. Eu estou passando um pente-fino no sistema, e acabei modificando o parâmetro Id para _ID, fiz essa modificação quando peguei o código pra postar esse tópico, por isso vocês estão vendo o código já com a modificação que consertou o problema, mas quando eu postei, eu apenas modifiquei para fins de identação, e não testei a rotina, já que eu não havia percebido que consertara o problema. Logo vocês não puderam ver o erro no código que postei pq eu sou uma anta

Obrigado amigos pela atenção e o desprendimento. Podem esperar o mesmo de mim.

Abraço aí!
_________________
Aguarde... nossa Evolução está sendo processada.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB