30.06.2013 Views

Apostila Java

Apostila Java

Apostila Java

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

INTERFACES GRÁFICAS BASEADAS EM BEHAVIOR ISMO (SWING)<br />

mais adiante, na aula sobre threads. Outro detalhe interessante a ser lembrado é o fato de que o modelo<br />

pode ser manipulado por outros sistemas de computador. Ou seja, no exemplo acima aparece um<br />

usuário como agente ativo no sistema, mas a figura do usuário poderia ser substituída por algum<br />

processo automático controlado por software e/ou hardware. Imagine um sistema bancário que aplica<br />

dinheiro automaticamente na poupança a cada vez que o saldo for superior a R$ 1.000,00. O usuário,<br />

correntista, fica mexendo em sua conta bancária sem interagir diretamente com as aplicações<br />

financeiras. O próprio sistema bancário é que detecta o saldo suficiente e dispara um processo de<br />

aplicação bancária ou resgate de aplicação.<br />

Muitas situações são imagináveis, a maioria delas prevista em design patterns, o que dá uma boa noção<br />

sobre a necessidade de um estudo detalhado sobre Design Patterns.<br />

Qual a vantagem de se codificar o modelo, o controle e a visão em classes separadas?<br />

Imagine que você desenvolva um sistema de controle de estoque de uma loja, formado por alguns<br />

formulários de entrada de dados, emissão de relatórios e que tenha também o controle fiscal. Agora<br />

imagine que o governo altere as normas fiscais vigentes no País. Caso você tenha codificado seu<br />

sistema em uma única classe, você terá que alterar os trechos de código relativos ao controle fiscal,<br />

procurando esses trechos entre outros códigos que nada tem a ver com o controle fiscal – como, por<br />

exemplo, aspectos da interface, dos relatórios, etc. Ou então imagine que o gerente de marketing de sua<br />

empresa sugeriu mudar drasticamente o visual do sistema, permitindo aos compradores da loja o acesso<br />

direto à consulta de preços através de uma nova interface que agrega informações com marketing.<br />

Mesmo que você tenha codificado seu sistema em módulos separados, se esses módulos possuem<br />

referências entre eles, ou seja, ponteiros entre as classes, você terá um grande trabalho de reformulação<br />

da interface gráfica e, principalmente, de garantir a consistência do sistema – talvez tenha que refazer<br />

tudo.<br />

Embora um software possa ser modulado através de técnicas convencionais, a presença de referências<br />

entre os módulos impede uma dinâmica eficiente na manutenção desses sistemas. Se você tiver, por<br />

exemplo, uma classe de controle fiscal com um ponteiro para a classe que gera a interface gráfica, e<br />

essa interface gráfica for renomeada ou removida do sistema, será necessário modificar também a classe<br />

de controle fiscal para que o sistema continue consistente. Ou então se você quiser reaproveitar uma boa<br />

interface gráfica em um novo modelo, você terá uma complicada tarefa de verificar todos os ponteiros<br />

entre as duas classes.<br />

O CMV vem justamente propor uma forma modular de atualização de sistemas, onde a modificação de<br />

um aspecto do sistema não interfere nos demais. Por exemplo, em um sistema CMV, podemos ter várias<br />

interfaces gráficas diferentes refletindo os dados de um único modelo, ou então diferentes formas de<br />

controle atuando sobre esse mesmo modelo – por exemplo: a interface dos usuários só permite consulta<br />

enquanto a dos gerentes permite modificação nos valores. Quem faz a comunicação entre os<br />

módulos de um sistema behaviorista não são mais os componentes do software,<br />

diretamente via referências, mas sim a própria máquina virtual que possui suporte a<br />

esse tipo de programação - baseada em eventos chamados de notificações. De fato,<br />

o comportamento de um sistema behaviorista gira em torno do modelo de dados – sempre que algum<br />

formato ou valor for modificado no modelo de dados, o objeto que representa esse modelo notifica a JVM<br />

sobre que tipo de alteração ele sofreu. A máquina virtual, por sua vez, se encarrega de repassar a<br />

notificação a todos os observadores que estão associados a esse modelo. Note que o modelo não sabe<br />

se existem observadores sobre ele e nem o quê esses eventuais observadores fazem com as<br />

notificações recebidas, pois não existe nenhuma referência direta entre o modelo (observável) e os<br />

observadores. A comunicação entre os módulos de um sistema CMV aparece na figura abaixo:<br />

112

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!