Fórum Dúvida sobre Polimorfismo #444982

08/06/2013

0

ae galera estou fazendo um artigo sobre herança e polimorfismo , e resolvi criar uma pequena aplicação para mostrar como eles funcionam na prática , mas estou com algumas dúvidas se meu projeto está polimórfico ou não.
aqui vai o código
procedure TF_Menu.bbAcessarClick(Sender: TObject);
var
objeto : TF_Heranca;
begin

case RadioGroup.ItemIndex of
      0 : begin
         objeto := TF_Clientes.Create(application);
         objeto.ShowModal;
      end;


      1 :begin objeto := TF_Funcionarios.Create(application);
         objeto.ShowModal;
         end;

      2 :begin objeto := TF_Cidades.Create(application);
         objeto.ShowModal;
         end;

      3 :begin objeto := TF_Usuarios.Create(application);
         objeto.ShowModal;
         end;

      4 :begin objeto := TF_Estoque.Create(application);
         objeto.ShowModal;
         end;

end;


TF_Heranca é o formulario de cadastros padrao onde contem os botoes salvar , inserir , confirmar ,etc , ele funciona para qualquer classe , só basta eu apontar a tabela e pronto

espero que esteja correto , não sei se vai dar para entender direito , então se vcs tiverem alguma dúvida posta aqui q eu vou explicando, obrigado!!
Rodrigo Alexandrino

Rodrigo Alexandrino

Responder

Posts

08/06/2013

Marco Salles

Sim é poliformico

so alteraria o proprietário , daria um Refactor , protegeria num Bloco Try/Finally e por fim liberaria a instancia

var
objeto : TF_Heranca;
begin
 
case RadioGroup.ItemIndex of
      0 :objeto := TF_Clientes.Create(Nil); 
      1 :objeto := TF_Funcionarios.Create(application);
      2 :objeto := TF_Cidades.Create(application);
      3 :objeto := TF_Usuarios.Create(application);
      4 :objeto := TF_Estoque.Create(application);
end;
try
 objeto.ShowModal;
finally
 Objeto.free;
end;


[]sdç
Responder

Gostei + 0

10/06/2013

Rodolpho Silva

Na verdade o que vc fez aí foi um padrão de projeto chamado Factory Method. Eu uso muito este para criar objetos de conexão ao banco de dados. Ex:
var
  objConn: TConexaoDB;

begin
  case myConn of
    tcFirebird: objConn := TFirebirdConn.Create;
    tcOracle: objConn := TOracleConn.Create;
    tcSQLServer: objConn := TSQLServerConn.Create;
    tcMySQL: objConn := TMySQL.Create;
  end;

  try
    objConn.Conectar;
    
    // Faça alguma coisa....

  finnaly  
    objConn.Desconectar;
    FreeAndNil(objConn);
  end;
end;


Responder

Gostei + 0

10/06/2013

Rodolpho Silva

Melhorando o exemplo:

TConexaoDB = class;

TFirebirdConn = class(TConexaoDB);
TOracleConn= class(TConexaoDB);
TSQLServerConn= class(TConexaoDB);
TMySQL= class(TConexaoDB);

var
  objConn: TConexaoDB;
 
begin
  case myConn of
    tcFirebird: objConn := TFirebirdConn.Create;
    tcOracle: objConn := TOracleConn.Create;
    tcSQLServer: objConn := TSQLServerConn.Create;
    tcMySQL: objConn := TMySQL.Create;
  end;
 
  try
    objConn.Conectar;
     
    // Faça alguma coisa....
 
  finnaly  
    objConn.Desconectar;
    FreeAndNil(objConn);
  end;
end;
Responder

Gostei + 0

10/06/2013

Marco Salles


????????
Responder

Gostei + 0

10/06/2013

Rodolpho Silva


????????

Respondendo a mensagem do Rodrigo...;)
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar