Bold: Desenvolvimento RADicalmente OO em Delphi

por Adail Muniz Retamal

Publicado na revista "Developers' Magazine", nº 79, março/2003

O Borland Delphi Studio 7 Architect oferece ao desenvolvedor Delphi uma ferramenta extremamente interessante, formada por um framework e um conjunto de componentes visuais e não-visuais, chamado Bold. Neste artigo veremos como o Bold implementa o desenvolvimento orientado por objetos, mantendo-se fiel ao modelo UML das classes de negócio do sistema.


Análise, Projeto e Desenvolvimento OO
Aqueles que já começaram a fazer a análise e o projeto de seus sistemas utilizando alguma técnica orientada por objetos depararam-se com um problema na fase de codificação: como fazer a persistência dos objetos que o sistema manipula, se a grande maioria dos bancos de dados disponíveis usa o paradigma relacional?

Alguns se aventuraram a criar seus próprios frameworks para fazer o armazenamento e recuperação dos objetos utilizando um banco de dados relacional, mas ainda permanecem outros problemas, como a sincronização entre o modelo de classes original e a implementação no código, a integração com a interface gráfica, a implementação de associações (simples e múltiplas), a navegação a partir de um objeto para suas ligações, entre outros.


MDA - Model Driven Architecture
O OMG (Object Management Group), entidade responsável pelos padrões de tecnologia de objetos adotados mundialmente, definiu toda uma arquitetura chamada MDA (que em português seria alguma coisa como Arquitetura Guiada pelo Modelo), que está se tornando rapidamente uma tendência mundial. Conforme pode ser visto no site oficial, no endereço www.omg.org/mda, vários outros padrões são utilizados para compor esta arquitetura, entre eles a UML – Unified Modeling Language, que define uma série de diagramas e outras estruturas para descrever os artefatos de um sistema computacional. O site oficial da UML está no endereço www.omg.org/uml.

Usa-se o diagrama de classes da UML para especificar as entidades que pertencem ao domínio do problema ou negócio sendo modelado, bem como as relações entre elas, as restrições, etc. A figura 1 ilustra um exemplo de diagrama de classes para uma hipotética aplicação para gerenciamento de uma clínica médica.


UML Executável
Um dos grandes problemas do desenvolvimento tradicional é que mesmo que se utilize um modelo UML, durante as atividades de implementação normalmente são introduzidas mudanças, as quais nem sempre são atualizadas no modelo original, tornando-o quase inútil ao final do desenvolvimento. Além disso, o modelo não é usado pela aplicação durante a execução, sendo que todos os relacionamentos e restrições de negócio devem ser implementados no código fonte, deixando pouca ou nenhuma chance para outras utilizações (consultas ou filtros não previstos, por exemplo).

O Bold faz com que o modelo de classes seja uma parte integrante do sistema, durante o projeto, codificação e em tempo de execução, tornando o modelo UML realmente executável. Através da utilização da OCL (Object Constraint Language), que também faz parte da especificação oficial da UML, pode-se definir expressões para acessar classes, objetos e associações, realizar consultas e especificar restrições. Vejamos alguns exemplos de expressões OCL:

Obter todas as pessoas Pessoa.allInstances
Obter todas as pessoas com idade >= 18 Pessoa.allInstances->select(idade >= 18)
Obter todas as consultas feitas pelo Dr. Rafael Consulta.allInstances->select(medico.nome.sqlLike('Rafael%'))
Obter somente os pacientes que já consultaram Paciente.allInstances->reject(consultas->isEmpty)



Arquitetura do Bold
A figura 2 mostra as camadas e os componentes que formam o framework do Bold. O modelo de classes desempenha o papel central, interagindo diretamente com o subsistema de objetos de negócio, que por sua vez coordena todas as operações de representação dos dados e de persistência dos objetos.

Cada camada pode ser manipulada através dos seus respectivos componentes, de forma visual, durante o desenvolvimento.

Além dos originais, já existem vários componentes Bold-aware fornecidos por terceiros, inclusive para serem usados junto com o IntraWeb. E mais: através do componente TBoldDataSet você pode utilizar todos os componentes que manipulam datasets, como geradores de relatórios e os seus pacotes de componentes visuais favoritos.

O framework utiliza intensivamente o design pattern conhecido como Observer, que permite a qualquer objeto ou componente ficar “de olho” em outros objetos, recebendo avisos sobre as alterações ocorridas e possibilitando a tomada de decisões, como redesenhar, recalcular ou gerar um evento qualquer. Dessa forma, quando um objeto é alterado em algum lugar da interface, todos os outros locais que exibem esse objeto são atualizados imediatamente.


A Interface Gráfica
O resultado final para o usuário é uma interface gráfica consistente e agradável, com diversas facilidades como, por exemplo, poder visualmente arrastar um objeto e realizar ligações (de acordo com as regras do modelo), exclusões e inserções. A figura 3 mostra uma possível implementação para o modelo de classes mostrado no início deste artigo.

Existem renderers que fazem a personalização da aparência final de um controle, como a cor de fundo ou as propriedades da fonte, de acordo com alguma lógica envolvendo o valor de um atributo (por exemplo, deixar um campo em vermelho se o valor for negativo).

Outra facilidade oferecida é a apresentação de formulários automáticos e/ou personalizados. Quando o usuário dá um duplo-clique em uma referência de objeto (no indicador do grid, por exemplo), o formulário de edição para esse objeto é mostrado, podendo ter sido gerado automaticamente pelo Bold ou construído pelo desenvolvedor, como é o caso mostrado na figura 3.


E o Banco de Dados?
Essa é a melhor parte. Após a importação do modelo de classes no Bold e a configuração da estrutura de acesso ao banco você pode comandar a geração do banco de dados no servidor escolhido. O Bold cria todas as tabelas, com suas respectivas primary keys e foreign keys, e as tabelas de relacionamentos (em caso de associações N x N). Seguindo o princípio de identidade, cada objeto possui o seu identificador único, gerado e manipulado pelo Bold. Se houver alterações no modelo, estas serão refletidas no banco também. E ainda é possível utilizar a estrutura já existente de um banco, fazendo o mapeamento entre os atributos das classes e as colunas das tabelas. Qualquer estrutura de conexão a banco de dados disponível no Delphi pode ser utilizada pelo Bold.

O framework fica responsável por todos os comandos para inserção, recuperação, alteração e exclusão de objetos, cuidando dos relacionamentos e regras de integridade, de acordo com as multiplicidades estabelecidas no modelo de classes.


E Tem Código?
Tem sim senhor(a)! O Bold gera boa parte do código automaticamente, mas pode-se tirar excelente proveito do framework através da farta biblioteca oferecida. E tudo de forma simples e familiar para o programador Delphi! Veja alguns exemplos:

Criar um objeto UmaPessoa:=TPessoa.Create(nil);
Alterar o nome da pessoa UmaPessoa.Nome:='Fulano de Tal';
Excluir essa pessoa UmaPessoa.Delete;
Data de nascimento do paciente dtData:=UmaConsulta.Paciente.DataNasc;



Os objetos ficam armazenados na memória, no chamado object space. As alterações ficam pendentes até que o método UpdateDB do componente BoldSystemHandle seja executado, quando são submetidas ao banco de dados. Caso desejado, pode-se descartar as alterações usando o método Discard. Mudanças efetuadas em um object space podem ser propagadas para outras instâncias da aplicação, tornando o sistema realmente multi-usuário até mesmo no nível da interface!

E para quem sente falta (ou mesmo em caso de necessidade) existem componentes que recuperam objetos através de comandos SQL construídos pelo desenvolvedor.

Bom de mais para ser verdade? Acredite se quiser! E tem muito mais! O Bold versão 4.0 está disponível também para o C++Builder e, em breve, para .NET.



Conclusão
Os desenvolvedores Delphi e C++Builder já podem se beneficiar da MDA e de um processo de desenvolvimento totalmente orientado por objetos com o Bold. Além de ser uma excelente ferramenta para prototipação e prova de conceitos, sua filosofia totalmente RAD, permitindo o acesso visual a todas as camadas do framework, e a possibilidade de adaptação ao ambiente já existente, tanto de componentes quanto de banco de dados, fazem do Bold uma peça fundamental e estratégica para a obtenção de produtos com alta qualidade, baixo tempo de desenvolvimento e facilidade de manutenção, que sempre foi o sonho de qualquer equipe de desenvolvimento.


Sobre o Autor (na época da publicação do artigo)
Adail Muniz Retamal é engenheiro eletrônico, consultor, desenvolvedor e instrutor certificado em Delphi 7. Já lecionou POO e disciplinas afins em universidade federal e particular. Atualmente é diretor técnico da Heptagon Tecnologia da Informação, atuando em bancos, atacadistas e telecoms. É autor de cursos, consultor, palestrante e instrutor para a Borland Latin America.