quarta-feira, 20 de agosto de 2008

Interação e Substituição de Objetos

Ter uma visão clara de como os objetos interagem é um fator fundamental no desenvolvimento de software orientado a objetos. É até mais importante do que saber como cada objeto funciona isoladamente.

Pensando que um software O. O. é uma espécie de teia de objetos que se interconectam, fazendo de sua interação o fator gerador do comportamento do software, mudar seu comportamento será como plugar novos objetos no lugar dos que estavam, bastando para isso que o plug esteja no formato esperado.

Simular este tipo de comportamento no software requer que tomemos algumas medidas de análise bem pensadas, estudadas, para que tudo se encaixe da maneira apropriada.

Tipos de Substituição

A substituição dos objetos pode não servir apenas para mudar o comportamento do software. Ela pode servir, principalmente, para analisar o comportamento do mesmo.

Se ao invés de plugar um objeto que precise desempenhar determinada tarefa você plugar outro que registre ou exponha como se deu a interação dos outros objetos com ele, você terá uma excelente ferramenta para análise comportamental.

Caso o objeto precise desempenhar tarefas necessitando da colaboração de outros, sendo requerida a passagem de mensagens para os mesmos, seu objeto pode simulá-la sem que seja necessário qualquer esforço adicional.

Você pode substituir o comportamento do objeto (plug) real pelo comportamento que você deseja, apenas para investigar o comportamento dos objetos (plugues) em que ele estará conectado.

Objeto Substituto

Como disse, para que o objeto substituto possa ocupar o espaço do original, basta que ele apresente o mesmo formato. Este formato do objeto pode ser descrito também como a interface do objeto, ou seja, a maneira com a qual é feita a interação com ele.

Mantendo a mesma interface, os objetos interconectados a ele não precisam ser modificados, podendo lhe referir sempre da mesma maneira.

Mock Object, Proxy e outros nomes

Ao objeto substituto são dados diversos nomes, como Mock Object (geralmente como é referenciado em TDD), Proxy (Padrão GoF), Surrogate, etc. Apesar de haverem diversas variações na maneira como são usados (por exemplo, como virtual proxies, remote proxies, smart references, etc.), todos se baseiam no sentido da substituição do objeto original.

Em suma

A substituição dos objetos para análise, teste ou mudança do comportamento é um dos conceitos mais significativos para o entendimento da criação de software testável e de objetos reutilizáveis. Entender as variações possíveis e os benefícios e problemas trazidos por cada implementação traz uma grande maturidade ao desenvolvedor e potencializa o crescimento e a manutenção de software, levando à um custo de alteração mais baixo e a melhoria da "testabilidade" do mesmo.

Nenhum comentário: