Exercício 3

  1. Ainda utilizando o projeto de aplicação bancária, vamos escrever um aspecto para checar propriedades sobre a nossa aplicação.
    • defina um aspecto chamado ValidaSistema que deve verificar se algum atributo privado é alterado fora do método set para o mesmo. Caso positivo um warning deve ser informado em tempo de compilação.
    • Salve o aspecto e observe se em algum ponto da aplicação a propriedade é violada.
  2. Provavelmente um dos pontos do sistema em que a propriedade é violada é no construtor das classes. Como o padrão de codificação sugere este tipo de programação, altere o aspecto definido para desconsiderar atribuições a atributos privados dentro do construtor da classe e observe os warnings.
  3. Mais uma vez refina o aspecto para não levar em conta métodos da interface negócio-dados (RepositorioContas), uma vez que suas implementações (RepositorioContasArray e RepositorioContasLista) manipulam os atributos nos seus métodos. Observe que apenas métodos da classe Conta ferem a propriedade. Modifique-os para alterar o atributo saldo através de um método set, porém privado. Depois de salvar a classe observe que não há mais warnings.
  4. Agora vamos definir um aspecto para checar uma pre-condição.
    • defina um aspecto para levantar a exceção IllegalArgumentException caso algum método seja chamado tendo uma referência não válida (null) em qualquer parte da aplicação.
    • comente a linha 10 da classe Banco, adicione o aspecto na lista de arquivos, gere e execute uma nova versão do sistema.
    • observe a quantidade de classes que o seu aspecto afeta.
  5. Outra precondição que pode ser checada é se após a realização de um crédito o valor creditado foi somado ao saldo.