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:
- apresentar os números inseridos - funcionalidade concretizada pela classe ListNumbers;
- apresentar a quantidade de números guardados - funcionalidade concretizada por ShowNumberOfIntegers;
- e apresentar o menu de edição - funcionalidade concretizada por ShowEditMenu.
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.