A unidade de reuso é a unidade da versão. Apenas componentes que possuem um
sistema de rastreamento de versão podem ter reuso efetivo. Esta unidade é o pacote.
1. Centro Universitário UNA
Engenharia de Software centrada em Métodos Ágeis
Professor Edgar Davidson
Alunos:
Davidson Marques
Jarison Araújo
Princípio da Equivalência de Reuso/Versão (REP)
A unidade de reuso é a unidade da versão. Apenas componentes que possuem um
sistema de rastreamento de versão podem ter reuso efetivo. Esta unidade é o pacote.
Código não deve ser reutilizado, copiando-o de uma classe e colá-lo em outra. Nem
mesmo uma classe deve ser copiada de seu pacote original para dentro do seu projeto.
Fazendo isso você não obterá benefício nenhum quando o autor original corrigir erros
no código, acrescentar recursos ou melhorar seus métodos. Se ele modificar algo, você
terá que descobrir o que mudou e alterar na sua cópia. Com o tempo, seu código se
distanciará do original e com o tempo, poderá até mesmo se tornar irreconhecível.
Em vez disso, o código deve ser reutilizado, incluindo a biblioteca (pacote) liberada
pelo autor original. O autor original mantém a responsabilidade pela manutenção, você
não deve nem precisar conhecer o código fonte.
Para que esta reuso seja mesmo eficaz, o autor original deve manter um sistema de
controle de versões e identificar com números ou nomes de alguma maneira para que os
clientes destes pacotes possam perceber as diferentes versões.
A unidade de versão para o reuso torna-se o pacote. Mesmo que apenas uma classe seja
utilizada no reuso, pois existem tantas classes em uma biblioteca que seria oneroso
manter um sistema de versão para liberação e acompanhamento de todas elas
2. separadamente. Uma entidade de maior escala é necessária para este caso e o pacote se
enquadra bem nesta necessidade.
Contra-exemplo:
meu.pacote.trataarquivos
ArquivoParaDownload
+gerarArquivoZip()
DocumentosParaArquivoamento
+List arquivos
+gerarArquivoZip()
Neste contra-exemplo duas classes distintas dentro do meu.pacote implementam o
mesmo método, dispensando inteiramente o reuso. Isso acarreta problemas conhecidos,
como a necessidade de intervenção em vários pontos do programa para realizar a
mesma tarefa.
No segundo contra-exemplo, mostrado a seguir, o reuso é aplicado utilizando-se de uma
terceira classe especializada no tratamento de arquivos.
3. meu.pacote.trataarquivos
ArquivoParaDownload DocumentosParaArquivoamento
+List arquivos
GeradorDeArquivos
+gerarArquivoZip()
Mesmo assim, está ainda é uma classe que pertence ao meu.pacote e é de nossa
responsabilidade mantê-la mesmo tendo copiado o seu funcionamento de outra classe,
pertencente a outro pacote.
No terceiro exemplo, já utilizando o reuso efetivo, com o princípio descrito aqui, não
copiamos nem reproduzimos o código já existente, utilizamos diretamente a classe que
pertence ao pacote do autor original fazendo reuso de um código que possui versão
definida e garantia de funcionamento, isentando-nos como desenvolvedores da
responsabilidade de manutenção sobre este código.
meu.pacote.trataarquivos
ArquivoParaDownload DocumentosParaArquivoamento
+List arquivos
java.util.zip
ZipOutputStream