Inicialmente o que se observa é a janela de login como ilustra a figura 9. Esta interface não possui grandes mistérios, através dela o usuário inicia o programa após entrar com o seu nome de usuário e senha.
FIGURA 9 - Janela de login
O sistema primeiramente verifica se o usuário digitou alguma coisa nos campos de login e de senha, se por ventura o usuário esqueceu de digitar algum dos campos, uma mensagem é emitida através de diálogo da classe JOptionPane. Após esta verificação o sistema faz uma consulta no banco de dados verificando se existe um usuário com o nome de login digitado no campo login. Se for positivo então compara a
senha digitada com a do usuário cadastrado, se coincidirem então passa para o próximo passo. Se por acaso o login ou a senha não forem compatíveis com os dados cadastrados no banco então o sistema gera novamente uma mensagem. Aqui vale lembrar que não foi utilizada criptografia ou qualquer outra técnica parecida.
No passo seguinte o sistema realiza nova consulta desta vez para verificar que tipo de usuário acessou o sistema. Esta informação é de grande importância por que a tela inicial será apresentada de acordo com o usuário. O sistema está preparado para suportar dois tipos de usuário, sendo um que tem privilégio total conhecido como administrador e outro conhecido como atendente que pode realizar somente as funções mais básicas, como realizar empréstimo, devolução, renovação de empréstimo e reserva.
A partir da tela inicial figura 10 o administrador pode realizar todas as atividades do sistema. A diferença desta tela para a tela principal figura 11 acessada pelo usuário comum está no menu, o menu que o administrador consegue acessar não é o mesmo que o atendente acessa.
Para a tarefa de implementar o menu foi utilizado o padrão Decorator, já que segundo Gamma et. al (2000), este padrão é indicado para montar e decorar interfaces. A utilização deste padrão não só simplificou a implementação como também permite com facilidade que outras funcionalidades sejam implementadas no futuro, como por exemplo, adicionar um novo tipo de usuário. Para utilizar este padrão foram criadas seis classes como ilustra a figura 12 do NetBeans, duas abstratas, Component.java e Decorator.java, criadas para dar auxílio ao ConcreteComponent.java que implementa os componente do menu e ao ConcreteDecorator.java que monta o menu de acordo com os componentes implementados pelo ConcreteComponent.java. As classes DecorMenu.java e DecorLogin.java, são utilizadas apenas para dar suporte e não sobrecarregar outros métodos que dependem da implementação do padrão Decorator.
FIGURA 12 - Classes do pacote Decorator, demonstrando
FIGURA 13 - Exemplo de código que implementa elementos de menu
FIGURA 14 - Exemplo de código que implementa elementos de menu
(FONTE NetBeans, Projeto Biblioteca - TCC)
Os exemplos de código demonstram como os elementos do menu são definidos figura 13 e como os menus são montados figura 14.
Já o padrão Command participa ativamente na implementação dos eventos, dando apoio ao Decorator na realização das tarefas que os elementos da barra de menu devem executar. Para realizar as funções que o sistema possui foi necessário que se criassem cinco classes, como se pode observar na figura 15.
FIGURA 15 - Classes do pacote Decorator, demonstrando
A classe Acao.java implementa os eventos de ação do menu que são disparados através dos itens de menu. Já os eventos que são disparados através do mouse são implementados pela classe AcaoMouse.java, para os eventos de teclado foi criada a classe AcaoTeclado.java.
A classe Evento.java figura 17, armazena as informações do evento que deverá ser realizado e do objeto que está solicitando a ação do evento. Assim sempre que é instanciada uma classe que implemente algum evento também é instanciada uma classe Evento.java, quando é chamado o método que implementa a ação é passado como parâmetro o objeto evento, como no exemplo da figura 18.
FIGURA 16 - Classe Evento.java
No código da figura 17 pode-se observar que a classe Evento.java implementa quatro variáveis. Variável execut que é do tipo Object e janela que é do tipo JFrame e outras duas variáveis, evento e tipoObject que são do tipo String. A variável janela é utilizada para passar um objeto do tipo JFrame para um método exterior a classe que trata do evento, por exemplo quando uma janela deverá ser fechada por outra classe. A variável execut é utilizada para armazenar qualquer informação do objeto que está solicitando a ação do evento, por isto ele é do tipo Object.
A variável evento serve para passar informação do tipo de evento que o componente está necessitando. A variável tipoObject armazena o tipo de objeto que está necessitando do evento. Estas informações são utilizadas para fazer comparações pela classe que vai gerar o evento. Como podem existir componentes parecidos são utilizadas varias informações evitando assim que ocorram problemas de se clicar em um componente e outro evento ser executado.
responsável pela criação dos componentes da barra de menu. Sempre que é criado um componente de menu, se cria uma nova instância da classe Evento.java.
FIGURA 17 - Exemplo ConcreteComponent.java
Pode-se perceber que itens de menu são instanciados e em seguida objetos do tipo Evento são criados. O método setEvento recebe um valor que representa um evento que deverá ser executado, o método setTipoObject recebe um valor referente ao tipo de objeto que está solicitando a ação do evento e o método setExecut recebe o texto do objeto que solicita o evento. Em seguida é adicionado ao componente um ouvinte que no momento da execução do evento cria uma instância da classe Acao e passa o objeto evento como parâmetro.