Artigo Clube Delphi 67 - POO na Prática

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (1)  (0)

Artigo da Revista Clube Delphi Edição 67 - POO na Prática.

Esse artigo faz parte da revista Clube Delphi Edição 67. Clique aqui para ler todos os artigos desta edição

 

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”.

 

Nota: Este projeto também pode ser desenvolvido em Delphi 7, caso ainda esteja utilizando essa versão da ferramenta.

 

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';

 

Nota: Você pode baixar esse arquivo XML no endereço para download deste artigo.

 

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.

 

Listagem 1. Função para retornar o ClientDataSet

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 etc., suas características e validações. Crie uma nova unit e salve-a como “Field_OOP.pas”. Crie uma classe chamada “TFields_OOP” como na Listagem 2.

 

Listagem 2. Classe para tratamento de campos

unit Field_OOP;

 

interface

 

uses

  Classes;

 

type

  TFields_OOP = class(TObject)

  public

    constructor Create;

    destructor Destroy; override;

    function ValidateCurrency(Value: string): Boolean;

    function ValidateDate(Value: string): Boolean;

    property AsCurrency: Currency read FAsCurrency

      write SetAsCurrency;

    property AsFloat: Double read FAsFloat

      write SetAsFloat;

    property AsInteger: LongInt read FAsInteger

      write SetAsInteger;

    property AsValue: string read FAsValue

      write SetAsValue;

    property AsDate: TDateTime read FAsDate

      write SetAsDate;

    property DisplayFormat: string read FdisplayFormat

      write SetDisplayFormat;

    property DisplayLabel: string read FDisplayLabel

      write SetDisplayLabel;

    property EditMask: string read FEditMask

      write SetEditMask;

    property Required: boolean read FRequired

      write SetRequired;

    property List: TStringList read FList

      write SetList;

    { Aperte Shift+Ctrl+C para gerar a implementação }

  end;

"

A exibição deste artigo foi interrompida :(
Este post está disponível para assinantes MVP

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?