A aplicação bancária representa a funcionalidades das classes Dialog, Menu e Command.
Diagrama UML do "core" da aplicação bancária (versão antiga) |
---|
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 Client devem disponibilizar as operações necessárias para o funcionamento da aplicação.
Note-se que a versão actual do material de apoio já não usa atributos nos comandos, pelo que os indicados no diagrama devem ser ignorados.
Diagrama UML das packages de interacção (versão antiga) |
---|
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.
A leitura de dados do utilizador é realizada a partir de formulários (instâncias da classe Form), existindo um por comando. Esta classe agrega os campos de entrada (classe Input e especializações), concentrando 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 escrita de dados é realizada através da classe Display, existindo uma instância por comando. Esta classe permite 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.
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.
Assumindo que a aplicação já está disponível nos vários JARs (po-bank-core, po-bank-app, po-uilib), para a execução, basta definir a variável CLASSPATH apropriadamente:
export CLASSPATH=/caminho/para/po-bank-core.jar:/caminho/para/po-bank-app.jar:/caminho/para/po-uilib.jar
Seguidamente, basta invocar o método main:
java bank.app.App BPO
Neste comando, "BPO" é simplesmente o argumento do programa principal, sendo específico desta aplicação.
Alternativamente (embora menos legível e menos conveniente), pode ser indicado o valor de CLASSPATH directamente ao comando que executa a aplicação (opção -cp):
java -cp /caminho/para/po-bank-core.jar:/caminho/para/po-bank-app.jar:/caminho/para/po-uilib.jar bank.app.App BPO
Note-se que, neste último comando, a classe que contém o método main a executar deve vir depois das opções do comando java (que executa a máquina virtual do Java).
A seguinte página descreve o padrão Command (Comando), que está subjacente à estrutura da interacção textual da aplicação.