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:
- Desenvolver testes para a funcionalidade que vai ser implementada.
- Foco em implementar a funcionalidade corretamente, sem pensar na estrutura ótima.
- 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:
- Mudar a estrutura
- 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