Tal como dito na introdução, a interacção com o utilizador é concretizado utilizando as classes Menu, Form e Display e mais algumas classes auxiliares.
A aplicação disponibiliza 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.
A classe Menu recebe um vector 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.
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 apresenta as opções:
- Apresentar a série de inteiros;
- Indicar a quantidade de inteiros presente na série;
- Abrir o menu de edição.
- Acrescentar um inteiros à série;
- Remover um inteiro da série
A secção Display descreve a forma de apresentar mensagens ao utilizador. A secção Form e Input descreve como é a framework de interacção com o utilizador e realiza a leitura de dados inseridos pelo utilizador.
Para começar a aplicação é necessário criar uma instância do menu principal e abrir o menu. A classe Main tem esta responsabilidade:
package ex.app; import ex.core.IntegerManager; import ex.app.main.MainMenu; public class Main { public static void main (String[] args) { IntegerManager myObject = new IntegerManager(); // Create main Entity MainMenu mainMenu = new MainMenu(myObject); // Create menu with Entity mainMenu.open(); // Open the menu pt.tecnico.po.ui.Dialog.IO.close(); } }
Antes de terminar a aplicação é necessário invocar o método close sobre a referência guardada no atributo estático IO. por forma a indicar que a interacção com o utilizador terminou, todos os recursos utilizados para suportar a interacção podem ser libertados e a aplicação pode realmente terminar. A não invocação deste método no fim da aplicação pode significar que a aplicação não termine (depende do tipo de interacção que esteja a ser utilizado).