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
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.
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

Reuse release equivalence principle

  • 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 entidadede 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