Princípio da Equivalência de
       Versão/Reuso


       Davidson Marques
        Jarison Araújo
REP (Reuse/Release Equivalence
          Principle)

• A unidade do reuso é a unidade de
  versão.
• Apenas componentes que possuem um
  sistema de rastreamento de versão
  podem ter reuso efetivo.
• Esta unidade é o pacote.
REP (Reuse/Release Equivalence
          Principle)

• Um método não deve ser copiado e
  colado dentro do seu código, nem mesmo
  uma classe deve ser copiada e colada em
  seu projeto
• Ao contrário disso, inclua o pacote dentro
  do seu projeto, mantendo o autor original
Mantendo o autor original

• O autor original identifica as versões
• O autor original evolui seu pacote e
  mantem a compatibilidade
• O autor original é resposável pela
  evolução e manutenção do código
• Você passa a ser cliente do pacote
Contra Exemplo
     meu.pacote.trataarquivos
                                • Não há reuso
      ArquivoParaDownload
                                • O mesmo método é
      +gerarArquivoZip()
                                  implementado em
DocumentosParaArquivoamento
                                  duas classes
+List arquivos

+gerarArquivoZip()                diferentes, mas com
                                  a mesma finalidade
                                • Elevado custo de
                                  manutenção
Evolução do Contra Exemplo
                 meu.pacote.trataarquivos
                                                         • Já é notório o reuso
ArquivoParaDownload        DocumentosParaArquivoamento
                           +List arquivos
                                                         • Ainda implementa o
                                                           método que foi
      GeradorDeArquivos
                                                           copiado de um
      +gerarArquivoZip()
                                                           outro pacote
                                                         • A responsabilidade
                                                           sobre a propagação
                                                           das correções ainda
                                                           é do novo autor
Exemplo

                  meu.pacote.trataarquivos
                                                        • Reuso de pacote
ArquivoParaDownload       DocumentosParaArquivoamento   • Responsabilidade
                          +List arquivos
                                                          de versão e
                                                          correções do
                        java.util.zip
ZipOutputStream                                           autor original
                                                        • O novo autor não
                                                          precisa conhecer
                                                          o código do
                                                          método reutilizado

Rep reuse release equivalence principle

  • 1.
    Princípio da Equivalênciade Versão/Reuso Davidson Marques Jarison Araújo
  • 2.
    REP (Reuse/Release Equivalence Principle) • A unidade do reuso é a unidade de versão. • Apenas componentes que possuem um sistema de rastreamento de versão podem ter reuso efetivo. • Esta unidade é o pacote.
  • 3.
    REP (Reuse/Release Equivalence Principle) • Um método não deve ser copiado e colado dentro do seu código, nem mesmo uma classe deve ser copiada e colada em seu projeto • Ao contrário disso, inclua o pacote dentro do seu projeto, mantendo o autor original
  • 4.
    Mantendo o autororiginal • O autor original identifica as versões • O autor original evolui seu pacote e mantem a compatibilidade • O autor original é resposável pela evolução e manutenção do código • Você passa a ser cliente do pacote
  • 5.
    Contra Exemplo meu.pacote.trataarquivos • Não há reuso ArquivoParaDownload • O mesmo método é +gerarArquivoZip() implementado em DocumentosParaArquivoamento duas classes +List arquivos +gerarArquivoZip() diferentes, mas com a mesma finalidade • Elevado custo de manutenção
  • 6.
    Evolução do ContraExemplo meu.pacote.trataarquivos • Já é notório o reuso ArquivoParaDownload DocumentosParaArquivoamento +List arquivos • Ainda implementa o método que foi GeradorDeArquivos copiado de um +gerarArquivoZip() outro pacote • A responsabilidade sobre a propagação das correções ainda é do novo autor
  • 7.
    Exemplo meu.pacote.trataarquivos • Reuso de pacote ArquivoParaDownload DocumentosParaArquivoamento • Responsabilidade +List arquivos de versão e correções do java.util.zip ZipOutputStream autor original • O novo autor não precisa conhecer o código do método reutilizado