A aplicação Exemplo


O objectivo desta aplicação é exemplificar a aplicação da framework de interacção com o utilizador po-uilib no desenvolvimento de uma aplciação. Esta aplicação simples deve guardar uma série  de inteiros (únicos) inseridos pelo utilizador, sendo possível realizar as seguintes operações sobre esta lista de inteiros:
  • Acrescentar um novo número à série;
  • Remover um número da série;
  • Apresentar a lista de números inseridos pela mesma ordem em que eles foram inseridos;
  • Indicar o número de inteiros presente na série.
De forma suncinta, as aplicações a desenvolver no contexto da disciplina Programação com Objectos devem disponibilizar as operações que o utilizador pode realizar através de um ou mais menus, em que cada menu representa um conjunto de opções que o utilizador pode escolher para executar. Cada opção é concretizada por uma instância da classe Command. A classe Command é uma classe abstracta e representa uma operação genérica que pode ser executada sobre uma dada entidade. Cada comando sabe o título da operação que representa. O título de um comando é utilizado depois no menu para saber qual é o texto a apresentar ao utilizador para descrever cada opção do menu. Esta classe abstracta define o método abstracto execute que é o método invocado quando se escolhe uma dada opção de um menu. A funcionalidade específica de cada opção (i.e., a operação a realizar sobre o domínio da aplicação) é concretizada numa subclasse de Command a desenvolver pelo programador. As operações de apresentar e pedir dados ao utilizador devem ser realizadas através das entidades Display e Form.
A classe Menu recebe um número variável de comandos e mostra os títulos destes comandos por forma a que os utilizadores saibam as operações disponíveis. Cabe ainda ao menu executar o comando correspondente à opção escolhida pelo utilizador. De um modo geral, só se sai de um menu quando se escolhe a opção Sair (esta opção é concretizada automaticamente por um menu, não sendo necessário concretizar um comando específico para esta opção).  Caso se escolha outra opção que não a opção Sair, então o menu executará o comando correspondente à opção escolhida (por forma a realizar a funcionalidade associada à opção escolhida) e de seguida voltará a apresentar o conjunto de opção do menu e a pedir ao utilizador para escolher uma nova opção. Todas estas entidades são fornecidas pela framework po-uilib. Uma descrição detalhada destas entidades pode ser encontrada nesta secção.

Relativamente à interacção da aplicação a desenvolver, decidiu-se apresentar as opções ao utilizador utilizando dois menus: o menu principal e o menu de edição. O menu principal deve apresentar as oseguintes pções:
  • Apresentar a série de inteiros;
  • Indicar a quantidade de inteiros presente na série;
  • Abrir o menu de edição.
O menu de edição apresenta as opções que permitem alterar a série de inteiros:
  • Acrescentar um inteiros à série;
  • Remover um inteiro da série
De seguida vamos apresentar as várias entidades desenvolvidas para cada uma das camadas da aplicação a desenvolver. A camada de lógica de negócio da aplicação é apresentada nesta secção. A secção Camada de serviços apresenta a concretização da camada de serviços  desta aplicação exemplo, apresentando os vários serviços ou comandos concretizados. O código da camada de apresentação concretizado para esta aplicação exemplo está apresentadado na secção Camada de apresentação. Finalmente, o ponto de entrada da aplicação exemplo é descrito nesta secção.


Organização do código da aplicação

De seguida descreve-se a organização do código da aplicação. As diferentes camadas da aplicação devem ser guardadas em diferentes packages da aplicação. O package raiz da aplicação tem o nome ex. O código da camada de domínio deve ser guardado no sub-package com o nome ex.core, enquanto que o código da camada de serviços deve ser guardado no sub-package ex.app. Por uma questão de organização, cada menu e respectivos comandos devem ser guardados num sub-package de app. A classe com o ponto de entrada da aplicação (e onde o menu principal da aplicação é criado e aberto) deve estar no package da camada de serviços (ex.app neste caso). A seguinte figura mostra a estrutura de directórios que a aplicação exemplo deverá ter:


Estando no directório pai do directório que contém o exemplo, o comando para compilar a aplicação será:

javac -cp .:po-uilib.jar `find ex -name *.java"

Para correr a aplicação será necessário dar o comando

java -cp .:po-uilib.jar ex.app.App

Código do Exemplo


Código fonte completo do exemplo: ex.jar