Camada de apresentação

Relativamente à camada de apresentação, normalmente apenas é necessário desenvolver as classes que representam os menus da aplicação e os vários comandos que representam as funcionalidades da aplicação a disponibilizar ao utilizador.  As restantes entidades desta camada (responsáveis por apresentar e pedir dados ao utilizador) já estão concretizada na framework po-uilib.
A interacção com o utilizador da aplicação exemplo é feita através de dois menus, o menu principal e um submenu que oferece um conjunto de operações que permitem editar as entidades desta aplicação. O menu principal da aplicação é o primeiro menu que aparece quando a aplicação começa a sua execução. Nesta aplicação, este menu vai ter 3 opções:

  1. apresentar os números inseridos - funcionalidade concretizada pela classe ListNumbers;
  2. apresentar a quantidade de números guardados - funcionalidade concretizada por ShowNumberOfIntegers;
  3. e apresentar o menu de edição - funcionalidade concretizada por ShowEditMenu.
De seguida apresenta-se a classe MainMenu que concretiza o menu principal:
package ex.app.main;

import ex.core.Sequence;
import pt.tecnico.uilib.menus.Menu;
import pt.tecnico.uilib.menus.DoOpenMenu;
import ex.app.Label;
import ex.app.edit.EditMenu;

public class MainMenu extends Menu {

    //Constructor
    public MainMenu(Sequence ent) {
        super(Label.MAIN_MENU_TITLE,
              new ShowSequence(ent), new ShowSequenceSize(ent), new DoOpenMenu(Label.OPEN_EDIT_MENU_TITLE, new EditMenu(ent))
              ); 
    }
}

Os títulos dos menus e dos comandos estão definidos na interface Label e não directamente em cada menu e comando. Isto permite alterar facilmente a língua da aplicação, bastando alterar apenas um ficheiro em vez de ter que ser necessário alterar todos os comandos e menus.

O submenu da aplicação vai oferecer duas opções (suportadas pelas classes AddNumber e RemoveNumber) que permitem adicionar e remover números à série de números guardada pela aplicação, respectivamente. Este menu é concretizado pela classe EditMenu:

package ex.app.edit;

import ex.core.Sequence;
import pt.tecnico.uilib.menus.Menu;

public class EditMenu extends Menu {
  //Constructor
  public EditMenu(Sequence ent) {
    super(ex.app.Label.EDIT_MENU_TITLE,
          new AddNumber(ent),
          new RemoveNumber(ent)
          );
  }
}

Por uma questão de organização do código da aplicação cada menu e respectivos comandos são colocados num sub-package distinto pertencente à camada de apresentação. Por exemplo, o menu EditMenu pertence ao mesmo package que o comando AddNumber.

Os vários comandos da aplicação são apresentados na subsecção Comandos. Ainda pertencente à camada de apresentação é o ponto de entrada da aplicação que é responsável por iniciar a aplicação.