SlideShare a Scribd company logo
1 of 3
Download to read offline
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

More Related Content

Similar to Reuse release equivalence principle

Pacotes -organizando_suas_classes_e_bibliotecas
Pacotes  -organizando_suas_classes_e_bibliotecasPacotes  -organizando_suas_classes_e_bibliotecas
Pacotes -organizando_suas_classes_e_bibliotecasPedro Neto
 
Curso Java Básico - Aula 04
Curso Java Básico - Aula 04Curso Java Básico - Aula 04
Curso Java Básico - Aula 04Natanael Fonseca
 
Como gerenciar de forma correta os pacotes em debian e distribuições derivadas
Como gerenciar de forma correta os pacotes em debian e distribuições derivadasComo gerenciar de forma correta os pacotes em debian e distribuições derivadas
Como gerenciar de forma correta os pacotes em debian e distribuições derivadasAntonio Paulo
 
http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/Rodrigo Vieira
 
Construção de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaConstrução de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaFernando Camargo
 
40 php orientado a objetos
40 php orientado a objetos40 php orientado a objetos
40 php orientado a objetosFrancisco Santos
 
php orientado_a_objetos
php orientado_a_objetosphp orientado_a_objetos
php orientado_a_objetosFer Nando
 
Apostila php orientado a objetos
Apostila php   orientado a objetosApostila php   orientado a objetos
Apostila php orientado a objetosFabiano Rodrigues
 
Curso de java - Antonio Alves - aula 04
Curso de java - Antonio Alves -  aula 04Curso de java - Antonio Alves -  aula 04
Curso de java - Antonio Alves - aula 04Antonio Alves
 
hibernate annotation
hibernate annotationhibernate annotation
hibernate annotationeduardo dias
 
Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)Ryan Padilha
 
Orientação a objetos com PHP
Orientação a objetos com PHPOrientação a objetos com PHP
Orientação a objetos com PHPLeonardo Soares
 
Prototype1 - thiago
Prototype1 - thiagoPrototype1 - thiago
Prototype1 - thiagotceufrasio1
 

Similar to Reuse release equivalence principle (20)

Pacotes -organizando_suas_classes_e_bibliotecas
Pacotes  -organizando_suas_classes_e_bibliotecasPacotes  -organizando_suas_classes_e_bibliotecas
Pacotes -organizando_suas_classes_e_bibliotecas
 
Rep reuse release equivalence principle
Rep reuse release equivalence principleRep reuse release equivalence principle
Rep reuse release equivalence principle
 
Curso Java Básico - Aula 04
Curso Java Básico - Aula 04Curso Java Básico - Aula 04
Curso Java Básico - Aula 04
 
Java 11 Pacotes
Java 11 PacotesJava 11 Pacotes
Java 11 Pacotes
 
Como gerenciar de forma correta os pacotes em debian e distribuições derivadas
Como gerenciar de forma correta os pacotes em debian e distribuições derivadasComo gerenciar de forma correta os pacotes em debian e distribuições derivadas
Como gerenciar de forma correta os pacotes em debian e distribuições derivadas
 
http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/
 
Fragmentos
FragmentosFragmentos
Fragmentos
 
Construção de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaConstrução de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em Java
 
40 php orientado a objetos
40 php orientado a objetos40 php orientado a objetos
40 php orientado a objetos
 
php orientado_a_objetos
php orientado_a_objetosphp orientado_a_objetos
php orientado_a_objetos
 
40 php orientado a objetos
40 php orientado a objetos40 php orientado a objetos
40 php orientado a objetos
 
Apostila php orientado a objetos
Apostila php   orientado a objetosApostila php   orientado a objetos
Apostila php orientado a objetos
 
Java7
Java7Java7
Java7
 
Curso de java - Antonio Alves - aula 04
Curso de java - Antonio Alves -  aula 04Curso de java - Antonio Alves -  aula 04
Curso de java - Antonio Alves - aula 04
 
hibernate annotation
hibernate annotationhibernate annotation
hibernate annotation
 
Netbeans IDE
Netbeans IDENetbeans IDE
Netbeans IDE
 
01 java fundamentos
01 java fundamentos01 java fundamentos
01 java fundamentos
 
Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)
 
Orientação a objetos com PHP
Orientação a objetos com PHPOrientação a objetos com PHP
Orientação a objetos com PHP
 
Prototype1 - thiago
Prototype1 - thiagoPrototype1 - thiago
Prototype1 - thiago
 

More from Engenharia de Software Ágil

OCP - The Open Close Principle - Princípio aberto/fechado
OCP - The Open Close Principle - Princípio aberto/fechadoOCP - The Open Close Principle - Princípio aberto/fechado
OCP - The Open Close Principle - Princípio aberto/fechadoEngenharia de Software Ágil
 

More from Engenharia de Software Ágil (20)

Sap – stablility and abstract principle
Sap – stablility and abstract principleSap – stablility and abstract principle
Sap – stablility and abstract principle
 
Sap – stablility and abstract principle
Sap – stablility and abstract principleSap – stablility and abstract principle
Sap – stablility and abstract principle
 
Common closure principle
Common closure principleCommon closure principle
Common closure principle
 
Common closure principle
Common closure principle Common closure principle
Common closure principle
 
Acyclic dependencies principle
Acyclic dependencies principleAcyclic dependencies principle
Acyclic dependencies principle
 
Acyclic dependencies principle (adp)
Acyclic dependencies principle  (adp)Acyclic dependencies principle  (adp)
Acyclic dependencies principle (adp)
 
OCP - The Open Close Principle - Princípio aberto/fechado
OCP - The Open Close Principle - Princípio aberto/fechadoOCP - The Open Close Principle - Princípio aberto/fechado
OCP - The Open Close Principle - Princípio aberto/fechado
 
Sdp – stable dependencies principles
Sdp – stable dependencies principlesSdp – stable dependencies principles
Sdp – stable dependencies principles
 
principio de reutilização comum
principio de reutilização comumprincipio de reutilização comum
principio de reutilização comum
 
Princípio law of demeter
Princípio law of demeterPrincípio law of demeter
Princípio law of demeter
 
Lod law of demeter
Lod law of demeterLod law of demeter
Lod law of demeter
 
Dip the dependency inversion principle
Dip   the dependency inversion principleDip   the dependency inversion principle
Dip the dependency inversion principle
 
Dip the dependency inversion principle
Dip   the dependency inversion principleDip   the dependency inversion principle
Dip the dependency inversion principle
 
Dip the dependency inversion principle
Dip   the dependency inversion principleDip   the dependency inversion principle
Dip the dependency inversion principle
 
(ISP) - Interface Segregation Principle
(ISP)  - Interface Segregation Principle(ISP)  - Interface Segregation Principle
(ISP) - Interface Segregation Principle
 
LSP – The Liskov Substitution Principle
LSP – The Liskov Substitution PrincipleLSP – The Liskov Substitution Principle
LSP – The Liskov Substitution Principle
 
SRP - Single Responsability Principle
SRP - Single Responsability PrincipleSRP - Single Responsability Principle
SRP - Single Responsability Principle
 
Princípio Law Of Demeter (LOD)
Princípio Law Of Demeter (LOD)Princípio Law Of Demeter (LOD)
Princípio Law Of Demeter (LOD)
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
FDD
FDDFDD
FDD
 

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