Comando (padrão de desenho)/Banco, Conta, Titular (aplicação bancária)

From Wiki**3

< Comando (padrão de desenho)

A aplicação bancária representa a funcionalidades das classes Dialog, Menu e Command.

A package principal ("core")

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:

  • Criação de contas: recebe o valor do saldo inicial e devolve o número da nova conta.
  • Remoção de contas: recebe o número da conta a apagar. A conta só é apagada se o seu saldo total for igual a zero. Caso não seja possível apagar a conta, é apresentada uma mensagem justificativa.
  • Criação de titulares: recebe o nome do titular e número de identificação.
  • Remoção de titulares: recebe o número de identificação do titular.

As classes Bank, SavingsAccount, BankAccount e Holder devem disponibilizar as operações necessárias para o funcionamento da aplicação.

A package de interacção ("textui")

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.

  • Criar um titular;
  • Criar uma conta;
  • Listar todos os titulares ordenados por ordem crescente de nome ou de número;
  • Listar todas as contas;
  • Aceder às operações de um determinado titular;
  • Aceder às operações de uma determinada conta;
  • Alterar a data actual.

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).

Código e Exercícios

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.

  • Terminar o comando ChangeName.
  • Alterar o comando ShowAccounts, por forma a escrever uma conta por linha, em que os dois primeiros caracteres da linha são dois caracteres '\t' e os restantes são os retornados pelo método toString da classe BankAccount.
  • Finalmente, acrescentar duas novas funcionalidades à aplicação bancária:
    • A primeira permite adicionar um titular a uma conta;
    • A segunda permite a remoção de um titular, com a ressalva de que se uma conta só tiver um titular então esse titular não poderá ser removido.

Ver também

A seguinte página descreve o padrão Command (Comando), que está subjacente à estrutura da interacção textual da aplicação.