Dúvida sobre Polimorfismo
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
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!!
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
Curtidas 0
Respostas
Marco Salles
08/06/2013
Sim é poliformico
so alteraria o proprietário , daria um Refactor , protegeria num Bloco Try/Finally e por fim liberaria a instancia
[]sdç
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ç
GOSTEI 0
Rodolpho Silva
08/06/2013
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;
GOSTEI 0
Rodolpho Silva
08/06/2013
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;
GOSTEI 0
Marco Salles
08/06/2013
????????
GOSTEI 0
Rodolpho Silva
08/06/2013
????????
Respondendo a mensagem do Rodrigo...;)
GOSTEI 0