e=Verdana size=2>Clique aqui para ler todos os artigos desta edição

Desenvolvendo uma aplicação para Palm OS utilizando HB++

Uso de padrões de projetos para reduzir esforço de construção da aplicação

 

Leitura Recomendada: Hello World Handheld-basic, por Wellington Oliveira, publicado na edição 12 da WebMobile.

 

Neste artigo, vamos implementar um aplicativo para Palm onde será dada ênfase à construção de uma camada de acesso a dados (DAL, do inglês Data Access Layer) que possui um padrão CRUD (criação, leitura, atualização e deleção). Nessa camada, todas as regras para manipulação de dados em arquivos PDBs estão implementadas, liberando os formulários desta tarefa e reduzindo a área de manutenção do software. Utilizaremos para o desenvolvimento deste exemplo a ferramenta HB++ desenvolvida pela Handheld Basic. O uso desta ferramenta foi demonstrado nos artigos anteriores.

Para quem não conhece, o HB++ é um IDE que permite desenvolver aplicativos para plataforma Palm OS. Esta ferramenta vem sendo abordada nos últimos dois artigos que publicamos na WebMobile e é atualmente uma das mais utilizadas no Brasil.

 

Padrão de projeto

Padrões para arquitetura de software são soluções de eficiência já comprovadas e amplamente utilizadas para a resolução de problemas comuns em projeto de software. Existem hoje muitos modelos de padrões, isso porque toda grande empresa refina seus projetos até chegar ao seu próprio padrão de desenvolvimento. Grandes estudiosos do assunto também desenvolveram padrões, os mais famosos são: Abstract Factory, Builder, Factory Method, Prototype, etc.

 

Como funciona o padrão Softpalm de acesso a dados

Como não encontramos na plataforma Palm OS um SGBD, devemos construir uma camada de acesso aos dados, DAL, encarregada de executar as regras que devem garantir a integridade dos dados armazenados na memória. Além de garantir a integridade da informação, ela deve ser montada de forma que evite ao máximo problema de corrompimento de arquivos Palm DataBase (extensão .pdb).

Em uma arquitetura de camadas, a camada DAL é responsável somente por implementar mecanismos (operações) CRUD (Create, Retrieve, Update, Delete). Por motivos de organização, as regras de negócio (cálculos, status de variáveis, mecanismos relativos à entidade) são separadas em uma segunda camada, chamada de negócio (BLL – Business Logic Layer).

Os métodos de manipulação de dados devem seguir as regras:

-          Abrir e fechar o arquivo o mais rápido possível. Isso quer dizer que se deve efetuar a ação necessária e fechar. Muitos programadores deixam o arquivo aberto pensando em uma futura necessidade de abri-lo novamente;

-          Abrir o arquivo no modo escrito somente se for necessário;

-          Isolar os mecanismos de manipulação de arquivo em classes;

-          Não acessar os arquivos diretamente dos formulários.

 

Na Figura 1 estamos demonstrando o fluxo dos dados em uma aplicação qualquer para Palm. Repare que os dados de entrada saem do formulário destinado a visualização e edição de dados (frmView), passam pela camada que contém as regras de negócio, seguem então para a camada DAL, e através dos mecanismos CRUD são salvos no arquivo .pdb. No sentido inverso, os dados saem do arquivo e são carregados pelo mecanismo Load() existente na camada DAL e seguem então para o formulário.

 

Figura 1. Fluxo de dados.

Para o formulário frmList (formulário destinado a listar grande quantidade de opções) é implementada uma classe de apoio contendo mecanismos que por polimorfismo carregam objetos que são instâncias de sub-classes de ChoiceControl, tais como ComboBox e ListBox.

Na Tabela 1 temos uma descrição dos métodos que serão desenvolvidos para cada entidade. Estes métodos serão a partir deste ponto os mecanismos de CRUD adotados neste e nos projetos subseqüentes.

 

Tabela 1. Descrição de membros implementados na camada DAL.

Artefato

Método

Descrição

Uso

clsDAL

Load()

Método que carrega os dados que estão no arquivo.

Utilizado para todas as entidades que requerem a recuperação de dados, mesmo que seja uma simples listagem.

Save()

Método que salva os dados da classe no arquivo.

Somente para entidades que permitem a inserção ou alteração de dados.

Delete()

Método que exclui os dados do arquivo segundo um campo chave.

É possível que o usuário erre quando ele insere uma informação. Assim, ele pode excluí-la.

AfterUpdate()

Evento que é disparado após a atualização do arquivo.

Quando necessita executar uma rotina destinada às regras de negócio.

BeginUpdate()

Evento que é disparado antes da atualização do arquivo.

Quando necessita executar uma rotina destinada às regras de negócio.

 

Propriedades GET

Conjunto de propriedades que garante o encapsulamento dos atributos.

Usado para toda e qualquer variável que possa ser acessada para leitura.

 

Propriedades LET/SET

Conjunto de propriedades que garante o encapsulamento dos atributos.

Usado para proteger uma variável. Uma entidade pode estar livre para ser atualizada porem algumas propriedades não possuem as propriedades Let/Set, pois seus valores não podem ser alterados fora da camada DAL e de BLL.

 

Todo padrão de projeto possui um domínio de problema, vantagens de seu uso, desvantagens da metodologia utilizada até o momento e uma solução clara para o domínio do problema.

 

Domínio do problema

O padrão desenvolvido tem por objetivo garantir a integridade dos dados.

 

Vantagens

-          Todo o código de manipulação de dados fica isolado em uma única classe, liberando os formulários de tal tarefa. Isso permite que as futuras atualizações do software sejam menos problemáticas e mais rápidas.

-          Os formulários ficam enxutos, ou seja, com pouco código, permitindo assim uma tela mais legível.

-          Segurança na manipulação de dados, pois são criadas rotinas que se encarregam de validar a informação de entrada, tais como:

o        Validação de chave primária;

o        Validação de chave estrangeira;

o        Validação de valor único;

o        Validação de valores numéricos e de datas;

o        Segurança para informações disponibilizadas somente para leitura.

-          A metodologia possui códigos semelhantes, evitando uma nova aventura a cada novo projeto.

 

Desvantagens

-          Implementação de classes expensas, com muitos métodos de validação. Isso torna a programação extremamente entediante. Muitos recorrem às técnicas de copiar-colar (Ctrl-C + Ctrl-V), o que ocasiona alguns erros de codificação.

-          Requer um projeto bem pensado. Com isso, perdem-se muitas horas gerando diagramas em sua concepção inicial.

 

Soluções

-          Ao iniciar o projeto com um grande estudo de caso, muita atenção no levantamento de requisitos. Isso ajuda a evitar código desnecessário. Quando implementar a camada DAL, deve-se ter muita calma. Somente com esta camada pronta é que se deve implementar os formulários.

-          Hoje existe uma ferramenta CASE chamada PDACase que é capaz de gerar esta camada. Para isso, basta apenas a entrada do diagrama de entidade e relacionamento.

 

Preparando o ambiente

Antes de iniciar a codificação, devemos preparar nosso ambiente de desenvolvimento. Para isso, deve ser efetuado o download dos seguintes programas:

-          HB++;

-          POSE.

Estes aplicativos podem ser encontrados nos links descritos no final deste artigo. Com os arquivos na máquina, execute o Emulator.exe e inicie o processo de instalação. Após a instalação, o software deve solicitar a ROM a qual deseja emular, conforme Figura 2.

 

Figura 2. Iniciando uma sessão.

 

Seleciona a ROM: PalmOS40-em-color.rom que está no mesmo diretório do instalador Emulator.exe. Essa será a plataforma que escolheremos na nossa aplicação. Em seguida, salve a configuração (pode ser com qualquer nome).

Após esse passo será aberto o emulador. Devemos configurar a opção de depuração do emulador. Para isso, pressione o botão direito do mouse sobre o emulador e selecione Settings | Debugging... conforme a Figura 3.

 

Figura 3. Palm OS Emulator.

 

Em seguida, será exibido um formulário semelhante ao da Figura 4. Nessa tela, desmarque todas as opções e pressione OK. Com isso estamos solicitando ao Emulator que ele não depure o aplicativo, afinal o próprio HB++ é capaz de realizar esta tarefa.

 

 

Figura 4. Opções de Debug.

 

Com o emulado instalado e configurado, o leitor deve instalar o HB++. Para isso execute o arquivo hbSetup.exe. O processo de instalação é semelhante a qualquer outro software, a única observação a ser feita neste momento são as configurações de Emulador e BitMap Editor, conforme Figura 5.

 

Figura 5. Configuração do HB++.

 

Implementando um projeto básico

Para um melhor entendimento dessas questões levantadas inicialmente, neste artigo será desenvolvido um software para a plataforma Palm OS utilizando a ferramenta HB. Este software será destinado aos entusiastas do fisiculturismo, onde a principal funcionalidade neste momento será armazenar dados para futuras consultas. Em um próximo artigo estaremos utilizando estes dados para gerar gráficos de desempenho.

O usuário ao executar o software, poderá iniciar um novo treino. Para este treino ele atribui dada/hora inicial e final. O software gera uma lista de exercícios, e o usuário pode alterar data/hora inicial do exercício, carga efetiva e seqüência efetiva. Após o seu desenvolvimento, uma seqüência de telas é demonstrada ao final deste artigo.

Conhecendo as informações sobre a aplicação, é gerado um diagrama entidade e relacionamento, conforme o exposto na Figura 6, que demonstra o relacionamento existente entre as entidades envolvidas no projeto.

 

Figura 6. Diagrama de entidade e relacionamento (PDACase).

 

Note que existem colunas em vermelho. Elas indicam a existência de um campo chave. No padrão de desenvolvimento (Tabela 1) é possível implementar uma chave com duas colunas via programação. Este código é exemplificado nas listagens a seguir. Isso é utilizado na entidade TRExEXE, cuja definição está apresentada na Figura 7.

 

Figura 7. Definindo as chaves primárias (PDACase).

Este esquema é utilizado quando temos uma entidade fraca. Geralmente uma entidade fraca possui chaves duplas. A seguir temos exemplos de outros sistemas que utilizam tal conceito.

-          Exercícios praticados no treino;

-          Itens de uma venda;

-          Serviços realizados em uma Ordem de Serviço.

 

Agora vamos iniciar a codificação da aplicação. Para isso, inicie o IDE do HB++ (Iniciar | Handheld Basic++ v2 | HB++ Integrated Development Environment). Com o IDE aberto, crie um novo projeto e selecione a opção Palm OS Minimal Application.

Para nosso exemplo devemos utilizar os dados de acordo com o que foi apresentado na Figura 8. Apenas o campo Project filename pode ser criado no seguinte caminho: “[qualquer diretorio]\AcadeSoft\AcadeSoft.hpb”.

...

Quer ler esse conteúdo completo? Tenha acesso completo