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