Edit page

Refactoring e Reutilização de Software

Reutilização de Software

Software pode ser reutilizado de várias formas:

Libraries: adaptam através de parametrização, reutilizam código

Frameworks: adaptam através de extensão, reutilizam design

  • Em libraries, o nosso código invoca o da library, que por sua vez executa e devolve controlo ao nosso programa

  • No entanto, em frameworks, ao reutilizarmos o design, utilizamos a framework como um esqueleto do programa, no qual o nosso código é incorporado. Assim, damos o flow control do programa à framework. Este princípio de delegação de controlo à framework é chamado de Hollywood Principle: "Don't call us, we'll call you", embora seja também conhecido como o princípio de inversão de controle (Inversion of Control).

Code generators: adaptam através da escrita de modelos e frases de alto nível, geram código e possibilitam aspect-oriented development (e.g. JPA) e model-driven engineering (e.g. OutSystems)

Product Lines: adaptam por seleção e extensão, com módulos comuns e módulos de variação

Services: adaptam através de parametrização, sendo a diferença destes e das bibliotecas, que estes partilham serviços

Refactoring (Refatoração)

Processo de Refactoring

As abstrações dependem do contexto, e é difícil desenvolver boas abstraçẽs através de abordagens top-down. Refactoring, é uma abordagem bottom-up para a construção de abstrações a partir de casos de uso de código.

O processo de refactoring é precedido pelos seguintes passos:

  1. Desenvolver testes para a funcionalidade que vai ser implementada.
  2. Foco em implementar a funcionalidade corretamente, sem pensar na estrutura ótima.
  3. Quando a funcionalidade estiver corretamente implementada e todos os testes passarem, podemos iniciar o processo de refactoring.

O processo de refactoring é caraterizado pelo seguinte ciclo:

  1. Mudar a estrutura
  2. Testar

NOTA IMPORTANTE

  • A refatoração é um processo incremental. É importante que se façam mudanças pequenas de cada vez, para que o código NUNCA deixe de funcionar.

Tipos de Refactoring

Secção Incompleta

Esta secção encontra-se incompleta. Procuram-se contribuidores.

  • Test Driven Development

  • Litter-Pickup

  • Comprehension

  • Preparatory: "make the change easy, then make the easy change"

  • Planned

  • Long-Term: substituir uma abstração com uma nova interface