POO na prática
Criando classes, regras de negócio e aplicações em camadas
A grande dúvida da maioria dos programadores não é somente o que significa Programação Orientada a Objetos e sim como implantá-la em projetos reais. Materiais, teorias e conceitos sobre o assunto são o que mais encontramos na internet.
Neste artigo mostrarei um exemplo prático (para todos aqueles que ainda se perguntam como funciona POO) de como programar realmente Orientado a Objetos no Delphi. POO permite o desenvolvimento de classes e regras de negócios que sejam utilizadas em todo projeto. Usando essa técnica não temos como escapar do desenvolvimento em camadas, que dará ao programa, mais dinâmica e menos manutenção.
Quando falamos em desenvolvimento em camadas, estamos nos referindo na divisão do programa em várias partes (partes essas que terão que ser bem definidas para serem utilizadas em outras “camadas” do projeto).
Quando pensamos em POO, temos que lembrar de alguns pontos fundamentais: Abstração, Polimorfismo, Herança e Encapsulamento, esses explicados em detalhes na edição 58, no excelente artigo de Adail Muniz.
Neste artigo, vamos desenvolver um cadastro de clientes totalmente POO, dando assim uma total realidade aos desenvolvedores de software. O projeto será dividido em camadas, que são: acesso a dados, regras de negócio e interface com o usuário.
Camada de acesso a dados
Essa camada tratará do acesso ao banco de dados, onde usaremos um Data Module juntamente com um ClientDataSet para acessar os dados. No Delphi 2005 crie uma nova aplicação VCL, dê o nome ao formulário de “FrmInterface” e salve-o como “Interface_OOP.pas”. Salve o projeto como “AP_OOP.dpr”.
Adicione um DataModule ao projeto, dando a ele o nome de “dtmDados” e salvando-o na unit “Dados_OOP.pas”. Selecione agora a categoria Data Access, adicione um ClientDataSet no DataModule e mude seu nome para “Clientes”. Agora vamos carregar no ClienteDataSet um arquivo XML no evento OnCreate do DataModule (usei neste exemplo um arquivo XML para facilitar o acesso, mas pode ser usado qualquer banco de dados como Firebird, SQL Server ou Oracle). Use o seguinte código:
Clientes.FileName := 'Clientes.xml';
Vamos criar um método na seção public, para devolver para a camada de regras de negócio o ClientDataSet que está acessando a nossa tabela, conforme a Listagem 1.
public
function Cliente_Open: TDataSet;
...
function TDtmDados.Cliente_Open: TDataSet;
begin
Result := Clientes;
end;
Criaremos agora duas classes para essa camada, que tratarão desde operações básicas até a validação dos dados digitados na camada de interface.
Classe de dados
Está dividida em duas:
Classe de campos: tratará todos os tipos de campos, como Data, Numeric, Integer, String ...