O documento discute refatoração de código. Refatoração é o processo de modificar um sistema de software para melhorar a estrutura interna do código sem alterar seu comportamento externo. O documento descreve vários tipos de problemas de código ("mau cheiro") que podem ser resolvidos através de refatorações como extrair métodos, remover duplicação de código e consolidar hierarquias de classes.
Construção de Frameworks com Annotation e Reflection API em JavaFernando Camargo
Para acessar um método protected de uma superclasse usando reflection, precisamos desabilitar o mecanismo de verificação de visibilidade (acess check) antes de invocar o método. Isso pode ser feito chamando o método setAccessible(true) no objeto Method antes da invocação.
O documento discute técnicas de refatoração de código. Ele apresenta o que é refatoração, sua relação com desenvolvimento baseado em testes e exemplos de quando e como refatorar código, incluindo remover duplicações, melhorar a legibilidade do código e identificar problemas. Além disso, explica várias técnicas de refatoração como extrair classe, extrair interface e extrair método.
Apresentação com o tema de "Introdução à Metaprogramação com Java Reflection API" apresentada na 11ª edição do evento É Dia de Java na Universidade Federal de São Carlos (UFSCar) em São Carlos nos dias 24 e 25 de Agosto de 2012
O documento discute os conceitos básicos de programação orientada a objetos em Java, incluindo: 1) A classe Olamundo e o método main para iniciar aplicações; 2) A classe System para imprimir mensagens no console; 3) Regras para nomear identificadores em Java.
O documento apresenta os conceitos e objetivos do desenvolvimento orientado a testes (TDD). O TDD é uma metodologia que propõe escrever testes unitários antes de implementar o código, seguindo os passos vermelho-verde-refatoração. O documento explica os benefícios do TDD, como código de melhor qualidade e facilidade de refatoração.
Padrões para Desenvolvimento de Software Guiado por TestesEverton Rodrigues
Este documento fornece padrões e técnicas para desenvolvimento de software guiado por testes, incluindo escrever testes primeiro, usar dados de teste realistas, e isolar testes. Os padrões ajudam a responder perguntas como quanto testar e como escolher o que testar.
O documento descreve um curso sobre testes automatizados em Python. O curso aborda:
1) Testes unitários, de integração e funcionais com foco nos fundamentos de testes automatizados;
2) A prática do uso de testes automatizados no desenvolvimento guiado por testes (TDD);
3) As vantagens da abordagem TDD no curto e longo prazo e dos testes automatizados no longo prazo.
Construção de Frameworks com Annotation e Reflection API em JavaFernando Camargo
Para acessar um método protected de uma superclasse usando reflection, precisamos desabilitar o mecanismo de verificação de visibilidade (acess check) antes de invocar o método. Isso pode ser feito chamando o método setAccessible(true) no objeto Method antes da invocação.
O documento discute técnicas de refatoração de código. Ele apresenta o que é refatoração, sua relação com desenvolvimento baseado em testes e exemplos de quando e como refatorar código, incluindo remover duplicações, melhorar a legibilidade do código e identificar problemas. Além disso, explica várias técnicas de refatoração como extrair classe, extrair interface e extrair método.
Apresentação com o tema de "Introdução à Metaprogramação com Java Reflection API" apresentada na 11ª edição do evento É Dia de Java na Universidade Federal de São Carlos (UFSCar) em São Carlos nos dias 24 e 25 de Agosto de 2012
O documento discute os conceitos básicos de programação orientada a objetos em Java, incluindo: 1) A classe Olamundo e o método main para iniciar aplicações; 2) A classe System para imprimir mensagens no console; 3) Regras para nomear identificadores em Java.
O documento apresenta os conceitos e objetivos do desenvolvimento orientado a testes (TDD). O TDD é uma metodologia que propõe escrever testes unitários antes de implementar o código, seguindo os passos vermelho-verde-refatoração. O documento explica os benefícios do TDD, como código de melhor qualidade e facilidade de refatoração.
Padrões para Desenvolvimento de Software Guiado por TestesEverton Rodrigues
Este documento fornece padrões e técnicas para desenvolvimento de software guiado por testes, incluindo escrever testes primeiro, usar dados de teste realistas, e isolar testes. Os padrões ajudam a responder perguntas como quanto testar e como escolher o que testar.
O documento descreve um curso sobre testes automatizados em Python. O curso aborda:
1) Testes unitários, de integração e funcionais com foco nos fundamentos de testes automatizados;
2) A prática do uso de testes automatizados no desenvolvimento guiado por testes (TDD);
3) As vantagens da abordagem TDD no curto e longo prazo e dos testes automatizados no longo prazo.
Este documento discute conceitos básicos de Java como encapsulamento, construtores, modificador static, enumerações, herança, sobrescrita e polimorfismo. O documento explica como encapsular atributos e métodos, criar construtores, usar modificador static em variáveis e métodos, definir enumerações e como classes podem herdar características através da herança.
O documento discute vários sintomas de código ruim, como comentários desnecessários, métodos longos, código duplicado, classes grandes e complexas. Ele também fornece dicas para refatorar código, como extrair valores, serviços, formulários e consultas para classes separadas a fim de manter os modelos mais simples e coesos.
O documento discute sobre arrays em Java, apresentando suas características, como declarar e inicializar arrays unidimensionais e multidimensionais, iterar sobre arrays, e exemplos de código. Em três frases:
Arrays são estruturas de dados que armazenam múltiplos valores do mesmo tipo. O documento explica como declarar e manipular arrays unidimensionais e multidimensionais em Java, incluindo inicialização, iteração e exemplos de código. Além disso, discute sobre pontos negativos dos arrays e apresenta alternativas como o recurso enhanced for.
Primeiro Codigo em Java, Escrevendo código no bloco de notas;Compilando Código prompt de comando;
Executando Código no prompt de comando;
Conhecendo o codigo digitado; Java, Class
(1) O documento apresenta uma introdução à linguagem Java, abordando sua história, características da plataforma e fundamentos da linguagem como variáveis, operadores e estruturas condicionais;
(2) São apresentados conceitos como tipos primitivos, declaração de classes e variáveis, operadores unários, incremento/decremento e representação de sinal;
(3) O documento também explica conceitos importantes como escopo de variáveis e realiza um exercício prático para fixação dos conceitos apresentados.
Test-Driven Development - Introdução ao método de construção de software guia...Thiago Faria de Andrade
O documento resume uma palestra sobre Test Driven Development (TDD). Aborda o que é TDD, seus benefícios e padrões, como escrever testes e refatorar código mantendo os testes verdes. O objetivo é ensinar como aplicar TDD de forma efetiva para construir software de qualidade.
O documento resume uma aula sobre pacotes e tratamento de erros em Java. O documento discute como organizar classes em pacotes, importar classes de outros pacotes, criar arquivos JAR, tratar erros e exceções. O documento também discute classes utilitárias como String, wrappers, Date e Calendar.
Aula 2 da disciplina de Programação Orientada a Objetos. Os slides abordam a conversão de tipos de dados, tratamento de excessões, a classe String e a biblioteca JOptionPane
1) O documento apresenta os conceitos básicos de programação orientada a objetos, incluindo classes, atributos, métodos e objetos.
2) São discutidos modificadores de visibilidade e como eles controlam o acesso a atributos e métodos.
3) Exemplos demonstram como criar objetos a partir de classes e como acessar atributos e métodos de objetos.
Este documento apresenta os principais tópicos sobre desenvolvimento de software orientado a objetos em Java. Discute conceitos como classes, objetos, herança, encapsulamento e polimorfismo. Também aborda tópicos como arrays, exceções, tipos genéricos e pacotes no Java. O documento serve como um guia introdutório para o desenvolvimento de aplicações orientadas a objetos usando a linguagem Java.
Módulo 9 - Introdução à Programação Orientada a Objectos Luis Ferreira
Características da Programação Orientada por Objetos (POO).
Conceito de Classe, Atributos, Métodos, e Eventos.
Conceito de Objeto.
Conceito de Encapsulamento.
Conceito de Visibilidade de Classes, Métodos e Atributos.
Diagramas de Classe.
O ambiente de trabalho do Visual C#.
Objetos básicos e outras características básicas da linguagem do Visual C# e respetivo ambiente de trabalho.
O documento fornece uma introdução à tecnologia Java, abordando seus conceitos-chave como a linguagem Java, a máquina virtual Java, o ambiente de execução e desenvolvimento, além de explicar brevemente como escrever, compilar e executar aplicações Java.
O documento discute os tipos de erros que podem ocorrer durante a compilação e execução de código Java, como erros de sintaxe, classes não encontradas, e excessão de array. Ele também fornece dicas para prevenir e solucionar esses erros, como escrever código claro e testar frequentemente.
Curso de java - Antonio Alves - aula 04Antonio Alves
Este documento discute conceitos importantes de orientação a objetos em Java, incluindo static import, referência null, visibilidade de classes, métodos e atributos, e comentários no código Java.
1) O documento apresenta os detalhes de uma aula sobre programação orientada a objetos com Java, incluindo avaliação, conteúdo da prova e agenda.
2) A agenda inclui tópicos como operador ternário, enums, varargs, autoboxing/unboxing, definindo e sobrecarregando construtores e uso do método this.
3) Exemplos de código são fornecidos para ilustrar esses tópicos.
O documento discute testes automatizados de software, incluindo: (1) os tipos de testes automatizados como unitários, de integração e funcionais; (2) a importância da automação para garantir qualidade e evitar regressões; (3) o método de desenvolvimento guiado por testes (Test-Driven Development).
Este documento apresenta conceitos avançados de C# e .NET, incluindo:
1) Design de classes, interfaces, delegates e coleções;
2) Elementos como métodos anônimos, delegates genéricos e interfaces genéricas.
3) O foco é no uso de boas práticas de programação orientada a objetos.
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVACristiano Almeida
O documento apresenta uma aula introdutória sobre programação orientada a objetos em Java. Aborda conceitos básicos como introdução ao Java, NetBeans, variáveis, operadores, estruturas condicionais e laços de repetição.
O documento discute os principais conceitos de programação orientada a objetos em C#, incluindo classes, objetos, construtores, interfaces, campos, métodos, visibilidade e exemplos de implementação destes conceitos.
O documento resume uma aula sobre Java Collections Framework, JDBC e operações em banco de dados. Aborda conceitos como coleções, generics, interfaces como List, Set, Map, além de conectividade com bancos de dados relacionais e exemplos de consultas, inserções, atualizações e deleções.
O documento discute diversas refatorações, incluindo: (1) Extract Interface para extrair subconjuntos de interfaces comuns entre classes, (2) Inline Method para substituir chamadas de método claras pela implementação, (3) Extract Superclass para mover características comuns entre classes para uma superclasse.
O documento discute princípios de clean code em C#, incluindo nomes significativos, métodos simples, baixo acoplamento entre classes e redução de duplicação de código. O Visual Studio fornece ferramentas como Code Metrics para medir a qualidade do código e identificar áreas que precisam de refatoração.
Este documento discute conceitos básicos de Java como encapsulamento, construtores, modificador static, enumerações, herança, sobrescrita e polimorfismo. O documento explica como encapsular atributos e métodos, criar construtores, usar modificador static em variáveis e métodos, definir enumerações e como classes podem herdar características através da herança.
O documento discute vários sintomas de código ruim, como comentários desnecessários, métodos longos, código duplicado, classes grandes e complexas. Ele também fornece dicas para refatorar código, como extrair valores, serviços, formulários e consultas para classes separadas a fim de manter os modelos mais simples e coesos.
O documento discute sobre arrays em Java, apresentando suas características, como declarar e inicializar arrays unidimensionais e multidimensionais, iterar sobre arrays, e exemplos de código. Em três frases:
Arrays são estruturas de dados que armazenam múltiplos valores do mesmo tipo. O documento explica como declarar e manipular arrays unidimensionais e multidimensionais em Java, incluindo inicialização, iteração e exemplos de código. Além disso, discute sobre pontos negativos dos arrays e apresenta alternativas como o recurso enhanced for.
Primeiro Codigo em Java, Escrevendo código no bloco de notas;Compilando Código prompt de comando;
Executando Código no prompt de comando;
Conhecendo o codigo digitado; Java, Class
(1) O documento apresenta uma introdução à linguagem Java, abordando sua história, características da plataforma e fundamentos da linguagem como variáveis, operadores e estruturas condicionais;
(2) São apresentados conceitos como tipos primitivos, declaração de classes e variáveis, operadores unários, incremento/decremento e representação de sinal;
(3) O documento também explica conceitos importantes como escopo de variáveis e realiza um exercício prático para fixação dos conceitos apresentados.
Test-Driven Development - Introdução ao método de construção de software guia...Thiago Faria de Andrade
O documento resume uma palestra sobre Test Driven Development (TDD). Aborda o que é TDD, seus benefícios e padrões, como escrever testes e refatorar código mantendo os testes verdes. O objetivo é ensinar como aplicar TDD de forma efetiva para construir software de qualidade.
O documento resume uma aula sobre pacotes e tratamento de erros em Java. O documento discute como organizar classes em pacotes, importar classes de outros pacotes, criar arquivos JAR, tratar erros e exceções. O documento também discute classes utilitárias como String, wrappers, Date e Calendar.
Aula 2 da disciplina de Programação Orientada a Objetos. Os slides abordam a conversão de tipos de dados, tratamento de excessões, a classe String e a biblioteca JOptionPane
1) O documento apresenta os conceitos básicos de programação orientada a objetos, incluindo classes, atributos, métodos e objetos.
2) São discutidos modificadores de visibilidade e como eles controlam o acesso a atributos e métodos.
3) Exemplos demonstram como criar objetos a partir de classes e como acessar atributos e métodos de objetos.
Este documento apresenta os principais tópicos sobre desenvolvimento de software orientado a objetos em Java. Discute conceitos como classes, objetos, herança, encapsulamento e polimorfismo. Também aborda tópicos como arrays, exceções, tipos genéricos e pacotes no Java. O documento serve como um guia introdutório para o desenvolvimento de aplicações orientadas a objetos usando a linguagem Java.
Módulo 9 - Introdução à Programação Orientada a Objectos Luis Ferreira
Características da Programação Orientada por Objetos (POO).
Conceito de Classe, Atributos, Métodos, e Eventos.
Conceito de Objeto.
Conceito de Encapsulamento.
Conceito de Visibilidade de Classes, Métodos e Atributos.
Diagramas de Classe.
O ambiente de trabalho do Visual C#.
Objetos básicos e outras características básicas da linguagem do Visual C# e respetivo ambiente de trabalho.
O documento fornece uma introdução à tecnologia Java, abordando seus conceitos-chave como a linguagem Java, a máquina virtual Java, o ambiente de execução e desenvolvimento, além de explicar brevemente como escrever, compilar e executar aplicações Java.
O documento discute os tipos de erros que podem ocorrer durante a compilação e execução de código Java, como erros de sintaxe, classes não encontradas, e excessão de array. Ele também fornece dicas para prevenir e solucionar esses erros, como escrever código claro e testar frequentemente.
Curso de java - Antonio Alves - aula 04Antonio Alves
Este documento discute conceitos importantes de orientação a objetos em Java, incluindo static import, referência null, visibilidade de classes, métodos e atributos, e comentários no código Java.
1) O documento apresenta os detalhes de uma aula sobre programação orientada a objetos com Java, incluindo avaliação, conteúdo da prova e agenda.
2) A agenda inclui tópicos como operador ternário, enums, varargs, autoboxing/unboxing, definindo e sobrecarregando construtores e uso do método this.
3) Exemplos de código são fornecidos para ilustrar esses tópicos.
O documento discute testes automatizados de software, incluindo: (1) os tipos de testes automatizados como unitários, de integração e funcionais; (2) a importância da automação para garantir qualidade e evitar regressões; (3) o método de desenvolvimento guiado por testes (Test-Driven Development).
Este documento apresenta conceitos avançados de C# e .NET, incluindo:
1) Design de classes, interfaces, delegates e coleções;
2) Elementos como métodos anônimos, delegates genéricos e interfaces genéricas.
3) O foco é no uso de boas práticas de programação orientada a objetos.
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVACristiano Almeida
O documento apresenta uma aula introdutória sobre programação orientada a objetos em Java. Aborda conceitos básicos como introdução ao Java, NetBeans, variáveis, operadores, estruturas condicionais e laços de repetição.
O documento discute os principais conceitos de programação orientada a objetos em C#, incluindo classes, objetos, construtores, interfaces, campos, métodos, visibilidade e exemplos de implementação destes conceitos.
O documento resume uma aula sobre Java Collections Framework, JDBC e operações em banco de dados. Aborda conceitos como coleções, generics, interfaces como List, Set, Map, além de conectividade com bancos de dados relacionais e exemplos de consultas, inserções, atualizações e deleções.
O documento discute diversas refatorações, incluindo: (1) Extract Interface para extrair subconjuntos de interfaces comuns entre classes, (2) Inline Method para substituir chamadas de método claras pela implementação, (3) Extract Superclass para mover características comuns entre classes para uma superclasse.
O documento discute princípios de clean code em C#, incluindo nomes significativos, métodos simples, baixo acoplamento entre classes e redução de duplicação de código. O Visual Studio fornece ferramentas como Code Metrics para medir a qualidade do código e identificar áreas que precisam de refatoração.
O documento apresenta os principais conceitos e práticas do Desenvolvimento Orientado a Testes (TDD). Resume os tópicos da agenda, incluindo introdução ao TDD, tipos de testes, exemplos práticos do processo red-green-refactor, desafios como onde começar e benefícios como design emergente e menor acoplamento.
Refatoração refere-se à reestruturação do código-fonte de um software sem alterar seu comportamento externo, visando melhorar aspectos como legibilidade, manutenibilidade e design. O documento descreve os princípios e origens da refatoração, exemplos de técnicas como renomear variáveis e extrair métodos, além de discutir vantagens como redução de duplicação e aumento da simplicidade do código.
Este documento discute os princípios de código limpo e boas práticas de programação. Ele explica que código limpo é código bem escrito, legível e fácil de manter. Também discute como identificar código sujo, a importância de nomes significativos, comentários úteis, classes e métodos pequenos, e testes de unidade. O objetivo é produzir software de qualidade e manutenível a longo prazo.
1. O documento apresenta um palestrante chamado Stefan Teixeira e seus contatos.
2. A palestra trata de Clean Code para Testers e aborda 6 pontos importantes: nomes significativos, classes pequenas, funções pequenas, comentários, formatação e testes limpos.
3. Manter código e testes limpos é importante para reduzir custos e garantir qualidade ao longo do tempo.
Programação C - Aula 1
Revisão de conceitos Orientação a Objetos.
Bacharelado em Sistemas de Informação
Faculdade Dom Bosco de Porto Alegre
Prof. Filipo Mór
www.filipomor.com
Apresentação do Coderage Brasil 2018 sobre TDD com Código Legado com Delphi usando Spring.Testing e TestInsight.
Dicas de Refactory, como identificar Code Smell e Antipatterns e Hands on do refactory do exemplo GettingStarted do FireDAC.
"Apresentação atualizada, pois o SlideShare não permite re-upload."
Vídeo da primeira parte - Apresentação
https://youtu.be/ZWQO0bLB8gU
O documento discute princípios de código limpo, incluindo: 1) tratar erros com exceções em vez de códigos de retorno; 2) limitar dependências de código de terceiros; 3) escrever testes de unidade limpos e automatizados para guiar o desenvolvimento. Ele também aborda tópicos como classes pequenas com responsabilidade única, separação de construção e uso de sistemas, e refinamento contínuo aplicando boas práticas.
O documento introduz conceitos básicos de programação orientada a objetos e Java, incluindo: (1) Java é uma linguagem obrigatoriamente orientada a objetos com classes e herança; (2) A sintaxe básica de Java como classes, atributos, métodos, construtores e tipos primitivos; (3) A criação e uso de objetos em Java.
Este documento discute os principais tópicos da Orientação a Objetos utilizando Java, incluindo: 1) as diferenças entre classes e objetos; 2) como classes definem atributos e métodos; e 3) como instanciar objetos a partir de classes utilizando construtores. Dois exercícios práticos sobre sistemas de metrô e pedidos no Burger King são fornecidos para exemplificar esses conceitos.
Um dos pilares da orientação a objetos, o Encapsulamento é o conceito responsável pela definição de acessos as classes e seus métodos e atributos. Juntamente com a Herança e o Polimorfismo, itens essenciais a compreensão deste paradigma de programação.
O documento discute técnicas para trabalhar com código legado, como usar interfaces ao invés de classes concretas para melhorar o design, polimorfismo e testes. Ele também apresenta ferramentas como "Extract Interface" para extrair interfaces de classes existentes e melhorar o modelo de código.
O documento discute os princípios de código limpo, incluindo os custos de ter um código confuso, definições de código limpo de acordo com especialistas, e princípios como nomes significativos, métodos pequenos, tratamento de erros, testes unitários, classes coesas e design emergente.
O documento apresenta uma série de conteúdos para estudo sobre Git e GitHub, programação orientada a objetos e seus principais conceitos. Os tópicos incluem controle de versão, comandos básicos de Git e GitHub, controle de acessos, métodos estáticos, programação orientada a objetos, herança, polimorfismo, classes abstratas e interfaces.
Quem nunca pensou em passar um tempo refatorando aquele código bagunçado?
Eu adoro melhorar o código, deixá-lo mais organizado, mais fácil de compreender e claro mais bonito também.
Um dia eu li o famoso livro do Martin Fowler que me ajudou bastante e quero compartilhar o que aprendi: indicativos de necessidade de refatorar e claro soluções também, que muitas vezes são mais simples do que imaginamos.
Apresentação sobre temas abordado no livro Clean Code de Robert C. Martim.
Os benefícios sobre manter seu código limpo. Quais prejuízos um código sujo pode trazer para sua empresa.
Como se expressar no seu código dispensando o uso de inúmeros comentários que poluem o código.
Caderno de Resumos XVIII ENPFil UFU, IX EPGFil UFU E VII EPFEM.pdfenpfilosofiaufu
Caderno de Resumos XVIII Encontro de Pesquisa em Filosofia da UFU, IX Encontro de Pós-Graduação em Filosofia da UFU e VII Encontro de Pesquisa em Filosofia no Ensino Médio
Slides Lição 9, Betel, Ordenança para uma vida de santificação, 2Tr24.pptxLuizHenriquedeAlmeid6
Slideshare Lição 10, Betel, Ordenança para buscar a paz e fazer o bem, 2Tr24, Pr Henrique, EBD NA TV, 2° TRIMESTRE DE 2024, ADULTOS, EDITORA BETEL, TEMA, ORDENANÇAS BÍBLICAS, Doutrina Fundamentais Imperativas aos Cristãos para uma vida bem-sucedida e de Comunhão com DEUS, estudantes, professores, Ervália, MG, Imperatriz, MA, Cajamar, SP, estudos bíblicos, gospel, DEUS, ESPÍRITO SANTO, JESUS CRISTO, Comentários, Bispo Abner Ferreira, Com. Extra Pr. Luiz Henrique, 99-99152-0454, Canal YouTube, Henriquelhas, @PrHenrique
Atividades de Inglês e Espanhol para Imprimir - AlfabetinhoMateusTavares54
Quer aprender inglês e espanhol de um jeito divertido? Aqui você encontra atividades legais para imprimir e usar. É só imprimir e começar a brincar enquanto aprende!
O Que é Um Ménage à Trois?
A sociedade contemporânea está passando por grandes mudanças comportamentais no âmbito da sexualidade humana, tendo inversão de valores indescritíveis, que assusta as famílias tradicionais instituídas na Palavra de Deus.
LIVRO MPARADIDATICO SOBRE BULLYING PARA TRABALHAR COM ALUNOS EM SALA DE AULA OU LEITURA EXTRA CLASSE, COM FOCO NUM PROBLEMA CRUCIAL E QUE ESTÁ TÃO PRESENTE NAS ESCOLAS BRASILEIRAS. OS ALUNOS PODEM LER EM SALA DE AULA. MATERIAL EXCELENTE PARA SER ADOTADO NAS ESCOLAS
2. Refatoração
• Refatoração (do inglês Refactoring) é o
processo de modificar um sistema de
software para melhorar a estrutura interna do
código sem alterar seu comportamento
externo.
• O uso desta técnica evita a deterioração tão
comum durante o ciclo de vida de um código.
• Não se trata de otimização.
3. Objetivo
• Prevenir o envelhecimento do design e
garantir a flexibilidade adequada para permitir
a integração tranqüila de futuras
extensões/alterações [Mens e Tourwé, 2004]
– Em geral, uma refatoração é tão simples que
parece que não vai ajudar muito.
– Mas quando se juntam 50 refatorações, bem
escolhidas, em seqüência, o código melhora
radicalmente.
4. Origem
• Surgiu na comunidade de Smalltalk nos anos
80/90.
• Desenvolveu-se formalmente na Universidade
de Illinois em Urbana-Champaign.
• Grupo do Prof. Ralph Johnson.
– Tese de PhD de William Opdyke (1992).
– John Brant e Don Roberts:
• The Refactoring Browser Tool
• Kent Beck (XP) na indústria
5. Mau cheiro
• O termo mau cheiro (bad smell) refere-se às
estruturas no código que sugerem (às vezes
gritam pela) possibilidade de refatoração
[Fowler, 2000]
• A partir da identificação de um mau cheiro é
possível propor refatorações adequadas, que
podem reduzir ou mesmo eliminar o mau
cheiro
6. Mau cheiro
• Rigidez
– uma alteração em um ponto do código requer alterações em
cascata (dependências);
• Fragilidade
– A modificação de um ponto do código quebra outras
funcionalidades;
• Complexidade
– Arquitetura muito complexa pois foi preparada para manipular
qualquer tipo de possibilidade;
• Duplicação
– Código redundante, duplicado;
• Legibilidade
– Código difícil de compreender e entender
7. Código Duplicado
• Um dos problemas mais graves no código. Podem
ser duas expressões idênticas em dois métodos
na mesma classe, ou duas classes não associadas.
– Essa duplicação pode ser eliminada aplicando-se a
refatoração Extract Method. Nesse caso, o código é
implementado uma única vez e chamado no local de
origem onde estava o código duplicado.
– Se o código duplicado encontra-se em duas classes
distintas, pode-se aplicar a refatoração Extract Class.
8. Método Longo
• Consiste de um método com uma implementação
de lógica com várias, dezenas ou até centenas de
linhas de código.
– O ideal seria criar métodos com no máximo dez linhas
de código, podendo ser inclusive de uma a cinco.
– Vários problemas podem ser originados da
implementação de métodos longos.
• A solução é dividir o método longo em métodos
menores, usando-se a refatoração Extract
Method.
9. Classe larga
• Uma boa prática da programação orientada a
objetos sugere que uma classe deve ter uma
única responsabilidade (princípio da
responsabilidade única).
• Quando uma classe possui muitas instâncias no
código, isso sugere que ela está fazendo muito,
ou pelo menos realizando trabalho que deveria
ser feito por outras classes.
• Algumas refatorações podem ajudar a reduzir
classes longas, como por exemplo, Extrair Classe,
Extract Subclass, entre outras.
10. Lista de Parâmetros Longa
• Um método que recebe muitos parâmetros sugere que
classes possam estar compartilhando muita
informação.
• Se um método com uma longa lista de parâmetros está
sendo chamado em vários locais do código, uma
mudança em um deles pode desencadear uma cadeia
muito grande de alterações em vários locais do código.
• Algumas refatorações podem ajudar a resolver esse
problema, por exemplo “Replace Parameter with
Method” e “Introduce Parameter Object” onde uma
longa lista de parâmetros se resume a uma única
classe.
11. Campo temporário
• Muitas vezes um objeto tem sua variável de
instância configurada somente sobre certas
circunstâncias. Tal código é difícil de entender.
Um exemplo ocorre quando um algoritmo
depende de uma série de variáveis.
• A refatoração “Extract Class” pode minimizar
problemas associados á essas variáveis
“pobres”
13. Código limpo
• Nomes significativos, que revelam sua intenção;
• Expressa o que faz, por que existe, como é usado;
• Nomes pronunciáveis;
• Notação húngara, tipo não precisa estar no
nome;
• Nomes de classes são substantivos;
• Nomes de métodos são verbos;
• Assessores devem ter “get” e “set”
14. Código limpo
• Métodos pequenos (5 ou 10 linhas);
• Linhas de até 100 caracteres;
• Métodos devem realizar uma única tarefa;
• Cuidar com lista longa de parâmetros;
• Classes pequenas (200 linhas);
• Seguir o princípio da responsabilidade única;
• Cuidar o acoplamento entre classes
(dependências);
• Refatore ao invés de comentar;
15. Extract Method (110)
• Resumo
– Você tem um fragmento de código que poderia
ser agrupado. Mude o fragmento para um novo
método e escolha um nome que explique o que
ele faz.
16. Extract Method (110)
• Motivação
– É uma das refatorações mais comuns. Se um
método é longo demais ou difícil de entender e
exige muitos comentários, extraia trechos do
método e crie novos métodos para eles. Isso vai
melhorar as chances de reutilização do código e
vai fazer com que os métodos que o chamam
fiquem mais fáceis de entender. O código fica
parecendo comentário.
17. Extract Method (110)
• Mecânica:
– Crie um novo método e escolha um nome que explicite a
sua intenção (o nome deve dizer o que ele faz, não como
ele faz).
– Copie o código do método original para o novo.
– Procure por variáveis locais e parâmetros utilizados pelo
código extraído.
• Se variáveis locais forem usadas apenas pelo código extraído,
passe-as para o novo método.
• Caso contrário, veja se o seu valor é apenas atualizado pelo
código. Neste caso substitua o código por uma atribuição.
• Se é tanto lido quando atualizado, passe-a como parâmetro.
– Compile e teste.
18. Inline Method (117)
• Resumo:
– A implementação de um método é tão clara
quanto o nome do método. Substitua a chamada
ao método pela sua implementação.
19. Inline Method (117)
• Motivação:
– Bom para eliminar indireção desnecessária. Se
você tem um grupo de métodos mal organizados,
aplique Inline Method em todos eles seguido de
uns bons Extract Methods
20. Inline Method (117)
• Mecânica:
– Verifique se o método não é polimórfico ou se as
suas subclasses o especializam.
– Ache todas as chamadas e substitua pela
implementação.
– Compile e teste.
– Remova a definição do método.
21. Replace Temp with Query (120)
• Resumo:
– Uma variável local está sendo usada para guardar
o resultado de uma expressão. Troque as
referências a esta expressão por um método.
22. Replace Temp with Query (120)
• Motivação:
– Variáveis temporárias encorajam métodos longos
(devido ao escopo). O código fica mais limpo e o
método pode ser usado em outros locais.
23. Replace Temp with Query (120)
• Mecânica:
– Encontre variáveis locais que são atribuídas uma
única vez
• Se temp é atribuída mais do que uma vez use Split
Temporary Variable (128)
– Declare temp como final
– Compile (para ter certeza)
– Extraia a expressão
• Método privado - efeitos colaterais
– Compile e teste
24. Replace Inheritance With
Delegation (352)
• Resumo:
– Quando uma subclasse só usa parte da
funcionalidade da superclasse ou não precisa
herdar dados: na subclasse, crie um campo para a
superclasse, ajuste os métodos apropriados para
delegar para a ex-superclasse e remova a herança.
25. Replace Inheritance With
Delegation (352)
• Motivação:
– Herança é uma técnica excelente, mas muitas
vezes, não é exatamente o que você quer. Às
vezes, nós começamos herdando de uma outra
classe mas daí descobrimos que precisamos
herdar muito pouco da superclasse. Descobrimos
que muitas das operações da superclasse não se
aplicam à subclasse. Neste caso, delegação é mais
apropriado.
26. Replace Inheritance With
Delegation (352)
• Mecânica:
– Crie um campo na subclasse que se refere a uma
instância da superclasse, inicialize-o com this
– Mude cada método na subclasse para que use o
campo delegado
– Compile e teste após mudar cada método
• Cuidado com as chamadas a super
– Remova a herança e crie um novo objeto da
superclasse
– Para cada método da superclasse utilizado, adicione
um método delegado
– Compile e teste
27. Collapse Hierarchy (344)
• Resumo:
– A superclasse e a subclasse não são muito
diferentes. Combine-as em apenas uma classe.
28. Collapse Hierarchy (344)
• Motivação:
– Depois de muito trabalhar com uma hierarquia de
classes, ela pode se tornar muito complexa.
Depois de refatorá-la movendo métodos e campos
para cima e para baixo, você pode descobrir que
uma subclasse não acrescenta nada ao seu
projeto. Remova-a.
29. Collapse Hierarchy (344)
• Mecânica:
– Escolha que classe será eliminada: a superclasse ou a
– subclasse
– Use Pull Up Field (320) and Pull Up Method (322) ou
Push Down Method (328) e Push Down Field (329)
para mover todo o comportamento e dados da classe
a ser eliminada
– Compile e teste a cada movimento
– Ajuste as referências à classe que será eliminada
• Isto afeta: declarações, tipos de parâmetros e construtores.
– Remova a classe vazia
– Compile e teste
30. Pull UP Field (320)
• Resumo:
– A superclasse e a subclasse têm os mesmos
atributos (field). Mova os atributos repetidos para
a superclasse.
31. Pull UP Field (320)
• Motivação:
– Subclasses desenvolvidas independentemente
umas das outras, ou após refatoração, podem ter
características (features) duplicadas. Atributos
podem ser duplicados. Estes não necessariamente
têm o mesmo nome em todas as subclasses. A
forma de determinar se tal acontece é verificar
como os atributos são usados por outros
métodos. Se eles são usados da mesma forma,
pode-se generalizá-los.
32. Pull UP Field (320)
• Mecânica:
– Inspecione todos os atributos candidatos para ver se
não são usados de forma similar.
– Se os atributos não têm o mesmo nome, dê-lhe o
nome que vai ser usado quando ele “subir” para a
superclasse.
– Compile e teste.
– Crie um novo atributo na superclasse.
• Se o atributo era privado nas subclasses, deve-se colocá-lo
como protegido na superclasse.
– Apague o atributo nas subclasses.
– Compile e teste.
33. Extract Interface
• Resumo:
– Vários clientes usam o mesmo subconjunto da
interface da classe, ou várias classes têm partes de
suas interfaces em comum.
34. Extract Interface
• Motivação:
– Classes usam umas às outras de várias formas. Pode-
se ter, por exemplo, um grupo de clientes usando um
subconjunto das responsabilidades da classe. E ainda,
uma classe pode colaborar com qualquer classe que
trate um certo grupo de requisições. Nestes casos, é
útil transformar esse subconjunto de
responsabilidades em algo com existência própria,
para ficar claro e explícito seu uso no sistema. Dessa
forma fica mais fácil de ver como as responsabilidades
se dividem. E também, ao se inserir novas classes que
implementem esse subconjunto, fica mais fácil de ver
o que se encaixa nesse subconjunto.
35. Extract Interface
• Mecânica:
– Crie uma interface vazia.
– Declare as operações comuns na interface.
– Declare as classes relevantes que devem
implementar a interface.
– Ajuste as declarações de tipos nos clientes para
usar a interface.
– Compile e teste.