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

tamente, além de outros fatores que dificultam sua utilização.

Utilizando esse mesmo raciocínio, uma outra solução a abordada neste artigo, é a própria aplicação acessar o banco de dados relacional e realizar o mapeamento objeto-relacional, persistindo seus objetos. Com isso, a aplicação é capaz de persistir e manipular os objetos em bancos de dados relacionais de forma rápida e transparente, não necessitando de uma camada de persistência desenvolvida por terceiros.

Buscando entender essa abordagem, o objetivo deste artigo é exemplificar o uso prático do paradigma Orientado a Objetos no desenvolvimento de uma aplicação no ambiente Delphi 7, utilizando persistência em um banco de dados relacional.

Para isso, são apresentados alguns padrões de desenvolvimento que buscam maximizar os benefícios da utilização do paradigma e facilitam a tarefa de persistência de objetos.

Este artigo está dividido em duas partes. Na primeira é apresentado um estudo de caso utilizado para exemplificar o desenvolvimento de software orientado a objetos utilizando os padrões de desenvolvimento, além da definição das classes, métodos e atributos do modelo. É apresentado ainda o conceito de mapeamento objeto-relacional e como utilizar esta abordagem no escopo do estudo de caso apresentado. Por fim, ainda na primeira parte é definida a estratégia de conexão com o banco de dados e das classes responsáveis pela persistência a manipulação dos objetos.

Na segunda parte será implementada a estratégia de persistência de objetos utilizada, além de exemplos e codificação de persistência e manipulação dos objetos.

 

Estudo de Caso

No escopo deste artigo é apresentado um estudo de caso para exemplificar o desenvolvimento de um software Orientado a Objetos utilizando padrões de desenvolvimento no ambiente Delphi 7. Com ele é possível verificar e exemplificar a utilização de padrões de projeto que auxiliam o desenvolvimento da aplicação, de técnicas de Programação Orientadas a Objetos e de persistência de objetos.

O estudo de caso, apresenta um fragmento de um sistema maior, representado aqui pela relação entre funcionários e departamentos de uma empresa, através das classes Departamento, Funcionario, FuncionarioMensalista e FuncionarioDiarista. A classe Funcionario é abstrata, servindo para a definição dos elementos comuns às suas subclasses através do mecanismo de herança.

Todos os funcionários devem estar lotados em um Departamento, que pode ter vários funcionários. A Figura 1 representa o diagrama de classes do estudo de caso.

 

Figura 1. Diagrama de Classes do estudo de caso

 

Através desse estudo de caso, são abordados temas como classes, objetos, métodos, atributos, persistência de objetos, herança, polimorfismo, associações e padrões de projeto, além de temas pertinentes ao ambiente de desenvolvimento, como utilização de componentes, classes e controles disponibilizados pelo Delphi.

Para a implementação do estudo de caso será utilizado o Delphi 7 como ferramenta de desenvolvimento e, para a persistência de objetos será utilizado o banco de dados relacional Firebird. É utilizada ainda a abordagem de programação em camadas, que busca, entre outras coisas, o desacoplamento de funções da aplicação, facilitando assim o desenvolvimento e garantindo maior manutenibilidade.

No escopo deste artigo é utilizada uma camada para apresentação, representada pela interface do sistema, uma camada de domínio, representada pelas classes de negócio da aplicação, uma camada de persistência, representada pelas classes DAO (Data Access Object) que são responsáveis pela persistência e manipulação dos objetos no banco de dados.

E, por fim, uma camada de banco de dados, representado pelo SGBD (Sistema Gerenciador de Banco de Dados) Firebird. A Figura 2 exibe a disposição das camadas utilizadas no estudo de caso.

 

Figura 2. Disposição das camadas do estudo de caso

 

Classes, Atributos e Métodos

Com um projeto criado no Delphi 7, o primeiro passo é implementar a definição das classes do modelo apresentado. Para isso, é criada uma unit chamada untDominio.pas. Neste artigo, todas as classes do modelo são definidas e implementadas nessa unit.

A Listagem 1 apresenta a definição da classe Departamento e sua implementação. Já na Listagem 2 é apresentada a classe abstrata Funcionario. Por fim, a Listagem 3, exibe a implementação da classe FuncionarioDiarista. A definição e implementação da classe FuncionarioMensalista não é apresentada pois é muito similar à FuncionarioDiarista.

 

Listagem 1. Definição da classe Departamento

1. type

2.   Departamento = class

3. private

4.   OID: string;

5.   fDescricao: string;

6. public

7.   function getOID(): string;

8.   procedure setOID(pOID: string);

9.   function getDescricao: string;

10.       procedure setDescricao(pDescricao: string);

11.       function Persistir: Boolean;

12.       class function Obter(pOID: string): Departamento;

13.       class function ObterTodos: TList;

14.       function Destruir: Boolean;

15.     end;

16.      

17.      implementation

18.      

19.     function Departamento.getOID: string;

20.     begin

21.       result := OID;

22.     end;

23.     procedure Departamento.setOID(pOID: string);

24.     begin

25.       OID := pOID;

26.     end;

27.     function Departamento.getDescricao: string;

28.     begin

...

Quer ler esse conteúdo completo? Tenha acesso completo