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.
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
A secção Menu e Command descreve as funcionalidade das classes Menu e Command com mais detalhe.
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).

A seguinte figura mostra a estrutura de directórios que a aplicação exemplo deverá ter.


Attachments