A aplicação bancária representa a funcionalidades das classes Dialog, Menu e Command.
Um banco tem zero ou mais contas e zero ou mais titulares e é identificado univocamente pelo seu nome. A classe Bank deve disponibilizar métodos que permitam guardar/remover contas e titulares. Do ponto de vista de um banco, tanto as contas como os titulares são identificados por um número. Quando é iniciada a aplicação bancária e se pretende criar um banco novo, é necessário indicar o nome do banco que se pretende criar. Adicionalmente, as funcionalidades que um banco deve disponibilizar são as seguintes:
As classes Bank, SavingsAccount, BankAccount e Holder devem disponibilizar as operações necessárias para o funcionamento da aplicação.
A interacção deve permitir o acesso à funcionalidade do "core". Cada operação vai estar encapsulada num comando (subclasse de Command) que tem como "receiver" uma entidade do "core". As instâncias dos comandos são agrupadas em menus.
Esta funcionalidade (de mostrar as operações disponíveis para uma dada entidade e executar a opção escolhida pelo utilizador) deve ser concretizada pelas classes Menu e Command. A classe Command 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 (é utilizado no menu para indicar os títulos das operações disponíveis). Esta classe abstracta define o método abstracto execute que executa a operação. Cada operação a disponibilizar num menu terá que ser concretizada numa sua subclasse. 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.
Por forma a centralizar (e assim permitir a reutilização de código) a interface com o utilizador, existe uma classe, chamada Dialog, que é responsável pela interacção com o utilizador. Esta classe fornece métodos que permitem escrever uma cadeia de caracteres (prompt) e ler um determinado tipo de dados inserido pelo utilizador. Esta classe concentra todas as operações de leitura de dados (fornecidos pelo utilizador). Os dados lidos são validados, i.e., apenas são aceites dados correctos. No caso do utilizador inserir dados inválidos, é pedida a respectiva reintrodução. A classe UserInteraction permite ainda ler os dados introduzidos pelo utilizador via ficheiro e escrever o resultado da execução da aplicação num ficheiro em vez de escrever no standard output. O nome destes ficheiros são indicados através das propriedades in e out . Caso não sejam indicadas, são utilizados os valores por omissão (standard input e standard output).
A estrutura desta aplicação é semelhante à do projecto a desenvolver. A versão apresentada é válida para 2013/2014.
Each package includes a makefile to compile and build the corresponding JAR archive. Note that the makefiles assume that all JAR dependencies reside in /usr/share/java (linux installation -- other environments may, and indeed should work, but are not covered in this text).
Ver com atenção o código da aplicacão bancária (acima) já com a introdução da interacção com o utilizador.
A seguinte página descreve o padrão Command (Comando), que está subjacente à estrutura da interacção textual da aplicação.